import { useFind } from '../use-find-get/use-find'; import { AnyData, Paginated, Params, QueryInfo } from '../types.js'; import { MaybeRef } from '@vueuse/core'; import { Id, Query } from '@feathersjs/feathers'; import { ComputedRef, Ref } from 'vue-demi'; export interface FindResponseAlwaysData { data: M | M[]; limit?: number; skip?: number; total?: number; } export type EventName = 'created' | 'patched' | 'updated' | 'removed'; export type EventLocks = { [key in EventName]: { [key: string]: boolean; }; }; export type RequestTypeById = 'create' | 'patch' | 'update' | 'remove'; interface QueryPagination { $limit: number; $skip: number; } export interface MostRecentQuery { pageId: string; pageParams: QueryPagination; queriedAt: number; query: Query; queryId: string; queryParams: Query; total: number; } /** * Pagination state types, below, are for the basic format shown here. * * * { * // PaginationState * pagination : { * defaultLimit: 25, * defaultSkip: 0, * * // PaginationStateQid * default: { * mostRecent: { * query: {}, * queryId: '{}', * queryParams: {}, * pageId: '{$limit:25,$skip:0}', * pageParams: { $limit: 25, $skip: 0 }, * queriedAt: 1538594642481 * }, * * // PaginationStateQuery * '{}': { * total: 155, * queryParams: {}, * * // PaginationStatePage * '{$limit:25,$skip:0}': { * pageParams: { $limit: 25, $skip: 0 }, * ids: [ 1, 2, 3, 4, '...etc', 25 ], * queriedAt: 1538594642481 * } * } * } * } * } * */ export interface PaginationStatePage { ids: Id[]; pageParams: QueryPagination; queriedAt: number; ssr: boolean; } export type PaginationStateQuery = { [pageId: string]: PaginationStatePage; } & { queryParams: Query; total: number; }; export type PaginationStateQid = { [qid: string]: PaginationStateQuery; } & { mostRecent: MostRecentQuery; }; export type PaginationState = { [qid: string]: PaginationStateQid; } & { defaultLimit: number; defaultSkip: number; }; export interface HandleFindResponseOptions { params: Params; response: M[] | Paginated; } export interface HandleFindErrorOptions { params: Params; error: any; } interface Association { name: string; service: any; type: 'find' | 'get'; } export type BaseModelAssociations = Record; export interface UpdatePaginationForQueryOptions { qid: string; response: any; query: any; preserveSsr: boolean; } export interface ModelInstanceOptions { /** * is creating clone */ clone?: boolean; } export interface BaseModelModifierOptions { store: any; } export interface CloneOptions { useExisting?: boolean; } export interface UseCloneOptions { useExisting?: boolean; deep?: boolean; } export interface QueryWhenContext { items: ComputedRef; queryInfo: QueryInfo; /** * Pagination data for the current qid */ qidData: PaginationStateQid; queryData: PaginationStateQuery; pageData: PaginationStatePage; isPending: ComputedRef; haveBeenRequested: ComputedRef; haveLoaded: ComputedRef; error: any; } export type QueryWhenFunction = ComputedRef<(context: QueryWhenContext) => boolean>; export interface GetClassParams extends Params { query?: Q; onServer?: boolean; immediate?: boolean; } export interface GetClassParamsStandalone extends GetClassParams { store: any; } export interface FindClassParams extends Params { query: Q; onServer?: boolean; qid?: string; immediate?: boolean; watch?: boolean; } export interface FindClassParamsStandalone extends FindClassParams { store: any; } export interface UseFindWatchedOptions { params: Params | ComputedRef | null>; fetchParams?: ComputedRef | null | undefined>; queryWhen?: ComputedRef | QueryWhenFunction; qid?: string; local?: boolean; immediate?: boolean; } export interface UseFindWatchedOptionsStandalone extends UseFindWatchedOptions { model: any; } export interface UseFindState { debounceTime: null | number; qid: string; isPending: boolean; haveBeenRequested: boolean; haveLoaded: boolean; error: null | Error; latestQuery: null | object; isLocal: boolean; request: Promise | null; } export interface UseFindComputed { items: ComputedRef; servicePath: ComputedRef; paginationData: ComputedRef; isSsr: ComputedRef; } export interface UseGetOptions { id: Ref | ComputedRef | null; params?: Ref>; queryWhen?: Ref; local?: boolean; immediate?: boolean; } export interface UseGetOptionsStandalone extends UseGetOptions { model: any; } export interface UseGetState { isPending: boolean; hasBeenRequested: boolean; hasLoaded: boolean; error: null | Error; isLocal: boolean; request: Promise | null; } export interface UseGetComputed { item: ComputedRef; servicePath: ComputedRef; isSsr: ComputedRef; } export interface AssociateFindUtils extends ReturnType { useFind: (params: MaybeRef) => any; } export type HandledEvents = 'created' | 'patched' | 'updated' | 'removed'; export type HandleEventsFunction = (item: M, ctx: { model: M; models: any; }) => any; export type HandleEvents = { [event in HandledEvents]: HandleEventsFunction; } | boolean; export type onReadFn = (item: M) => M | Partial; export type beforeWriteFn = (item: M) => M | Partial; export type AssignFn = (dest: M, src: M) => M | Partial; export {};