diff --git a/apps/app/src/components/event/RegistrationFieldFormDialog.vue b/apps/app/src/components/event/RegistrationFieldFormDialog.vue index c22e29ac..e358fce5 100644 --- a/apps/app/src/components/event/RegistrationFieldFormDialog.vue +++ b/apps/app/src/components/event/RegistrationFieldFormDialog.vue @@ -2,8 +2,11 @@ import { VForm } from 'vuetify/components/VForm' import { usePersonTagCategories } from '@/composables/api/usePersonTags' import { requiredValidator } from '@core/utils/validators' -import type { RegistrationFormField } from '@/types/registration-form-field' +import type { RegistrationFormField, RegistrationFormFieldCreateDTO } from '@/types/registration-form-field' +import type { RegistrationFieldType } from '@/types/registration-field-template' import { FIELD_TYPE_LABELS, FIELD_TYPES_WITH_OPTIONS } from '@/types/registration-field-template' +import type { AxiosError } from 'axios' +import type { ApiErrorResponse } from '@/types/auth' const props = defineProps<{ orgId: string @@ -12,7 +15,7 @@ const props = defineProps<{ }>() const emit = defineEmits<{ - save: [payload: Record] + save: [payload: Partial] 'update:modelValue': [value: boolean] }>() @@ -46,7 +49,7 @@ const dialogTitle = computed(() => ) const showOptions = computed(() => - FIELD_TYPES_WITH_OPTIONS.includes(form.value.field_type as any), + (FIELD_TYPES_WITH_OPTIONS as readonly string[]).includes(form.value.field_type), ) const showTagCategory = computed(() => form.value.field_type === 'tag_picker') @@ -87,7 +90,7 @@ function onSubmit() { if (!valid) return errors.value = {} - const payload: Record = { + const payload: Partial = { label: form.value.label, is_required: form.value.is_required, is_filterable: form.value.is_filterable, @@ -98,7 +101,7 @@ function onSubmit() { } if (!props.field) { - payload.field_type = form.value.field_type + payload.field_type = form.value.field_type as RegistrationFieldType } if (showOptions.value) { @@ -119,8 +122,8 @@ function onSubmit() { }) } -function setErrors(err: any) { - const data = err.response?.data +function setErrors(err: Error) { + const data = (err as AxiosError).response?.data if (data?.errors) { errors.value = Object.fromEntries( Object.entries(data.errors).map(([k, v]) => [k, (v as string[])[0]]), diff --git a/apps/app/src/components/events/CreateEventDialog.vue b/apps/app/src/components/events/CreateEventDialog.vue index 7622b052..76d62509 100644 --- a/apps/app/src/components/events/CreateEventDialog.vue +++ b/apps/app/src/components/events/CreateEventDialog.vue @@ -3,6 +3,8 @@ import { VForm } from 'vuetify/components/VForm' import { useCreateEvent } from '@/composables/api/useEvents' import { requiredValidator } from '@core/utils/validators' import type { EventTypeEnum } from '@/types/event' +import type { AxiosError } from 'axios' +import type { ApiErrorResponse } from '@/types/auth' const props = defineProps<{ orgId: string @@ -111,8 +113,8 @@ function onSubmit() { modelValue.value = false showSuccess.value = true }, - onError: (err: any) => { - const data = err.response?.data + onError: (err: Error) => { + const data = (err as AxiosError).response?.data if (data?.errors) { errors.value = Object.fromEntries( Object.entries(data.errors).map(([k, v]) => [k, (v as string[])[0]]), diff --git a/apps/app/src/components/events/CreateSubEventDialog.vue b/apps/app/src/components/events/CreateSubEventDialog.vue index 80e1af82..d179dcd0 100644 --- a/apps/app/src/components/events/CreateSubEventDialog.vue +++ b/apps/app/src/components/events/CreateSubEventDialog.vue @@ -3,6 +3,8 @@ import { VForm } from 'vuetify/components/VForm' import { useCreateSubEvent } from '@/composables/api/useEvents' import { requiredValidator } from '@core/utils/validators' import type { EventItem, EventStatus } from '@/types/event' +import type { AxiosError } from 'axios' +import type { ApiErrorResponse } from '@/types/auth' const props = defineProps<{ parentEvent: EventItem @@ -74,8 +76,8 @@ function onSubmit() { modelValue.value = false showSuccess.value = true }, - onError: (err: any) => { - const data = err.response?.data + onError: (err: Error) => { + const data = (err as AxiosError).response?.data if (data?.errors) { errors.value = Object.fromEntries( Object.entries(data.errors).map(([k, v]) => [k, (v as string[])[0]]), diff --git a/apps/app/src/components/events/EditEventDialog.vue b/apps/app/src/components/events/EditEventDialog.vue index 9e9e93ac..33158189 100644 --- a/apps/app/src/components/events/EditEventDialog.vue +++ b/apps/app/src/components/events/EditEventDialog.vue @@ -3,6 +3,8 @@ import { VForm } from 'vuetify/components/VForm' import { useUpdateEvent } from '@/composables/api/useEvents' import { requiredValidator } from '@core/utils/validators' import type { EventItem } from '@/types/event' +import type { AxiosError } from 'axios' +import type { ApiErrorResponse } from '@/types/auth' const props = defineProps<{ event: EventItem @@ -97,8 +99,8 @@ function onSubmit() { modelValue.value = false showSuccess.value = true }, - onError: (err: any) => { - const data = err.response?.data + onError: (err: Error) => { + const data = (err as AxiosError).response?.data if (data?.errors) { errors.value = Object.fromEntries( Object.entries(data.errors).map(([k, v]) => [k, (v as string[])[0]]), diff --git a/apps/app/src/components/members/EditMemberRoleDialog.vue b/apps/app/src/components/members/EditMemberRoleDialog.vue index a963a6f2..850181f4 100644 --- a/apps/app/src/components/members/EditMemberRoleDialog.vue +++ b/apps/app/src/components/members/EditMemberRoleDialog.vue @@ -4,6 +4,8 @@ import { useUpdateMemberRole } from '@/composables/api/useMembers' import { useAuthStore } from '@/stores/useAuthStore' import { requiredValidator } from '@core/utils/validators' import type { Member, OrganisationRole } from '@/types/member' +import type { AxiosError } from 'axios' +import type { ApiErrorResponse } from '@/types/auth' const props = defineProps<{ orgId: string @@ -51,8 +53,8 @@ function onSubmit() { modelValue.value = false showSuccess.value = true }, - onError: (err: any) => { - const data = err.response?.data + onError: (err: Error) => { + const data = (err as AxiosError).response?.data if (data?.errors) { errors.value = { role: data.errors.role?.[0] ?? '' } } diff --git a/apps/app/src/components/members/InviteMemberDialog.vue b/apps/app/src/components/members/InviteMemberDialog.vue index 6d897ae7..1d4f2a1e 100644 --- a/apps/app/src/components/members/InviteMemberDialog.vue +++ b/apps/app/src/components/members/InviteMemberDialog.vue @@ -3,6 +3,8 @@ import { VForm } from 'vuetify/components/VForm' import { useInviteMember } from '@/composables/api/useMembers' import { emailValidator, requiredValidator } from '@core/utils/validators' import type { OrganisationRole } from '@/types/member' +import type { AxiosError } from 'axios' +import type { ApiErrorResponse } from '@/types/auth' const props = defineProps<{ orgId: string @@ -50,8 +52,8 @@ function onSubmit() { modelValue.value = false showSuccess.value = true }, - onError: (err: any) => { - const data = err.response?.data + onError: (err: Error) => { + const data = (err as AxiosError).response?.data if (data?.errors) { errors.value = { email: data.errors.email?.[0] ?? '', diff --git a/apps/app/src/components/organisation/CompanyDialog.vue b/apps/app/src/components/organisation/CompanyDialog.vue index 9fb41a3f..64e29844 100644 --- a/apps/app/src/components/organisation/CompanyDialog.vue +++ b/apps/app/src/components/organisation/CompanyDialog.vue @@ -3,6 +3,8 @@ import { VForm } from 'vuetify/components/VForm' import { useCreateCompany, useUpdateCompany } from '@/composables/api/useCompanies' import { requiredValidator, emailValidator } from '@core/utils/validators' import type { Company } from '@/types/organisation' +import type { AxiosError } from 'axios' +import type { ApiErrorResponse } from '@/types/auth' const props = defineProps<{ orgId: string @@ -90,8 +92,8 @@ function onSubmit() { emit('saved') } - const onError = (err: any) => { - const data = err.response?.data + const onError = (err: Error) => { + const data = (err as AxiosError).response?.data if (data?.errors) { errors.value = Object.fromEntries( Object.entries(data.errors).map(([k, v]) => [k, (v as string[])[0]]), diff --git a/apps/app/src/components/organisation/EmailBrandingTab.vue b/apps/app/src/components/organisation/EmailBrandingTab.vue index bb4845eb..d8ed162f 100644 --- a/apps/app/src/components/organisation/EmailBrandingTab.vue +++ b/apps/app/src/components/organisation/EmailBrandingTab.vue @@ -2,6 +2,8 @@ import { VForm } from 'vuetify/components/VForm' import { useEmailSettings, useUpdateEmailSettings } from '@/composables/api/useEmail' import { emailValidator } from '@core/utils/validators' +import type { AxiosError } from 'axios' +import type { ApiErrorResponse } from '@/types/auth' const props = defineProps<{ orgId: string @@ -68,9 +70,10 @@ async function onSubmit() { onSuccess: () => { snackbar.value = true }, - onError: (error: any) => { - if (error.response?.status === 422 && error.response?.data?.errors) { - serverErrors.value = error.response.data.errors + onError: (error: Error) => { + const axiosError = error as AxiosError + if (axiosError.response?.status === 422 && axiosError.response?.data?.errors) { + serverErrors.value = axiosError.response.data.errors } }, }) diff --git a/apps/app/src/components/organisation/EmailTemplatesTab.vue b/apps/app/src/components/organisation/EmailTemplatesTab.vue index 12cd44c2..4e484d52 100644 --- a/apps/app/src/components/organisation/EmailTemplatesTab.vue +++ b/apps/app/src/components/organisation/EmailTemplatesTab.vue @@ -11,6 +11,8 @@ import { useAuthStore } from '@/stores/useAuthStore' import { TEMPLATE_VARIABLES } from '@/types/email' import type { EmailTemplate, UpdateEmailTemplatePayload } from '@/types/email' import { emailValidator, requiredValidator } from '@core/utils/validators' +import type { AxiosError } from 'axios' +import type { ApiErrorResponse } from '@/types/auth' const props = defineProps<{ orgId: string @@ -89,9 +91,10 @@ function onEditSubmit() { snackbarMessage.value = 'Template opgeslagen' snackbar.value = true }, - onError: (error: any) => { - if (error.response?.status === 422 && error.response?.data?.errors) { - editErrors.value = error.response.data.errors + onError: (error: Error) => { + const axiosError = error as AxiosError + if (axiosError.response?.status === 422 && axiosError.response?.data?.errors) { + editErrors.value = axiosError.response.data.errors } }, }) diff --git a/apps/app/src/components/organisation/PersonTagsTab.vue b/apps/app/src/components/organisation/PersonTagsTab.vue index cc01afcc..bc6326ee 100644 --- a/apps/app/src/components/organisation/PersonTagsTab.vue +++ b/apps/app/src/components/organisation/PersonTagsTab.vue @@ -9,6 +9,8 @@ import { } from '@/composables/api/usePersonTags' import { requiredValidator } from '@core/utils/validators' import type { PersonTag } from '@/types/person-tag' +import type { AxiosError } from 'axios' +import type { ApiErrorResponse } from '@/types/auth' const props = defineProps<{ orgId: string @@ -139,8 +141,8 @@ function onSubmit() { }) } -function handleError(err: any) { - const data = err.response?.data +function handleError(err: Error) { + const data = (err as AxiosError).response?.data if (data?.errors) { errors.value = Object.fromEntries( Object.entries(data.errors).map(([k, v]) => [k, (v as string[])[0]]), diff --git a/apps/app/src/components/organisation/RegistrationFieldTemplatesTab.vue b/apps/app/src/components/organisation/RegistrationFieldTemplatesTab.vue index 70b08342..875ec29a 100644 --- a/apps/app/src/components/organisation/RegistrationFieldTemplatesTab.vue +++ b/apps/app/src/components/organisation/RegistrationFieldTemplatesTab.vue @@ -8,8 +8,10 @@ import { } from '@/composables/api/useRegistrationFieldTemplates' import { usePersonTagCategories } from '@/composables/api/usePersonTags' import { requiredValidator } from '@core/utils/validators' -import type { RegistrationFieldTemplate } from '@/types/registration-field-template' +import type { RegistrationFieldTemplate, RegistrationFieldTemplateCreateDTO, RegistrationFieldType } from '@/types/registration-field-template' import { FIELD_TYPE_LABELS, FIELD_TYPES_WITH_OPTIONS } from '@/types/registration-field-template' +import type { AxiosError } from 'axios' +import type { ApiErrorResponse } from '@/types/auth' const props = defineProps<{ orgId: string @@ -67,7 +69,7 @@ const dialogTitle = computed(() => const isSaving = computed(() => isCreating.value || isUpdating.value) const showOptions = computed(() => - FIELD_TYPES_WITH_OPTIONS.includes(form.value.field_type as any), + (FIELD_TYPES_WITH_OPTIONS as readonly string[]).includes(form.value.field_type), ) const showTagCategory = computed(() => form.value.field_type === 'tag_picker') @@ -115,7 +117,7 @@ function onSubmit() { if (!valid) return errors.value = {} - const payload: Record = { + const payload: Partial = { label: form.value.label, is_required: form.value.is_required, is_filterable: form.value.is_filterable, @@ -127,7 +129,7 @@ function onSubmit() { } if (!editingTemplate.value) { - payload.field_type = form.value.field_type + payload.field_type = form.value.field_type as RegistrationFieldType } if (showOptions.value) { @@ -155,7 +157,7 @@ function onSubmit() { ) } else { - createTemplate(payload as any, { + createTemplate(payload as RegistrationFieldTemplateCreateDTO, { onSuccess: () => { isDialogOpen.value = false successMessage.value = `${form.value.label} aangemaakt` @@ -167,8 +169,8 @@ function onSubmit() { }) } -function handleError(err: any) { - const data = err.response?.data +function handleError(err: Error) { + const data = (err as AxiosError).response?.data if (data?.errors) { errors.value = Object.fromEntries( Object.entries(data.errors).map(([k, v]) => [k, (v as string[])[0]]), diff --git a/apps/app/src/components/organisations/CrowdTypesManager.vue b/apps/app/src/components/organisations/CrowdTypesManager.vue index 1562fca7..bae61496 100644 --- a/apps/app/src/components/organisations/CrowdTypesManager.vue +++ b/apps/app/src/components/organisations/CrowdTypesManager.vue @@ -3,6 +3,8 @@ import { VForm } from 'vuetify/components/VForm' import { useCrowdTypeList, useCreateCrowdType, useUpdateCrowdType, useDeleteCrowdType } from '@/composables/api/useCrowdTypes' import { requiredValidator } from '@core/utils/validators' import type { CrowdType } from '@/types/organisation' +import type { AxiosError } from 'axios' +import type { ApiErrorResponse } from '@/types/auth' const props = defineProps<{ orgId: string @@ -128,8 +130,8 @@ function onSubmit() { }) } -function handleError(err: any) { - const data = err.response?.data +function handleError(err: Error) { + const data = (err as AxiosError).response?.data if (data?.errors) { errors.value = Object.fromEntries( Object.entries(data.errors).map(([k, v]) => [k, (v as string[])[0]]), diff --git a/apps/app/src/components/organisations/EditOrganisationDialog.vue b/apps/app/src/components/organisations/EditOrganisationDialog.vue index eab6a925..aa474093 100644 --- a/apps/app/src/components/organisations/EditOrganisationDialog.vue +++ b/apps/app/src/components/organisations/EditOrganisationDialog.vue @@ -3,6 +3,8 @@ import { VForm } from 'vuetify/components/VForm' import { useUpdateOrganisation } from '@/composables/api/useOrganisations' import { requiredValidator } from '@core/utils/validators' import type { Organisation } from '@/types/organisation' +import type { AxiosError } from 'axios' +import type { ApiErrorResponse } from '@/types/auth' const props = defineProps<{ organisation: Organisation @@ -34,8 +36,8 @@ function onSubmit() { modelValue.value = false showSuccess.value = true }, - onError: (err: any) => { - const data = err.response?.data + onError: (err: Error) => { + const data = (err as AxiosError).response?.data if (data?.errors) { errors.value = { name: data.errors.name?.[0] ?? '' } } diff --git a/apps/app/src/components/persons/CreatePersonDialog.vue b/apps/app/src/components/persons/CreatePersonDialog.vue index 425aa4ea..c71c7e35 100644 --- a/apps/app/src/components/persons/CreatePersonDialog.vue +++ b/apps/app/src/components/persons/CreatePersonDialog.vue @@ -5,6 +5,8 @@ import { useCrowdTypeList } from '@/composables/api/useCrowdTypes' import { useCompanies } from '@/composables/api/useCompanies' import { requiredValidator, emailValidator } from '@core/utils/validators' import type { PersonStatus } from '@/types/person' +import type { AxiosError } from 'axios' +import type { ApiErrorResponse } from '@/types/auth' const props = defineProps<{ eventId: string @@ -106,11 +108,11 @@ function onSubmit() { modelValue.value = false showSuccess.value = true }, - onError: (err: any) => { - const data = err.response?.data + onError: (err: Error) => { + const data = (err as AxiosError).response?.data if (data?.errors) { errors.value = Object.fromEntries( - Object.entries(data.errors).map(([k, v]) => [k, (v as string[])[0]]), + Object.entries(data.errors).map(([k, v]) => [k, v[0]]), ) } else if (data?.message) { diff --git a/apps/app/src/components/persons/EditPersonDialog.vue b/apps/app/src/components/persons/EditPersonDialog.vue index adb67363..2cf37dab 100644 --- a/apps/app/src/components/persons/EditPersonDialog.vue +++ b/apps/app/src/components/persons/EditPersonDialog.vue @@ -5,6 +5,8 @@ import { useCrowdTypeList } from '@/composables/api/useCrowdTypes' import { useCompanies } from '@/composables/api/useCompanies' import { requiredValidator, emailValidator } from '@core/utils/validators' import type { Person, PersonStatus } from '@/types/person' +import type { AxiosError } from 'axios' +import type { ApiErrorResponse } from '@/types/auth' const props = defineProps<{ person: Person @@ -110,11 +112,11 @@ function onSubmit() { modelValue.value = false showSuccess.value = true }, - onError: (err: any) => { - const data = err.response?.data + onError: (err: Error) => { + const data = (err as AxiosError).response?.data if (data?.errors) { errors.value = Object.fromEntries( - Object.entries(data.errors).map(([k, v]) => [k, (v as string[])[0]]), + Object.entries(data.errors).map(([k, v]) => [k, v[0]]), ) } else if (data?.message) { diff --git a/apps/app/src/components/sections/AssignShiftDialog.vue b/apps/app/src/components/sections/AssignShiftDialog.vue index 5e6565fd..dda33dc9 100644 --- a/apps/app/src/components/sections/AssignShiftDialog.vue +++ b/apps/app/src/components/sections/AssignShiftDialog.vue @@ -4,6 +4,8 @@ import { usePersonList } from '@/composables/api/usePersons' import { useAuthStore } from '@/stores/useAuthStore' import type { Shift } from '@/types/section' import type { Person } from '@/types/person' +import type { AxiosError } from 'axios' +import type { ApiErrorResponse } from '@/types/auth' const props = defineProps<{ eventId: string @@ -66,8 +68,8 @@ function onSubmit() { modelValue.value = false selectedPersonId.value = '' }, - onError: (err: any) => { - const data = err.response?.data + onError: (err: Error) => { + const data = (err as AxiosError).response?.data if (data?.errors) { errors.value = Object.fromEntries( Object.entries(data.errors).map(([k, v]) => [k, (v as string[])[0]]), diff --git a/apps/app/src/components/sections/CreateSectionDialog.vue b/apps/app/src/components/sections/CreateSectionDialog.vue index 38b234c1..36249b37 100644 --- a/apps/app/src/components/sections/CreateSectionDialog.vue +++ b/apps/app/src/components/sections/CreateSectionDialog.vue @@ -4,6 +4,8 @@ import { useCreateSection, useSectionCategories } from '@/composables/api/useSec import { useAuthStore } from '@/stores/useAuthStore' import { requiredValidator } from '@core/utils/validators' import type { SectionType } from '@/types/section' +import type { AxiosError } from 'axios' +import type { ApiErrorResponse } from '@/types/auth' const props = withDefaults(defineProps<{ eventId: string @@ -92,8 +94,8 @@ function onSubmit() { parentEventName: result.parentEventName, }) }, - onError: (err: any) => { - const data = err.response?.data + onError: (err: Error) => { + const data = (err as AxiosError).response?.data if (data?.errors) { errors.value = Object.fromEntries( Object.entries(data.errors).map(([k, v]) => [k, (v as string[])[0]]), diff --git a/apps/app/src/components/sections/CreateShiftDialog.vue b/apps/app/src/components/sections/CreateShiftDialog.vue index 59b6274f..583361d6 100644 --- a/apps/app/src/components/sections/CreateShiftDialog.vue +++ b/apps/app/src/components/sections/CreateShiftDialog.vue @@ -7,6 +7,8 @@ import { useAuthStore } from '@/stores/useAuthStore' import { useTimeSlotDropdown } from '@/composables/useTimeSlotDropdown' import { requiredValidator } from '@core/utils/validators' import type { FestivalSection, Shift, ShiftStatus } from '@/types/section' +import type { AxiosError } from 'axios' +import type { ApiErrorResponse } from '@/types/auth' const props = withDefaults(defineProps<{ eventId: string @@ -184,8 +186,8 @@ function onSubmit() { onSuccess: () => { modelValue.value = false }, - onError: (err: any) => { - const data = err.response?.data + onError: (err: Error) => { + const data = (err as AxiosError).response?.data if (data?.errors) { errors.value = Object.fromEntries( Object.entries(data.errors).map(([k, v]) => [k, (v as string[])[0]]), diff --git a/apps/app/src/components/sections/CreateTimeSlotDialog.vue b/apps/app/src/components/sections/CreateTimeSlotDialog.vue index 615b9dd9..d4b89335 100644 --- a/apps/app/src/components/sections/CreateTimeSlotDialog.vue +++ b/apps/app/src/components/sections/CreateTimeSlotDialog.vue @@ -4,6 +4,8 @@ import { useCreateTimeSlot, useUpdateTimeSlot } from '@/composables/api/useTimeS import { useAuthStore } from '@/stores/useAuthStore' import { requiredValidator } from '@core/utils/validators' import type { TimeSlot } from '@/types/section' +import type { AxiosError } from 'axios' +import type { ApiErrorResponse } from '@/types/auth' const props = defineProps<{ eventId: string @@ -127,8 +129,8 @@ function onSubmit() { onSuccess: () => { modelValue.value = false }, - onError: (err: any) => { - const data = err.response?.data + onError: (err: Error) => { + const data = (err as AxiosError).response?.data if (data?.errors) { errors.value = Object.fromEntries( Object.entries(data.errors).map(([k, v]) => [k, (v as string[])[0]]), diff --git a/apps/app/src/components/sections/EditSectionDialog.vue b/apps/app/src/components/sections/EditSectionDialog.vue index 5ddec8e1..ea8023d2 100644 --- a/apps/app/src/components/sections/EditSectionDialog.vue +++ b/apps/app/src/components/sections/EditSectionDialog.vue @@ -4,6 +4,8 @@ import { useUpdateSection, useSectionCategories } from '@/composables/api/useSec import { useAuthStore } from '@/stores/useAuthStore' import { requiredValidator } from '@core/utils/validators' import type { FestivalSection, SectionType } from '@/types/section' +import type { AxiosError } from 'axios' +import type { ApiErrorResponse } from '@/types/auth' const props = defineProps<{ eventId: string @@ -91,8 +93,8 @@ function onSubmit() { modelValue.value = false emit('updated') }, - onError: (err: any) => { - const data = err.response?.data + onError: (err: Error) => { + const data = (err as AxiosError).response?.data if (data?.errors) { errors.value = Object.fromEntries( Object.entries(data.errors).map(([k, v]) => [k, (v as string[])[0]]), diff --git a/apps/app/src/pages/events/[id]/settings/index.vue b/apps/app/src/pages/events/[id]/settings/index.vue index beabb864..377198c0 100644 --- a/apps/app/src/pages/events/[id]/settings/index.vue +++ b/apps/app/src/pages/events/[id]/settings/index.vue @@ -3,7 +3,7 @@ import { VForm } from 'vuetify/components/VForm' import EventTabsNav from '@/components/events/EventTabsNav.vue' import { useUpdateEvent, useUploadEventImage } from '@/composables/api/useEvents' import { useAuthStore } from '@/stores/useAuthStore' -import type { EventItem } from '@/types/event' +import type { EventItem, UpdateEventPayload } from '@/types/event' definePage({ meta: { @@ -55,7 +55,7 @@ function onFileSelected(files: File[], type: 'banner' | 'logo') { function onClearImage(event: EventItem, type: 'banner' | 'logo') { const field = type === 'banner' ? 'registration_banner_url' : 'registration_logo_url' - updateEvent({ [field]: null } as any) + updateEvent({ [field]: null } as UpdateEventPayload) } diff --git a/apps/app/src/pages/events/[id]/settings/registration-fields.vue b/apps/app/src/pages/events/[id]/settings/registration-fields.vue index 5112d708..28dc3e99 100644 --- a/apps/app/src/pages/events/[id]/settings/registration-fields.vue +++ b/apps/app/src/pages/events/[id]/settings/registration-fields.vue @@ -15,7 +15,7 @@ import { } from '@/composables/api/useRegistrationFormFields' import { useAuthStore } from '@/stores/useAuthStore' import { useNotificationStore } from '@/stores/useNotificationStore' -import type { RegistrationFormField } from '@/types/registration-form-field' +import type { RegistrationFormField, RegistrationFormFieldCreateDTO } from '@/types/registration-form-field' import type { EventItem } from '@/types/event' definePage({ @@ -97,7 +97,7 @@ function openEditDialog(field: RegistrationFormField) { isFieldDialogOpen.value = true } -function onSaveField(payload: Record) { +function onSaveField(payload: Partial) { if (editingField.value) { updateField( { id: editingField.value.id, ...payload }, @@ -111,7 +111,7 @@ function onSaveField(payload: Record) { ) } else { - createField(payload as any, { + createField(payload as RegistrationFormFieldCreateDTO, { onSuccess: () => { isFieldDialogOpen.value = false notificationStore.show(`${payload.label} aangemaakt`, 'success') diff --git a/apps/app/src/pages/invitations/[token].vue b/apps/app/src/pages/invitations/[token].vue index 6fcfc506..55e1fa9c 100644 --- a/apps/app/src/pages/invitations/[token].vue +++ b/apps/app/src/pages/invitations/[token].vue @@ -6,6 +6,8 @@ import { requiredValidator } from '@core/utils/validators' import { VNodeRenderer } from '@layouts/components/VNodeRenderer' import { themeConfig } from '@themeConfig' import type { OrganisationRole } from '@/types/member' +import type { AxiosError } from 'axios' +import type { ApiErrorResponse } from '@/types/auth' definePage({ meta: { @@ -68,8 +70,8 @@ function onSubmit() { authStore.setUser(response.data.user) router.replace('/dashboard') }, - onError: (err: any) => { - const data = err.response?.data + onError: (err: Error) => { + const data = (err as AxiosError).response?.data if (data?.errors) { errors.value = { name: data.errors.name?.[0] ?? '', diff --git a/apps/app/src/types/event.ts b/apps/app/src/types/event.ts index 27019d6e..ac843317 100644 --- a/apps/app/src/types/event.ts +++ b/apps/app/src/types/event.ts @@ -54,6 +54,8 @@ export interface CreateEventPayload { export interface UpdateEventPayload extends Partial { status?: EventStatus + registration_banner_url?: string | null + registration_logo_url?: string | null registration_welcome_text?: string | null registration_show_section_preferences?: boolean registration_show_availability?: boolean diff --git a/apps/portal/src/components/event/ClaimenTab.vue b/apps/portal/src/components/event/ClaimenTab.vue index 6f0cfe2a..806e255f 100644 --- a/apps/portal/src/components/event/ClaimenTab.vue +++ b/apps/portal/src/components/event/ClaimenTab.vue @@ -1,6 +1,8 @@ diff --git a/apps/portal/src/layouts/portal.vue b/apps/portal/src/layouts/portal.vue index 9d071133..fcc92bfd 100644 --- a/apps/portal/src/layouts/portal.vue +++ b/apps/portal/src/layouts/portal.vue @@ -16,7 +16,7 @@ const isMobileMenuOpen = ref(false) // Navbar mode: 'event' shows org name + event name + back link // Default ('platform') shows Crewli logo + page title const isEventMode = computed(() => route.meta.navMode === 'event') -const navTitle = computed(() => (route.meta as any).navTitle as string | undefined) +const navTitle = computed(() => route.meta.navTitle) const eventName = computed(() => portal.activeEvent?.event_name ?? '') const orgName = computed(() => portal.activeEvent?.organisation_name ?? '') diff --git a/apps/portal/src/pages/profiel.vue b/apps/portal/src/pages/profiel.vue index 223755fa..ba43c475 100644 --- a/apps/portal/src/pages/profiel.vue +++ b/apps/portal/src/pages/profiel.vue @@ -7,6 +7,8 @@ import { apiClient } from '@/lib/axios' import MfaTotpSetupDialog from '@/components/settings/MfaTotpSetupDialog.vue' import MfaEmailSetupDialog from '@/components/settings/MfaEmailSetupDialog.vue' import MfaDisableDialog from '@/components/settings/MfaDisableDialog.vue' +import axios from 'axios' +import type { ApiErrorResponse } from '@/types/api' definePage({ name: 'portal-profiel', @@ -199,14 +201,19 @@ async function saveProfile() { snackbarColor.value = 'success' snackbar.value = true } - catch (err: any) { - const data = err?.response?.data - if (data?.errors) { - const firstError = Object.values(data.errors).flat()[0] as string - profileError.value = firstError + catch (err: unknown) { + if (axios.isAxiosError(err)) { + const data = err.response?.data + if (data?.errors) { + const firstError = Object.values(data.errors).flat()[0] + profileError.value = firstError ?? 'Er is een fout opgetreden.' + } + else { + profileError.value = data?.message ?? 'Er is een fout opgetreden.' + } } else { - profileError.value = data?.message ?? 'Er is een fout opgetreden.' + profileError.value = 'Er is een fout opgetreden.' } } } @@ -228,16 +235,21 @@ async function savePassword() { snackbarColor.value = 'success' snackbar.value = true } - catch (err: any) { - const data = err?.response?.data - if (data?.errors) { - passwordFieldErrors.value = {} - for (const [key, messages] of Object.entries(data.errors)) { - passwordFieldErrors.value[key] = (messages as string[])[0] + catch (err: unknown) { + if (axios.isAxiosError(err)) { + const data = err.response?.data + if (data?.errors) { + passwordFieldErrors.value = {} + for (const [key, messages] of Object.entries(data.errors)) { + passwordFieldErrors.value[key] = messages[0] + } + } + else { + passwordError.value = data?.message ?? 'Er is een fout opgetreden.' } } else { - passwordError.value = data?.message ?? 'Er is een fout opgetreden.' + passwordError.value = 'Er is een fout opgetreden.' } } } diff --git a/apps/portal/src/types/api.ts b/apps/portal/src/types/api.ts new file mode 100644 index 00000000..aa4ea5de --- /dev/null +++ b/apps/portal/src/types/api.ts @@ -0,0 +1,5 @@ +export interface ApiErrorResponse { + success: false + message: string + errors?: Record +}