feat: implement tenant branding system and global toast notification service
This commit is contained in:
@@ -24,6 +24,7 @@
|
||||
<div class="button-grid">
|
||||
<app-button [disabled]="true">Primary</app-button>
|
||||
<app-button variant="secondary" [disabled]="true">Secondary</app-button>
|
||||
|
||||
<app-button variant="danger" [disabled]="true">Danger</app-button>
|
||||
<app-button variant="danger-secondary" [disabled]="true">Danger secondary</app-button>
|
||||
<app-button variant="cancel" [disabled]="true">Cancel</app-button>
|
||||
@@ -40,6 +41,15 @@
|
||||
<app-button variant="cancel">E</app-button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="button-group">
|
||||
<h2>Toasts</h2>
|
||||
<div class="button-grid">
|
||||
<app-button (click)="triggerToast('info')">Trigger Info</app-button>
|
||||
<app-button variant="secondary" (click)="triggerToast('success')">Trigger Success</app-button>
|
||||
<app-button variant="danger" (click)="triggerToast('danger')">Trigger Danger</app-button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr class="section-divider" />
|
||||
@@ -237,7 +247,7 @@
|
||||
<div class="colors-section">
|
||||
<h3 class="mb-3">Colores de Marca</h3>
|
||||
<div class="row">
|
||||
<div class="col-md-4 mb-3">
|
||||
<div class="col-md-3 mb-3">
|
||||
<div class="color-swatch-card shadow-sm">
|
||||
<div class="color-swatch-card__preview" [style.background-color]="'var(--tenant-primary)'"></div>
|
||||
<div class="color-swatch-card__body">
|
||||
@@ -247,7 +257,7 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-4 mb-3">
|
||||
<div class="col-md-3 mb-3">
|
||||
<div class="color-swatch-card shadow-sm">
|
||||
<div class="color-swatch-card__preview" [style.background-color]="'var(--tenant-secondary)'"></div>
|
||||
<div class="color-swatch-card__body">
|
||||
@@ -257,7 +267,7 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-4 mb-3">
|
||||
<div class="col-md-3 mb-3">
|
||||
<div class="color-swatch-card shadow-sm">
|
||||
<div class="color-swatch-card__preview" [style.background-color]="'var(--tenant-danger)'"></div>
|
||||
<div class="color-swatch-card__body">
|
||||
@@ -266,6 +276,16 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-3 mb-3">
|
||||
<div class="color-swatch-card shadow-sm">
|
||||
<div class="color-swatch-card__preview" [style.background-color]="'var(--tenant-success)'"></div>
|
||||
<div class="color-swatch-card__body">
|
||||
<span class="color-swatch-card__title">Success</span>
|
||||
<code class="color-swatch-card__value">{{ tenant()?.success_color || 'Default' }}</code>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -13,6 +13,7 @@ const tenant: Tenant = {
|
||||
primary_color: '#6376F3',
|
||||
secondary_color: '#A0A0A0',
|
||||
danger_color: '#FF8888',
|
||||
success_color: '#198754',
|
||||
header_footer_bg_color: '#313131',
|
||||
header_logo: 'https://example.com/header.png',
|
||||
footer_logo: 'https://example.com/footer.png'
|
||||
@@ -63,6 +64,7 @@ describe('ReutilizablesTestPageComponent', () => {
|
||||
expect(element.textContent).toContain(tenant.primary_color);
|
||||
expect(element.textContent).toContain(tenant.secondary_color);
|
||||
expect(element.textContent).toContain(tenant.danger_color);
|
||||
expect(element.textContent).toContain(tenant.success_color);
|
||||
});
|
||||
|
||||
it('renders the paginator demo with the initial page status', async () => {
|
||||
|
||||
@@ -5,6 +5,7 @@ import { PaginatorComponent } from '../../../../shared/components/paginator/pagi
|
||||
import { ProductCardComponent } from '../../../../shared/components/product-card/product-card.component';
|
||||
import { StoreSectionComponent } from '../../../../shared/components/store-section/store-section.component';
|
||||
import { TenantService } from '../../../../core/services/tenant.service';
|
||||
import { ToastService } from '../../../../core/services/toast.service';
|
||||
|
||||
@Component({
|
||||
selector: 'app-reutilizables-test-page',
|
||||
@@ -14,6 +15,7 @@ import { TenantService } from '../../../../core/services/tenant.service';
|
||||
})
|
||||
export class ReutilizablesTestPageComponent {
|
||||
private readonly tenantService = inject(TenantService);
|
||||
private readonly toastService = inject(ToastService);
|
||||
protected readonly tenant = this.tenantService.tenant;
|
||||
protected textValue = 'Auriculares';
|
||||
protected numberValue = '24';
|
||||
@@ -70,5 +72,14 @@ export class ReutilizablesTestPageComponent {
|
||||
this.fileName = '';
|
||||
this.clearTrigger += 1;
|
||||
}
|
||||
}
|
||||
|
||||
protected triggerToast(type: 'success' | 'danger' | 'info'): void {
|
||||
if (type === 'success') {
|
||||
this.toastService.success('¡Operación exitosa! El producto se ha guardado correctamente.');
|
||||
} else if (type === 'danger') {
|
||||
this.toastService.danger('¡Alerta de error! Hubo un problema al procesar la solicitud.');
|
||||
} else if (type === 'info') {
|
||||
this.toastService.info('Información del sistema: Hay una nueva actualización disponible.');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user