refactor: everything to nuxt.js
This commit is contained in:
112
app/utils/navlinks.ts
Normal file
112
app/utils/navlinks.ts
Normal file
@@ -0,0 +1,112 @@
|
||||
import { useAuthStore } from '~/stores/auth';
|
||||
|
||||
export type Link = {
|
||||
name: string;
|
||||
to?: string;
|
||||
icon: string;
|
||||
front_links?: boolean;
|
||||
enabled?: boolean;
|
||||
color?: string;
|
||||
sublinks?: Link[];
|
||||
requiredRoles?: string[];
|
||||
};
|
||||
|
||||
export const links: Link[] = [
|
||||
{
|
||||
name: 'Home',
|
||||
to: '/',
|
||||
icon: 'home',
|
||||
front_links: false,
|
||||
enabled: true,
|
||||
},
|
||||
{
|
||||
name: 'Profile',
|
||||
to: '/profile',
|
||||
icon: 'account_circle',
|
||||
front_links: false,
|
||||
enabled: true,
|
||||
},
|
||||
{
|
||||
name: 'Boats',
|
||||
to: '/boat',
|
||||
icon: 'sailing',
|
||||
front_links: true,
|
||||
enabled: true,
|
||||
},
|
||||
{
|
||||
name: 'Schedule',
|
||||
to: '/schedule',
|
||||
icon: 'calendar_month',
|
||||
front_links: true,
|
||||
enabled: true,
|
||||
sublinks: [
|
||||
{ name: 'My View', to: '/schedule/list', icon: 'list', front_links: false, enabled: true },
|
||||
{ name: 'Book', to: '/schedule/book', icon: 'more_time', front_links: false, enabled: true },
|
||||
{ name: 'Calendar', to: '/schedule/view', icon: 'calendar_month', front_links: false, enabled: true },
|
||||
],
|
||||
},
|
||||
{
|
||||
name: 'Certifications',
|
||||
to: '/certification',
|
||||
icon: 'verified',
|
||||
front_links: true,
|
||||
enabled: false,
|
||||
},
|
||||
{
|
||||
name: 'Checklists',
|
||||
to: '/checklist',
|
||||
icon: 'checklist',
|
||||
front_links: true,
|
||||
enabled: false,
|
||||
},
|
||||
{
|
||||
name: 'Reference',
|
||||
to: '/reference',
|
||||
icon: 'info_outline',
|
||||
front_links: true,
|
||||
enabled: false,
|
||||
},
|
||||
{
|
||||
name: 'Manage',
|
||||
icon: 'tune',
|
||||
enabled: true,
|
||||
requiredRoles: ['Schedule Admins'],
|
||||
color: 'negative',
|
||||
sublinks: [
|
||||
{
|
||||
name: 'Schedule',
|
||||
to: '/schedule/manage',
|
||||
icon: 'edit_calendar',
|
||||
front_links: false,
|
||||
enabled: true,
|
||||
color: 'accent',
|
||||
requiredRoles: ['Schedule Admins'],
|
||||
},
|
||||
],
|
||||
},
|
||||
];
|
||||
|
||||
export function useNavLinks() {
|
||||
const authStore = useAuthStore();
|
||||
|
||||
function hasRole(roles: string[] | undefined) {
|
||||
if (roles === undefined) return true;
|
||||
return authStore.hasRequiredRole(roles);
|
||||
}
|
||||
|
||||
const enabledLinks = links
|
||||
.filter((link) => link.enabled)
|
||||
.map((link) => {
|
||||
if (link.sublinks) {
|
||||
return {
|
||||
...link,
|
||||
sublinks: link.sublinks.filter(
|
||||
(sublink) => sublink.enabled && hasRole(sublink.requiredRoles)
|
||||
),
|
||||
};
|
||||
}
|
||||
return link;
|
||||
});
|
||||
|
||||
return { enabledLinks };
|
||||
}
|
||||
Reference in New Issue
Block a user