1
0
mirror of https://github.com/devcode-it/openstamanager.git synced 2025-06-05 22:09:38 +02:00
Files
openstamanager/resources/ts/Components/layout/DrawerEntry.tsx
2023-08-17 15:36:30 +02:00

40 lines
1.2 KiB
TypeScript

import '@material/web/icon/icon.js';
import '@material/web/list/list-item.js';
import {router} from '@maicol07/inertia-mithril';
import {ListItemEl} from '@material/web/list/internal/listitem/list-item';
import type * as MaterialIcons from '@mdi/js';
import MdIcon from '@osm/Components/MdIcon';
import {Vnode} from 'mithril';
import {
Attributes,
Component
} from 'mithril-utilities';
import {ValueOf} from 'type-fest';
type Icons = ValueOf<typeof MaterialIcons>;
export interface DrawerEntryAttributes extends Attributes, Partial<ListItemEl> {
href: ListItemEl['href'];
icon: Icons;
}
export class DrawerEntry<A extends DrawerEntryAttributes = DrawerEntryAttributes> extends Component<A> {
view(vnode: Vnode<A>) {
return (
<md-list-item headline={vnode.children as string} active={this.isRouteActive(vnode.attrs.href)} href={vnode.attrs.href} onclick={this.navigateToRoute.bind(this)} {...this.attrs.all()}>
<MdIcon icon={vnode.attrs.icon} slot="start"/>
</md-list-item>
);
}
isRouteActive(href: string) {
return route(route().current()!, route().params) === href;
}
navigateToRoute(event: Event) {
event.preventDefault();
router.visit((event.target as ListItemEl).href);
}
}