{"version":3,"file":"toolbox-workspace.mjs","sources":["../../../projects/toolbox/workspace/workspace.service.ts","../../../projects/toolbox/workspace/components/search/member-search.component.ts","../../../projects/toolbox/workspace/components/search/member-search.component.html","../../../projects/toolbox/workspace/workspace.module.ts","../../../projects/toolbox/workspace/toolbox-workspace.ts"],"sourcesContent":["import { Injectable } from \"@angular/core\";\r\nimport { HttpClient } from \"@angular/common/http\";\r\nimport { Observable } from \"rxjs\";\r\n\r\nimport { TbxMemberModel } from \"./member.model\";\r\nimport { TbxDocumentTypeModel } from \"./document-type.model\";\r\n\r\n/**\r\n * Retrieves member information from Workspace including IDs to assign to new documents\r\n * as a composite service to make it easier.\r\n */\r\n@Injectable( { providedIn: \"root\" } )\r\nexport class TbxWorkspaceService\r\n{\r\n  /** Gets the base URL to the ToolBox Workspace endpoint. */\r\n  public readonly baseUrl = \"api/ToolBox/Workspace\";\r\n\r\n  /**\r\n   * Initializes a new instance of the {@link TbxWorkspaceService} class.\r\n   * @param http The Angular HTTP client to call the backend server.\r\n   */\r\n  public constructor( private readonly http: HttpClient )\r\n  {\r\n  }\r\n\r\n  /**\r\n   * Gets member details by SSN from Workspace.\r\n   * @param ssn The member's social security to find.\r\n   * @returns The member details if found.\r\n   */\r\n  public findMemberBySsn( ssn: string ): Observable<TbxMemberModel>\r\n  {\r\n    const url = `${this.baseUrl}/members/ssn/${ssn}`;\r\n\r\n    return this.http.get<TbxMemberModel>( url );\r\n  }\r\n\r\n  /**\r\n   * Gets member details by SSN from Workspace.\r\n   * @param empNo The member's employee number to find.\r\n   * @returns The member details if found.\r\n   */\r\n  public findMemberByEmpNo( empNo: string ): Observable<TbxMemberModel>\r\n  {\r\n    const url = `${this.baseUrl}/members/empNo/${empNo}`;\r\n\r\n    return this.http.get<TbxMemberModel>( url );\r\n  }\r\n\r\n  /**\r\n   * Searches for members by name in Workspace.\r\n   * @param name The name of the member to search for.\r\n   * @returns The member details if found.\r\n   */\r\n  public searchMembers( name: string ): Observable<TbxMemberModel[]>\r\n  {\r\n    const url = `${this.baseUrl}/Members/Search/?name=${name}`;\r\n\r\n    return this.http.get<TbxMemberModel[]>( url );\r\n  }\r\n\r\n  /**\r\n   * Gets all the document types from Workspace.\r\n   *\r\n   * @returns All document types found.\r\n   */\r\n  public getDocumentTypes(): Observable<TbxDocumentTypeModel[]>\r\n  {\r\n    const url = `${this.baseUrl}/DocumentTypes`;\r\n\r\n    return this.http.get<TbxDocumentTypeModel[]>( url );\r\n  }\r\n\r\n  /**\r\n   * Gets the URL from where document types can be downloaded as CSV.\r\n   * @returns The document types URL.\r\n   */\r\n  public getDocumentTypesCsv(): string\r\n  {\r\n    return `${this.baseUrl}/DocumentTypesCsv`;\r\n  }\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { Component } from \"@angular/core\";\r\n\r\nimport { TbxWorkspaceService } from \"../../workspace.service\";\r\nimport { TbxMemberModel } from \"../../member.model\";\r\n\r\n/**\r\n * The MemberSearch component allows the user to search for members in Workspace/DB2\r\n * using various search criteria.\r\n */\r\n@Component( {\n    selector: \"tbx-member-search\",\n    templateUrl: \"./member-search.component.html\",\n    styleUrls: [\"./member-search.component.scss\"],\n    standalone: false\n} )\r\nexport class TbxMemberSearchComponent\r\n{\r\n  /** Gets or sets the members found during a search. */\r\n  public members!: TbxMemberModel[] | null;\r\n\r\n  /** Gets or sets the term to search for. */\r\n  public searchTerm = \"\";\r\n\r\n  /** Gets or sets a value indicating whether the search yielded results. */\r\n  public notFound = false;\r\n\r\n  /** Gets or sets a message to show when search yielded no results. */\r\n  public resultMessage = \"Perform a search to see results here.\";\r\n\r\n  /** Gets or sets the error message when performing a search. */\r\n  public errorMessage: string | null = null;\r\n\r\n  public constructor( private readonly workspaceService: TbxWorkspaceService )\r\n  {\r\n  }\r\n\r\n  /** Determines the type of search to perform. */\r\n  public search(): void\r\n  {\r\n    // Clear the search results, if any\r\n    this.members = null;\r\n    this.errorMessage = null;\r\n    this.notFound = false;\r\n    this.resultMessage = \"Searching. Please wait...\";\r\n\r\n    const strippedInput = this.searchTerm.replace( /\\D/g, \"\" );\r\n    if( strippedInput.length > 6 && strippedInput.length <= 9 )\r\n    {\r\n      this.findBySsn( strippedInput );\r\n    }\r\n    else if( strippedInput.length > 0 && strippedInput.length <= 6 )\r\n    {\r\n      this.findByEmpNo( strippedInput );\r\n    }\r\n    else\r\n    {\r\n      this.searchByName( this.searchTerm );\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Dispatches searching by SSN in Workspace.\r\n   * @param ssn The SSN for which to search.\r\n   */\r\n  private findBySsn( ssn: string ): void\r\n  {\r\n    this.workspaceService\r\n      .findMemberBySsn( ssn )\r\n      .subscribe( {\r\n        next: ( member: TbxMemberModel ) => this.handleMemberFound( member ),\r\n        error: ( error: any ) => this.handleFindError( error )\r\n      } );\r\n  }\r\n\r\n  /**\r\n   * Dispatches searching by employee number in Workspace.\r\n   * @param empNo The employee number to search.\r\n   */\r\n  private findByEmpNo( empNo: string ): void\r\n  {\r\n    this.workspaceService\r\n      .findMemberByEmpNo( empNo )\r\n      .subscribe( {\r\n        next: ( member: TbxMemberModel ) => this.handleMemberFound( member ),\r\n        error: ( error: any ) => this.handleFindError( error )\r\n      } );\r\n  }\r\n\r\n  /**\r\n   * Dispatches searching by first or last name in Workspace.\r\n   * @param name The member's name for which to search.\r\n   */\r\n  private searchByName( name: string ): void\r\n  {\r\n    this.workspaceService\r\n      .searchMembers( name.toUpperCase() )\r\n      .subscribe( {\r\n        next: ( members: TbxMemberModel[] ) =>\r\n        {\r\n          this.members = members;\r\n          this.resultMessage = `Found ${this.members.length} member(s)`;\r\n          this.notFound = this.members.length === 0;\r\n\r\n          if( this.members.length >= 100 )\r\n          {\r\n            this.resultMessage +=\r\n              \" (Only the first 100 members displayed - please refine your search)\";\r\n          }\r\n        },\r\n        error: ( error: any ) => this.errorMessage = error.message\r\n      } );\r\n\r\n  }\r\n\r\n  /**\r\n   * Display the member found during the search.\r\n   * @param member The found member details.\r\n   */\r\n  private handleMemberFound( member: TbxMemberModel ): void\r\n  {\r\n    this.members = [member];\r\n    this.resultMessage = `Found ${this.members.length} member.`;\r\n  }\r\n\r\n  /**\r\n   * Displays the appropriate information when a member is not found or error.\r\n   * @param error The error received from the server.\r\n   */\r\n  private handleFindError( error: any ): void\r\n  {\r\n    if( error?.statusCode === 404 )\r\n    {\r\n      this.resultMessage = error.error.error;\r\n      this.notFound = true;\r\n    }\r\n    else\r\n    {\r\n      this.errorMessage = error.message ?? \"An unexpected error has occurred.\";\r\n      this.resultMessage = \"\";\r\n    }\r\n  }\r\n}\r\n","<div id=\"member-search\">\r\n  <div class=\"alert alert-warning\" *ngIf=\"errorMessage\">\r\n    {{errorMessage}}\r\n  </div>\r\n  <form class=\"form-inline\" #f=\"ngForm\" (ngSubmit)=\" f.form.valid && search()\" novalidate>\r\n    <div class=\"search-group mb-2\">\r\n      <input class=\"form-control mr-sm-2 wd-md\" required autofocus type=\"text\"\r\n        name=\"searchTerm\" #searchInput=\"ngModel\" [(ngModel)]=\"searchTerm\"\r\n        placeholder=\"Search for members by SSN, Emp #, or name.\" />\r\n      <button class=\"btn btn-primary mr-sm-2\" type=\"submit\">\r\n        <i class=\"fa fa-search\"></i>\r\n        &nbsp; Search\r\n      </button>\r\n      <span class=\"invalid-feedback d-block\"\r\n        *ngIf=\"searchInput.touched && searchInput.invalid && searchInput.errors?.['required']\">\r\n        Please provide an SSN or name to search for.</span>\r\n    </div>\r\n  </form>\r\n  <div class=\"card card-default\">\r\n    <div class=\"card-header\">\r\n      <a href=\"#\" class=\"float-right\">\r\n        <em class=\"fa fa-sync\"></em>\r\n      </a>\r\n      Search Results\r\n    </div>\r\n    <div class=\"table-responsive\">\r\n      <table class=\"table table-striped table-hover\">\r\n        <thead>\r\n          <tr *ngIf=\"members\">\r\n            <th style=\"width: 1px;\"></th>\r\n            <th>SSN</th>\r\n            <th>Name</th>\r\n            <th>Address</th>\r\n          </tr>\r\n        </thead>\r\n        <tbody>\r\n          <tr *ngFor=\"let member of members;\">\r\n            <td><i class=\"fa fa-user\"></i></td>\r\n            <td>{{member.ssn}}</td>\r\n            <td>{{member.fullName}}</td>\r\n            <td>{{member.address}}</td>\r\n          </tr>\r\n          <tr class=\"text-center\" *ngIf=\"resultMessage\">\r\n            <td colspan=\"4\" [class.text-danger]=\"notFound\">{{resultMessage}}</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 { FormsModule } from \"@angular/forms\";\r\nimport { HttpClientModule } from \"@angular/common/http\";\r\n\r\nimport { TbxMemberSearchComponent } from \"./components/search/member-search.component\";\r\n\r\n@NgModule( {\r\n  declarations: [TbxMemberSearchComponent],\r\n  imports: [CommonModule, FormsModule, HttpClientModule],\r\n  exports: [TbxMemberSearchComponent]\r\n} )\r\nexport class TbxWorkspaceModule\r\n{\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.TbxWorkspaceService"],"mappings":"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"}