import { type LogLevel } from '../Logger'; import { type ISearchParamsParser, type JSONSearchParamsParser } from '../SearchParamsParser'; import { type BlockerFunction, type DefaultValuesFunction, type IBlocker, type Navigate, type OptionalKeys, type ParsedSearchParams, type SearchParams, type SearchParamsValidationSchema, type SetSearchParams, type SetSearchParamsOptions, type ValidateSearchParams, type ValidationSearchParamsError } from '../types'; type Router = { searchParams: ParsedSearchParams; setSearchParams: SetSearchParams>; navigate: Navigate; createBlocker: (shouldBlock: BlockerFunction) => IBlocker; _searchParamsParser: TSearchParamsParser; }; export type SearchParamsStoreInitOptions = { /** * Схема валидации. Необходимо описать каждое поле * * @example * ```ts * router.createSearchParamsStore<{ id: string; page?: number }>({ * validationSchema: { * id: v.string(), * page: v.optional(v.number()), * }, * }); * ``` */ validationSchema: SearchParamsValidationSchema; /** * Подставятся в values если: * - searchParams не содержит значений * - searchParams не прошли валидацию * - был вызван reset * * Может быть объектом или функцией, возвращающей defaultValues */ defaultValues?: TSearchParams | DefaultValuesFunction; /** * Подставляются в values при инициализации */ initialValues?: TSearchParams; /** * Параметры, которые будут сохраняться при навигации. * Для сохранения, установить параметры после инициализации store * * @example - Сохранятся параметры id и page * ```ts * router.createSearchParamsStore<{ id: string; page?: number }>({ * validationSchema: { * preserveOnNavigate : true, * id: v.string(), * page: v.optional(v.number()), * }, * }); * ``` * @example - Сохранится только параметр page * ```ts * router.createSearchParamsStore<{ id: string; page?: number }>({ * validationSchema: { * preserveOnNavigate : ['page'], * id: v.string(), * page: v.optional(v.number()), * }, * }); * ``` */ preserveOnNavigate?: true | Array; logLevel?: LogLevel; }; type SetAll = (setter: ((prev?: TSearchParams) => TSearchParams) | TSearchParams, options?: SetSearchParamsOptions) => void; type ResetSearchParamsOptions = { /** * Если false, то будут сохранены в истории браузера * @default true */ replace?: boolean; /** * Сбросить только эти параметры */ include?: Array; /** * Сбросить все параметры, кроме этих */ exclude?: Array; }; /** * Позволяет работать с изолированными типобезопасными SearchParams. * Изменяет только те параметры, которые определены в validationSchema */ export declare class SearchParamsStore, TSearchParamsParser extends ISearchParamsParser = JSONSearchParamsParser> { private readonly _router; private readonly _validate; private validationCache?; private readonly validationSchema; /** * Ключи, с которыми работаем в текущем store */ private readonly valuesKeys; private readonly defaultValues?; private readonly initialValues?; private readonly logger; private readonly preserveOnNavigate?; private readonly _preservedSearchParamsStore; constructor({ validationSchema, defaultValues, initialValues, logLevel, preserveOnNavigate, }: SearchParamsStoreInitOptions, _router: Router, _validate?: ValidateSearchParams); /** * Содержит все searchParams, которые установлены в url. Даже те, которые не определены в текущем SearchParamsStore * undefined, если параметров нет или они не прошли валидацию. * Является observable. * @example * ```ts * const store = router.createSearchParamsStore<{ id: string; page?: number }>({ validationSchema: { id: v.string(), page: v.optional(v.number()) } }); * * store.values?.id; * store.values?.page; * ``` */ get values(): TSearchParams | undefined; /** * Содержит ошибки валидации. Позволяет отобразить пользователю причину игнорирования параметров. * undefined, если параметры успешно прошли валидацию. * Является observable. */ get validationErrors(): ValidationSearchParamsError | undefined; /** * Устанавливает все параметры сразу. * Prev значения optional потому что нет гарантий, что в url были эти параметры или что они были валидными. * По-дефолту будут изменения не будут сохранены в истории браузера * @example * ```ts * const store = router.createSearchParamsStore<{ id: string; page?: number }>({}); * * // Перезапишет все параметры. Если page был со значением, то он будет удален * store.setAll({ id: '123' }); * * // Все значения prev - optional * store.setAll((prev) => ({ ...prev, id: prev.id || '123' })); * ``` */ setAll: SetAll; /** * Устанавливает один параметр * По-дефолту будут изменения не будут сохранены в истории браузера * @example * ```ts * const store = router.createSearchParamsStore<{ id: string; page?: number }>({}); * * store.set('id', '123'); * ``` */ set: (key: TKey, value: TSearchParams[TKey], options?: SetSearchParamsOptions) => void; /** * Удаляет параметр * По-дефолту будут изменения не будут сохранены в истории браузера * @example * ```ts * const store = router.createSearchParamsStore<{ id: string; page?: number }>({}); * * store.delete('page'); // page опциональный - можно удалить * store.delete('id'); // Ошибка компиляции - id обязательный, нельзя удалить * ``` */ delete: (key: OptionalKeys, options?: SetSearchParamsOptions) => void; /** * Удаляет все параметры. Устанавливает defaultValues * По-дефолту будут изменения не будут сохранены в истории браузера * @example * ```ts * const store = router.createSearchParamsStore<{ id: string; page?: number }>({}); * * store.reset(); * ``` */ reset: ({ include, exclude, replace, }?: ResetSearchParamsOptions) => void; /** * Извлекает из searchParams только те значения, с которыми работает store */ private extractValues; private init; private preserveSearchParams; private validate; private mergeDefaultValues; } export {};