// Action menu copy-paste examples.
export /**
*
*/
const ACTION_MENU_DEFAULT = `// Default ellipsis trigger — good for table rows.
// Put side effects on each item's onClick; the menu closes after it runs.
// Panel renders in a CDK overlay so it won't get clipped by overflow:hidden.
import { Component, signal } from '@angular/core';
import { ActionMenuComponent, type AfricaniesMenuItem } from '@africanies/africanies-ui';
@Component({
selector: 'app-shipment-row-actions-demo',
standalone: true,
imports: [ActionMenuComponent],
template: \`
Last action:
{{ lastAction() ?? '—' }}
\`,
})
export class ShipmentRowActionsDemoComponent {
protected readonly lastAction = signal(null);
protected readonly items: AfricaniesMenuItem[] = [
{
label: 'Open',
icon: 'eye',
routerLink: ['/shipments', '1'],
onClick: () => this.lastAction.set('Open'),
},
{
label: 'Edit',
icon: 'edit',
onClick: () => this.lastAction.set('Edit'),
},
{
label: 'Copy reference',
icon: 'copy',
onClick: () => this.lastAction.set('Copy reference'),
},
{
label: 'Delete',
icon: 'trash',
danger: true,
dividerBefore: true,
onClick: () => this.lastAction.set('Delete'),
},
];
}
`;
export /**
*
*/
const ACTION_MENU_CUSTOM = `// Swap the ellipsis for your own trigger — project it inside and add africaniesActionMenuTrigger.
import { Component } from '@angular/core';
import {
ActionMenuComponent,
ActionMenuTriggerDirective,
ButtonComponent,
type AfricaniesMenuItem,
} from '@africanies/africanies-ui';
@Component({
selector: 'app-shipment-toolbar-actions',
standalone: true,
imports: [ActionMenuComponent, ActionMenuTriggerDirective, ButtonComponent],
template: \`
Actions
\`,
})
export class ShipmentToolbarActionsComponent {
protected readonly items: AfricaniesMenuItem[] = [
{
label: 'Open',
icon: 'eye',
onClick: () => this.open(),
},
{
label: 'Edit',
icon: 'edit',
onClick: () => this.edit(),
},
{
label: 'Delete',
icon: 'trash',
danger: true,
dividerBefore: true,
onClick: () => this.delete(),
},
];
private open(): void {
/* navigate or open drawer */
}
private edit(): void {
/* … */
}
private delete(): void {
/* … */
}
}
`;
export /**
*
*/
const ACTION_MENU_VARIANTS = `// Item flags: danger for destructive, disabled when unavailable, dividerBefore to separate groups.
import { Component } from '@angular/core';
import { ActionMenuComponent, type AfricaniesMenuItem } from '@africanies/africanies-ui';
@Component({
selector: 'app-shipment-action-variants',
standalone: true,
imports: [ActionMenuComponent],
template: \`
\`,
})
export class ShipmentActionVariantsComponent {
protected readonly items: AfricaniesMenuItem[] = [
{
label: 'Download PDF',
icon: 'download',
onClick: () => this.download(),
},
{
label: 'Archive',
disabled: true,
onClick: () => undefined,
},
{
label: 'Void shipment',
icon: 'trash',
danger: true,
dividerBefore: true,
onClick: () => this.voidShipment(),
},
];
private download(): void {
/* … */
}
private voidShipment(): void {
/* … */
}
}
`;
export /**
*
*/
const ACTION_MENU_DISABLED = `// [disabled] locks the whole menu (won't open). Prefer this over an empty items array.
import { Component, input } from '@angular/core';
import { ActionMenuComponent, type AfricaniesMenuItem } from '@africanies/africanies-ui';
@Component({
selector: 'app-shipment-action-menu-disabled',
standalone: true,
imports: [ActionMenuComponent],
template: \`
\`,
})
export class ShipmentActionMenuDisabledComponent {
// Parent passes true when the row is locked or the user lacks edit rights.
readonly menuDisabled = input(false);
protected readonly items: AfricaniesMenuItem[] = [
{
label: 'Open',
icon: 'eye',
onClick: () => this.open(),
},
{
label: 'Edit',
icon: 'edit',
onClick: () => this.edit(),
},
{
label: 'Delete',
icon: 'trash',
danger: true,
dividerBefore: true,
onClick: () => this.delete(),
},
];
private open(): void {
/* not reachable while [disabled]="true" */
}
private edit(): void {
/* … */
}
private delete(): void {
/* … */
}
}
`;