import { Model } from '@vuex-orm/core' import { Ability } from '@casl/ability' import { Store } from 'vuex' import { Context } from '@nuxt/types/app' import DataPersister from '~/services/data/dataPersister' import DataProvider from '~/services/data/dataProvider' import DataDeleter from '~/services/data/dataDeleter' import { ABILITIES, GENDER, QUERY_TYPE, TYPE_ALERT } from '~/types/enums' /** * Upgrade du @nuxt/types pour TypeScript */ declare module '@nuxt/types' { interface Context { $ability: Ability, $dataPersister: DataPersister, $dataProvider: DataProvider, $dataDeleter: DataDeleter, } } interface ItemMenu { title: string, icon?: string, to?: string, children?: ItemsMenu, isExternalLink?: boolean, } interface ItemsMenu extends Array {} interface Menu { getMenu : () => ItemMenu | null, getHeaderMenu : () => ItemMenu | null, } interface AbilitiesType { action: ABILITIES, subject: string, /** an array of fields to which user has (or not) access */ fields?: string[] /** an object of conditions which restricts the rule scope */ conditions?: any /** indicates whether rule allows or forbids something */ inverted?: boolean /** message which explains why rule is forbidden */ reason?: string } interface formState { dirty: boolean, showConfirmToLeave: boolean, goAfterLeave: string } interface alert { type: TYPE_ALERT, message: string } interface pageState { alerts: Array, } interface baseAccessState { id: number, name: string, givenName: string, gender: GENDER, avatarId: number } interface Historical { future?: boolean, past?: boolean, present?: boolean, dateStart?: string, dateEnd?: string } interface accessState extends baseAccessState { bearer: string, switchId: number, activityYear: number, historical: Historical, roles: Array, abilities: Array, isAdminAccess: boolean, isAdmin: boolean, isAdministratifManager: boolean, isPedagogicManager: boolean, isFinancialManager: boolean, isCaMember: boolean, isStudent: boolean, isTeacher: boolean, isMember: boolean, isOther: boolean, hasLateralMenu: boolean, hasConfigurationMenu: boolean, hasAccessesMenu: boolean, hasFamilyMenu: boolean, multiAccesses: Array, familyAccesses: Array, originalAccess: baseAccessState } interface AccessStore extends Store<{profile:{access: accessState}}> {} interface baseOrganizationState { id: number, name: string, website?: string, subDomain?: string } interface organizationState extends baseOrganizationState { id: number, name: string, product?: string, modules?: Array, hasChildren?: boolean, networks: Array, parents: Array, } interface OrganizationStore extends Store<{profile:{organization: organizationState}}> {} interface AnyJson extends Record {} interface AnyStore extends Store {} interface EnumChoice { value: string, label: string } interface UrlArgs { readonly type: QUERY_TYPE, readonly url?: string, readonly enumType?: string, readonly model?: typeof Model, readonly rootModel?: typeof Model, readonly id?: any, readonly rootId?: number readonly showProgress?: boolean readonly hook?: string } interface DataProviderArgs extends UrlArgs {} interface DataPersisterArgs extends UrlArgs { data?: AnyJson } interface DataDeleterArgs extends UrlArgs {} interface EnumChoices extends Array {} interface DataManager { initCtx(ctx: Context): void, invoke(args: UrlArgs): Promise, } interface HookProvider { invoke(args: DataProviderArgs): Promise, } interface HookPersister { invoke(args: DataPersisterArgs): Promise, } interface HookDeleter { invoke(args: DataDeleterArgs): Promise, } interface Processor { process(data: AnyJson): Promise } interface Normalizer { normalize(args: DataPersisterArgs): any, } interface Denormalizer { denormalize(data: any): any, }