{"version":3,"file":"toolbox-audit.mjs","sources":["../../../projects/toolbox/audit/audit.constants.ts","../../../projects/toolbox/audit/audit.service.ts","../../../projects/toolbox/audit/audit.routes.ts","../../../projects/toolbox/audit/list/audit-list.component.ts","../../../projects/toolbox/audit/list/audit-list.component.html","../../../projects/toolbox/audit/details/audit-details.component.ts","../../../projects/toolbox/audit/details/audit-details.component.html","../../../projects/toolbox/audit/audit.module.ts","../../../projects/toolbox/audit/toolbox-audit.ts"],"sourcesContent":["/** The audit feature route paths. */\r\nexport const routePaths = {\r\n  list:    \"\",\r\n  details: \"details\",\r\n  create:  \"create\",\r\n  edit:    \"edit\",\r\n  delete:  \"delete\"\r\n};\r\n\r\n/** Define the data values for each route. */\r\nexport const dataNames = {\r\n  action:  \"action\",\r\n  audit:   \"audit\",\r\n  list:    \"list\",\r\n  details: \"details\",\r\n  delete:  \"delete\"\r\n};\r\n\r\n/** The names given to parameters in audit routesService */\r\nexport const paramNames = {\r\n  id: \"id\",\r\n  source: \"source\",\r\n  sourceId: \"sourceId\",\r\n  returnUrl: \"ru\",\r\n  parentUrl: \"pru\"\r\n};\r\n\r\nexport const urlNames = {\r\n  getBySource: \"AuditGetListApi\",\r\n  getById: \"AuditGetDetailsApi\"\r\n};\r\n","import { Injectable } from \"@angular/core\";\r\nimport { Location } from \"@angular/common\";\r\nimport { HttpClient } from \"@angular/common/http\";\r\nimport { Observable } from \"rxjs\";\r\n\r\nimport { TbxAuditModel } from \"./audit.model\";\r\nimport { paramNames } from \"./audit.constants\";\r\n\r\n/**\r\n * Provides data services for the Audit Trail feature by calling the ToolBox\r\n * WebAPI endpoint for audit trail entries (api/toolbox/audit).\r\n */\r\n@Injectable( { providedIn: \"root\" } )\r\nexport class TbxAuditService\r\n{\r\n  /** Gets or sets the back-end URL to retrieve audit trail entries. */\r\n  public baseAuditUrl = \"api/toolbox/audit\";\r\n\r\n  /**\r\n   * Initializes a new instance of the {@link TbxAuditService} class.\r\n   * @param http The HTTP client to call the back-end.\r\n   * @param location The HTTP location sanitizer.\r\n   */\r\n  public constructor(\r\n    private readonly http: HttpClient,\r\n    private readonly location: Location\r\n  )\r\n  {\r\n  }\r\n\r\n  /**\r\n   * Gets all audit trail entries for a source.\r\n   * @param source The source from where the entry originated.\r\n   * @param sourceId The ID of the source (e.g., Project ID).\r\n   * @returns All audit trail entries for a source.\r\n   */\r\n  public getBySourceId( source: string, sourceId: number ): Observable<TbxAuditModel[]>\r\n  {\r\n    const baseUrl = this.location.prepareExternalUrl( this.baseAuditUrl );\r\n\r\n    const p = `${paramNames.source}=${source}&${paramNames.sourceId}=${sourceId}`;\r\n    const url = `${baseUrl}?${p}`;\r\n\r\n    return this.http.get<TbxAuditModel[]>( url );\r\n  }\r\n\r\n  /**\r\n   * Gets all audit trail entry details.\r\n   * @param id The unique ID of the source.\r\n   * @returns All audit trail entry details.\r\n   */\r\n  public getById( id: number ): Observable<TbxAuditModel>\r\n  {\r\n    const baseUrl = this.location.prepareExternalUrl( this.baseAuditUrl );\r\n    const url = `${baseUrl}/${id.toString()}`;\r\n\r\n    return this.http.get<TbxAuditModel>( url );\r\n  }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { Router } from \"@angular/router\";\r\n\r\nimport { TbxReturnUrl } from \"@lacera/ngx-toolbox/http\";\r\nimport { routePaths } from \"./audit.constants\";\r\n\r\n/**\r\n * Provides audit trail route services for the application.\r\n */\r\n@Injectable( { providedIn: \"root\" } )\r\nexport class TbxAuditRoutes\r\n{\r\n  /** Gets or sets the path to the audit trail route. */\r\n  public auditRoute = \"audit\";\r\n\r\n  /**\r\n   * Initializes a new instance of the {@link TbxAuditRoutes} class.\r\n   * @param router The Angular router to build route trees.\r\n   */\r\n  public constructor( private readonly router: Router )\r\n  {\r\n  }\r\n\r\n  /**\r\n   * Creates the URL string to navigate to the list of audit trail entries.\r\n   * @param source The audit trail source for which to display entries.\r\n   * @param sourceId The audit trail source ID for which to display entries.\r\n   * @returns The audit trail list route string.\r\n   */\r\n  public list( source: string, sourceId: number ): string\r\n  {\r\n    return this.router.createUrlTree( [this.auditRoute, source, sourceId] ).toString();\r\n  }\r\n\r\n  /**\r\n   * Creates the URL string to navigate to the details of an audit trail entry.\r\n   * @param id The audit trail entry ID  to display.\r\n   * @returns The audit trail details route tree.\r\n   */\r\n  public details( id: number ): string\r\n  {\r\n    return this.router.createUrlTree(\r\n      [this.auditRoute, routePaths.details, id] ).toString();\r\n  }\r\n\r\n  /**\r\n   * Creates the return URL for {@link queryParams} links.\r\n   * @param returnUrl An optional URL to return to.\r\n   * @param parentReturnUrl An optional return URL to a parent.\r\n   * @returns The return URL.\r\n   */\r\n  // eslint-disable-next-line class-methods-use-this\r\n  public returnUrl( returnUrl?: string, parentReturnUrl?: string ): TbxReturnUrl\r\n  {\r\n    return {\r\n      ru: returnUrl ?? \"\",\r\n      pru: parentReturnUrl\r\n    };\r\n  }\r\n}\r\n","import { ActivatedRoute } from \"@angular/router\";\r\nimport { Component, OnInit } from \"@angular/core\";\r\n\r\nimport { TbxReturnUrl } from \"@lacera/ngx-toolbox/http\";\r\nimport { TbxAuditModel } from \"../audit.model\";\r\nimport { TbxAuditService } from \"../audit.service\";\r\nimport { TbxAuditRoutes } from \"../audit.routes\";\r\n\r\nimport { paramNames } from \"../audit.constants\";\r\n\r\n/**\r\n * The audit trail component displayed when the user navigation to /audit.\r\n */\r\n@Component( {\r\n  templateUrl: \"./audit-list.component.html\",\r\n  styleUrls: [\"./audit-list.component.scss\"],\r\n  standalone: false\r\n} )\r\nexport class TbxAuditListComponent implements OnInit {\r\n  /** The source and source ID for audit being viewed. */\r\n  public source: string;\r\n\r\n  /** The source ID for audit being viewed. */\r\n  public sourceId: number;\r\n\r\n  /** The optional return URL. */\r\n  public returnUrl: TbxReturnUrl;\r\n\r\n  /** The list of audit trail retrieved from the server. */\r\n  public entries: TbxAuditModel[] = [];\r\n\r\n  /** Indicates the component is loading data. */\r\n  public loading = true;\r\n\r\n  /** Any error message. */\r\n  public errorMessage: string | undefined = undefined;\r\n\r\n  public constructor(\r\n    route: ActivatedRoute,\r\n    public readonly auditRoutes: TbxAuditRoutes,\r\n    private readonly auditService: TbxAuditService\r\n  ) {\r\n    // Grab the parameters for the filter\r\n    this.source = route.snapshot.params[\"source\"];\r\n    this.sourceId = route.snapshot.params[\"sourceId\"];\r\n\r\n    // Get the parent return URL if any\r\n    const ru = route.snapshot.queryParamMap.get( paramNames.returnUrl );\r\n\r\n    // Compose the return list used by the list links\r\n    this.returnUrl = auditRoutes.returnUrl(\r\n      auditRoutes.list( this.source, this.sourceId ), ru !== null ? ru : \"/\" );\r\n  }\r\n\r\n  public ngOnInit(): void {\r\n    this.loadAuditTrail();\r\n  }\r\n\r\n  public loadAuditTrail(): void {\r\n    this.loading = true;\r\n\r\n    this.auditService\r\n        .getBySourceId( this.source, this.sourceId )\r\n        .subscribe( {\r\n          next: entries => {\r\n            this.entries = entries;\r\n            this.loading = false;\r\n            this.errorMessage = undefined;\r\n          },\r\n          error: error => {\r\n            this.errorMessage = Boolean( error.message ) ? error.message : error;\r\n            this.loading = false;\r\n          }\r\n        } );\r\n  }\r\n\r\n  // eslint-disable-next-line class-methods-use-this\r\n  public trackById( _index: number, item: TbxAuditModel ): number {\r\n    return item.auditId;\r\n  }\r\n}\r\n","<section class=\"page-header\">\r\n  <h1>Audit Trail</h1>\r\n  <div class=\"ml-auto\" *ngIf=\"returnUrl\">\r\n    <a [routerLink]=\"returnUrl.pru\" class=\"btn btn-outline-primary\">\r\n      <i class=\"fa fa-arrow-left\"></i>&nbsp; Back to {{source}}\r\n    </a>\r\n  </div>\r\n</section>\r\n\r\n<div class=\"alert alert-danger\" *ngIf=\"errorMessage\">\r\n  {{ errorMessage }}\r\n</div>\r\n\r\n<div class=\"tbx-panel\">\r\n  <div class=\"tbx-panel-header\">\r\n    <div class=\"tbx-panel-header-title\">\r\n      Audit Trail ({{source}})\r\n    </div>\r\n  </div>\r\n  <div class=\"tbx-panel-body\">\r\n    <table class=\"table table-striped table-hover\">\r\n      <thead>\r\n      <tr>\r\n        <th class=\"min-width\">\r\n          <!-- Icon -->\r\n        </th>\r\n        <th>ID</th>\r\n        <th class=\"sortable desc\">Date/Time</th>\r\n        <th>Transaction</th>\r\n        <th>Description</th>\r\n        <th>Action</th>\r\n        <th>Entry By</th>\r\n        <th>Workstation</th>\r\n        <th>\r\n          <!-- Action Button -->\r\n        </th>\r\n      </tr>\r\n      </thead>\r\n      <tbody>\r\n      <tr class=\"no-items-found\" *ngIf=\"entries && entries.length === 0\">\r\n        <td colspan=\"8\">No audit trail entries found for this {{ source }}.</td>\r\n      </tr>\r\n      <tr *ngFor=\"let entry of entries; trackBy: trackById\">\r\n        <td><i class=\"fa fa-clock-o icon\"></i></td>\r\n        <td>{{ entry.auditId }}</td>\r\n        <td>{{ entry.dateTime | date: \"MM/dd/yyyy hh:mm:ss a\" }}</td>\r\n        <td>{{ entry.transactionId }}</td>\r\n        <td>\r\n          <a [routerLink]=\"auditRoutes.details( entry.auditId )\"\r\n             [queryParams]=\"returnUrl\">\r\n            {{ entry.description }}\r\n          </a>\r\n        </td>\r\n        <td>{{ entry.action }}</td>\r\n        <td>{{ entry.userName }}</td>\r\n        <td>{{ entry.workstation }}</td>\r\n        <td>\r\n          <div class=\"action-group btn-group\">\r\n            <a [routerLink]=\"auditRoutes.details( entry.auditId )\"\r\n               [queryParams]=\"returnUrl\" class=\"btn btn-sm btn-light\">\r\n              <i class=\"fa fa-search-plus\"></i>\r\n            </a>\r\n          </div>\r\n        </td>\r\n      </tr>\r\n      </tbody>\r\n    </table>\r\n    <div class=\"tbx-loader\" *ngIf=\"loading\"></div>\r\n  </div>\r\n</div>\r\n","import { Component, OnInit } from \"@angular/core\";\r\nimport { ActivatedRoute } from \"@angular/router\";\r\n\r\nimport { TbxAuditModel } from \"../audit.model\";\r\nimport { TbxAuditService } from \"../audit.service\";\r\n\r\nimport { dataNames, paramNames } from \"../audit.constants\";\r\n\r\n/**\r\n * The audit entry details component displayed when user navigation to /audit/details.\r\n */\r\n@Component( {\r\n  templateUrl: \"./audit-details.component.html\",\r\n  styleUrls: [\"./audit-details.component.scss\"],\r\n  standalone: false\r\n} )\r\nexport class TbxAuditDetailsComponent implements OnInit {\r\n  /** Indicates if we're displaying in delete mode. */\r\n  public deleteMode = false;\r\n\r\n  /** The project title based on the mode. */\r\n  public pageTitle: string;\r\n\r\n  /** The ID of the entry to display retrieved from the URL. */\r\n  public entryId = 0;\r\n\r\n  /** The audit entry to display retrieved from the server. */\r\n  public entry?: TbxAuditModel;\r\n\r\n  /** The return URL to navigate back to. */\r\n  public returnUrl: string;\r\n\r\n  /** The return URL to navigate back to from the audit list. */\r\n  public parentReturnUrl: string;\r\n\r\n  /** Any error message. */\r\n  public errorMessage: string | undefined = undefined;\r\n\r\n  public constructor(\r\n    route: ActivatedRoute,\r\n    private readonly auditService: TbxAuditService\r\n  ) {\r\n    // Determine if we need to display in delete mode (confirmation)\r\n    this.deleteMode = route.snapshot.data[dataNames.action] === dataNames.delete;\r\n    this.pageTitle =\r\n      this.deleteMode ? \"Delete Audit Trail Entry\" : \"Audit Entry Details\";\r\n\r\n    const id = route.snapshot.paramMap.get( paramNames.id );\r\n    if( id !== null ) {\r\n      this.entryId = +id;\r\n    }\r\n\r\n    // Get the return URL from the parameters\r\n    const ru = route.snapshot.queryParamMap.get( paramNames.returnUrl );\r\n    const pru = route.snapshot.queryParamMap.get( paramNames.parentUrl );\r\n\r\n    this.returnUrl = ru !== null ? ru : \"/\";\r\n    this.parentReturnUrl = pru !== null ? pru : \"/\";\r\n  }\r\n\r\n  public ngOnInit(): void {\r\n    this.loadAuditTrail();\r\n  }\r\n\r\n  public loadAuditTrail(): void {\r\n    if( this.entryId === 0 ) {\r\n      this.errorMessage = \"The ID of the entry to display was not specified in the URL.\";\r\n    }\r\n    else {\r\n      this.auditService\r\n          .getById( this.entryId )\r\n          .subscribe( {\r\n            next: entry => {\r\n              this.entry = entry;\r\n              this.errorMessage = undefined;\r\n            },\r\n            error: error =>\r\n              this.errorMessage = Boolean( error.message ) ? error.message : error\r\n          } );\r\n    }\r\n  }\r\n}\r\n","<section class=\"page-header\">\r\n  <h1>{{ pageTitle }}</h1>\r\n  <div class=\"ml-auto\" *ngIf=\"returnUrl\">\r\n    <a [routerLink]=\"returnUrl\" [queryParams]=\"{ ru: parentReturnUrl }\"\r\n       class=\"btn btn-outline-primary\">\r\n      <i class=\"fa fa-arrow-left\"></i>&nbsp; Back to Audit Trail\r\n    </a>\r\n  </div>\r\n</section>\r\n\r\n<div class=\"alert alert-danger\" *ngIf=\"errorMessage\">\r\n  {{ errorMessage }}\r\n</div>\r\n\r\n<div class=\"col-sm-10 offset-sm-1\">\r\n  <div class=\"tbx-panel\">\r\n    <div class=\"tbx-panel-header\">\r\n      <div *ngIf=\"!deleteMode\">Audit Trail Entry Details</div>\r\n      <h4 *ngIf=\"deleteMode\" style=\"color: red\">\r\n        Are you sure you want to delete this entry?\r\n      </h4>\r\n    </div>\r\n    <div class=\"tbx-panel-body\">\r\n      <div class=\"tbx-loader\" *ngIf=\"!entry && !errorMessage\"></div>\r\n      <table class=\"table\" *ngIf=\"entry\">\r\n        <thead>\r\n        </thead>\r\n        <tbody>\r\n        <tr>\r\n          <td style=\"width: 20%\"><strong>ID:</strong></td>\r\n          <td>{{ entry.auditId }}</td>\r\n        </tr>\r\n        <tr>\r\n          <td><strong>Date / Time:</strong></td>\r\n          <td>{{ entry.dateTime | date: \"MM/dd/yyyy hh:mm:ss a\" }}</td>\r\n        </tr>\r\n        <tr>\r\n          <td><strong>Transaction:</strong></td>\r\n          <td>{{ entry.transactionId }}</td>\r\n        </tr>\r\n        <tr>\r\n          <td><strong>Description:</strong></td>\r\n          <td>{{ entry.description }}</td>\r\n        </tr>\r\n        <tr>\r\n          <td><strong>Action:</strong></td>\r\n          <td>{{ entry.action }}</td>\r\n        </tr>\r\n        <tr>\r\n          <td><strong>Source:</strong></td>\r\n          <td>{{ entry.source }}</td>\r\n        </tr>\r\n        <tr>\r\n          <td><strong>Source ID:</strong></td>\r\n          <td>{{ entry.sourceId }}</td>\r\n        </tr>\r\n        <tr>\r\n          <td><strong>Entry By:</strong></td>\r\n          <td>{{ entry.userName }}</td>\r\n        </tr>\r\n        <tr>\r\n          <td><strong>Workstation:</strong></td>\r\n          <td>{{ entry.workstation }}</td>\r\n        </tr>\r\n        <tr *ngIf=\"entry.details\">\r\n          <td><strong>Details:</strong></td>\r\n          <td style=\"word-break: break-word;\">\r\n            <pre style=\"white-space: pre-wrap;\">{{ entry.details }}</pre>\r\n          </td>\r\n        </tr>\r\n        </tbody>\r\n      </table>\r\n    </div>\r\n  </div>\r\n</div>\r\n","import { NgModule } from \"@angular/core\";\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { HttpClientModule } from \"@angular/common/http\";\r\nimport { RouterModule, Routes } from \"@angular/router\";\r\n\r\nimport { TbxAuditListComponent    } from \"./list/audit-list.component\";\r\nimport { TbxAuditDetailsComponent } from \"./details/audit-details.component\";\r\n\r\nimport { routePaths, paramNames, dataNames } from \"./audit.constants\";\r\n\r\n/** The Audit feature module for the Router configuration. */\r\nexport const auditRoutes: Routes = [\r\n  {\r\n    path:      `${routePaths.details}/:${paramNames.id}`,\r\n    component: TbxAuditDetailsComponent,\r\n    data:      { action: dataNames.details, pageTitle: \"Audit Trail Entry\" }\r\n  },\r\n  {\r\n    path:      `${routePaths.delete}/:${paramNames.id}`,\r\n    component: TbxAuditDetailsComponent,\r\n    data:      { action: dataNames.delete, pageTitle: \"Delete Audit Trail Entry\" }\r\n  },\r\n  {\r\n    path:      `:${paramNames.source}/:${paramNames.sourceId}`,\r\n    pathMatch: \"full\",\r\n    component: TbxAuditListComponent,\r\n    data:      { action: dataNames.list, pageTitle: \"Audit Trail\" }\r\n  }\r\n];\r\n\r\n@NgModule( {\r\n  imports: [\r\n    CommonModule,\r\n    HttpClientModule,\r\n    RouterModule.forChild( auditRoutes )\r\n  ],\r\n  declarations: [\r\n    TbxAuditListComponent,\r\n    TbxAuditDetailsComponent,\r\n  ]\r\n} )\r\nexport class TbxAuditModule\r\n{\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i1","i2.TbxAuditRoutes","i3.TbxAuditService","i2.TbxAuditService","i3"],"mappings":"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"}