|
@@ -1,5 +1,6 @@
|
|
|
import type { RuntimeConfig } from '@nuxt/schema'
|
|
import type { RuntimeConfig } from '@nuxt/schema'
|
|
|
import type { AnyAbility } from '@casl/ability'
|
|
import type { AnyAbility } from '@casl/ability'
|
|
|
|
|
+import type { Router } from 'vue-router'
|
|
|
import type {
|
|
import type {
|
|
|
IconItem,
|
|
IconItem,
|
|
|
MenuBuilder,
|
|
MenuBuilder,
|
|
@@ -21,6 +22,7 @@ abstract class AbstractMenuBuilder implements MenuBuilder {
|
|
|
protected ability: AnyAbility
|
|
protected ability: AnyAbility
|
|
|
protected organizationProfile: organizationState
|
|
protected organizationProfile: organizationState
|
|
|
protected accessProfile: AccessProfile
|
|
protected accessProfile: AccessProfile
|
|
|
|
|
+ protected router: Router
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* Nom court désignant le menu que construit ce builder
|
|
* Nom court désignant le menu que construit ce builder
|
|
@@ -32,11 +34,13 @@ abstract class AbstractMenuBuilder implements MenuBuilder {
|
|
|
ability: AnyAbility,
|
|
ability: AnyAbility,
|
|
|
organizationProfile: organizationState,
|
|
organizationProfile: organizationState,
|
|
|
accessProfile: AccessProfile,
|
|
accessProfile: AccessProfile,
|
|
|
|
|
+ router: Router,
|
|
|
) {
|
|
) {
|
|
|
this.runtimeConfig = runtimeConfig
|
|
this.runtimeConfig = runtimeConfig
|
|
|
this.ability = ability
|
|
this.ability = ability
|
|
|
this.organizationProfile = organizationProfile
|
|
this.organizationProfile = organizationProfile
|
|
|
this.accessProfile = accessProfile
|
|
this.accessProfile = accessProfile
|
|
|
|
|
+ this.router = router
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -101,6 +105,12 @@ abstract class AbstractMenuBuilder implements MenuBuilder {
|
|
|
case MENU_LINK_TYPE.EXTERNAL:
|
|
case MENU_LINK_TYPE.EXTERNAL:
|
|
|
url = UrlUtils.prependHttps(to)
|
|
url = UrlUtils.prependHttps(to)
|
|
|
break
|
|
break
|
|
|
|
|
+ case MENU_LINK_TYPE.INTERNAL:
|
|
|
|
|
+ console.warn(
|
|
|
|
|
+ "'createItem()' should not be used for internal links, use 'addChildItemIfAllowed()'",
|
|
|
|
|
+ )
|
|
|
|
|
+ url = to
|
|
|
|
|
+ break
|
|
|
default:
|
|
default:
|
|
|
url = to
|
|
url = to
|
|
|
}
|
|
}
|
|
@@ -119,5 +129,23 @@ abstract class AbstractMenuBuilder implements MenuBuilder {
|
|
|
)
|
|
)
|
|
|
return builder.build()
|
|
return builder.build()
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ protected addChildItemIfAllowed(
|
|
|
|
|
+ children: MenuItems,
|
|
|
|
|
+ pageName: string,
|
|
|
|
|
+ icon?: IconItem,
|
|
|
|
|
+ ) {
|
|
|
|
|
+ if (this.ability.can('display', pageName)) {
|
|
|
|
|
+ const to = this.router.resolve({ name: pageName }).href
|
|
|
|
|
+
|
|
|
|
|
+ children.push({
|
|
|
|
|
+ icon,
|
|
|
|
|
+ label: pageName,
|
|
|
|
|
+ to,
|
|
|
|
|
+ type: MENU_LINK_TYPE.INTERNAL,
|
|
|
|
|
+ active: false,
|
|
|
|
|
+ })
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
export default AbstractMenuBuilder
|
|
export default AbstractMenuBuilder
|