{"version":3,"file":"toolbox-ngxs.mjs","sources":["../../../projects/toolbox/ngxs/app/app.actions.ts","../../../projects/toolbox/ngxs/app/app.state.ts","../../../projects/toolbox/ngxs/loadmore/load-more-state.model.ts","../../../projects/toolbox/ngxs/loadmore/load-more.actions.ts","../../../projects/toolbox/ngxs/loadmore/load-more.state.ts","../../../projects/toolbox/ngxs/base/base.model.ts","../../../projects/toolbox/ngxs/base/base.actions.ts","../../../projects/toolbox/ngxs/base/base.state.ts","../../../projects/toolbox/ngxs/router/router.selectors.ts","../../../projects/toolbox/ngxs/router/router.serializer.ts","../../../projects/toolbox/ngxs/ngxs.module.ts","../../../projects/toolbox/ngxs/toolbox-ngxs.ts"],"sourcesContent":["// eslint-disable-next-line max-classes-per-file\r\nimport { TbxAppStateModel } from \"@lacera/ngx-toolbox/app\";\r\n\r\nexport namespace TbxAppActions\r\n{\r\n  /** Sets the application details received from the server to the vendor. */\r\n  export class TbxInitApplication\r\n  {\r\n    public static readonly type = \"[TBX Application] Init Application\";\r\n\r\n    public constructor( public payload: TbxAppStateModel ) { }\r\n  }\r\n\r\n  /** Sets fatal startup information when user is authorized to run the app. */\r\n  export class TbxUserUnauthorized\r\n  {\r\n    public static readonly type = \"[TBX Application] User Unauthorized\";\r\n\r\n    public constructor( public payload: string ) { }\r\n  }\r\n}\r\n","/* eslint-disable class-methods-use-this */\r\nimport { Injectable } from \"@angular/core\";\r\nimport { State, Action, StateContext, NgxsOnInit } from \"@ngxs/store\";\r\n\r\nimport { TbxAppStateService, TbxAppStateModel } from \"@lacera/ngx-toolbox/app\";\r\nimport { TbxAppActions } from \"./app.actions\";\r\n\r\n@State<TbxAppStateModel>( { name: \"application\" } )\r\n@Injectable()\r\nexport class TbxAppState implements NgxsOnInit\r\n{\r\n  public constructor( private readonly stateService: TbxAppStateService ) { }\r\n\r\n  /**\r\n   * Initializes the state with application details received from the server.\r\n   *\r\n   * @param ctx The state context.\r\n   * @param action The action payload.\r\n   */\r\n  @Action( TbxAppActions.TbxInitApplication )\r\n  public setApp(\r\n    ctx: StateContext<TbxAppStateModel>,\r\n    action: TbxAppActions.TbxInitApplication ): void\r\n  {\r\n    ctx.setState( action.payload );\r\n  }\r\n\r\n  /**\r\n   * Sets the state to unauthorized when current user cannot run the application.\r\n   *\r\n   * @param ctx The state context.\r\n   * @param action The action payload.\r\n   */\r\n  @Action( TbxAppActions.TbxUserUnauthorized )\r\n  public setAppFail(\r\n    ctx: StateContext<TbxAppStateModel>,\r\n    action: TbxAppActions.TbxUserUnauthorized ): void\r\n  {\r\n    ctx.patchState( { unauthorizedPage: action.payload } );\r\n  }\r\n\r\n  /**\r\n   * Invoked after all states have been initialized and pushed into the state stream.\r\n   *\r\n   * @param ctx The store context.\r\n   */\r\n  public ngxsOnInit( ctx: StateContext<TbxAppStateModel> ): void\r\n  {\r\n    // Ask the ToolBox to let us know when we get a go, no-go from server\r\n    this.stateService.state$.subscribe( ( state?: TbxAppStateModel ) =>\r\n    {\r\n      if( state !== undefined )\r\n      {\r\n        const action$ = state.unauthorizedPage !== undefined\r\n          ? new TbxAppActions.TbxUserUnauthorized( state.unauthorizedPage )\r\n          : new TbxAppActions.TbxInitApplication( state );\r\n\r\n        ctx.dispatch( action$ );\r\n      }\r\n    } );\r\n  }\r\n}\r\n","/** Defines the state slice for the LoadMore list helper. */\r\nexport interface TbxLoadMoreStateModel\r\n{\r\n  /** The ending index to which a list should be sliced. */\r\n  endIndex: number;\r\n\r\n  /** The number of items to display at a time. */\r\n  pageSize: number;\r\n}\r\n\r\n/** The initial state of the LoadMore state. */\r\nexport const initialState: TbxLoadMoreStateModel = {\r\n  endIndex: 50,\r\n  pageSize: 50\r\n};\r\n","/* eslint-disable max-classes-per-file */\r\nexport namespace TbxLoadMoreActions\r\n{\r\n  /** An action to set the LoadMore state. */\r\n  export class SetLoadMore\r\n  {\r\n    public static readonly type = \"[ToolBox LoadMore Page] Set Load More\";\r\n\r\n    public constructor( public endIndex: number, public pageSize: number ) { }\r\n  }\r\n\r\n  /** An action to set the end index for the LoadMore state. */\r\n  export class SetEndIndex\r\n  {\r\n    public static readonly type = \"[ToolBox LoadMore Page] Set End Index\";\r\n\r\n    public constructor( public endIndex: number ) { }\r\n  }\r\n\r\n  /** An action to set the page size for the LoadMore state. */\r\n  export class SetPageSize\r\n  {\r\n    public static readonly type = \"[ToolBox LoadMore Page] Set Page Size\";\r\n\r\n    public constructor( public pageSize: number ) { }\r\n  }\r\n}\r\n","/* eslint-disable class-methods-use-this */\r\nimport { Injectable } from \"@angular/core\";\r\nimport { State, Action, StateContext, Selector } from \"@ngxs/store\";\r\n\r\nimport { TbxLoadMoreActions } from \"./load-more.actions\";\r\nimport { TbxLoadMoreStateModel, initialState } from \"./load-more-state.model\";\r\n\r\n@State<TbxLoadMoreStateModel>( { name: \"loadmore\", defaults: initialState } )\r\n@Injectable()\r\nexport class TbxLoadMoreState\r\n{\r\n  @Selector( [TbxLoadMoreState] )\r\n  public static loadMore( state: TbxLoadMoreStateModel ): TbxLoadMoreStateModel\r\n  {\r\n    return state;\r\n  }\r\n\r\n  @Selector( [TbxLoadMoreState] )\r\n  public static endIndex( state: TbxLoadMoreStateModel ): number\r\n  {\r\n    return state.endIndex;\r\n  }\r\n\r\n  @Selector( [TbxLoadMoreState] )\r\n  public static pageSize( state: TbxLoadMoreStateModel ): number\r\n  {\r\n    return state.pageSize;\r\n  }\r\n\r\n  @Action( TbxLoadMoreActions.SetLoadMore )\r\n  public setLoadMore(\r\n    ctx: StateContext<TbxLoadMoreStateModel>,\r\n    { endIndex, pageSize }: TbxLoadMoreActions.SetLoadMore ): void\r\n  {\r\n    ctx.patchState( { endIndex, pageSize } );\r\n  }\r\n\r\n  @Action( TbxLoadMoreActions.SetEndIndex )\r\n  public setIndex(\r\n    ctx: StateContext<TbxLoadMoreStateModel>,\r\n    { endIndex }: TbxLoadMoreActions.SetEndIndex ): void\r\n  {\r\n    ctx.patchState( { endIndex } );\r\n  }\r\n\r\n  @Action( TbxLoadMoreActions.SetPageSize )\r\n  public create(\r\n    ctx: StateContext<TbxLoadMoreStateModel>,\r\n    { pageSize }: TbxLoadMoreActions.SetPageSize ): void\r\n  {\r\n    ctx.patchState( { pageSize } );\r\n  }\r\n}\r\n","/** The enumeration of types that can be assigned to an error vendor. */\r\nexport type TbxLoadingState = \"init\" | \"loading\" | \"loaded\";\r\n\r\n/** The custom error type that may be caught during an API call. */\r\nexport type TbxStateError = any | string | null;\r\n\r\n/** The error state to append to other states. */\r\nexport interface TbxErrorState\r\n{\r\n  /** The API call state error. */\r\n  error: TbxStateError;\r\n}\r\n\r\n/** The custom type that can be assigned to the call state. */\r\nexport type TbxCallState = TbxLoadingState | TbxErrorState;\r\n\r\n/** The base state model from which other states should derive. */\r\nexport interface TbxBaseStateModel\r\n{\r\n  /** The state for the API call. */\r\n  callState: TbxCallState;\r\n}\r\n\r\n/**\r\n * Helper function to get the error from the given state, if any.\r\n * @param callState The state to check.\r\n * @returns The error found in the state, or null.\r\n */\r\nexport const getStateError = ( callState: TbxCallState ): TbxStateError | null =>\r\n{\r\n  const error = ( callState as TbxErrorState )?.error;\r\n\r\n  return error != null ? error : null;\r\n};\r\n","// eslint-disable-next-line max-classes-per-file\r\nimport { TbxErrorState } from \"./base.model\";\r\n\r\nexport namespace TbxCallActions\r\n{\r\n  /**\r\n   * An action to update the base state to indicate an API call in in progress.\r\n   */\r\n  export class CallLoading\r\n  {\r\n    public static readonly type = \"[ToolBox API] Call Loading\";\r\n  }\r\n\r\n  /**\r\n   * An action to update the base state to indicate the call was successful.\r\n   */\r\n   export class CallSuccess\r\n  {\r\n    public static readonly type = \"[ToolBox API] Call Success\";\r\n  }\r\n\r\n  /**\r\n   * An action to update the base state to indicate the API call failed.\r\n   */\r\n  export class CallFailure\r\n  {\r\n    public static readonly type = \"[ToolBox API] Call Failure\";\r\n\r\n    public constructor( public error: TbxErrorState ) { }\r\n  }\r\n}\r\n","import { StateContext, createSelector, Action } from \"@ngxs/store\";\r\nimport { Observable, throwError, asapScheduler } from \"rxjs\";\r\nimport { tap, catchError, finalize } from \"rxjs/operators\";\r\n\r\nimport { TbxError } from \"@lacera/ngx-toolbox/http\";\r\n\r\nimport { TbxBaseStateModel, getStateError } from \"./base.model\";\r\nimport { TbxCallActions } from \"./base.actions\";\r\n\r\n/**\r\n * Base class from which other base classes should derive to make use of the\r\n * call state that this manages.\r\n *\r\n * @dynamic\r\n */\r\nexport class TbxBaseState\r\n{\r\n  /**\r\n   * Gets a value indicating whether the API call state is currently in progress.\r\n   * @returns True if the state is loading or not.\r\n   */\r\n  public static loadingFn(): ( state: TbxBaseStateModel ) => boolean\r\n  {\r\n    return createSelector(\r\n      [this],\r\n      ( state: TbxBaseStateModel ) => state.callState === \"loading\" );\r\n  }\r\n\r\n  /**\r\n   * Gets a value indicating whether the API call state was successful and loaded.\r\n   * @returns True if the state is loaded or not.\r\n   */\r\n  public static loadedFn(): ( state: TbxBaseStateModel ) => boolean\r\n  {\r\n    return createSelector(\r\n      [this],\r\n      ( state: TbxBaseStateModel ) => state.callState === \"loaded\" );\r\n  }\r\n\r\n  /**\r\n   * Gets the {@link TbxError} that occurred during the API call, if any.\r\n   * @returns A {@link TbxError} object, string or null in the error state.\r\n   */\r\n  public static errorFn(): ( state: TbxBaseStateModel ) => TbxError | string | null\r\n  {\r\n    return createSelector(\r\n      [this],\r\n      ( state: TbxBaseStateModel ) => getStateError( state.callState ) );\r\n  }\r\n\r\n  /**\r\n   * Gets the error message as a string from the state.\r\n   * @returns The error message as a string.\r\n   */\r\n  public static errorMessageFn(): ( state: TbxBaseStateModel ) => string | null\r\n  {\r\n    return createSelector(\r\n      [this],\r\n      ( state: any ) =>\r\n      {\r\n        const error = getStateError( state.callState );\r\n\r\n        return error instanceof TbxError ? error.message : error;\r\n      } );\r\n  }\r\n\r\n  /**\r\n   * Updates the state to indicate the API call is loading.\r\n   * @param ctx The current state.\r\n   * @returns The updated state.\r\n   */\r\n  // eslint-disable-next-line class-methods-use-this\r\n  @Action( TbxCallActions.CallLoading )\r\n  public callLoading( ctx: StateContext<TbxBaseStateModel> ): TbxBaseStateModel\r\n  {\r\n    // @ts-ignore\r\n    return ctx.patchState( { callState: \"loading\" } );\r\n  }\r\n\r\n  /**\r\n   * Updates the state to indicate the API call was successful.\r\n   * @param ctx The current state.\r\n   * @returns The updated state.\r\n   */\r\n  // eslint-disable-next-line class-methods-use-this\r\n  @Action( TbxCallActions.CallSuccess )\r\n  public callSuccess( ctx: StateContext<TbxBaseStateModel> ): TbxBaseStateModel\r\n  {\r\n    ctx.patchState( { callState: \"loaded\" } );\r\n\r\n    return ctx.getState();\r\n  }\r\n\r\n  /**\r\n   * Updates the state to indicate the call failed.\r\n   * @param ctx The current state.\r\n   * @param error The error to store in the state.\r\n   * @returns The updated state.\r\n   */\r\n  // eslint-disable-next-line class-methods-use-this\r\n  @Action( TbxCallActions.CallFailure )\r\n  public callFailure(\r\n    ctx: StateContext<TbxBaseStateModel>,\r\n    { error }: TbxCallActions.CallFailure ): TbxBaseStateModel\r\n  {\r\n    ctx.patchState( { callState: error } );\r\n\r\n    return ctx.getState();\r\n  }\r\n\r\n  /**\r\n   * Executes a request and updates the state accordingly.\r\n   * @param ctx The current state.\r\n   * @param request The request to pipe.\r\n   * @param success The function to call after the request completes.\r\n   * @returns The observable result.\r\n   */\r\n  // eslint-disable-next-line class-methods-use-this\r\n  public request<TModel, TResult>(\r\n    ctx: StateContext<TModel>,\r\n    request: () => Observable<TResult>,\r\n    success?: ( response: TResult ) => void\r\n  ): Observable<TResult>\r\n  {\r\n    asapScheduler.schedule( () =>\r\n      ctx.dispatch( new TbxCallActions.CallLoading() ) );\r\n\r\n    return request().pipe(\r\n      tap( response => success !== undefined && success( response ) ),\r\n      catchError( error =>\r\n      {\r\n        // @ts-ignore\r\n        ctx.patchState( { callState: { error: \"Error received from API call.\" } } );\r\n        asapScheduler.schedule(\r\n          () => ctx.dispatch( new TbxCallActions.CallFailure( { error } ) ) );\r\n\r\n        return throwError( error );\r\n      } ),\r\n      finalize( () =>\r\n      {\r\n        const state = ctx.getState() as unknown as TbxBaseStateModel;\r\n        if( getStateError( state.callState ) == null )\r\n        {\r\n          ctx.dispatch( new TbxCallActions.CallSuccess() );\r\n        }\r\n      } )\r\n    );\r\n  }\r\n}\r\n","import { Params } from \"@angular/router\";\r\nimport { Selector } from \"@ngxs/store\";\r\nimport\r\n{\r\n  RouterState,\r\n  RouterStateModel as RouterStateOuterModel\r\n} from \"@ngxs/router-plugin\";\r\n\r\nimport { TbxRouterStateModel } from \"./router.serializer\";\r\n\r\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\n/** Defines all the selectors for the router state. */\r\nexport class TbxRouterSelectors\r\n{\r\n  /**\r\n   * Retrieves the URL from the router state.\r\n   * @param param0 The router state.\r\n   * @returns The route URL if found or undefined.\r\n   */\r\n  @Selector( [RouterState] )\r\n  public static url( { state }: RouterStateOuterModel ): string | undefined\r\n  {\r\n    return state?.url;\r\n  }\r\n\r\n  /**\r\n   * Retrieves the array of {@link Params} from the router state.\r\n   * @param param0 The router state.\r\n   * @returns The route parameters if found or undefined.\r\n   */\r\n  @Selector( [RouterState] )\r\n  public static params(\r\n    { state }: RouterStateOuterModel<TbxRouterStateModel> ): Params | undefined\r\n  {\r\n    return state?.params;\r\n  }\r\n\r\n  /**\r\n   * Retrieves the array of query {@link Params} from the router state.\r\n   * @param param0 The router state.\r\n   * @returns The route query parameters if found or undefined.\r\n   */\r\n   @Selector( [RouterState] )\r\n  public static queryParams(\r\n    { state }: RouterStateOuterModel<TbxRouterStateModel> ): Params | undefined\r\n  {\r\n    return state?.queryParams;\r\n  }\r\n\r\n  /**\r\n   * Retrieves the router data object from the router state.\r\n   * @param param0 The router state.\r\n   * @returns The route data object if found or undefined.\r\n   */\r\n   @Selector( [RouterState] )\r\n  public static data( { state }: RouterStateOuterModel<TbxRouterStateModel> ): any\r\n  {\r\n    return state?.data;\r\n  }\r\n\r\n  /**\r\n   * Retrieves the page title from the router data object state.\r\n   * @param data The router data object state.\r\n   * @returns The page title if found or undefined.\r\n   */\r\n   @Selector( [TbxRouterSelectors.data] )\r\n  public static pageTitle( data: any ): string\r\n  {\r\n    return data[\"pageTitle\"] ?? \"\";\r\n  }\r\n\r\n  /**\r\n   * Retrieves the action from the router data object state.\r\n   * @param data The router data object state.\r\n   * @returns The action if found or undefined.\r\n   */\r\n   @Selector( [TbxRouterSelectors.data] )\r\n  public static action( data: any ): string\r\n  {\r\n    return data[\"action\"] ?? \"\";\r\n  }\r\n\r\n  /**\r\n   * Retrieves whether in edit mode from the router data object state.\r\n   * @param data The router data object state.\r\n   * @returns The edit mode flag.\r\n   */\r\n   @Selector( [TbxRouterSelectors.data] )\r\n  public static editMode( data: any ): boolean\r\n  {\r\n    return data[\"action\"] === \"edit\";\r\n  }\r\n\r\n  /**\r\n   * Retrieves whether in delete mode from the router data object state.\r\n   * @param data The router data object state.\r\n   * @returns The delete mode flag.\r\n   */\r\n   @Selector( [TbxRouterSelectors.data] )\r\n  public static deleteMode( data: any ): boolean\r\n  {\r\n    return data[\"action\"] === \"delete\";\r\n  }\r\n\r\n  /**\r\n   * Retrieves the parameter 'id' from the route parameters.\r\n   * @param params An array of {@link params} retrieved from the route.\r\n   * @returns The value of 'id' as a {@link number} or zero.\r\n   */\r\n   @Selector( [TbxRouterSelectors.params] )\r\n  public static id( params?: Params ): number\r\n  {\r\n    const id = params !== undefined ? params[\"id\"] : 0;\r\n\r\n    return id != null ? +id : 0;\r\n  }\r\n}\r\n","import { RouterStateSnapshot, Params, ActivatedRouteSnapshot } from \"@angular/router\";\r\nimport { RouterStateSerializer } from \"@ngxs/router-plugin\";\r\n\r\n/* The custom state model for the router information. */\r\nexport interface TbxRouterStateModel\r\n{\r\n  /** The current URL. */\r\n  url: string;\r\n\r\n  /** Any parameters found in the URL. */\r\n  params: Params;\r\n\r\n  /** Any query parameters found in the URL. */\r\n  queryParams: Params;\r\n\r\n  /** Any custom data in the route. */\r\n  data: any;\r\n}\r\n\r\n/**\r\n * The route vendor serializer will on route changes serialize the activated route\r\n * into an object which reflect our vendor model.\r\n */\r\nexport class TbxRouterStateSerializer\r\n  implements RouterStateSerializer<TbxRouterStateModel>\r\n{\r\n  // eslint-disable-next-line class-methods-use-this\r\n  public serialize( routerState: RouterStateSnapshot ): TbxRouterStateModel\r\n  {\r\n    const { url, root: { queryParams } }: RouterStateSnapshot = routerState;\r\n\r\n    let { root: route }: RouterStateSnapshot = routerState;\r\n    while( route.firstChild != null )\r\n    {\r\n      route = route.firstChild;\r\n    }\r\n\r\n    const { params, data }: ActivatedRouteSnapshot = route;\r\n\r\n    if( route.params[\"action\"] != null )\r\n    {\r\n      data[\"action\"] = route.params[\"action\"];\r\n    }\r\n\r\n    if( route.params[\"pageTitle\"] != null )\r\n    {\r\n      data[\"pageTitle\"] = route.params[\"pageTitle\"];\r\n    }\r\n\r\n    return { url, params, queryParams, data };\r\n  }\r\n}\r\n","import { ModuleWithProviders, NgModule, Optional, SkipSelf } from \"@angular/core\";\r\nimport { NgxsModule, NgxsModuleOptions } from \"@ngxs/store\";\r\nimport { NgxsRouterPluginModule, RouterStateSerializer } from \"@ngxs/router-plugin\";\r\nimport\r\n{\r\n  NgxsDevtoolsOptions,\r\n  NgxsReduxDevtoolsPluginModule\r\n} from \"@ngxs/devtools-plugin\";\r\n\r\nimport { TbxRouterStateSerializer } from \"./router/router.serializer\";\r\nimport { TbxAppState } from \"./app/app.state\";\r\n\r\nexport declare type StateClass<T = any> = new ( ...args: any[] ) => T;\r\n\r\n@NgModule()\r\nexport class TbxNgxsModule\r\n{\r\n  public constructor( @Optional() @SkipSelf() parentModule: TbxNgxsModule )\r\n  {\r\n    if( parentModule != null )\r\n    {\r\n      throw new Error(\r\n        \"TbxNgxsModule is already loaded. Import it in the AppModule only\"\r\n      );\r\n    }\r\n  }\r\n\r\n  public static forRoot( states?: StateClass[], options: NgxsModuleOptions = {\r\n    developmentMode: true,\r\n    selectorOptions: {\r\n      suppressErrors: false,\r\n      injectContainerState: false\r\n    }\r\n  } ): ModuleWithProviders<NgxsModule>\r\n  {\r\n    let state = [TbxAppState];\r\n    if( states != null )\r\n    {\r\n      state = [TbxAppState, ...states];\r\n    }\r\n\r\n    return NgxsModule.forRoot( state, options );\r\n  }\r\n\r\n  public static forRouterRoot(): ModuleWithProviders<NgxsRouterPluginModule>\r\n  {\r\n    const module = NgxsRouterPluginModule.forRoot();\r\n    module.providers = [\r\n      { provide: RouterStateSerializer, useClass: TbxRouterStateSerializer }\r\n    ];\r\n\r\n    return module;\r\n  }\r\n\r\n  public static forDevToolsRoot( options?: NgxsDevtoolsOptions ):\r\n    ModuleWithProviders<NgxsReduxDevtoolsPluginModule>\r\n  {\r\n    return NgxsReduxDevtoolsPluginModule.forRoot( options );\r\n  }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}