refactor(portal): move stores and rename portal auth store

- apps/portal/src/stores/useAuthStore.ts →
  apps/app/src/stores/portal/usePortalAuthStore.ts. The export and
  defineStore id are renamed (useAuthStore → usePortalAuthStore,
  'auth' → 'portalAuth') so it can coexist with the organizer's
  apps/app/src/stores/useAuthStore. Lazy import inside
  resetPortalStoresSync() updated to the new path.
- apps/portal/src/stores/usePortalStore.ts →
  apps/app/src/stores/portal/usePortalStore.ts (no name change —
  apps/app does not have a usePortalStore).

All call sites in moved pages/components now import from
@/stores/portal/{usePortalStore,usePortalAuthStore} and call
usePortalAuthStore() instead of useAuthStore().

PR-B2 will merge this back into a single context-aware auth store.

Also includes the C.1 page meta-block updates (layout: 'PortalLayout'
| 'PublicLayout', context: 'portal') that were left unstaged after
the page-rename commit picked up only the path change.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-05 19:06:08 +02:00
parent 98ec51fcbd
commit 4fe1a0c517
15 changed files with 44 additions and 40 deletions

View File

@@ -1,7 +1,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { useAuthStore } from '@/stores/useAuthStore' import { usePortalAuthStore } from '@/stores/portal/usePortalAuthStore'
const authStore = useAuthStore() const authStore = usePortalAuthStore()
const router = useRouter() const router = useRouter()
const userInitials = computed(() => { const userInitials = computed(() => {

View File

@@ -1,5 +1,5 @@
<script setup lang="ts"> <script setup lang="ts">
import { usePortalStore } from '@/stores/usePortalStore' import { usePortalStore } from '@/stores/portal/usePortalStore'
defineProps<{ defineProps<{
eventId: string eventId: string

View File

@@ -1,6 +1,6 @@
<script setup lang="ts"> <script setup lang="ts">
import StatusCard from '@/components/portal/StatusCard.vue' import StatusCard from '@/components/portal/StatusCard.vue'
import { usePortalStore } from '@/stores/usePortalStore' import { usePortalStore } from '@/stores/portal/usePortalStore'
import { useMyShifts } from '@/composables/api/usePortalShifts' import { useMyShifts } from '@/composables/api/usePortalShifts'
import type { PortalPersonPayload } from '@/types/portal' import type { PortalPersonPayload } from '@/types/portal'

View File

@@ -2,9 +2,10 @@
definePage({ definePage({
name: 'artist-advance', name: 'artist-advance',
meta: { meta: {
layout: 'portal', layout: 'PortalLayout',
requiresAuth: false, requiresAuth: false,
requiresToken: true, requiresToken: true,
context: 'portal',
}, },
}) })

View File

@@ -1,15 +1,16 @@
<script setup lang="ts"> <script setup lang="ts">
import OverzichtTab from '@/components/event/OverzichtTab.vue' import OverzichtTab from '@/components/portal/event/OverzichtTab.vue'
import RoosterTab from '@/components/event/RoosterTab.vue' import RoosterTab from '@/components/portal/event/RoosterTab.vue'
import ClaimenTab from '@/components/event/ClaimenTab.vue' import ClaimenTab from '@/components/portal/event/ClaimenTab.vue'
import InformatieTab from '@/components/event/InformatieTab.vue' import InformatieTab from '@/components/portal/event/InformatieTab.vue'
import { usePortalStore } from '@/stores/usePortalStore' import { usePortalStore } from '@/stores/portal/usePortalStore'
definePage({ definePage({
name: 'portal-event-detail', name: 'portal-event-detail',
meta: { meta: {
layout: 'portal', layout: 'PortalLayout',
requiresAuth: true, requiresAuth: true,
context: 'portal',
navMode: 'event', navMode: 'event',
}, },
}) })

View File

@@ -1,12 +1,13 @@
<script setup lang="ts"> <script setup lang="ts">
import EventCard from '@/components/portal/EventCard.vue' import EventCard from '@/components/portal/EventCard.vue'
import { usePortalStore } from '@/stores/usePortalStore' import { usePortalStore } from '@/stores/portal/usePortalStore'
definePage({ definePage({
name: 'portal-evenementen', name: 'portal-evenementen',
meta: { meta: {
layout: 'portal', layout: 'PortalLayout',
requiresAuth: true, requiresAuth: true,
context: 'portal',
navMode: 'platform', navMode: 'platform',
navTitle: 'Mijn evenementen', navTitle: 'Mijn evenementen',
}, },

View File

@@ -1,6 +1,6 @@
<script setup lang="ts"> <script setup lang="ts">
import { useAuthStore } from '@/stores/useAuthStore' import { usePortalAuthStore } from '@/stores/portal/usePortalAuthStore'
import { usePortalStore } from '@/stores/usePortalStore' import { usePortalStore } from '@/stores/portal/usePortalStore'
import { useUpdateProfile, useUpdatePassword } from '@/composables/api/usePortalProfile' import { useUpdateProfile, useUpdatePassword } from '@/composables/api/usePortalProfile'
import { import {
useMfaStatus, useMfaStatus,
@@ -19,14 +19,15 @@ import type { ApiErrorResponse } from '@/types/api'
definePage({ definePage({
name: 'portal-profiel', name: 'portal-profiel',
meta: { meta: {
layout: 'portal', layout: 'PortalLayout',
requiresAuth: true, requiresAuth: true,
context: 'portal',
navMode: 'platform', navMode: 'platform',
navTitle: 'Mijn profiel', navTitle: 'Mijn profiel',
}, },
}) })
const authStore = useAuthStore() const authStore = usePortalAuthStore()
const portal = usePortalStore() const portal = usePortalStore()
const router = useRouter() const router = useRouter()
const route = useRoute() const route = useRoute()

View File

@@ -2,8 +2,9 @@
definePage({ definePage({
name: 'volunteer-register-info', name: 'volunteer-register-info',
meta: { meta: {
layout: 'blank', layout: 'PortalLayout',
requiresAuth: false, requiresAuth: false,
context: 'portal',
}, },
}) })
</script> </script>

View File

@@ -1,17 +1,18 @@
<script setup lang="ts"> <script setup lang="ts">
import { useAllMyShifts } from '@/composables/api/usePortalShifts' import { useAllMyShifts } from '@/composables/api/usePortalShifts'
import { useAuthStore } from '@/stores/useAuthStore' import { usePortalAuthStore } from '@/stores/portal/usePortalAuthStore'
import type { AllMyShiftsAssignment } from '@/types/portal-shift' import type { AllMyShiftsAssignment } from '@/types/portal-shift'
definePage({ definePage({
name: 'portal-shifts', name: 'portal-shifts',
meta: { meta: {
layout: 'portal', layout: 'PortalLayout',
requiresAuth: true, requiresAuth: true,
context: 'portal',
}, },
}) })
const auth = useAuthStore() const auth = usePortalAuthStore()
const { data: eventGroups, isLoading, isError, refetch } = useAllMyShifts() const { data: eventGroups, isLoading, isError, refetch } = useAllMyShifts()
const statusConfig: Record<string, { label: string; color: string }> = { const statusConfig: Record<string, { label: string; color: string }> = {

View File

@@ -9,8 +9,9 @@ import { apiClient } from '@/lib/axios'
definePage({ definePage({
name: 'set-password', name: 'set-password',
meta: { meta: {
layout: 'blank', layout: 'PortalLayout',
requiresAuth: false, requiresAuth: false,
context: 'portal',
}, },
}) })

View File

@@ -1,25 +1,24 @@
<script setup lang="ts"> <script setup lang="ts">
import { emailValidator } from '@core/utils/validators' import { emailValidator } from '@core/utils/validators'
import FieldRenderer from '@/components/public-form/FieldRenderer.vue' import FieldRenderer from '@/components/shared/public-form/FieldRenderer.vue'
import FormConfirmation from '@/components/public-form/FormConfirmation.vue' import FormConfirmation from '@/components/shared/public-form/FormConfirmation.vue'
import FormErrorState from '@/components/public-form/FormErrorState.vue' import FormErrorState from '@/components/shared/public-form/FormErrorState.vue'
import FormStepper from '@/components/public-form/FormStepper.vue' import FormStepper from '@/components/shared/public-form/FormStepper.vue'
import SubmitterDetails from '@/components/public-form/SubmitterDetails.vue' import SubmitterDetails from '@/components/shared/public-form/SubmitterDetails.vue'
import { extractErrorBody, useFetchPublicFormSchema } from '@/composables/api/usePublicForm' import { extractErrorBody, useFetchPublicFormSchema } from '@/composables/api/usePublicForm'
import { usePublicFormSections } from '@/composables/api/usePublicFormSections' import { usePublicFormSections } from '@/composables/api/usePublicFormSections'
import { usePublicFormTimeSlots } from '@/composables/api/usePublicFormTimeSlots' import { usePublicFormTimeSlots } from '@/composables/api/usePublicFormTimeSlots'
import { useFormDraft } from '@/composables/useFormDraft' import { useFormDraft } from '@/composables/useFormDraft'
import { isStepValid, useFormSteps } from '@form-schema/composables/useFormSteps' import { isStepValid, useFormSteps } from '@/composables/forms/composables/useFormSteps'
import { formatFieldValue } from '@form-schema/composables/formatFieldValue' import { formatFieldValue } from '@/composables/forms/composables/formatFieldValue'
import { providePublicFormLocale, providePublicFormToken } from '@/composables/publicFormInjection' import { providePublicFormLocale, providePublicFormToken } from '@/composables/publicFormInjection'
import { FormFieldType } from '@form-schema/types/formBuilder' import { FormFieldType } from '@/composables/forms/types/formBuilder'
import type { FormErrorCode, PublicFormField } from '@form-schema/types/formBuilder' import type { FormErrorCode, PublicFormField } from '@/composables/forms/types/formBuilder'
definePage({ definePage({
name: 'public-form-register', name: 'public-form-register',
meta: { meta: {
layout: 'blank', layout: 'PublicLayout',
requiresAuth: false,
}, },
}) })

View File

@@ -1,17 +1,15 @@
<script setup lang="ts"> <script setup lang="ts">
import { useAuthStore } from '@/stores/useAuthStore' import { usePortalAuthStore } from '@/stores/portal/usePortalAuthStore'
definePage({ definePage({
name: 'register-success', name: 'register-success',
meta: { meta: {
layout: 'portal', layout: 'PublicLayout',
requiresAuth: false,
navMode: 'platform',
}, },
}) })
const route = useRoute('register-success') const route = useRoute('register-success')
const authStore = useAuthStore() const authStore = usePortalAuthStore()
const eventName = computed(() => (route.query.event as string) || 'het evenement') const eventName = computed(() => (route.query.event as string) || 'het evenement')
const bannerUrl = computed(() => (route.query.banner as string) || null) const bannerUrl = computed(() => (route.query.banner as string) || null)

View File

@@ -3,7 +3,7 @@ import { computed, ref } from 'vue'
import { apiClient } from '@/lib/axios' import { apiClient } from '@/lib/axios'
import type { AuthMeUser } from '@/types/portal' import type { AuthMeUser } from '@/types/portal'
export const useAuthStore = defineStore('auth', () => { export const usePortalAuthStore = defineStore('portalAuth', () => {
const user = ref<AuthMeUser | null>(null) const user = ref<AuthMeUser | null>(null)
const isInitialized = ref(false) const isInitialized = ref(false)
@@ -14,7 +14,7 @@ export const useAuthStore = defineStore('auth', () => {
} }
async function resetPortalStoresSync(): Promise<void> { async function resetPortalStoresSync(): Promise<void> {
const { usePortalStore } = await import('@/stores/usePortalStore') const { usePortalStore } = await import('@/stores/portal/usePortalStore')
usePortalStore().reset() usePortalStore().reset()
} }