import { ActionCreator, Creator, MemoizedSelector } from '@ngrx/store'; import type { OnReducer } from '@ngrx/store/src/reducer_creator'; import { RefreshParams, RefreshResult } from '@sowatech/shared/ds-datasource'; export interface ExternalRefreshState { refreshResult: RefreshResult | null; loading: boolean; } type Id = any; export declare class ExternalRefreshAdapter { /** * Initial State für external Refresh. * ```ts * type State = ExternalRefreshState & { loading: boolean }; * const initialState: State = adapter.getInitialState({ loading: false }); * ``` * @param extraState zusätzlicher State, der neben dem `refreshResult` abgelegt wird */ getInitialState(extraState?: ExtraState): ExternalRefreshState & ExtraState; /** * Zum Updaten des Refresh Results * ```ts * on(apiActions.loadSuccess, (state, { refreshResult }) => adapter.update(refreshResult, state)), * ``` */ update>(result: RefreshResult, state: State): State; /** * Zum Updaten des Refresh Results über `externalRefreshProps` * ```ts * // Action * 'Load Success': externalRefreshProps(), * // Reducer * on(apiActions.loadSuccess, adapter.updateFromAction()), * ``` */ updateFromAction>(): OnReducer[]>; /** * Löscht das Refresh Result */ clear>(state: State): State; setLoading>(loading: boolean, state: State): State & { loading: boolean; }; /** * Zum Setzen von `loading` * ```ts * on(apiActions.loadSuccess, apiAction.loadFailure, adapter.setLoadingStatic(false)), * ``` */ setLoadingStatic>(loading: boolean): (state: State) => State & { loading: boolean; }; /** * Setzt Loading auf `true`, wenn nicht nur für die Aggregate Params neu geladen wird. * ```ts * on(apiActions.load, (state, { refreshParams }) => adapter.startLoading(refreshParams, state)), * ``` */ startLoading>(refreshParams: RefreshParams, state: State): State; /** * Gibt ein paar nützliche Selectors zurück: */ getSelectors(): { selectList: (state: ExternalRefreshState) => T[]; selectItem: (state: ExternalRefreshState, id: Id) => T; selectIds: (state: ExternalRefreshState) => Id[]; }; /** * Da der Store immutable ist, muss der Selector für die Datasource überschrieben werden. * (SHANG-465) */ createRefreshResultSelector(selector: MemoizedSelector, RefreshResult | null>): MemoizedSelector, any, (s1: RefreshResult) => any>; } /** * Erstellt einen Adapter für den Umgang mit serverseitig geladenen Collections. * ```ts * const adapter = createExternalRefreshAdapter(); * * type State = ExternalRefreshState; * * const initialState: State = adapter.getInitialState(); * * const myFeature = createFeature({ * name: 'myFeature', * reducer: createReducer( * initialState, * on(apiActions.loadSuccess, adapter.updateFromAction()), * on(actions.load, (state, { refreshParams }) => adapter.startLoading(refreshParams, state)), * on(apiActions.loadSuccess, apiActions.loadFailure, adapter.setLoadingStatic(false)), * ), * extraSelectors(baseSelectors) { * const selectRefreshResult = adapter.createRefreshResultSelector(baseSelectors.selectRefreshResult); * return { * selectRefreshResult, * }; * }, * }); * * // Load Action * 'Load': externalRefreshParamsProps(), * // API Action * 'Load Success': externalRefreshResultProps(), * ``` */ export declare function createExternalRefreshAdapter(): ExternalRefreshAdapter; export type ExternalRefreshResultProps = { refreshResult: RefreshResult; }; export type ExternalRefreshResultAction = ActionCreator], ExternalRefreshResultProps & { type: string; }>>; export declare function externalRefreshResultProps(): (refreshResult: RefreshResult) => ExternalRefreshResultProps; export type ExternalRefreshParamsProps = { refreshParams: RefreshParams; }; export type ExternalRefreshParamsAction = ActionCreator>; export declare function externalRefreshParamsProps(): (refreshParams: RefreshParams) => ExternalRefreshParamsProps; export {};