|
|
@@ -8,21 +8,13 @@ Prend en paramètre une liste de ItemMenu et les met en forme
|
|
|
v-model="displayMenu"
|
|
|
:rail="isRail"
|
|
|
:disable-resize-watcher="true"
|
|
|
+ style="z-index: 1006;"
|
|
|
class="theme-secondary main-menu"
|
|
|
>
|
|
|
- <div
|
|
|
- v-if="(organizationProfile.isArtistProduct || organizationProfile.isTrialActive) && (accessProfile.isCaMember || accessProfile.isAdmin)"
|
|
|
- class="btn_trial"
|
|
|
- :class="{['btn_mini'] : isRail}"
|
|
|
- @click="trialAction()"
|
|
|
- >
|
|
|
- <v-icon icon="fa fa-ticket" />
|
|
|
- <span v-if="organizationProfile.isTrialActive && !isRail"><strong>J-{{organizationProfile.trialCountDown}}</strong><br/></span>
|
|
|
- <span v-if="!isRail">{{btnLabel}}</span>
|
|
|
- </div>
|
|
|
+ <!-- Forcing z-index to avoid this : https://github.com/vuetifyjs/nuxt-module/issues/205 -->
|
|
|
|
|
|
<template #prepend>
|
|
|
- <slot name="title"></slot>
|
|
|
+ <slot name="prepend"></slot>
|
|
|
</template>
|
|
|
|
|
|
<v-list open-strategy="single" active-class="active" class="left-menu">
|
|
|
@@ -31,6 +23,7 @@ Prend en paramètre une liste de ItemMenu et les met en forme
|
|
|
<!-- Cas 1 : l'item n'a pas d'enfants, c'est un lien (ou le menu est en mode réduit) -->
|
|
|
<v-list-item
|
|
|
v-if="!item.children || isRail"
|
|
|
+ :id="'main-menu-item' + item.label"
|
|
|
:title="$t(item.label)"
|
|
|
:prepend-icon="item.icon.name"
|
|
|
:href="!isInternalLink(item) ? item.to : undefined"
|
|
|
@@ -50,6 +43,7 @@ Prend en paramètre une liste de ItemMenu et les met en forme
|
|
|
<template #activator="{ props }">
|
|
|
<v-list-item
|
|
|
v-bind="props"
|
|
|
+ :id="'main-menu-item' + item.label"
|
|
|
:prepend-icon="item.icon.name"
|
|
|
:title="$t(item.label)"
|
|
|
class="theme-secondary menu-item"
|
|
|
@@ -59,8 +53,9 @@ Prend en paramètre une liste de ItemMenu et les met en forme
|
|
|
|
|
|
<v-list-item
|
|
|
v-for="child in item.children"
|
|
|
- :key="$t(child.label)"
|
|
|
+ :key="child.label"
|
|
|
:title="$t(child.label)"
|
|
|
+ :id="'main-menu-item' + item.label + '-' + child.label"
|
|
|
:prepend-icon="child.icon.name"
|
|
|
:href="!isInternalLink(child) ? child.to : undefined"
|
|
|
:to="isInternalLink(child) ? child.to : undefined"
|
|
|
@@ -76,11 +71,6 @@ Prend en paramètre une liste de ItemMenu et les met en forme
|
|
|
<slot name="foot"></slot>
|
|
|
</template>
|
|
|
</v-navigation-drawer>
|
|
|
-
|
|
|
- <DialogTrialAllReadyDid
|
|
|
- :show="showDialog"
|
|
|
- @closeDialog = "showDialog = false"
|
|
|
- />
|
|
|
</template>
|
|
|
|
|
|
<script setup lang="ts">
|
|
|
@@ -88,19 +78,15 @@ import { useMenu } from '~/composables/layout/useMenu'
|
|
|
import { computed } from '@vue/reactivity'
|
|
|
import { useDisplay } from 'vuetify'
|
|
|
import type { MenuGroup, MenuItem } from '~/types/layout'
|
|
|
-import UrlUtils from "~/services/utils/urlUtils";
|
|
|
import {useApiLegacyRequestService} from "~/composables/data/useApiLegacyRequestService";
|
|
|
|
|
|
-const runtimeConfig = useRuntimeConfig()
|
|
|
const i18n = useI18n()
|
|
|
const organizationProfile = useOrganizationProfileStore()
|
|
|
-const accessProfile = useAccessProfileStore()
|
|
|
const { getMenu, hasMenu, isInternalLink, setMenuState, isMenuOpened } = useMenu()
|
|
|
-const { apiRequestService } = useApiLegacyRequestService()
|
|
|
+
|
|
|
|
|
|
const { mdAndUp, lgAndUp } = useDisplay()
|
|
|
|
|
|
-const showDialog: Ref<boolean> = ref(false)
|
|
|
const menu = getMenu('Main')
|
|
|
|
|
|
// En vue lg+, on affiche toujours le menu
|
|
|
@@ -123,13 +109,6 @@ const isRail = computed(() => {
|
|
|
)
|
|
|
})
|
|
|
|
|
|
-const btnLabel = computed(() => {
|
|
|
- if(organizationProfile.isTrialActive){
|
|
|
- return i18n.t('trial_started')
|
|
|
- }
|
|
|
- return organizationProfile.principalType === 'ARTISTIC_PRACTICE_ONLY' ? i18n.t('try_premium') : i18n.t('discover_offer')
|
|
|
-})
|
|
|
-
|
|
|
const unwatch = watch(lgAndUp, (newValue, oldValue) => {
|
|
|
// Par défaut si l'écran est trop petit au chargement de la page, le menu doit rester fermé.
|
|
|
if (process.client && menu !== null) {
|
|
|
@@ -141,30 +120,6 @@ onUnmounted(() => {
|
|
|
unwatch()
|
|
|
})
|
|
|
|
|
|
-/**
|
|
|
- * Lorsque l'on appuie sur le bouton pour démarrer l'essai / découvrir les offres
|
|
|
- */
|
|
|
-const trialAction = async () => {
|
|
|
- const v1BaseURL = runtimeConfig.baseUrlAdminLegacy || runtimeConfig.public.baseUrlAdminLegacy
|
|
|
-
|
|
|
- if(organizationProfile.isTrialActive){
|
|
|
- await navigateTo(UrlUtils.join(v1BaseURL, '#', 'subscribe'), {
|
|
|
- external: true
|
|
|
- })
|
|
|
- }else if(organizationProfile.principalType === 'ARTISTIC_PRACTICE_ONLY'){
|
|
|
- try{
|
|
|
- await apiRequestService.get('/trial/is_available')
|
|
|
- await navigateTo(UrlUtils.join(v1BaseURL, '#', 'trial'), {
|
|
|
- external: true
|
|
|
- })
|
|
|
- }catch(error){
|
|
|
- showDialog.value = true
|
|
|
- }
|
|
|
- }else{
|
|
|
- await navigateTo('/subscription')
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
/**
|
|
|
* Récupère les menuItem disponibles
|
|
|
* @param menu
|
|
|
@@ -179,6 +134,7 @@ function getItems(menu: MenuGroup|MenuItem|null) : Array<MenuGroup | MenuItem>{
|
|
|
} else {
|
|
|
items = [menu]
|
|
|
}
|
|
|
+
|
|
|
return items;
|
|
|
}
|
|
|
</script>
|
|
|
@@ -247,35 +203,4 @@ function getItems(menu: MenuGroup|MenuItem|null) : Array<MenuGroup | MenuItem>{
|
|
|
:deep(.menu-item .fa) {
|
|
|
text-align: center;
|
|
|
}
|
|
|
-
|
|
|
-.btn_trial {
|
|
|
- background-color: rgb(var(--v-theme-x-create-btn));
|
|
|
- border-radius: 5px;
|
|
|
- border: 1px solid #fff;
|
|
|
- margin-left: 15px;
|
|
|
- margin-right: 15px;
|
|
|
- text-align: center;
|
|
|
- color:#000;
|
|
|
- margin-top: 5px;
|
|
|
- padding: 5px 10px;
|
|
|
- cursor: pointer;
|
|
|
- white-space: pre-line;
|
|
|
-
|
|
|
- .v-icon {
|
|
|
- font-size: 15px;
|
|
|
- color:#000;
|
|
|
- padding-right: 5px;
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-.btn_mini {
|
|
|
- font-size: 17px;
|
|
|
- margin-left: 7px;
|
|
|
- margin-right: 7px;
|
|
|
- padding: 0;
|
|
|
-
|
|
|
- .v-icon {
|
|
|
- padding-right: 0;
|
|
|
- }
|
|
|
-}
|
|
|
</style>
|