import { ChangeDetectionStrategy, Component } from '@angular/core'; import { PorscheDesignSystemModule, TableUpdateEventDetail } from '@porsche-design-system/components-angular'; type HeadAdvanced = { id: string; name: string; hideLabel: boolean; active?: boolean; direction?: 'asc' | 'desc'; }; const headAdvanced: HeadAdvanced[] = [ { name: 'Model', id: 'model' } as HeadAdvanced, { name: 'Interest', id: 'interest' } as HeadAdvanced, { name: 'VIN', id: 'vin' } as HeadAdvanced, { name: 'Purchase Intention', id: 'purchaseIntention' } as HeadAdvanced, { name: 'Status', id: 'status' } as HeadAdvanced, { name: 'Comment', id: 'comment' } as HeadAdvanced, { name: 'Lead ID', id: 'leadId' } as HeadAdvanced, { name: 'Select Wrapper', id: 'selectWrapper' } as HeadAdvanced, { name: 'Select', id: 'select' } as HeadAdvanced, { name: 'Multi-Select', id: 'multiSelect' } as HeadAdvanced, { name: 'Action', id: 'action', hideLabel: true } as HeadAdvanced, ].map((item, i) => ({ ...item, ...(i > 0 && i < 7 && i !== 5 && { active: i === 1, direction: 'asc', }), })); type DataAdvanced = { imageUrl: string; model: string; date: string; interest: string; vin: string; purchaseIntention: string; status: string; comment: string; leadId: string; }; const dataAdvanced: DataAdvanced[] = [ { imageUrl: 'assets/718.png', model: '718', date: '23.06.2021', interest: 'New Car', vin: '1FM5K7F84FGB16304', purchaseIntention: '08/2021', status: 'Won', comment: '-', leadId: '0000824402', }, { imageUrl: 'assets/panamera.png', model: 'Panamera', date: '19.06.2021', interest: 'New Car', vin: '2GCEC13T141374801', purchaseIntention: '11/2021', status: 'Lost', comment: 'Some multiline text and a column with a min width.', leadId: '0000824409', }, { imageUrl: 'assets/911.png', model: '911', date: '19.05.2021', interest: 'Used Car', vin: '5GAKVCKD8EJ335750', purchaseIntention: '09/2021', status: 'Won', comment: '-', leadId: '0000824408', }, { imageUrl: 'assets/macan.png', model: 'Macan', date: '10.05.2021', interest: 'Used Car', vin: '1FMPU17L83LC09302', purchaseIntention: '07/2021', status: 'Lost', comment: '-', leadId: '0000824407', }, { imageUrl: 'assets/taycan.png', model: 'Taycan', date: '03.05.2021', interest: 'New Car', vin: 'JN1BY1AR3BM375187', purchaseIntention: '05/2021', status: 'Won', comment: '-', leadId: '0000824406', }, ]; @Component({ selector: 'porsche-design-system-app', template: ` Some visual caption @for (item of head; track item) { {{ item.name }} } @for (item of data; track item) {
{{ item.model }} {{ item.date }}
{{ item.interest }} {{ item.vin }} {{ item.purchaseIntention }} {{ item.status }} {{ item.comment }} {{ item.leadId }} Edit Delete
}
`, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [PorscheDesignSystemModule], }) export class ExampleComponent { public head = headAdvanced; public data = dataAdvanced; onUpdate(e: CustomEvent): void { const { id, direction } = e.detail as TableUpdateEventDetail & { id: keyof DataAdvanced }; this.head = this.head.map((item) => ({ ...item, active: false, ...(item.id === id && e.detail) })); this.data = [...this.data].sort((a, b) => direction === 'asc' ? a[id].localeCompare(b[id]) : b[id].localeCompare(a[id]) ); } }