feat: garage module for client B (step 4)

This commit is contained in:
Floriansylvain
2025-12-16 21:19:34 +01:00
parent dbce932ce2
commit 4e7c0f10c1
4 changed files with 118 additions and 0 deletions
+58
View File
@@ -6,6 +6,10 @@ class Toolbar {
{ label: 'Client B', value: 'clientb' },
{ label: 'Client C', value: 'clientc' }
];
this.moduleMapping = [
{ label: 'Voitures', module: 'cars', script: 'ajax' },
{ label: 'Garages', module: 'garages', script: 'ajax', onlyFor: 'clientb' }
];
this.injectStylesheet('assets/css/toolbar.css');
this.render();
this.activateExistingClient();
@@ -31,6 +35,7 @@ class Toolbar {
$button.on('click', () => {
this.setCookieValue('client', mapping.value);
this.markActiveButton($button);
this.updateModuleButtonsVisibility(mapping.value);
if (window.loadDynamic && typeof window.loadDynamic === 'function') window.loadDynamic();
});
this.$container.append($button);
@@ -43,9 +48,55 @@ class Toolbar {
});
this.$container.append($closeButton);
const $moduleWrap = $('<div>').addClass('toolbar-modules');
this.moduleMapping.forEach(mod => {
const $mBtn = $('<button>').text(mod.label).attr('data-module', mod.module).attr('data-script', mod.script).addClass('module-button');
$mBtn.on('click', () => {
this.markActiveModuleButton($mBtn);
const $dyn = $('.dynamic-div').first();
if ($dyn && $dyn.length) {
$dyn.data('module', mod.module);
$dyn.data('script', mod.script);
if (window.loadDynamic && typeof window.loadDynamic === 'function') window.loadDynamic();
}
});
$moduleWrap.append($mBtn);
});
this.$container.append($moduleWrap);
$('body').prepend(this.$container);
}
markActiveModuleButton($button) {
this.$container.find('.module-button').removeClass('active');
if ($button && $button.length) $button.addClass('active');
}
updateModuleButtonsVisibility(clientValue) {
this.$container.find('.module-button').each((i, el) => {
const $el = $(el);
const mod = $el.attr('data-module');
const cfg = this.moduleMapping.find(m => m.module === mod);
if (cfg && cfg.onlyFor) {
if (cfg.onlyFor === clientValue) $el.show();
else $el.hide();
} else {
$el.show();
}
});
const $dyn = $('.dynamic-div').first();
if ($dyn && $dyn.length) {
const current = $dyn.data('module') || $dyn.attr('data-module');
const visible = this.$container.find(`.module-button[data-module="${current}"]`).is(':visible');
if (!visible) {
const $carsBtn = this.$container.find('.module-button[data-module="cars"]');
if ($carsBtn.length) {
$carsBtn.trigger('click');
}
}
}
}
getCookieValue(name) {
const match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));
return match ? decodeURIComponent(match[2]) : null;
@@ -56,6 +107,13 @@ class Toolbar {
if (!existingClient) return;
const $btn = this.$container.find(`button[data-client="${existingClient}"]`);
if ($btn.length) this.markActiveButton($btn);
this.updateModuleButtonsVisibility(existingClient);
const $dyn = $('.dynamic-div').first();
if ($dyn && $dyn.length) {
const current = $dyn.data('module') || $dyn.attr('data-module');
const $m = this.$container.find(`.module-button[data-module="${current}"]`);
if ($m.length) this.markActiveModuleButton($m);
}
}
}