{ "pipes": [ { "name": "CapitalizePipe", "id": "pipe-CapitalizePipe-77e8181fc318d34f561ef330a4019ae0ab3b71e4a99ef679e6ab32345cda951a4961961152b8e29b2c9ee298b7d42701bfa9ad4ed2390d61fd7c94c213a02105", "file": "src/app/shared/pipes/capitalize.pipe.ts", "type": "pipe", "deprecated": false, "deprecationMessage": "", "description": "", "rawdescription": "\n", "properties": [], "methods": [ { "name": "transform", "args": [ { "name": "value", "type": "any", "deprecated": false, "deprecationMessage": "" } ], "optional": false, "returnType": "any", "typeParameters": [], "line": 6, "deprecated": false, "deprecationMessage": "", "jsdoctags": [ { "name": "value", "type": "any", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] } ], "ngname": "capitalize", "sourceCode": "import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'capitalize' })\nexport class CapitalizePipe implements PipeTransform {\n\n transform(value: any) {\n return typeof value === 'string' && value.charAt(0).toUpperCase() + value.slice(1) || value;\n }\n}\n" }, { "name": "TrimPipe", "id": "pipe-TrimPipe-5fc7c1a6d56cfb76dd6605f77ee2298c9509decaaeab9e9527071a761fffee11d521591e3194a213f9db5f914997af77cce6963aec4bf87cd85f93cfc4665704", "file": "src/app/shared/pipes/trim.pipe.ts", "type": "pipe", "deprecated": false, "deprecationMessage": "", "description": "", "rawdescription": "\n", "properties": [], "methods": [ { "name": "transform", "args": [ { "name": "value", "type": "any", "deprecated": false, "deprecationMessage": "" } ], "optional": false, "returnType": "any", "typeParameters": [], "line": 5, "deprecated": false, "deprecationMessage": "", "jsdoctags": [ { "name": "value", "type": "any", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] } ], "ngname": "trim", "sourceCode": "import {Pipe, PipeTransform} from '@angular/core';\n\n@Pipe({name: 'trim'})\nexport class TrimPipe implements PipeTransform {\n transform(value: any) {\n if (!value) {\n return '';\n }\n return value.trim();\n }\n}\n" } ], "interfaces": [ { "name": "IApiResponse", "id": "interface-IApiResponse-e438bbdb4fe2453206cd2a7f524078cf417ceb4f9276a9de071236951320220a072680af072c90413d1f856b8351119b161fdfecd0de91190a8cf0f3d7dc999a", "file": "src/app/shared/interfaces.ts", "deprecated": false, "deprecationMessage": "", "type": "interface", "sourceCode": "import { ModuleWithProviders } from '@angular/core';\nimport { Routes } from '@angular/router';\n\nexport interface ICustomer {\n id: number;\n firstName: string;\n lastName: string;\n gender: string;\n address: string;\n city: string;\n state: IState;\n orders?: IOrder[];\n orderTotal?: number;\n latitude?: number;\n longitude?: number;\n}\n\nexport interface IMapDataPoint {\n longitude: number;\n latitutde: number;\n markerText?: string;\n}\n\nexport interface IState {\n abbreviation: string;\n name: string;\n}\n\nexport interface IOrder {\n productName: string;\n itemCost: number;\n}\n\nexport interface IOrderItem {\n id: number;\n productName: string;\n itemCost: number;\n}\n\nexport interface IPagedResults {\n totalRecords: number;\n results: T;\n}\n\nexport interface IUserLogin {\n email: string;\n password: string;\n}\n\nexport interface IApiResponse {\n status: boolean;\n error?: string;\n}\n", "properties": [ { "name": "error", "deprecated": false, "deprecationMessage": "", "type": "string", "optional": true, "description": "", "line": 52 }, { "name": "status", "deprecated": false, "deprecationMessage": "", "type": "boolean", "optional": false, "description": "", "line": 51 } ], "indexSignatures": [], "kind": 165, "methods": [] }, { "name": "ICustomer", "id": "interface-ICustomer-e438bbdb4fe2453206cd2a7f524078cf417ceb4f9276a9de071236951320220a072680af072c90413d1f856b8351119b161fdfecd0de91190a8cf0f3d7dc999a", "file": "src/app/shared/interfaces.ts", "deprecated": false, "deprecationMessage": "", "type": "interface", "sourceCode": "import { ModuleWithProviders } from '@angular/core';\nimport { Routes } from '@angular/router';\n\nexport interface ICustomer {\n id: number;\n firstName: string;\n lastName: string;\n gender: string;\n address: string;\n city: string;\n state: IState;\n orders?: IOrder[];\n orderTotal?: number;\n latitude?: number;\n longitude?: number;\n}\n\nexport interface IMapDataPoint {\n longitude: number;\n latitutde: number;\n markerText?: string;\n}\n\nexport interface IState {\n abbreviation: string;\n name: string;\n}\n\nexport interface IOrder {\n productName: string;\n itemCost: number;\n}\n\nexport interface IOrderItem {\n id: number;\n productName: string;\n itemCost: number;\n}\n\nexport interface IPagedResults {\n totalRecords: number;\n results: T;\n}\n\nexport interface IUserLogin {\n email: string;\n password: string;\n}\n\nexport interface IApiResponse {\n status: boolean;\n error?: string;\n}\n", "properties": [ { "name": "address", "deprecated": false, "deprecationMessage": "", "type": "string", "optional": false, "description": "", "line": 9 }, { "name": "city", "deprecated": false, "deprecationMessage": "", "type": "string", "optional": false, "description": "", "line": 10 }, { "name": "firstName", "deprecated": false, "deprecationMessage": "", "type": "string", "optional": false, "description": "", "line": 6 }, { "name": "gender", "deprecated": false, "deprecationMessage": "", "type": "string", "optional": false, "description": "", "line": 8 }, { "name": "id", "deprecated": false, "deprecationMessage": "", "type": "number", "optional": false, "description": "", "line": 5 }, { "name": "lastName", "deprecated": false, "deprecationMessage": "", "type": "string", "optional": false, "description": "", "line": 7 }, { "name": "latitude", "deprecated": false, "deprecationMessage": "", "type": "number", "optional": true, "description": "", "line": 14 }, { "name": "longitude", "deprecated": false, "deprecationMessage": "", "type": "number", "optional": true, "description": "", "line": 15 }, { "name": "orders", "deprecated": false, "deprecationMessage": "", "type": "IOrder[]", "optional": true, "description": "", "line": 12 }, { "name": "orderTotal", "deprecated": false, "deprecationMessage": "", "type": "number", "optional": true, "description": "", "line": 13 }, { "name": "state", "deprecated": false, "deprecationMessage": "", "type": "IState", "optional": false, "description": "", "line": 11 } ], "indexSignatures": [], "kind": 165, "methods": [] }, { "name": "IMapDataPoint", "id": "interface-IMapDataPoint-e438bbdb4fe2453206cd2a7f524078cf417ceb4f9276a9de071236951320220a072680af072c90413d1f856b8351119b161fdfecd0de91190a8cf0f3d7dc999a", "file": "src/app/shared/interfaces.ts", "deprecated": false, "deprecationMessage": "", "type": "interface", "sourceCode": "import { ModuleWithProviders } from '@angular/core';\nimport { Routes } from '@angular/router';\n\nexport interface ICustomer {\n id: number;\n firstName: string;\n lastName: string;\n gender: string;\n address: string;\n city: string;\n state: IState;\n orders?: IOrder[];\n orderTotal?: number;\n latitude?: number;\n longitude?: number;\n}\n\nexport interface IMapDataPoint {\n longitude: number;\n latitutde: number;\n markerText?: string;\n}\n\nexport interface IState {\n abbreviation: string;\n name: string;\n}\n\nexport interface IOrder {\n productName: string;\n itemCost: number;\n}\n\nexport interface IOrderItem {\n id: number;\n productName: string;\n itemCost: number;\n}\n\nexport interface IPagedResults {\n totalRecords: number;\n results: T;\n}\n\nexport interface IUserLogin {\n email: string;\n password: string;\n}\n\nexport interface IApiResponse {\n status: boolean;\n error?: string;\n}\n", "properties": [ { "name": "latitutde", "deprecated": false, "deprecationMessage": "", "type": "number", "optional": false, "description": "", "line": 20 }, { "name": "longitude", "deprecated": false, "deprecationMessage": "", "type": "number", "optional": false, "description": "", "line": 19 }, { "name": "markerText", "deprecated": false, "deprecationMessage": "", "type": "string", "optional": true, "description": "", "line": 21 } ], "indexSignatures": [], "kind": 165, "methods": [] }, { "name": "IModalContent", "id": "interface-IModalContent-936b74fdaaf3d605f1d258329b92f68d126a1e02f6b3fddb1148a1c28b7b815022a18f91068ffeee08bb99fb6340eb1439706e92f8f971c1583717b110b3379a", "file": "src/app/core/modal/modal.service.ts", "deprecated": false, "deprecationMessage": "", "type": "interface", "sourceCode": "import { Injectable } from '@angular/core';\nimport { ModalComponent } from './modal.component';\n\nexport interface IModalContent {\n header?: string;\n body?: string;\n cancelButtonText?: string;\n OKButtonText?: string;\n cancelButtonVisible?: boolean;\n}\n\n@Injectable()\nexport class ModalService {\n\n constructor() { }\n\n show: (modalContent: IModalContent) => Promise = () => { return {} as Promise; };\n hide: () => void = () => {};\n\n}\n", "properties": [ { "name": "body", "deprecated": false, "deprecationMessage": "", "type": "string", "optional": true, "description": "", "line": 6 }, { "name": "cancelButtonText", "deprecated": false, "deprecationMessage": "", "type": "string", "optional": true, "description": "", "line": 7 }, { "name": "cancelButtonVisible", "deprecated": false, "deprecationMessage": "", "type": "boolean", "optional": true, "description": "", "line": 9 }, { "name": "header", "deprecated": false, "deprecationMessage": "", "type": "string", "optional": true, "description": "", "line": 5 }, { "name": "OKButtonText", "deprecated": false, "deprecationMessage": "", "type": "string", "optional": true, "description": "", "line": 8 } ], "indexSignatures": [], "kind": 165, "methods": [] }, { "name": "IOrder", "id": "interface-IOrder-e438bbdb4fe2453206cd2a7f524078cf417ceb4f9276a9de071236951320220a072680af072c90413d1f856b8351119b161fdfecd0de91190a8cf0f3d7dc999a", "file": "src/app/shared/interfaces.ts", "deprecated": false, "deprecationMessage": "", "type": "interface", "sourceCode": "import { ModuleWithProviders } from '@angular/core';\nimport { Routes } from '@angular/router';\n\nexport interface ICustomer {\n id: number;\n firstName: string;\n lastName: string;\n gender: string;\n address: string;\n city: string;\n state: IState;\n orders?: IOrder[];\n orderTotal?: number;\n latitude?: number;\n longitude?: number;\n}\n\nexport interface IMapDataPoint {\n longitude: number;\n latitutde: number;\n markerText?: string;\n}\n\nexport interface IState {\n abbreviation: string;\n name: string;\n}\n\nexport interface IOrder {\n productName: string;\n itemCost: number;\n}\n\nexport interface IOrderItem {\n id: number;\n productName: string;\n itemCost: number;\n}\n\nexport interface IPagedResults {\n totalRecords: number;\n results: T;\n}\n\nexport interface IUserLogin {\n email: string;\n password: string;\n}\n\nexport interface IApiResponse {\n status: boolean;\n error?: string;\n}\n", "properties": [ { "name": "itemCost", "deprecated": false, "deprecationMessage": "", "type": "number", "optional": false, "description": "", "line": 31 }, { "name": "productName", "deprecated": false, "deprecationMessage": "", "type": "string", "optional": false, "description": "", "line": 30 } ], "indexSignatures": [], "kind": 165, "methods": [] }, { "name": "IOrderItem", "id": "interface-IOrderItem-e438bbdb4fe2453206cd2a7f524078cf417ceb4f9276a9de071236951320220a072680af072c90413d1f856b8351119b161fdfecd0de91190a8cf0f3d7dc999a", "file": "src/app/shared/interfaces.ts", "deprecated": false, "deprecationMessage": "", "type": "interface", "sourceCode": "import { ModuleWithProviders } from '@angular/core';\nimport { Routes } from '@angular/router';\n\nexport interface ICustomer {\n id: number;\n firstName: string;\n lastName: string;\n gender: string;\n address: string;\n city: string;\n state: IState;\n orders?: IOrder[];\n orderTotal?: number;\n latitude?: number;\n longitude?: number;\n}\n\nexport interface IMapDataPoint {\n longitude: number;\n latitutde: number;\n markerText?: string;\n}\n\nexport interface IState {\n abbreviation: string;\n name: string;\n}\n\nexport interface IOrder {\n productName: string;\n itemCost: number;\n}\n\nexport interface IOrderItem {\n id: number;\n productName: string;\n itemCost: number;\n}\n\nexport interface IPagedResults {\n totalRecords: number;\n results: T;\n}\n\nexport interface IUserLogin {\n email: string;\n password: string;\n}\n\nexport interface IApiResponse {\n status: boolean;\n error?: string;\n}\n", "properties": [ { "name": "id", "deprecated": false, "deprecationMessage": "", "type": "number", "optional": false, "description": "", "line": 35 }, { "name": "itemCost", "deprecated": false, "deprecationMessage": "", "type": "number", "optional": false, "description": "", "line": 37 }, { "name": "productName", "deprecated": false, "deprecationMessage": "", "type": "string", "optional": false, "description": "", "line": 36 } ], "indexSignatures": [], "kind": 165, "methods": [] }, { "name": "IPagedResults", "id": "interface-IPagedResults-e438bbdb4fe2453206cd2a7f524078cf417ceb4f9276a9de071236951320220a072680af072c90413d1f856b8351119b161fdfecd0de91190a8cf0f3d7dc999a", "file": "src/app/shared/interfaces.ts", "deprecated": false, "deprecationMessage": "", "type": "interface", "sourceCode": "import { ModuleWithProviders } from '@angular/core';\nimport { Routes } from '@angular/router';\n\nexport interface ICustomer {\n id: number;\n firstName: string;\n lastName: string;\n gender: string;\n address: string;\n city: string;\n state: IState;\n orders?: IOrder[];\n orderTotal?: number;\n latitude?: number;\n longitude?: number;\n}\n\nexport interface IMapDataPoint {\n longitude: number;\n latitutde: number;\n markerText?: string;\n}\n\nexport interface IState {\n abbreviation: string;\n name: string;\n}\n\nexport interface IOrder {\n productName: string;\n itemCost: number;\n}\n\nexport interface IOrderItem {\n id: number;\n productName: string;\n itemCost: number;\n}\n\nexport interface IPagedResults {\n totalRecords: number;\n results: T;\n}\n\nexport interface IUserLogin {\n email: string;\n password: string;\n}\n\nexport interface IApiResponse {\n status: boolean;\n error?: string;\n}\n", "properties": [ { "name": "results", "deprecated": false, "deprecationMessage": "", "type": "T", "optional": false, "description": "", "line": 42 }, { "name": "totalRecords", "deprecated": false, "deprecationMessage": "", "type": "number", "optional": false, "description": "", "line": 41 } ], "indexSignatures": [], "kind": 165, "methods": [] }, { "name": "IState", "id": "interface-IState-e438bbdb4fe2453206cd2a7f524078cf417ceb4f9276a9de071236951320220a072680af072c90413d1f856b8351119b161fdfecd0de91190a8cf0f3d7dc999a", "file": "src/app/shared/interfaces.ts", "deprecated": false, "deprecationMessage": "", "type": "interface", "sourceCode": "import { ModuleWithProviders } from '@angular/core';\nimport { Routes } from '@angular/router';\n\nexport interface ICustomer {\n id: number;\n firstName: string;\n lastName: string;\n gender: string;\n address: string;\n city: string;\n state: IState;\n orders?: IOrder[];\n orderTotal?: number;\n latitude?: number;\n longitude?: number;\n}\n\nexport interface IMapDataPoint {\n longitude: number;\n latitutde: number;\n markerText?: string;\n}\n\nexport interface IState {\n abbreviation: string;\n name: string;\n}\n\nexport interface IOrder {\n productName: string;\n itemCost: number;\n}\n\nexport interface IOrderItem {\n id: number;\n productName: string;\n itemCost: number;\n}\n\nexport interface IPagedResults {\n totalRecords: number;\n results: T;\n}\n\nexport interface IUserLogin {\n email: string;\n password: string;\n}\n\nexport interface IApiResponse {\n status: boolean;\n error?: string;\n}\n", "properties": [ { "name": "abbreviation", "deprecated": false, "deprecationMessage": "", "type": "string", "optional": false, "description": "", "line": 25 }, { "name": "name", "deprecated": false, "deprecationMessage": "", "type": "string", "optional": false, "description": "", "line": 26 } ], "indexSignatures": [], "kind": 165, "methods": [] }, { "name": "IUserLogin", "id": "interface-IUserLogin-e438bbdb4fe2453206cd2a7f524078cf417ceb4f9276a9de071236951320220a072680af072c90413d1f856b8351119b161fdfecd0de91190a8cf0f3d7dc999a", "file": "src/app/shared/interfaces.ts", "deprecated": false, "deprecationMessage": "", "type": "interface", "sourceCode": "import { ModuleWithProviders } from '@angular/core';\nimport { Routes } from '@angular/router';\n\nexport interface ICustomer {\n id: number;\n firstName: string;\n lastName: string;\n gender: string;\n address: string;\n city: string;\n state: IState;\n orders?: IOrder[];\n orderTotal?: number;\n latitude?: number;\n longitude?: number;\n}\n\nexport interface IMapDataPoint {\n longitude: number;\n latitutde: number;\n markerText?: string;\n}\n\nexport interface IState {\n abbreviation: string;\n name: string;\n}\n\nexport interface IOrder {\n productName: string;\n itemCost: number;\n}\n\nexport interface IOrderItem {\n id: number;\n productName: string;\n itemCost: number;\n}\n\nexport interface IPagedResults {\n totalRecords: number;\n results: T;\n}\n\nexport interface IUserLogin {\n email: string;\n password: string;\n}\n\nexport interface IApiResponse {\n status: boolean;\n error?: string;\n}\n", "properties": [ { "name": "email", "deprecated": false, "deprecationMessage": "", "type": "string", "optional": false, "description": "", "line": 46 }, { "name": "password", "deprecated": false, "deprecationMessage": "", "type": "string", "optional": false, "description": "", "line": 47 } ], "indexSignatures": [], "kind": 165, "methods": [] }, { "name": "User", "id": "interface-User-9c7e5f1bbbab702cb032307d130876cb68969b0cd4eedef32a0c8cad8081a54e5f8f577ed6ad4539c1b99a1d246cb34031d198c2ea8eba440e64e91b14f01fdc", "file": "src/stories/User.ts", "deprecated": false, "deprecationMessage": "", "type": "interface", "sourceCode": "export interface User {}\n", "properties": [], "indexSignatures": [], "methods": [] } ], "injectables": [ { "name": "AuthService", "id": "injectable-AuthService-200163aa207b432798031585907e81b04c821ed7fe174c22831be450a3c8abe7aaf0873ad8e70b6220ad0f319584d5c81e4f08d27b8c761a55185d25ff159c62", "file": "src/app/core/services/auth.service.ts", "properties": [ { "name": "authUrl", "defaultValue": "this.baseUrl + '/api/auth'", "deprecated": false, "deprecationMessage": "", "type": "", "optional": false, "description": "", "line": 13 }, { "name": "baseUrl", "defaultValue": "this.utilitiesService.getApiUrl()", "deprecated": false, "deprecationMessage": "", "type": "", "optional": false, "description": "", "line": 12 }, { "name": "isAuthenticated", "defaultValue": "false", "deprecated": false, "deprecationMessage": "", "type": "", "optional": false, "description": "", "line": 14 }, { "name": "redirectUrl", "defaultValue": "''", "deprecated": false, "deprecationMessage": "", "type": "string", "optional": false, "description": "", "line": 15 } ], "methods": [ { "name": "handleError", "args": [ { "name": "error", "type": "HttpErrorResponse", "deprecated": false, "deprecationMessage": "" } ], "optional": false, "returnType": "any", "typeParameters": [], "line": 48, "deprecated": false, "deprecationMessage": "", "modifierKind": [ 121 ], "jsdoctags": [ { "name": "error", "type": "HttpErrorResponse", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] }, { "name": "login", "args": [ { "name": "userLogin", "type": "IUserLogin", "deprecated": false, "deprecationMessage": "" } ], "optional": false, "returnType": "Observable", "typeParameters": [], "line": 24, "deprecated": false, "deprecationMessage": "", "jsdoctags": [ { "name": "userLogin", "type": "IUserLogin", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] }, { "name": "logout", "args": [], "optional": false, "returnType": "Observable", "typeParameters": [], "line": 36, "deprecated": false, "deprecationMessage": "" }, { "name": "userAuthChanged", "args": [ { "name": "status", "type": "boolean", "deprecated": false, "deprecationMessage": "" } ], "optional": false, "returnType": "void", "typeParameters": [], "line": 20, "deprecated": false, "deprecationMessage": "", "modifierKind": [ 121 ], "jsdoctags": [ { "name": "status", "type": "boolean", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] } ], "deprecated": false, "deprecationMessage": "", "description": "", "rawdescription": "\n", "sourceCode": "import { Injectable, Output, EventEmitter, Inject, Directive } from '@angular/core';\nimport { HttpClient, HttpErrorResponse } from '@angular/common/http';\n\nimport { Observable, throwError } from 'rxjs';\nimport { map, catchError } from 'rxjs/operators';\n\nimport { IUserLogin } from '../../shared/interfaces';\nimport { UtilitiesService } from './utilities.service';\n\n@Injectable()\nexport class AuthService {\n baseUrl = this.utilitiesService.getApiUrl();\n authUrl = this.baseUrl + '/api/auth';\n isAuthenticated = false;\n redirectUrl: string = '';\n @Output() authChanged: EventEmitter = new EventEmitter();\n\n constructor(private http: HttpClient, private utilitiesService: UtilitiesService) { }\n\n private userAuthChanged(status: boolean) {\n this.authChanged.emit(status); // Raise changed event\n }\n\n login(userLogin: IUserLogin): Observable {\n return this.http.post(this.authUrl + '/login', userLogin)\n .pipe(\n map(loggedIn => {\n this.isAuthenticated = loggedIn;\n this.userAuthChanged(loggedIn);\n return loggedIn;\n }),\n catchError(this.handleError)\n );\n }\n\n logout(): Observable {\n return this.http.post(this.authUrl + '/logout', null)\n .pipe(\n map(loggedOut => {\n this.isAuthenticated = !loggedOut;\n this.userAuthChanged(!loggedOut); // Return loggedIn status\n return loggedOut;\n }),\n catchError(this.handleError)\n );\n }\n\n private handleError(error: HttpErrorResponse) {\n console.error('server error:', error);\n if (error.error instanceof Error) {\n const errMessage = error.error.message;\n return throwError(() => errMessage);\n // return Observable.throw(err.text() || 'backend server error');\n }\n return throwError(() => error || 'Server error');\n }\n\n}\n", "constructorObj": { "name": "constructor", "description": "", "deprecated": false, "deprecationMessage": "", "args": [ { "name": "http", "type": "HttpClient", "deprecated": false, "deprecationMessage": "" }, { "name": "utilitiesService", "type": "UtilitiesService", "deprecated": false, "deprecationMessage": "" } ], "line": 16, "jsdoctags": [ { "name": "http", "type": "HttpClient", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } }, { "name": "utilitiesService", "type": "UtilitiesService", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] }, "type": "injectable" }, { "name": "DataService", "id": "injectable-DataService-f4792b4c79a487ce89768fb18a1fa76c969a48c586a86d2245bba51ce079452cdb898a91a9b3e79faa0bc459aaf941acf258e5385c775e380c3b52fc26ad1798", "file": "src/app/core/services/data.service.ts", "properties": [ { "name": "baseUrl", "defaultValue": "this.utilitiesService.getApiUrl()", "deprecated": false, "deprecationMessage": "", "type": "", "optional": false, "description": "", "line": 12 }, { "name": "customersBaseUrl", "defaultValue": "this.baseUrl + '/api/customers'", "deprecated": false, "deprecationMessage": "", "type": "", "optional": false, "description": "", "line": 13 }, { "name": "orders", "defaultValue": "[]", "deprecated": false, "deprecationMessage": "", "type": "IOrder[]", "optional": false, "description": "", "line": 15 }, { "name": "ordersBaseUrl", "defaultValue": "this.baseUrl + '/api/orders'", "deprecated": false, "deprecationMessage": "", "type": "", "optional": false, "description": "", "line": 14 }, { "name": "states", "defaultValue": "[]", "deprecated": false, "deprecationMessage": "", "type": "IState[]", "optional": false, "description": "", "line": 16 } ], "methods": [ { "name": "calculateCustomersOrderTotal", "args": [ { "name": "customers", "type": "ICustomer[]", "deprecated": false, "deprecationMessage": "" } ], "optional": false, "returnType": "void", "typeParameters": [], "line": 98, "deprecated": false, "deprecationMessage": "", "jsdoctags": [ { "name": "customers", "type": "ICustomer[]", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] }, { "name": "deleteCustomer", "args": [ { "name": "id", "type": "number", "deprecated": false, "deprecationMessage": "" } ], "optional": false, "returnType": "Observable", "typeParameters": [], "line": 74, "deprecated": false, "deprecationMessage": "", "jsdoctags": [ { "name": "id", "type": "number", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] }, { "name": "getCustomer", "args": [ { "name": "id", "type": "number", "deprecated": false, "deprecationMessage": "" } ], "optional": false, "returnType": "Observable", "typeParameters": [], "line": 50, "deprecated": false, "deprecationMessage": "", "jsdoctags": [ { "name": "id", "type": "number", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] }, { "name": "getCustomers", "args": [], "optional": false, "returnType": "Observable", "typeParameters": [], "line": 39, "deprecated": false, "deprecationMessage": "" }, { "name": "getCustomersPage", "args": [ { "name": "page", "type": "number", "deprecated": false, "deprecationMessage": "" }, { "name": "pageSize", "type": "number", "deprecated": false, "deprecationMessage": "" } ], "optional": false, "returnType": "Observable>", "typeParameters": [], "line": 20, "deprecated": false, "deprecationMessage": "", "jsdoctags": [ { "name": "page", "type": "number", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } }, { "name": "pageSize", "type": "number", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] }, { "name": "getStates", "args": [], "optional": false, "returnType": "Observable", "typeParameters": [], "line": 82, "deprecated": false, "deprecationMessage": "" }, { "name": "handleError", "args": [ { "name": "error", "type": "HttpErrorResponse", "deprecated": false, "deprecationMessage": "" } ], "optional": false, "returnType": "any", "typeParameters": [], "line": 87, "deprecated": false, "deprecationMessage": "", "modifierKind": [ 121 ], "jsdoctags": [ { "name": "error", "type": "HttpErrorResponse", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] }, { "name": "insertCustomer", "args": [ { "name": "customer", "type": "ICustomer", "deprecated": false, "deprecationMessage": "" } ], "optional": false, "returnType": "Observable", "typeParameters": [], "line": 61, "deprecated": false, "deprecationMessage": "", "jsdoctags": [ { "name": "customer", "type": "ICustomer", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] }, { "name": "updateCustomer", "args": [ { "name": "customer", "type": "ICustomer", "deprecated": false, "deprecationMessage": "" } ], "optional": false, "returnType": "Observable", "typeParameters": [], "line": 66, "deprecated": false, "deprecationMessage": "", "jsdoctags": [ { "name": "customer", "type": "ICustomer", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] } ], "deprecated": false, "deprecationMessage": "", "description": "", "rawdescription": "\n", "sourceCode": "import { Injectable } from '@angular/core';\nimport { HttpClient, HttpErrorResponse } from '@angular/common/http';\n\nimport { Observable, throwError } from 'rxjs';\nimport { map, catchError } from 'rxjs/operators';\n\nimport { ICustomer, IOrder, IState, IPagedResults, IApiResponse } from '../../shared/interfaces';\nimport { UtilitiesService } from './utilities.service';\n\n@Injectable()\nexport class DataService {\n baseUrl = this.utilitiesService.getApiUrl();\n customersBaseUrl = this.baseUrl + '/api/customers';\n ordersBaseUrl = this.baseUrl + '/api/orders';\n orders: IOrder[] = [];\n states: IState[] = [];\n\n constructor(private http: HttpClient, private utilitiesService: UtilitiesService) { }\n\n getCustomersPage(page: number, pageSize: number): Observable> {\n return this.http.get(\n `${this.customersBaseUrl}/page/${page}/${pageSize}`,\n { observe: 'response' })\n .pipe(\n map(res => {\n const xInlineCount = res.headers.get('X-InlineCount');\n const totalRecords = Number(xInlineCount);\n const customers = res.body as ICustomer[];\n this.calculateCustomersOrderTotal(customers);\n return {\n results: customers,\n totalRecords: totalRecords\n };\n }),\n catchError(this.handleError)\n );\n }\n\n getCustomers(): Observable {\n return this.http.get(this.customersBaseUrl)\n .pipe(\n map(customers => {\n this.calculateCustomersOrderTotal(customers);\n return customers;\n }),\n catchError(this.handleError)\n );\n }\n\n getCustomer(id: number): Observable {\n return this.http.get(this.customersBaseUrl + '/' + id)\n .pipe(\n map(customer => {\n this.calculateCustomersOrderTotal([customer]);\n return customer;\n }),\n catchError(this.handleError)\n );\n }\n\n insertCustomer(customer: ICustomer): Observable {\n return this.http.post(this.customersBaseUrl, customer)\n .pipe(catchError(this.handleError));\n }\n\n updateCustomer(customer: ICustomer): Observable {\n return this.http.put(this.customersBaseUrl + '/' + customer.id, customer)\n .pipe(\n map(res => res.status),\n catchError(this.handleError)\n );\n }\n\n deleteCustomer(id: number): Observable {\n return this.http.delete(this.customersBaseUrl + '/' + id)\n .pipe(\n map(res => res.status),\n catchError(this.handleError)\n );\n }\n\n getStates(): Observable {\n return this.http.get(this.baseUrl + '/api/states')\n .pipe(catchError(this.handleError));\n }\n\n private handleError(error: HttpErrorResponse) {\n console.error('server error:', error);\n if (error.error instanceof Error) {\n const errMessage = error.error.message;\n return throwError(() => errMessage);\n // Use the following instead if using lite-server\n // return Observable.throw(err.text() || 'backend server error');\n }\n return throwError(() => error || 'Node.js server error');\n }\n\n calculateCustomersOrderTotal(customers: ICustomer[]) {\n for (const customer of customers) {\n if (customer && customer.orders) {\n let total = 0;\n for (const order of customer.orders) {\n total += order.itemCost;\n }\n customer.orderTotal = total;\n }\n }\n }\n\n // Not using now but leaving since they show how to create\n // and work with custom observables\n\n // Would need following import added:\n // import { Observer } from 'rxjs';\n\n // createObservable(data: any): Observable {\n // return Observable.create((observer: Observer) => {\n // observer.next(data);\n // observer.complete();\n // });\n // }\n \n\n}\n", "constructorObj": { "name": "constructor", "description": "", "deprecated": false, "deprecationMessage": "", "args": [ { "name": "http", "type": "HttpClient", "deprecated": false, "deprecationMessage": "" }, { "name": "utilitiesService", "type": "UtilitiesService", "deprecated": false, "deprecationMessage": "" } ], "line": 16, "jsdoctags": [ { "name": "http", "type": "HttpClient", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } }, { "name": "utilitiesService", "type": "UtilitiesService", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] }, "type": "injectable" }, { "name": "DialogService", "id": "injectable-DialogService-3bb4c252708dc41b02cfaec47711fcb523827ab5d7423b21779733508eb33ca1a8924ebdf36aae2b6516f2a54b58cd811ef9a4febf569fd4bcc1571165a7bc7c", "file": "src/app/core/services/dialog.service.ts", "properties": [ { "name": "message", "defaultValue": "'Is it OK?'", "deprecated": false, "deprecationMessage": "", "type": "string", "optional": false, "description": "", "line": 7 }, { "name": "promise", "defaultValue": "{} as Promise", "deprecated": false, "deprecationMessage": "", "type": "Promise", "optional": false, "description": "", "line": 6 } ], "methods": [ { "name": "confirm", "args": [ { "name": "message", "type": "string", "deprecated": false, "deprecationMessage": "", "optional": true } ], "optional": false, "returnType": "Promise", "typeParameters": [], "line": 9, "deprecated": false, "deprecationMessage": "", "jsdoctags": [ { "name": "message", "type": "string", "deprecated": false, "deprecationMessage": "", "optional": true, "tagName": { "text": "param" } } ] }, { "name": "resolver", "args": [ { "name": "resolve", "type": "any", "deprecated": false, "deprecationMessage": "" } ], "optional": false, "returnType": "any", "typeParameters": [], "line": 15, "deprecated": false, "deprecationMessage": "", "jsdoctags": [ { "name": "resolve", "type": "any", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] } ], "deprecated": false, "deprecationMessage": "", "description": "", "rawdescription": "\n", "sourceCode": "import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class DialogService {\n\n promise: Promise = {} as Promise;\n message = 'Is it OK?';\n\n confirm(message?: string) {\n if (message) { this.message = message; }\n this.promise = new Promise(this.resolver);\n return this.promise;\n }\n\n resolver(resolve: any) {\n return resolve(window.confirm('Is it OK?'));\n }\n\n}\n", "type": "injectable" }, { "name": "EventBusService", "id": "injectable-EventBusService-9c7b561e0e2116da23c54c08ee76ea2c8318ad31d705df23f0d544faac45864c183a333dd3e073a25793c3899e205b19d0e7c6cb456c722cae75194fa517cd69", "file": "src/app/core/services/event-bus.service.ts", "properties": [ { "name": "subject", "defaultValue": "new Subject()", "deprecated": false, "deprecationMessage": "", "type": "", "optional": false, "description": "", "line": 8 } ], "methods": [ { "name": "emit", "args": [ { "name": "event", "type": "EmitEvent", "deprecated": false, "deprecationMessage": "" } ], "optional": false, "returnType": "void", "typeParameters": [], "line": 25, "deprecated": false, "deprecationMessage": "", "jsdoctags": [ { "name": "event", "type": "EmitEvent", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] }, { "name": "on", "args": [ { "name": "event", "type": "Events", "deprecated": false, "deprecationMessage": "" }, { "name": "action", "type": "any", "deprecated": false, "deprecationMessage": "" } ], "optional": false, "returnType": "Subscription", "typeParameters": [], "line": 12, "deprecated": false, "deprecationMessage": "", "jsdoctags": [ { "name": "event", "type": "Events", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } }, { "name": "action", "type": "any", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] } ], "deprecated": false, "deprecationMessage": "", "description": "", "rawdescription": "\n", "sourceCode": "import { Injectable } from '@angular/core';\nimport { Subject, Subscription, Observable } from 'rxjs';\nimport { filter, map } from 'rxjs/operators';\n\n@Injectable()\nexport class EventBusService {\n\n subject = new Subject();\n\n constructor() { }\n\n on(event: Events, action: any): Subscription {\n return this.subject\n .pipe(\n filter((e: EmitEvent) => {\n return e.name === event;\n }),\n map((e: EmitEvent) => {\n return e.value;\n })\n )\n .subscribe(action);\n }\n\n emit(event: EmitEvent) {\n this.subject.next(event);\n }\n}\n\nexport class EmitEvent {\n\n constructor(public name: any, public value?: any) { }\n\n}\n\nexport enum Events {\n httpRequest,\n httpResponse\n}\n", "constructorObj": { "name": "constructor", "description": "", "deprecated": false, "deprecationMessage": "", "args": [], "line": 8 }, "type": "injectable" }, { "name": "FilterService", "id": "injectable-FilterService-7b23a479dd7cadb7a1663c8314ef5f87326dd5b35b767ea25cc0cc18fce88d685ba95dccda26617b23a8cde4a89c8c529f6ba3463de3564f3160398352b284ab", "file": "src/app/core/services/filter.service.ts", "properties": [], "methods": [ { "name": "filter", "args": [ { "name": "items", "type": "T[]", "deprecated": false, "deprecationMessage": "" }, { "name": "data", "type": "string", "deprecated": false, "deprecationMessage": "" }, { "name": "props", "type": "string[]", "deprecated": false, "deprecationMessage": "" } ], "optional": false, "returnType": "any", "typeParameters": [ "T" ], "line": 10, "deprecated": false, "deprecationMessage": "", "jsdoctags": [ { "name": "items", "type": "T[]", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } }, { "name": "data", "type": "string", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } }, { "name": "props", "type": "string[]", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] } ], "deprecated": false, "deprecationMessage": "", "description": "", "rawdescription": "\n", "sourceCode": "import { Injectable } from '@angular/core';\n\nimport { PropertyResolver } from '../../core/services/property-resolver';\n\n@Injectable()\nexport class FilterService {\n\n constructor() { }\n\n filter(items: T[], data: string, props: string[]) {\n return items.filter((item: T) => {\n let match = false;\n for (const prop of props) {\n if (prop.indexOf('.') > -1) {\n const value = PropertyResolver.resolve(prop, item);\n if (value && value.toUpperCase().indexOf(data) > -1) {\n match = true;\n break;\n }\n continue;\n }\n\n if ((item as any)[prop].toString().toUpperCase().indexOf(data) > -1) {\n match = true;\n break;\n }\n }\n return match;\n });\n }\n\n}\n", "constructorObj": { "name": "constructor", "description": "", "deprecated": false, "deprecationMessage": "", "args": [], "line": 6 }, "type": "injectable" }, { "name": "GrowlerService", "id": "injectable-GrowlerService-8b77dd919c477d27b1a41238443f396d97ed8bd8dc01e016985defc48b62217bb7654b0be5e7394379fae0f8148eebaec8c6b1e04ad1405fe26cf5158cf8308c", "file": "src/app/core/growler/growler.service.ts", "properties": [ { "name": "growl", "defaultValue": "() => {...}", "deprecated": false, "deprecationMessage": "", "type": "function", "optional": false, "description": "", "line": 8 } ], "methods": [], "deprecated": false, "deprecationMessage": "", "description": "", "rawdescription": "\n", "sourceCode": "import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class GrowlerService {\n\n constructor() { }\n\n growl: (message: string, growlType: GrowlerMessageType) => number = () => 0;\n\n}\n\nexport enum GrowlerMessageType {\n Success,\n Danger,\n Warning,\n Info\n}\n", "constructorObj": { "name": "constructor", "description": "", "deprecated": false, "deprecationMessage": "", "args": [], "line": 4 }, "type": "injectable" }, { "name": "LoggerService", "id": "injectable-LoggerService-cdf70ace6f1d77e5fb658aa8dc4527e0fbc6e0b1e3741bef8749322614cbbffc248156ba0e8e927e9fe4fde8a0f70d4ed5777fd5cda3c15cae69cd37395f19f2", "file": "src/app/core/services/logger.service.ts", "properties": [], "methods": [ { "name": "log", "args": [ { "name": "msg", "type": "string", "deprecated": false, "deprecationMessage": "" } ], "optional": false, "returnType": "void", "typeParameters": [], "line": 11, "deprecated": false, "deprecationMessage": "", "jsdoctags": [ { "name": "msg", "type": "string", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] }, { "name": "logError", "args": [ { "name": "msg", "type": "string", "deprecated": false, "deprecationMessage": "" } ], "optional": false, "returnType": "void", "typeParameters": [], "line": 21, "deprecated": false, "deprecationMessage": "", "jsdoctags": [ { "name": "msg", "type": "string", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] } ], "deprecated": false, "deprecationMessage": "", "description": "", "rawdescription": "\n", "sourceCode": "import { Injectable } from '@angular/core';\nimport { environment } from '../../../environments/environment';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LoggerService {\n\n constructor() { }\n\n log(msg: string) {\n if (!environment.production) {\n console.log(msg);\n }\n else {\n // AppInsights\n }\n\n }\n\n logError(msg: string) {\n if (!environment.production) {\n console.error(msg);\n }\n else {\n // AppInsights\n }\n\n }\n\n}\n", "constructorObj": { "name": "constructor", "description": "", "deprecated": false, "deprecationMessage": "", "args": [], "line": 7 }, "type": "injectable" }, { "name": "ModalService", "id": "injectable-ModalService-936b74fdaaf3d605f1d258329b92f68d126a1e02f6b3fddb1148a1c28b7b815022a18f91068ffeee08bb99fb6340eb1439706e92f8f971c1583717b110b3379a", "file": "src/app/core/modal/modal.service.ts", "properties": [ { "name": "hide", "defaultValue": "() => {...}", "deprecated": false, "deprecationMessage": "", "type": "function", "optional": false, "description": "", "line": 18 }, { "name": "show", "defaultValue": "() => {...}", "deprecated": false, "deprecationMessage": "", "type": "function", "optional": false, "description": "", "line": 17 } ], "methods": [], "deprecated": false, "deprecationMessage": "", "description": "", "rawdescription": "\n", "sourceCode": "import { Injectable } from '@angular/core';\nimport { ModalComponent } from './modal.component';\n\nexport interface IModalContent {\n header?: string;\n body?: string;\n cancelButtonText?: string;\n OKButtonText?: string;\n cancelButtonVisible?: boolean;\n}\n\n@Injectable()\nexport class ModalService {\n\n constructor() { }\n\n show: (modalContent: IModalContent) => Promise = () => { return {} as Promise; };\n hide: () => void = () => {};\n\n}\n", "constructorObj": { "name": "constructor", "description": "", "deprecated": false, "deprecationMessage": "", "args": [], "line": 13 }, "type": "injectable" }, { "name": "PreloadModulesStrategy", "id": "injectable-PreloadModulesStrategy-5ab30a5e7b043ea092547924ea202594da951f5fb76ee12067041ff8d3067407d291d4c0983b7842cda33612b4f298a4ebc1a2563cccb8a207f07612668f9a86", "file": "src/app/core/strategies/preload-modules.strategy.ts", "properties": [], "methods": [ { "name": "preload", "args": [ { "name": "route", "type": "Route", "deprecated": false, "deprecationMessage": "" }, { "name": "load", "type": "function", "deprecated": false, "deprecationMessage": "", "function": [] } ], "optional": false, "returnType": "Observable", "typeParameters": [], "line": 13, "deprecated": false, "deprecationMessage": "", "jsdoctags": [ { "name": "route", "type": "Route", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } }, { "name": "load", "type": "function", "deprecated": false, "deprecationMessage": "", "function": [], "tagName": { "text": "param" } } ] } ], "deprecated": false, "deprecationMessage": "", "description": "", "rawdescription": "\n", "sourceCode": "import { Injectable } from '@angular/core';\nimport { PreloadingStrategy, Route } from '@angular/router';\nimport { Observable, of } from 'rxjs';\nimport { LoggerService } from '../services/logger.service';\n\n@Injectable()\nexport class PreloadModulesStrategy implements PreloadingStrategy {\n\n constructor(private logger: LoggerService) {}\n\n preload(route: Route, load: () => Observable): Observable {\n if (route.data && route.data['preload']) {\n this.logger.log('Preloaded: ' + route.path);\n return load();\n } else {\n return of(null);\n }\n }\n\n}\n", "constructorObj": { "name": "constructor", "description": "", "deprecated": false, "deprecationMessage": "", "args": [ { "name": "logger", "type": "LoggerService", "deprecated": false, "deprecationMessage": "" } ], "line": 9, "jsdoctags": [ { "name": "logger", "type": "LoggerService", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] }, "type": "injectable" }, { "name": "SorterService", "id": "injectable-SorterService-09eb6582e6eb9e1bf2d35828da80bcb3fb3545154c9333cf91edff880db0e3a176339ed09bd9c6635d5826faa76146590ffc7ee2e40d2cf149220c2ca2ab2a41", "file": "src/app/core/services/sorter.service.ts", "properties": [ { "name": "direction", "defaultValue": "1", "deprecated": false, "deprecationMessage": "", "type": "number", "optional": false, "description": "", "line": 11 }, { "name": "property", "defaultValue": "''", "deprecated": false, "deprecationMessage": "", "type": "string", "optional": false, "description": "", "line": 10 } ], "methods": [ { "name": "isString", "args": [ { "name": "val", "type": "any", "deprecated": false, "deprecationMessage": "" } ], "optional": false, "returnType": "boolean", "typeParameters": [], "line": 51, "deprecated": false, "deprecationMessage": "", "jsdoctags": [ { "name": "val", "type": "any", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] }, { "name": "sort", "args": [ { "name": "collection", "type": "any[]", "deprecated": false, "deprecationMessage": "" }, { "name": "prop", "type": "any", "deprecated": false, "deprecationMessage": "" }, { "name": "reverseSort", "type": "", "deprecated": false, "deprecationMessage": "", "defaultValue": "true" } ], "optional": false, "returnType": "any", "typeParameters": [], "line": 13, "deprecated": false, "deprecationMessage": "", "jsdoctags": [ { "name": "collection", "type": "any[]", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } }, { "name": "prop", "type": "any", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } }, { "name": "reverseSort", "type": "", "deprecated": false, "deprecationMessage": "", "defaultValue": "true", "tagName": { "text": "param" } } ] } ], "deprecated": false, "deprecationMessage": "", "description": "", "rawdescription": "\n", "sourceCode": "import { Injectable } from '@angular/core';\n\nimport { PropertyResolver } from './property-resolver';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SorterService {\n\n property: string = '';\n direction = 1;\n\n sort(collection: any[], prop: any, reverseSort = true) {\n this.property = prop;\n if (reverseSort) {\n this.direction = (this.property === prop) ? this.direction * -1 : 1;\n }\n\n return collection.sort((a: any, b: any) => {\n let aVal: any;\n let bVal: any;\n\n // Handle resolving complex properties such as 'state.name' for prop value\n if (prop && prop.indexOf('.') > -1) {\n aVal = PropertyResolver.resolve(prop, a);\n bVal = PropertyResolver.resolve(prop, b);\n } else {\n aVal = a[prop];\n bVal = b[prop];\n }\n\n // Fix issues that spaces before/after string value can cause such as ' San Francisco'\n if (this.isString(aVal)) {\n aVal = aVal.trim().toUpperCase();\n }\n\n if (this.isString(bVal)) {\n bVal = bVal.trim().toUpperCase();\n }\n\n if (aVal === bVal) {\n return 0;\n } else if (aVal > bVal) {\n return this.direction * -1;\n } else {\n return this.direction * 1;\n }\n });\n }\n\n isString(val: any): boolean {\n return (val && (typeof val === 'string' || val instanceof String));\n }\n\n}\n", "type": "injectable" }, { "name": "TrackByService", "id": "injectable-TrackByService-65c4ec81be84e32eac1bf42f4c0836731cc1ccf8f0d35e1f0a0f1ce11207438bc215bf4a40b84ddd5c9399133192f5c00954390d668452af45c33c0e81087869", "file": "src/app/core/services/trackby.service.ts", "properties": [], "methods": [ { "name": "customer", "args": [ { "name": "index", "type": "number", "deprecated": false, "deprecationMessage": "" }, { "name": "customer", "type": "ICustomer", "deprecated": false, "deprecationMessage": "" } ], "optional": false, "returnType": "any", "typeParameters": [], "line": 8, "deprecated": false, "deprecationMessage": "", "jsdoctags": [ { "name": "index", "type": "number", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } }, { "name": "customer", "type": "ICustomer", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] }, { "name": "order", "args": [ { "name": "index", "type": "number", "deprecated": false, "deprecationMessage": "" }, { "name": "order", "type": "IOrder", "deprecated": false, "deprecationMessage": "" } ], "optional": false, "returnType": "number", "typeParameters": [], "line": 12, "deprecated": false, "deprecationMessage": "", "jsdoctags": [ { "name": "index", "type": "number", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } }, { "name": "order", "type": "IOrder", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] } ], "deprecated": false, "deprecationMessage": "", "description": "", "rawdescription": "\n", "sourceCode": "import { Injectable } from '@angular/core';\n\nimport { ICustomer, IOrder } from '../../shared/interfaces';\n\n@Injectable()\nexport class TrackByService {\n\n customer(index: number, customer: ICustomer) {\n return customer.id;\n }\n\n order(index: number, order: IOrder) {\n return index;\n }\n\n\n\n}\n", "type": "injectable" }, { "name": "UtilitiesService", "id": "injectable-UtilitiesService-5caa42b8139da6d20ced77064bf394822e1c577980abae6e67c06c31a079913f317b292a6c9d117a432704c34fb2b8fc61db3d391b0574082fad2cd31cbe6583", "file": "src/app/core/services/utilities.service.ts", "properties": [], "methods": [ { "name": "getApiUrl", "args": [], "optional": false, "returnType": "string", "typeParameters": [], "line": 7, "deprecated": false, "deprecationMessage": "" }, { "name": "getPort", "args": [], "optional": false, "returnType": "string", "typeParameters": [], "line": 12, "deprecated": false, "deprecationMessage": "", "modifierKind": [ 121 ] } ], "deprecated": false, "deprecationMessage": "", "description": "", "rawdescription": "\n", "sourceCode": "import { Injectable, Inject } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class UtilitiesService { \n constructor(@Inject('Window') private window: Window) { }\n\n getApiUrl() {\n const port = this.getPort();\n return `${this.window.location.protocol}//${this.window.location.hostname}${port}`;\n }\n\n private getPort() {\n const port = this.window.location.port;\n if (port) {\n // for running with Azure Functions local emulator\n if (port === '4200') {\n // Local run with 'npm run' also started in api folder for Azure Functions\n return ':7071'; // for debugging Azure Functions locally\n }\n // Running with local node (which serves Angular and the API)\n return ':' + this.window.location.port;\n }\n else {\n // for running locally with Docker/Kubernetes\n if (this.window.location.hostname === 'localhost') {\n return ':8080';\n }\n }\n return '';\n }\n}", "constructorObj": { "name": "constructor", "description": "", "deprecated": false, "deprecationMessage": "", "args": [ { "name": "window", "type": "Window", "deprecated": false, "deprecationMessage": "" } ], "line": 4, "jsdoctags": [ { "name": "window", "type": "Window", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] }, "type": "injectable" } ], "guards": [ { "name": "CanActivateGuard", "id": "injectable-CanActivateGuard-db4c2e7add04a47ff4e12fae8a9397f4ae013a194408a9e41992866234dd405ee682b7b2365df3954cc9381b3d8fef17afb7e3060fcb53bf72b0e729510b3b1e", "file": "src/app/customer/guards/can-activate.guard.ts", "properties": [], "methods": [ { "name": "canActivate", "args": [ { "name": "route", "type": "ActivatedRouteSnapshot", "deprecated": false, "deprecationMessage": "" }, { "name": "state", "type": "RouterStateSnapshot", "deprecated": false, "deprecationMessage": "" } ], "optional": false, "returnType": "Observable | Promise | boolean", "typeParameters": [], "line": 12, "deprecated": false, "deprecationMessage": "", "jsdoctags": [ { "name": "route", "type": "ActivatedRouteSnapshot", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } }, { "name": "state", "type": "RouterStateSnapshot", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] } ], "deprecated": false, "deprecationMessage": "", "description": "", "rawdescription": "\n", "sourceCode": "import { Injectable } from '@angular/core';\nimport { CanActivate, Router, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';\nimport { Observable } from 'rxjs';\n\nimport { AuthService } from '../../core/services/auth.service';\n\n@Injectable()\nexport class CanActivateGuard implements CanActivate {\n\n constructor(private authService: AuthService, private router: Router) { }\n\n canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable | Promise | boolean {\n if (this.authService.isAuthenticated) {\n return true;\n }\n\n // Track URL user is trying to go to so we can send them there after logging in\n this.authService.redirectUrl = state.url;\n this.router.navigate(['/login']);\n return false;\n }\n\n}\n", "constructorObj": { "name": "constructor", "description": "", "deprecated": false, "deprecationMessage": "", "args": [ { "name": "authService", "type": "AuthService", "deprecated": false, "deprecationMessage": "" }, { "name": "router", "type": "Router", "deprecated": false, "deprecationMessage": "" } ], "line": 8, "jsdoctags": [ { "name": "authService", "type": "AuthService", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } }, { "name": "router", "type": "Router", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] }, "type": "guard" }, { "name": "CanDeactivateGuard", "id": "injectable-CanDeactivateGuard-8e5e57f3c2d001a364929edbc55ef2cbe56630b3f41ab38e7cbef5d780c7bb6e6c6b42e88fd013eaa6d43fdfe9e73f6ce619436bbe1a3375f1fc681476eaa4a6", "file": "src/app/customer/guards/can-deactivate.guard.ts", "properties": [], "methods": [ { "name": "canDeactivate", "args": [ { "name": "component", "type": "CustomerEditComponent", "deprecated": false, "deprecationMessage": "" }, { "name": "route", "type": "ActivatedRouteSnapshot", "deprecated": false, "deprecationMessage": "" }, { "name": "state", "type": "RouterStateSnapshot", "deprecated": false, "deprecationMessage": "" } ], "optional": false, "returnType": "Observable | Promise | boolean", "typeParameters": [], "line": 13, "deprecated": false, "deprecationMessage": "", "jsdoctags": [ { "name": "component", "type": "CustomerEditComponent", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } }, { "name": "route", "type": "ActivatedRouteSnapshot", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } }, { "name": "state", "type": "RouterStateSnapshot", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] } ], "deprecated": false, "deprecationMessage": "", "description": "", "rawdescription": "\n", "sourceCode": "import { Injectable } from '@angular/core';\nimport { CanDeactivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';\nimport { Observable } from 'rxjs';\n\nimport { CustomerEditComponent } from '../customer-edit/customer-edit.component';\nimport { LoggerService } from '../../core/services/logger.service';\n\n@Injectable()\nexport class CanDeactivateGuard implements CanDeactivate {\n\n constructor(private logger: LoggerService) {}\n\n canDeactivate(\n component: CustomerEditComponent,\n route: ActivatedRouteSnapshot,\n state: RouterStateSnapshot\n ): Observable | Promise | boolean {\n\n this.logger.log(`CustomerId: ${route.parent?.params['id']} URL: ${state.url}`);\n\n // Check with component to see if we're able to deactivate\n return component.canDeactivate();\n }\n}\n", "constructorObj": { "name": "constructor", "description": "", "deprecated": false, "deprecationMessage": "", "args": [ { "name": "logger", "type": "LoggerService", "deprecated": false, "deprecationMessage": "" } ], "line": 9, "jsdoctags": [ { "name": "logger", "type": "LoggerService", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] }, "type": "guard" } ], "interceptors": [ { "name": "AuthInterceptor", "id": "injectable-AuthInterceptor-816bf346cb49f9595e5cc3b0fa4e965034e48f2e6d366d7076b8428723ecb863eb728f9ebb93d5e301b483e69e34eb5298d870cbc272e7374ebb733d48bfdc54", "file": "src/app/core/interceptors/auth.interceptor.ts", "properties": [], "methods": [ { "name": "intercept", "args": [ { "name": "req", "type": "HttpRequest", "deprecated": false, "deprecationMessage": "" }, { "name": "next", "type": "HttpHandler", "deprecated": false, "deprecationMessage": "" } ], "optional": false, "returnType": "Observable>", "typeParameters": [], "line": 9, "deprecated": false, "deprecationMessage": "", "jsdoctags": [ { "name": "req", "type": "HttpRequest", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } }, { "name": "next", "type": "HttpHandler", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] } ], "deprecated": false, "deprecationMessage": "", "description": "", "rawdescription": "\n", "sourceCode": "import {Injectable} from '@angular/core';\nimport {HttpEvent, HttpInterceptor, HttpHandler, HttpRequest} from '@angular/common/http';\nimport { Observable } from 'rxjs';\n\n@Injectable()\nexport class AuthInterceptor implements HttpInterceptor {\n constructor() {}\n\n intercept(req: HttpRequest, next: HttpHandler): Observable> {\n // Get the auth header (fake value is shown here)\n const authHeader = '49a5kdkv409fd39'; // this.authService.getAuthHeader();\n const authReq = req.clone({headers: req.headers.set('Authorization', authHeader)});\n return next.handle(authReq);\n }\n}\n", "constructorObj": { "name": "constructor", "description": "", "deprecated": false, "deprecationMessage": "", "args": [], "line": 6 }, "type": "interceptor" }, { "name": "OverlayRequestResponseInterceptor", "id": "injectable-OverlayRequestResponseInterceptor-e875f0b06414b986d6b8e65d05479c768daf35e2409d7ee41ab0a8e5e765ec16210c48a7a61f98eb7e7bdde84993b2d567163d8d8a4d3323439f1ed6935ad07b", "file": "src/app/core/overlay/overlay-request-response.interceptor.ts", "properties": [], "methods": [ { "name": "getRandomIntInclusive", "args": [ { "name": "min", "type": "number", "deprecated": false, "deprecationMessage": "" }, { "name": "max", "type": "number", "deprecated": false, "deprecationMessage": "" } ], "optional": false, "returnType": "any", "typeParameters": [], "line": 35, "deprecated": false, "deprecationMessage": "", "jsdoctags": [ { "name": "min", "type": "number", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } }, { "name": "max", "type": "number", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] }, { "name": "intercept", "args": [ { "name": "req", "type": "HttpRequest", "deprecated": false, "deprecationMessage": "" }, { "name": "next", "type": "HttpHandler", "deprecated": false, "deprecationMessage": "" } ], "optional": false, "returnType": "Observable>", "typeParameters": [], "line": 14, "deprecated": false, "deprecationMessage": "", "jsdoctags": [ { "name": "req", "type": "HttpRequest", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } }, { "name": "next", "type": "HttpHandler", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] } ], "deprecated": false, "deprecationMessage": "", "description": "", "rawdescription": "\n", "sourceCode": "import { Injectable } from '@angular/core';\nimport { HttpEvent, HttpInterceptor, HttpHandler, HttpRequest, HttpResponse } from '@angular/common/http';\n\nimport { Observable, of } from 'rxjs';\nimport { tap, delay, catchError } from 'rxjs/operators';\n\nimport { EventBusService, EmitEvent, Events } from '../services/event-bus.service';\n\n@Injectable()\nexport class OverlayRequestResponseInterceptor implements HttpInterceptor {\n\n constructor(private eventBus: EventBusService) { }\n\n intercept(req: HttpRequest, next: HttpHandler): Observable> {\n const randomTime = this.getRandomIntInclusive(0, 1500);\n const started = Date.now();\n this.eventBus.emit(new EmitEvent(Events.httpRequest));\n return next\n .handle(req)\n .pipe(\n // delay(randomTime), // Simulate random Http call delays\n tap(event => {\n if (event instanceof HttpResponse) {\n const elapsed = Date.now() - started;\n this.eventBus.emit(new EmitEvent(Events.httpResponse));\n }\n }),\n catchError(err => {\n this.eventBus.emit(new EmitEvent(Events.httpResponse));\n return of({}) as Observable>;\n })\n );\n }\n\n getRandomIntInclusive(min: number, max: number) {\n min = Math.ceil(min);\n max = Math.floor(max);\n return Math.floor(Math.random() * (max - min + 1)) + min; // The maximum is inclusive and the minimum is inclusive\n}\n\n}\n", "constructorObj": { "name": "constructor", "description": "", "deprecated": false, "deprecationMessage": "", "args": [ { "name": "eventBus", "type": "EventBusService", "deprecated": false, "deprecationMessage": "" } ], "line": 10, "jsdoctags": [ { "name": "eventBus", "type": "EventBusService", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] }, "type": "interceptor" } ], "classes": [ { "name": "EmitEvent", "id": "class-EmitEvent-9c7b561e0e2116da23c54c08ee76ea2c8318ad31d705df23f0d544faac45864c183a333dd3e073a25793c3899e205b19d0e7c6cb456c722cae75194fa517cd69", "file": "src/app/core/services/event-bus.service.ts", "deprecated": false, "deprecationMessage": "", "type": "class", "sourceCode": "import { Injectable } from '@angular/core';\nimport { Subject, Subscription, Observable } from 'rxjs';\nimport { filter, map } from 'rxjs/operators';\n\n@Injectable()\nexport class EventBusService {\n\n subject = new Subject();\n\n constructor() { }\n\n on(event: Events, action: any): Subscription {\n return this.subject\n .pipe(\n filter((e: EmitEvent) => {\n return e.name === event;\n }),\n map((e: EmitEvent) => {\n return e.value;\n })\n )\n .subscribe(action);\n }\n\n emit(event: EmitEvent) {\n this.subject.next(event);\n }\n}\n\nexport class EmitEvent {\n\n constructor(public name: any, public value?: any) { }\n\n}\n\nexport enum Events {\n httpRequest,\n httpResponse\n}\n", "constructorObj": { "name": "constructor", "description": "", "deprecated": false, "deprecationMessage": "", "args": [ { "name": "name", "type": "any", "deprecated": false, "deprecationMessage": "" }, { "name": "value", "type": "any", "deprecated": false, "deprecationMessage": "", "optional": true } ], "line": 30, "jsdoctags": [ { "name": "name", "type": "any", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } }, { "name": "value", "type": "any", "deprecated": false, "deprecationMessage": "", "optional": true, "tagName": { "text": "param" } } ] }, "properties": [ { "name": "name", "deprecated": false, "deprecationMessage": "", "type": "any", "optional": false, "description": "", "line": 32, "modifierKind": [ 123 ] }, { "name": "value", "deprecated": false, "deprecationMessage": "", "type": "any", "optional": true, "description": "", "line": 32, "modifierKind": [ 123 ] } ], "methods": [], "indexSignatures": [], "inputsClass": [], "outputsClass": [], "hostBindings": [], "hostListeners": [] }, { "name": "EnsureModuleLoadedOnceGuard", "id": "class-EnsureModuleLoadedOnceGuard-f4698f9bf50521a2dfc6773ec258384ea3f7c6bdd0bd2994037297f4af0bbe1aee27aa2f1a17ef9c59d774fc242920518865b917fbad61a4cb58497ac69405db", "file": "src/app/core/ensure-module-loaded-once.guard.ts", "deprecated": false, "deprecationMessage": "", "type": "class", "sourceCode": "export class EnsureModuleLoadedOnceGuard {\n\n constructor(targetModule: any) {\n if (targetModule) {\n throw new Error(`${targetModule.constructor.name} has already been loaded. Import this module in the AppModule only.`);\n }\n }\n\n}\n", "constructorObj": { "name": "constructor", "description": "", "deprecated": false, "deprecationMessage": "", "args": [ { "name": "targetModule", "type": "any", "deprecated": false, "deprecationMessage": "" } ], "line": 1, "jsdoctags": [ { "name": "targetModule", "type": "any", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] }, "properties": [], "methods": [], "indexSignatures": [], "inputsClass": [], "outputsClass": [], "hostBindings": [], "hostListeners": [] }, { "name": "Growl", "id": "class-Growl-48f5a0fd816c6b355b58a3a34a66ea921f513fd639d282db7fb88d7513dc1548e823b9c2e4f04c042cca5cb26db31e7370ff0acea53d913e199b86691eb97ed0", "file": "src/app/core/growler/growler.component.ts", "deprecated": false, "deprecationMessage": "", "type": "class", "sourceCode": "import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\n\nimport { GrowlerService, GrowlerMessageType } from './growler.service';\nimport { LoggerService } from '../services/logger.service';\n\n@Component({\n selector: 'cm-growler',\n template: `\n
\n
\n {{ growl.message }}\n
\n
\n `,\n styleUrls: ['growler.component.css']\n})\nexport class GrowlerComponent implements OnInit {\n\n private growlCount = 0;\n growls: Growl[] = [];\n\n @Input() position = 'bottom-right';\n @Input() timeout = 3000;\n\n constructor(private growlerService: GrowlerService,\n private logger: LoggerService) {\n growlerService.growl = this.growl.bind(this);\n }\n\n ngOnInit() { }\n\n /**\n * Displays a growl message.\n *\n * @param {string} message - The message to display.\n * @param {GrowlMessageType} growlType - The type of message to display (a GrowlMessageType enumeration)\n * @return {number} id - Returns the ID for the generated growl\n */\n growl(message: string, growlType: GrowlerMessageType): number {\n this.growlCount++;\n const bootstrapAlertType = GrowlerMessageType[growlType].toLowerCase();\n const messageType = `alert-${ bootstrapAlertType }`;\n\n const growl = new Growl(this.growlCount, message, messageType, this.timeout, this);\n this.growls.push(growl);\n return growl.id;\n }\n\n removeGrowl(id: number) {\n this.growls.forEach((growl: Growl, index: number) => {\n if (growl.id === id) {\n this.growls.splice(index, 1);\n this.growlCount--;\n this.logger.log('removed ' + id);\n }\n });\n }\n}\n\nclass Growl {\n\n enabled: boolean = false;\n timeoutId: number = 0;\n\n constructor(public id: number,\n public message: string,\n public messageType: string,\n private timeout: number,\n private growlerContainer: GrowlerComponent) {\n this.show();\n }\n\n show() {\n window.setTimeout(() => {\n this.enabled = true;\n this.setTimeout();\n }, 0);\n }\n\n setTimeout() {\n window.setTimeout(() => {\n this.hide();\n }, this.timeout);\n }\n\n hide() {\n this.enabled = false;\n window.setTimeout(() => {\n this.growlerContainer.removeGrowl(this.id);\n }, this.timeout);\n }\n\n}\n", "constructorObj": { "name": "constructor", "description": "", "deprecated": false, "deprecationMessage": "", "args": [ { "name": "id", "type": "number", "deprecated": false, "deprecationMessage": "" }, { "name": "message", "type": "string", "deprecated": false, "deprecationMessage": "" }, { "name": "messageType", "type": "string", "deprecated": false, "deprecationMessage": "" }, { "name": "timeout", "type": "number", "deprecated": false, "deprecationMessage": "" }, { "name": "growlerContainer", "type": "GrowlerComponent", "deprecated": false, "deprecationMessage": "" } ], "line": 64, "jsdoctags": [ { "name": "id", "type": "number", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } }, { "name": "message", "type": "string", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } }, { "name": "messageType", "type": "string", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } }, { "name": "timeout", "type": "number", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } }, { "name": "growlerContainer", "type": "GrowlerComponent", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] }, "properties": [ { "name": "enabled", "defaultValue": "false", "deprecated": false, "deprecationMessage": "", "type": "boolean", "optional": false, "description": "", "line": 63 }, { "name": "id", "deprecated": false, "deprecationMessage": "", "type": "number", "optional": false, "description": "", "line": 66, "modifierKind": [ 123 ] }, { "name": "message", "deprecated": false, "deprecationMessage": "", "type": "string", "optional": false, "description": "", "line": 67, "modifierKind": [ 123 ] }, { "name": "messageType", "deprecated": false, "deprecationMessage": "", "type": "string", "optional": false, "description": "", "line": 68, "modifierKind": [ 123 ] }, { "name": "timeoutId", "defaultValue": "0", "deprecated": false, "deprecationMessage": "", "type": "number", "optional": false, "description": "", "line": 64 } ], "methods": [ { "name": "hide", "args": [], "optional": false, "returnType": "void", "typeParameters": [], "line": 87, "deprecated": false, "deprecationMessage": "" }, { "name": "setTimeout", "args": [], "optional": false, "returnType": "void", "typeParameters": [], "line": 81, "deprecated": false, "deprecationMessage": "" }, { "name": "show", "args": [], "optional": false, "returnType": "void", "typeParameters": [], "line": 74, "deprecated": false, "deprecationMessage": "" } ], "indexSignatures": [], "inputsClass": [], "outputsClass": [], "hostBindings": [], "hostListeners": [] }, { "name": "MockActivatedRoute", "id": "class-MockActivatedRoute-4f0b5d60873d2354e3ac09535f8b2197d50c458fd3fbf19add86a9919944cc70cfee07c88dddee386c29abc842bf20e99b3cd988ec171591ff3b76894defe8d7", "file": "src/app/shared/mocks.ts", "deprecated": false, "deprecationMessage": "", "type": "class", "sourceCode": "import { Type } from '@angular/core';\nimport { ActivatedRouteSnapshot, ActivatedRoute, UrlSegment, Params, Data, Route, ParamMap } from '@angular/router';\n\nimport { Observable, of } from 'rxjs';\n\nimport { ICustomer, IPagedResults } from './interfaces';\n\nexport class MockDataService {\n constructor() {}\n\n getCustomer(id: number): Observable {\n if (id === 1) {\n return of(customers.slice(0, 1)[0]);\n } else {\n return of({} as ICustomer);\n }\n }\n\n getCustomersPage(page: number, pageSize: number): Observable> {\n const topVal = pageSize,\n skipVal = page,\n skip = (isNaN(skipVal)) ? 0 : +skipVal;\n let top = (isNaN(topVal)) ? 10 : skip + (+topVal);\n\n if (top > customers.length) {\n top = skip + (customers.length - skip);\n }\n\n return of({\n totalRecords: customers.length,\n results: customers.slice(skip, top)\n });\n }\n\n getCustomers(): Observable {\n return of(customers);\n }\n}\n\nexport class MockActivatedRoute implements ActivatedRoute {\n snapshot: ActivatedRouteSnapshot = {} as ActivatedRouteSnapshot;\n url: Observable = {} as Observable;\n params: Observable = {} as Observable;\n queryParams: Observable = {} as Observable;\n fragment: Observable = {} as Observable;\n data: Observable = {} as Observable;\n outlet: string = '';\n component: Type | null = null;\n routeConfig: Route = {} as Route;\n root: ActivatedRoute = {} as ActivatedRoute;\n parent: ActivatedRoute = {} as ActivatedRoute;\n firstChild: ActivatedRoute = {} as ActivatedRoute;\n children: ActivatedRoute[] = [];\n pathFromRoot: ActivatedRoute[] = [];\n paramMap: Observable = {} as Observable;\n queryParamMap: Observable = {} as Observable;\n toString(): string {\n return '';\n }\n}\n\nexport function getActivatedRouteWithParent(params: any[]) {\n const route = new MockActivatedRoute();\n route.parent = new MockActivatedRoute() as ActivatedRoute;\n if (params) {\n for (const param of params) {\n // var keyNames = Object.keys(param);\n route.parent.params = of(param);\n }\n }\n\n return route;\n}\n\nexport const customers = [\n {\n 'id': 1,\n 'firstName': 'ted',\n 'lastName': 'james',\n 'gender': 'male',\n 'address': '1234 Anywhere St.',\n 'city': ' Phoenix ',\n 'state': {\n 'abbreviation': 'AZ',\n 'name': 'Arizona'\n },\n 'orders': [\n { 'productName': 'Basketball', 'itemCost': 7.99 },\n { 'productName': 'Shoes', 'itemCost': 199.99 }\n ],\n 'latitude': 33.299,\n 'longitude': -111.963\n },\n {\n 'id': 2,\n 'firstName': 'Michelle',\n 'lastName': 'Thompson',\n 'gender': 'female',\n 'address': '345 Cedar Point Ave.',\n 'city': 'Encinitas ',\n 'state': {\n 'abbreviation': 'CA',\n 'name': 'California'\n },\n 'orders': [\n { 'productName': 'Frisbee', 'itemCost': 2.99 },\n { 'productName': 'Hat', 'itemCost': 5.99 }\n ],\n 'latitude': 33.037,\n 'longitude': -117.291\n },\n {\n 'id': 3,\n 'firstName': 'Zed',\n 'lastName': 'Bishop',\n 'gender': 'male',\n 'address': '1822 Long Bay Dr.',\n 'city': ' Seattle ',\n 'state': {\n 'abbreviation': 'WA',\n 'name': 'Washington'\n },\n 'orders': [\n { 'productName': 'Boomerang', 'itemCost': 29.99 },\n { 'productName': 'Helmet', 'itemCost': 19.99 },\n { 'productName': 'Kangaroo Saddle', 'itemCost': 179.99 }\n ],\n 'latitude': 47.596,\n 'longitude': -122.331\n },\n {\n 'id': 4,\n 'firstName': 'Tina',\n 'lastName': 'Adams',\n 'gender': 'female',\n 'address': '79455 Pinetop Way',\n 'city': 'Chandler',\n 'state': {\n 'abbreviation': 'AZ',\n 'name': ' Arizona '\n },\n 'orders': [\n { 'productName': 'Budgie Smugglers', 'itemCost': 19.99 },\n { 'productName': 'Swimming Cap', 'itemCost': 5.49 }\n ],\n 'latitude': 33.299,\n 'longitude': -111.963\n },\n {\n 'id': 5,\n 'firstName': 'Igor',\n 'lastName': 'Minar',\n 'gender': 'male',\n 'address': '576 Crescent Blvd.',\n 'city': ' Dallas',\n 'state': {\n 'abbreviation': 'TX',\n 'name': 'Texas'\n },\n 'orders': [\n { 'productName': 'Bow', 'itemCost': 399.99 },\n { 'productName': 'Arrows', 'itemCost': 69.99 }\n ],\n 'latitude': 32.782927,\n 'longitude': -96.806191\n },\n {\n 'id': 6,\n 'firstName': 'Brad',\n 'lastName': 'Green',\n 'gender': 'male',\n 'address': '9874 Center St.',\n 'city': 'Orlando ',\n 'state': {\n 'abbreviation': 'FL',\n 'name': 'Florida'\n },\n 'orders': [\n { 'productName': 'Baseball', 'itemCost': 9.99 },\n { 'productName': 'Bat', 'itemCost': 19.99 }\n ],\n 'latitude': 28.384238,\n 'longitude': -81.564103\n },\n {\n 'id': 7,\n 'firstName': 'Misko',\n 'lastName': 'Hevery',\n 'gender': 'male',\n 'address': '9812 Builtway Appt #1',\n 'city': 'Carey ',\n 'state': {\n 'abbreviation': 'NC',\n 'name': 'North Carolina'\n },\n 'orders': [\n { 'productName': 'Surfboard', 'itemCost': 299.99 },\n { 'productName': 'Wax', 'itemCost': 5.99 },\n { 'productName': 'Shark Repellent', 'itemCost': 15.99 }\n ],\n 'latitude': 35.727985,\n 'longitude': -78.797594\n },\n {\n 'id': 8,\n 'firstName': 'Heedy',\n 'lastName': 'Wahlin',\n 'gender': 'female',\n 'address': '4651 Tuvo St.',\n 'city': 'Anaheim',\n 'state': {\n 'abbreviation': 'CA',\n 'name': 'California'\n },\n 'orders': [\n { 'productName': 'Saddle', 'itemCost': 599.99 },\n { 'productName': 'Riding cap', 'itemCost': 79.99 }\n ],\n 'latitude': 33.809898,\n 'longitude': -117.918757\n },\n {\n 'id': 9,\n 'firstName': 'John',\n 'lastName': 'Papa',\n 'gender': 'male',\n 'address': '66 Ray St.',\n 'city': ' Orlando',\n 'state': {\n 'abbreviation': 'FL',\n 'name': 'Florida'\n },\n 'orders': [\n { 'productName': 'Baseball', 'itemCost': 9.99 },\n { 'productName': 'Bat', 'itemCost': 19.99 }\n ],\n 'latitude': 28.384238,\n 'longitude': -81.564103\n },\n {\n 'id': 10,\n 'firstName': 'Tonya',\n 'lastName': 'Smith',\n 'gender': 'female',\n 'address': '1455 Chandler Blvd.',\n 'city': ' Atlanta',\n 'state': {\n 'abbreviation': 'GA',\n 'name': 'Georgia'\n },\n 'orders': [\n { 'productName': 'Surfboard', 'itemCost': 299.99 },\n { 'productName': 'Wax', 'itemCost': 5.99 },\n { 'productName': 'Shark Repellent', 'itemCost': 7.99 }\n ],\n 'latitude': 33.762297,\n 'longitude': -84.392953\n },\n {\n 'id': 11,\n 'firstName': 'ward',\n 'lastName': 'bell',\n 'gender': 'male',\n 'address': '888 Central St.',\n 'city': 'Los Angeles',\n 'state': {\n 'abbreviation': 'CA',\n 'name': 'California'\n },\n 'latitude': 34.042552,\n 'longitude': -118.266429\n },\n {\n 'id': 12,\n 'firstName': 'Marcus',\n 'lastName': 'Hightower',\n 'gender': 'male',\n 'address': '1699 Atomic St.',\n 'city': 'Dallas',\n 'state': {\n 'abbreviation': 'TX',\n 'name': 'Texas'\n },\n 'latitude': 32.782927,\n 'longitude': -96.806191\n },\n {\n 'id': 13,\n 'firstName': 'Thomas',\n 'lastName': 'Martin',\n 'gender': 'male',\n 'address': '98756 Center St.',\n 'city': 'New York',\n 'state': {\n 'abbreviation': 'NY',\n 'name': 'New York City'\n },\n 'orders': [\n { 'productName': 'Car', 'itemCost': 42999.99 },\n { 'productName': 'Wax', 'itemCost': 5.99 },\n { 'productName': 'Shark Repellent', 'itemCost': 7.99 }\n ],\n 'latitude': 40.725037,\n 'longitude': -74.004903\n },\n {\n 'id': 14,\n 'firstName': 'Jean',\n 'lastName': 'Martin',\n 'gender': 'female',\n 'address': '98756 Center St.',\n 'city': 'New York City',\n 'state': {\n 'abbreviation': 'NY',\n 'name': 'New York'\n },\n 'latitude': 40.725037,\n 'longitude': -74.004903\n },\n {\n 'id': 15,\n 'firstName': 'Pinal',\n 'lastName': 'Dave',\n 'gender': 'male',\n 'address': '23566 Directive Pl.',\n 'city': 'White Plains',\n 'state': {\n 'abbreviation': 'NY',\n 'name': 'New York'\n },\n 'latitude': 41.028726,\n 'longitude': -73.758261\n },\n {\n 'id': 16,\n 'firstName': 'Robin',\n 'lastName': 'Cleark',\n 'gender': 'female',\n 'address': '35632 Richmond Circle Apt B',\n 'city': 'Las Vegas',\n 'state': {\n 'abbreviation': 'NV',\n 'name': 'Nevada'\n },\n 'latitude': 36.091824,\n 'longitude': -115.174247\n },\n {\n 'id': 17,\n 'firstName': 'Fred',\n 'lastName': 'Roberts',\n 'gender': 'male',\n 'address': '12 Ocean View St.',\n 'city': 'Houston',\n 'state': {\n 'abbreviation': 'TX',\n 'name': 'Texas'\n },\n 'latitude': 29.750163,\n 'longitude': -95.362769\n },\n {\n 'id': 18,\n 'firstName': 'Robyn',\n 'lastName': 'Flores',\n 'gender': 'female',\n 'address': '23423 Adams St.',\n 'city': 'Seattle',\n 'state': {\n 'abbreviation': 'WA',\n 'name': 'Washington'\n },\n 'latitude': 47.596,\n 'longitude': -122.331\n },\n {\n 'id': 19,\n 'firstName': 'Elaine',\n 'lastName': 'Jones',\n 'gender': 'female',\n 'address': '98756 Center St.',\n 'city': 'Barcelona',\n 'state': {\n 'abbreviation': 'CAT',\n 'name': 'Catalonia'\n },\n 'latitude': 41.386444,\n 'longitude': 2.111988\n },\n {\n 'id': 20,\n 'firstName': 'Lilija',\n 'lastName': 'Arnarson',\n 'gender': 'female',\n 'address': '23423 Adams St.',\n 'city': 'Reykjavik',\n 'state': {\n 'abbreviation': 'IS',\n 'name': 'Iceland'\n },\n 'latitude': 64.120278,\n 'longitude': -21.830471\n },\n {\n 'id': 21,\n 'firstName': 'Laurent',\n 'lastName': 'Bugnion',\n 'gender': 'male',\n 'address': '9874 Lake Blvd.',\n 'city': 'Zurich',\n 'state': {\n 'abbreviation': 'COZ',\n 'name': 'Canton of Zurick'\n },\n 'orders': [\n { 'productName': 'Baseball', 'itemCost': 9.99 },\n { 'productName': 'Bat', 'itemCost': 19.99 }\n ],\n 'latitude': 47.341337,\n 'longitude': 8.582503\n },\n {\n 'id': 22,\n 'firstName': 'Gabriel',\n 'lastName': 'Flores',\n 'gender': 'male',\n 'address': '2543 Cassiano',\n 'city': 'Rio de Janeiro',\n 'state': {\n 'abbreviation': 'WA',\n 'name': 'Rio de Janeiro'\n },\n 'latitude': -22.919369,\n 'longitude': -43.181836\n }\n];\n", "properties": [ { "name": "children", "defaultValue": "[]", "deprecated": false, "deprecationMessage": "", "type": "ActivatedRoute[]", "optional": false, "description": "", "line": 53 }, { "name": "component", "defaultValue": "null", "deprecated": false, "deprecationMessage": "", "type": "Type | null", "optional": false, "description": "", "line": 48 }, { "name": "data", "defaultValue": "{} as Observable", "deprecated": false, "deprecationMessage": "", "type": "Observable", "optional": false, "description": "", "line": 46 }, { "name": "firstChild", "defaultValue": "{} as ActivatedRoute", "deprecated": false, "deprecationMessage": "", "type": "ActivatedRoute", "optional": false, "description": "", "line": 52 }, { "name": "fragment", "defaultValue": "{} as Observable", "deprecated": false, "deprecationMessage": "", "type": "Observable", "optional": false, "description": "", "line": 45 }, { "name": "outlet", "defaultValue": "''", "deprecated": false, "deprecationMessage": "", "type": "string", "optional": false, "description": "", "line": 47 }, { "name": "paramMap", "defaultValue": "{} as Observable", "deprecated": false, "deprecationMessage": "", "type": "Observable", "optional": false, "description": "", "line": 55 }, { "name": "params", "defaultValue": "{} as Observable", "deprecated": false, "deprecationMessage": "", "type": "Observable", "optional": false, "description": "", "line": 43 }, { "name": "parent", "defaultValue": "{} as ActivatedRoute", "deprecated": false, "deprecationMessage": "", "type": "ActivatedRoute", "optional": false, "description": "", "line": 51 }, { "name": "pathFromRoot", "defaultValue": "[]", "deprecated": false, "deprecationMessage": "", "type": "ActivatedRoute[]", "optional": false, "description": "", "line": 54 }, { "name": "queryParamMap", "defaultValue": "{} as Observable", "deprecated": false, "deprecationMessage": "", "type": "Observable", "optional": false, "description": "", "line": 56 }, { "name": "queryParams", "defaultValue": "{} as Observable", "deprecated": false, "deprecationMessage": "", "type": "Observable", "optional": false, "description": "", "line": 44 }, { "name": "root", "defaultValue": "{} as ActivatedRoute", "deprecated": false, "deprecationMessage": "", "type": "ActivatedRoute", "optional": false, "description": "", "line": 50 }, { "name": "routeConfig", "defaultValue": "{} as Route", "deprecated": false, "deprecationMessage": "", "type": "Route", "optional": false, "description": "", "line": 49 }, { "name": "snapshot", "defaultValue": "{} as ActivatedRouteSnapshot", "deprecated": false, "deprecationMessage": "", "type": "ActivatedRouteSnapshot", "optional": false, "description": "", "line": 41 }, { "name": "url", "defaultValue": "{} as Observable", "deprecated": false, "deprecationMessage": "", "type": "Observable", "optional": false, "description": "", "line": 42 } ], "methods": [ { "name": "toString", "args": [], "optional": false, "returnType": "string", "typeParameters": [], "line": 57, "deprecated": false, "deprecationMessage": "" } ], "indexSignatures": [], "inputsClass": [], "outputsClass": [], "hostBindings": [], "hostListeners": [], "implements": [ "ActivatedRoute" ] }, { "name": "MockDataService", "id": "class-MockDataService-4f0b5d60873d2354e3ac09535f8b2197d50c458fd3fbf19add86a9919944cc70cfee07c88dddee386c29abc842bf20e99b3cd988ec171591ff3b76894defe8d7", "file": "src/app/shared/mocks.ts", "deprecated": false, "deprecationMessage": "", "type": "class", "sourceCode": "import { Type } from '@angular/core';\nimport { ActivatedRouteSnapshot, ActivatedRoute, UrlSegment, Params, Data, Route, ParamMap } from '@angular/router';\n\nimport { Observable, of } from 'rxjs';\n\nimport { ICustomer, IPagedResults } from './interfaces';\n\nexport class MockDataService {\n constructor() {}\n\n getCustomer(id: number): Observable {\n if (id === 1) {\n return of(customers.slice(0, 1)[0]);\n } else {\n return of({} as ICustomer);\n }\n }\n\n getCustomersPage(page: number, pageSize: number): Observable> {\n const topVal = pageSize,\n skipVal = page,\n skip = (isNaN(skipVal)) ? 0 : +skipVal;\n let top = (isNaN(topVal)) ? 10 : skip + (+topVal);\n\n if (top > customers.length) {\n top = skip + (customers.length - skip);\n }\n\n return of({\n totalRecords: customers.length,\n results: customers.slice(skip, top)\n });\n }\n\n getCustomers(): Observable {\n return of(customers);\n }\n}\n\nexport class MockActivatedRoute implements ActivatedRoute {\n snapshot: ActivatedRouteSnapshot = {} as ActivatedRouteSnapshot;\n url: Observable = {} as Observable;\n params: Observable = {} as Observable;\n queryParams: Observable = {} as Observable;\n fragment: Observable = {} as Observable;\n data: Observable = {} as Observable;\n outlet: string = '';\n component: Type | null = null;\n routeConfig: Route = {} as Route;\n root: ActivatedRoute = {} as ActivatedRoute;\n parent: ActivatedRoute = {} as ActivatedRoute;\n firstChild: ActivatedRoute = {} as ActivatedRoute;\n children: ActivatedRoute[] = [];\n pathFromRoot: ActivatedRoute[] = [];\n paramMap: Observable = {} as Observable;\n queryParamMap: Observable = {} as Observable;\n toString(): string {\n return '';\n }\n}\n\nexport function getActivatedRouteWithParent(params: any[]) {\n const route = new MockActivatedRoute();\n route.parent = new MockActivatedRoute() as ActivatedRoute;\n if (params) {\n for (const param of params) {\n // var keyNames = Object.keys(param);\n route.parent.params = of(param);\n }\n }\n\n return route;\n}\n\nexport const customers = [\n {\n 'id': 1,\n 'firstName': 'ted',\n 'lastName': 'james',\n 'gender': 'male',\n 'address': '1234 Anywhere St.',\n 'city': ' Phoenix ',\n 'state': {\n 'abbreviation': 'AZ',\n 'name': 'Arizona'\n },\n 'orders': [\n { 'productName': 'Basketball', 'itemCost': 7.99 },\n { 'productName': 'Shoes', 'itemCost': 199.99 }\n ],\n 'latitude': 33.299,\n 'longitude': -111.963\n },\n {\n 'id': 2,\n 'firstName': 'Michelle',\n 'lastName': 'Thompson',\n 'gender': 'female',\n 'address': '345 Cedar Point Ave.',\n 'city': 'Encinitas ',\n 'state': {\n 'abbreviation': 'CA',\n 'name': 'California'\n },\n 'orders': [\n { 'productName': 'Frisbee', 'itemCost': 2.99 },\n { 'productName': 'Hat', 'itemCost': 5.99 }\n ],\n 'latitude': 33.037,\n 'longitude': -117.291\n },\n {\n 'id': 3,\n 'firstName': 'Zed',\n 'lastName': 'Bishop',\n 'gender': 'male',\n 'address': '1822 Long Bay Dr.',\n 'city': ' Seattle ',\n 'state': {\n 'abbreviation': 'WA',\n 'name': 'Washington'\n },\n 'orders': [\n { 'productName': 'Boomerang', 'itemCost': 29.99 },\n { 'productName': 'Helmet', 'itemCost': 19.99 },\n { 'productName': 'Kangaroo Saddle', 'itemCost': 179.99 }\n ],\n 'latitude': 47.596,\n 'longitude': -122.331\n },\n {\n 'id': 4,\n 'firstName': 'Tina',\n 'lastName': 'Adams',\n 'gender': 'female',\n 'address': '79455 Pinetop Way',\n 'city': 'Chandler',\n 'state': {\n 'abbreviation': 'AZ',\n 'name': ' Arizona '\n },\n 'orders': [\n { 'productName': 'Budgie Smugglers', 'itemCost': 19.99 },\n { 'productName': 'Swimming Cap', 'itemCost': 5.49 }\n ],\n 'latitude': 33.299,\n 'longitude': -111.963\n },\n {\n 'id': 5,\n 'firstName': 'Igor',\n 'lastName': 'Minar',\n 'gender': 'male',\n 'address': '576 Crescent Blvd.',\n 'city': ' Dallas',\n 'state': {\n 'abbreviation': 'TX',\n 'name': 'Texas'\n },\n 'orders': [\n { 'productName': 'Bow', 'itemCost': 399.99 },\n { 'productName': 'Arrows', 'itemCost': 69.99 }\n ],\n 'latitude': 32.782927,\n 'longitude': -96.806191\n },\n {\n 'id': 6,\n 'firstName': 'Brad',\n 'lastName': 'Green',\n 'gender': 'male',\n 'address': '9874 Center St.',\n 'city': 'Orlando ',\n 'state': {\n 'abbreviation': 'FL',\n 'name': 'Florida'\n },\n 'orders': [\n { 'productName': 'Baseball', 'itemCost': 9.99 },\n { 'productName': 'Bat', 'itemCost': 19.99 }\n ],\n 'latitude': 28.384238,\n 'longitude': -81.564103\n },\n {\n 'id': 7,\n 'firstName': 'Misko',\n 'lastName': 'Hevery',\n 'gender': 'male',\n 'address': '9812 Builtway Appt #1',\n 'city': 'Carey ',\n 'state': {\n 'abbreviation': 'NC',\n 'name': 'North Carolina'\n },\n 'orders': [\n { 'productName': 'Surfboard', 'itemCost': 299.99 },\n { 'productName': 'Wax', 'itemCost': 5.99 },\n { 'productName': 'Shark Repellent', 'itemCost': 15.99 }\n ],\n 'latitude': 35.727985,\n 'longitude': -78.797594\n },\n {\n 'id': 8,\n 'firstName': 'Heedy',\n 'lastName': 'Wahlin',\n 'gender': 'female',\n 'address': '4651 Tuvo St.',\n 'city': 'Anaheim',\n 'state': {\n 'abbreviation': 'CA',\n 'name': 'California'\n },\n 'orders': [\n { 'productName': 'Saddle', 'itemCost': 599.99 },\n { 'productName': 'Riding cap', 'itemCost': 79.99 }\n ],\n 'latitude': 33.809898,\n 'longitude': -117.918757\n },\n {\n 'id': 9,\n 'firstName': 'John',\n 'lastName': 'Papa',\n 'gender': 'male',\n 'address': '66 Ray St.',\n 'city': ' Orlando',\n 'state': {\n 'abbreviation': 'FL',\n 'name': 'Florida'\n },\n 'orders': [\n { 'productName': 'Baseball', 'itemCost': 9.99 },\n { 'productName': 'Bat', 'itemCost': 19.99 }\n ],\n 'latitude': 28.384238,\n 'longitude': -81.564103\n },\n {\n 'id': 10,\n 'firstName': 'Tonya',\n 'lastName': 'Smith',\n 'gender': 'female',\n 'address': '1455 Chandler Blvd.',\n 'city': ' Atlanta',\n 'state': {\n 'abbreviation': 'GA',\n 'name': 'Georgia'\n },\n 'orders': [\n { 'productName': 'Surfboard', 'itemCost': 299.99 },\n { 'productName': 'Wax', 'itemCost': 5.99 },\n { 'productName': 'Shark Repellent', 'itemCost': 7.99 }\n ],\n 'latitude': 33.762297,\n 'longitude': -84.392953\n },\n {\n 'id': 11,\n 'firstName': 'ward',\n 'lastName': 'bell',\n 'gender': 'male',\n 'address': '888 Central St.',\n 'city': 'Los Angeles',\n 'state': {\n 'abbreviation': 'CA',\n 'name': 'California'\n },\n 'latitude': 34.042552,\n 'longitude': -118.266429\n },\n {\n 'id': 12,\n 'firstName': 'Marcus',\n 'lastName': 'Hightower',\n 'gender': 'male',\n 'address': '1699 Atomic St.',\n 'city': 'Dallas',\n 'state': {\n 'abbreviation': 'TX',\n 'name': 'Texas'\n },\n 'latitude': 32.782927,\n 'longitude': -96.806191\n },\n {\n 'id': 13,\n 'firstName': 'Thomas',\n 'lastName': 'Martin',\n 'gender': 'male',\n 'address': '98756 Center St.',\n 'city': 'New York',\n 'state': {\n 'abbreviation': 'NY',\n 'name': 'New York City'\n },\n 'orders': [\n { 'productName': 'Car', 'itemCost': 42999.99 },\n { 'productName': 'Wax', 'itemCost': 5.99 },\n { 'productName': 'Shark Repellent', 'itemCost': 7.99 }\n ],\n 'latitude': 40.725037,\n 'longitude': -74.004903\n },\n {\n 'id': 14,\n 'firstName': 'Jean',\n 'lastName': 'Martin',\n 'gender': 'female',\n 'address': '98756 Center St.',\n 'city': 'New York City',\n 'state': {\n 'abbreviation': 'NY',\n 'name': 'New York'\n },\n 'latitude': 40.725037,\n 'longitude': -74.004903\n },\n {\n 'id': 15,\n 'firstName': 'Pinal',\n 'lastName': 'Dave',\n 'gender': 'male',\n 'address': '23566 Directive Pl.',\n 'city': 'White Plains',\n 'state': {\n 'abbreviation': 'NY',\n 'name': 'New York'\n },\n 'latitude': 41.028726,\n 'longitude': -73.758261\n },\n {\n 'id': 16,\n 'firstName': 'Robin',\n 'lastName': 'Cleark',\n 'gender': 'female',\n 'address': '35632 Richmond Circle Apt B',\n 'city': 'Las Vegas',\n 'state': {\n 'abbreviation': 'NV',\n 'name': 'Nevada'\n },\n 'latitude': 36.091824,\n 'longitude': -115.174247\n },\n {\n 'id': 17,\n 'firstName': 'Fred',\n 'lastName': 'Roberts',\n 'gender': 'male',\n 'address': '12 Ocean View St.',\n 'city': 'Houston',\n 'state': {\n 'abbreviation': 'TX',\n 'name': 'Texas'\n },\n 'latitude': 29.750163,\n 'longitude': -95.362769\n },\n {\n 'id': 18,\n 'firstName': 'Robyn',\n 'lastName': 'Flores',\n 'gender': 'female',\n 'address': '23423 Adams St.',\n 'city': 'Seattle',\n 'state': {\n 'abbreviation': 'WA',\n 'name': 'Washington'\n },\n 'latitude': 47.596,\n 'longitude': -122.331\n },\n {\n 'id': 19,\n 'firstName': 'Elaine',\n 'lastName': 'Jones',\n 'gender': 'female',\n 'address': '98756 Center St.',\n 'city': 'Barcelona',\n 'state': {\n 'abbreviation': 'CAT',\n 'name': 'Catalonia'\n },\n 'latitude': 41.386444,\n 'longitude': 2.111988\n },\n {\n 'id': 20,\n 'firstName': 'Lilija',\n 'lastName': 'Arnarson',\n 'gender': 'female',\n 'address': '23423 Adams St.',\n 'city': 'Reykjavik',\n 'state': {\n 'abbreviation': 'IS',\n 'name': 'Iceland'\n },\n 'latitude': 64.120278,\n 'longitude': -21.830471\n },\n {\n 'id': 21,\n 'firstName': 'Laurent',\n 'lastName': 'Bugnion',\n 'gender': 'male',\n 'address': '9874 Lake Blvd.',\n 'city': 'Zurich',\n 'state': {\n 'abbreviation': 'COZ',\n 'name': 'Canton of Zurick'\n },\n 'orders': [\n { 'productName': 'Baseball', 'itemCost': 9.99 },\n { 'productName': 'Bat', 'itemCost': 19.99 }\n ],\n 'latitude': 47.341337,\n 'longitude': 8.582503\n },\n {\n 'id': 22,\n 'firstName': 'Gabriel',\n 'lastName': 'Flores',\n 'gender': 'male',\n 'address': '2543 Cassiano',\n 'city': 'Rio de Janeiro',\n 'state': {\n 'abbreviation': 'WA',\n 'name': 'Rio de Janeiro'\n },\n 'latitude': -22.919369,\n 'longitude': -43.181836\n }\n];\n", "constructorObj": { "name": "constructor", "description": "", "deprecated": false, "deprecationMessage": "", "args": [], "line": 8 }, "properties": [], "methods": [ { "name": "getCustomer", "args": [ { "name": "id", "type": "number", "deprecated": false, "deprecationMessage": "" } ], "optional": false, "returnType": "Observable", "typeParameters": [], "line": 11, "deprecated": false, "deprecationMessage": "", "jsdoctags": [ { "name": "id", "type": "number", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] }, { "name": "getCustomers", "args": [], "optional": false, "returnType": "Observable", "typeParameters": [], "line": 35, "deprecated": false, "deprecationMessage": "" }, { "name": "getCustomersPage", "args": [ { "name": "page", "type": "number", "deprecated": false, "deprecationMessage": "" }, { "name": "pageSize", "type": "number", "deprecated": false, "deprecationMessage": "" } ], "optional": false, "returnType": "Observable>", "typeParameters": [], "line": 19, "deprecated": false, "deprecationMessage": "", "jsdoctags": [ { "name": "page", "type": "number", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } }, { "name": "pageSize", "type": "number", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] } ], "indexSignatures": [], "inputsClass": [], "outputsClass": [], "hostBindings": [], "hostListeners": [] }, { "name": "PropertyResolver", "id": "class-PropertyResolver-7e0697300ab11c6109865465d62e623dbdf7dce93a77978c33b5126933b5615e3eddc8d8f43f5c8616c6bb596073cefe2eb6c5fa022b5549b3b02ecf212cb430", "file": "src/app/core/services/property-resolver.ts", "deprecated": false, "deprecationMessage": "", "type": "class", "sourceCode": "export class PropertyResolver {\n static resolve(path: string, obj: any) {\n return path.split('.').reduce((prev, curr) => {\n return (prev ? prev[curr] : undefined);\n }, obj || self);\n }\n}\n", "properties": [], "methods": [ { "name": "resolve", "args": [ { "name": "path", "type": "string", "deprecated": false, "deprecationMessage": "" }, { "name": "obj", "type": "any", "deprecated": false, "deprecationMessage": "" } ], "optional": false, "returnType": "any", "typeParameters": [], "line": 2, "deprecated": false, "deprecationMessage": "", "modifierKind": [ 124 ], "jsdoctags": [ { "name": "path", "type": "string", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } }, { "name": "obj", "type": "any", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] } ], "indexSignatures": [], "inputsClass": [], "outputsClass": [], "hostBindings": [], "hostListeners": [] }, { "name": "SandboxesDefined", "id": "class-SandboxesDefined-357c44ad5077ccc1d066390c137a148d64ba2688fcd4cdb1ba1e85b67ccdd93f8ad98280fe6c10fbc02dabeb844a2ec27ec7b3681a68dc67e569fc09682407c4", "file": ".angular-playground/sandboxes.ts", "deprecated": false, "deprecationMessage": "", "type": "class", "sourceCode": "export class SandboxesDefined {\n getSandbox(path: string): any {\n /*GET_SANDBOX*/\n switch(path) {\ncase './app/about/about.component.sandbox':\n return import( /* webpackMode: \"lazy\" */ '/Users/danwahlin/Desktop/demos/angular-jumpstart/src/app/about/about.component.sandbox').then(function(_){ return _.default.serialize('./app/about/about.component.sandbox'); });\ncase './app/customer/customer-details/customer-details.component.sandbox':\n return import( /* webpackMode: \"lazy\" */ '/Users/danwahlin/Desktop/demos/angular-jumpstart/src/app/customer/customer-details/customer-details.component.sandbox').then(function(_){ return _.default.serialize('./app/customer/customer-details/customer-details.component.sandbox'); });\ncase './app/customer/customer-orders/customer-orders.component.sandbox':\n return import( /* webpackMode: \"lazy\" */ '/Users/danwahlin/Desktop/demos/angular-jumpstart/src/app/customer/customer-orders/customer-orders.component.sandbox').then(function(_){ return _.default.serialize('./app/customer/customer-orders/customer-orders.component.sandbox'); });\ncase './app/customers/customers-card/customers-card.component.sandbox':\n return import( /* webpackMode: \"lazy\" */ '/Users/danwahlin/Desktop/demos/angular-jumpstart/src/app/customers/customers-card/customers-card.component.sandbox').then(function(_){ return _.default.serialize('./app/customers/customers-card/customers-card.component.sandbox'); });\ncase './app/customers/customers-grid/customers-grid.component.sandbox':\n return import( /* webpackMode: \"lazy\" */ '/Users/danwahlin/Desktop/demos/angular-jumpstart/src/app/customers/customers-grid/customers-grid.component.sandbox').then(function(_){ return _.default.serialize('./app/customers/customers-grid/customers-grid.component.sandbox'); });\ncase './app/customers/customers.component.sandbox':\n return import( /* webpackMode: \"lazy\" */ '/Users/danwahlin/Desktop/demos/angular-jumpstart/src/app/customers/customers.component.sandbox').then(function(_){ return _.default.serialize('./app/customers/customers.component.sandbox'); });\n}\n \n/*END_GET_SANDBOX*/\n }\n getSandboxMenuItems(): any {\n /*GET_SANDBOX_MENU_ITEMS*/\n return [{\"key\":\"./app/about/about.component.sandbox\",\"srcPath\":\"/Users/danwahlin/Desktop/demos/angular-jumpstart/src\",\"searchKey\":\"AboutComponent\",\"name\":\"AboutComponent\",\"label\":\"\",\"scenarioMenuItems\":[{\"key\":1,\"description\":\"About Component\"}]},{\"key\":\"./app/customer/customer-details/customer-details.component.sandbox\",\"srcPath\":\"/Users/danwahlin/Desktop/demos/angular-jumpstart/src\",\"searchKey\":\"CustomerDetailsComponent\",\"name\":\"CustomerDetailsComponent\",\"label\":\"\",\"scenarioMenuItems\":[{\"key\":1,\"description\":\"With a Customer\"},{\"key\":2,\"description\":\"Without a Customer\"}]},{\"key\":\"./app/customer/customer-orders/customer-orders.component.sandbox\",\"srcPath\":\"/Users/danwahlin/Desktop/demos/angular-jumpstart/src\",\"searchKey\":\"CustomerOrdersComponent\",\"name\":\"CustomerOrdersComponent\",\"label\":\"\",\"scenarioMenuItems\":[{\"key\":1,\"description\":\"With Orders\"},{\"key\":2,\"description\":\"Without Orders\"}]},{\"key\":\"./app/customers/customers-card/customers-card.component.sandbox\",\"srcPath\":\"/Users/danwahlin/Desktop/demos/angular-jumpstart/src\",\"searchKey\":\"CustomersCardComponent\",\"name\":\"CustomersCardComponent\",\"label\":\"\",\"scenarioMenuItems\":[{\"key\":1,\"description\":\"With Many Customers\"},{\"key\":2,\"description\":\"With 10 Customers\"},{\"key\":3,\"description\":\"With 4 Customers\"},{\"key\":4,\"description\":\"Without Customers\"}]},{\"key\":\"./app/customers/customers-grid/customers-grid.component.sandbox\",\"srcPath\":\"/Users/danwahlin/Desktop/demos/angular-jumpstart/src\",\"searchKey\":\"CustomersGridComponent\",\"name\":\"CustomersGridComponent\",\"label\":\"\",\"scenarioMenuItems\":[{\"key\":1,\"description\":\"With Many Customers\"},{\"key\":2,\"description\":\"With 10 Customers\"},{\"key\":3,\"description\":\"With 4 Customers\"},{\"key\":4,\"description\":\"Without Customers\"}]},{\"key\":\"./app/customers/customers.component.sandbox\",\"srcPath\":\"/Users/danwahlin/Desktop/demos/angular-jumpstart/src\",\"searchKey\":\"CustomersComponent\",\"name\":\"CustomersComponent\",\"label\":\"\",\"scenarioMenuItems\":[{\"key\":1,\"description\":\"With Customers\"}]}]; \n/*END_GET_SANDBOX_MENU_ITEMS*/\n }\n}", "properties": [], "methods": [ { "name": "getSandbox", "args": [ { "name": "path", "type": "string", "deprecated": false, "deprecationMessage": "" } ], "optional": false, "returnType": "any", "typeParameters": [], "line": 5, "deprecated": false, "deprecationMessage": "", "jsdoctags": [ { "name": "path", "type": "string", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] }, { "name": "getSandboxMenuItems", "args": [], "optional": false, "returnType": "any", "typeParameters": [], "line": 24, "deprecated": false, "deprecationMessage": "" } ], "indexSignatures": [], "inputsClass": [], "outputsClass": [], "hostBindings": [], "hostListeners": [] }, { "name": "ValidationService", "id": "class-ValidationService-c76cbeeceb5e22667127e797db450d820dded1a974490d4b1e69daa1991163f93db5a41d41ad42d45784f960843cb55ea87a383c81c4c5dd8eb1a1c1a8543674", "file": "src/app/core/services/validation.service.ts", "deprecated": false, "deprecationMessage": "", "type": "class", "sourceCode": "import { AbstractControl } from '@angular/forms';\n\nexport class ValidationService {\n\n static getValidatorErrorMessage(code: string) {\n const config: any = {\n 'required': 'Required',\n 'invalidCreditCard': 'Is invalid credit card number',\n 'invalidEmailAddress': 'Invalid email address',\n 'invalidPassword': 'Invalid password. Password must be at least 6 characters long, and contain a number.'\n };\n return config[code];\n }\n\n static creditCardValidator(control: AbstractControl) {\n // Visa, MasterCard, American Express, Diners Club, Discover, JCB\n // tslint:disable-next-line\n if (control.value.match(/^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\\d{3})\\d{11})$/)) {\n return null;\n } else {\n return { 'invalidCreditCard': true };\n }\n }\n\n static emailValidator(control: AbstractControl) {\n // RFC 2822 compliant regex\n // tslint:disable-next-line\n if (control.value.match(/[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/)) {\n return null;\n } else {\n return { 'invalidEmailAddress': true };\n }\n }\n\n static passwordValidator(control: AbstractControl) {\n // {6,100} - Assert password is between 6 and 100 characters\n // (?=.*[0-9]) - Assert a string has at least one number\n // (?!.*\\s) - Spaces are not allowed\n // tslint:disable-next-line\n if (control.value.match(/^(?=.*\\d)(?=.*[a-zA-Z!@#$%^&*])(?!.*\\s).{6,100}$/)) {\n return null;\n } else {\n return { 'invalidPassword': true };\n }\n }\n}\n", "properties": [], "methods": [ { "name": "creditCardValidator", "args": [ { "name": "control", "type": "AbstractControl", "deprecated": false, "deprecationMessage": "" } ], "optional": false, "returnType": "{ invalidCreditCard: boolean; }", "typeParameters": [], "line": 16, "deprecated": false, "deprecationMessage": "", "modifierKind": [ 124 ], "jsdoctags": [ { "name": "control", "type": "AbstractControl", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] }, { "name": "emailValidator", "args": [ { "name": "control", "type": "AbstractControl", "deprecated": false, "deprecationMessage": "" } ], "optional": false, "returnType": "{ invalidEmailAddress: boolean; }", "typeParameters": [], "line": 26, "deprecated": false, "deprecationMessage": "", "modifierKind": [ 124 ], "jsdoctags": [ { "name": "control", "type": "AbstractControl", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] }, { "name": "getValidatorErrorMessage", "args": [ { "name": "code", "type": "string", "deprecated": false, "deprecationMessage": "" } ], "optional": false, "returnType": "any", "typeParameters": [], "line": 6, "deprecated": false, "deprecationMessage": "", "modifierKind": [ 124 ], "jsdoctags": [ { "name": "code", "type": "string", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] }, { "name": "passwordValidator", "args": [ { "name": "control", "type": "AbstractControl", "deprecated": false, "deprecationMessage": "" } ], "optional": false, "returnType": "{ invalidPassword: boolean; }", "typeParameters": [], "line": 36, "deprecated": false, "deprecationMessage": "", "modifierKind": [ 124 ], "jsdoctags": [ { "name": "control", "type": "AbstractControl", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] } ], "indexSignatures": [], "inputsClass": [], "outputsClass": [], "hostBindings": [], "hostListeners": [] } ], "directives": [ { "name": "SortByDirective", "id": "directive-SortByDirective-3185cd9e0f59b504b68db8d5e28b9917cb15bdaf674a55a11446e89ff0b806ca13efe3759cef5fa5ee7484482a49fc81587c1d787bda97acd45e4d58e71d212c", "file": "src/app/shared/directives/sortby.directive.ts", "type": "directive", "description": "", "rawdescription": "\n", "sourceCode": "import { Directive, Input, Output, EventEmitter, HostListener } from '@angular/core';\n\n@Directive({\n selector: '[cmSortBy]'\n})\nexport class SortByDirective {\n\n private sortProperty: string = '';\n\n @Output()\n sorted: EventEmitter = new EventEmitter();\n\n constructor() { }\n\n @Input('cmSortBy')\n set sortBy(value: string) {\n this.sortProperty = value;\n }\n\n @HostListener('click', ['$event'])\n onClick(e: Event) {\n e.preventDefault();\n this.sorted.next(this.sortProperty); // Raise clicked event\n }\n\n\n\n\n}\n", "selector": "[cmSortBy]", "providers": [], "inputsClass": [ { "name": "cmSortBy", "deprecated": false, "deprecationMessage": "", "line": 16, "type": "string", "decorators": [] } ], "outputsClass": [ { "name": "sorted", "defaultValue": "new EventEmitter()", "deprecated": false, "deprecationMessage": "", "line": 11, "type": "EventEmitter" } ], "deprecated": false, "deprecationMessage": "", "hostBindings": [], "hostListeners": [ { "name": "click", "args": [ { "name": "e", "type": "Event", "deprecated": false, "deprecationMessage": "" } ], "argsDecorator": [ "$event" ], "deprecated": false, "deprecationMessage": "", "line": 21 } ], "propertiesClass": [ { "name": "sortProperty", "defaultValue": "''", "deprecated": false, "deprecationMessage": "", "type": "string", "optional": false, "description": "", "line": 8, "modifierKind": [ 121 ] } ], "methodsClass": [ { "name": "onClick", "args": [ { "name": "e", "type": "Event", "deprecated": false, "deprecationMessage": "" } ], "optional": false, "returnType": "void", "typeParameters": [], "line": 21, "deprecated": false, "deprecationMessage": "", "decorators": [ { "name": "HostListener", "stringifiedArguments": "'click', ['$event']" } ], "jsdoctags": [ { "name": "e", "type": "Event", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] } ], "constructorObj": { "name": "constructor", "description": "", "deprecated": false, "deprecationMessage": "", "args": [], "line": 11 }, "accessors": { "sortBy": { "name": "sortBy", "setSignature": { "name": "sortBy", "type": "void", "deprecated": false, "deprecationMessage": "", "args": [ { "name": "value", "type": "string", "deprecated": false, "deprecationMessage": "" } ], "returnType": "void", "line": 16, "jsdoctags": [ { "name": "value", "type": "string", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] } } } } ], "components": [ { "name": "AboutComponent", "id": "component-AboutComponent-d59d9dbb433115546c5cfccf8f010c3cc21815a3d500350d960451d8edd2997d43b36896c4e63cb3641df045ad6fe391320aff3d56cc1cc87974955dfb89e1a0", "file": "src/app/about/about.component.ts", "encapsulation": [], "entryComponents": [], "inputs": [], "outputs": [], "providers": [], "selector": "cm-about", "styleUrls": [], "styles": [], "templateUrl": [ "./about.component.html" ], "viewProviders": [], "inputsClass": [], "outputsClass": [], "propertiesClass": [], "methodsClass": [ { "name": "ngOnInit", "args": [], "optional": false, "returnType": "void", "typeParameters": [], "line": 11, "deprecated": false, "deprecationMessage": "" } ], "deprecated": false, "deprecationMessage": "", "hostBindings": [], "hostListeners": [], "description": "", "rawdescription": "\n", "type": "component", "sourceCode": "import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'cm-about',\n templateUrl: './about.component.html'\n})\nexport class AboutComponent implements OnInit {\n\n constructor() { }\n\n ngOnInit() {\n\n }\n\n}\n", "assetsDirs": [], "styleUrlsData": "", "stylesData": "", "constructorObj": { "name": "constructor", "description": "", "deprecated": false, "deprecationMessage": "", "args": [], "line": 7 }, "implements": [ "OnInit" ], "templateData": "
\n
\n
\n

About

\n
\n
\n
\n
\n
Created by:
\n \n
\n
\n \n
\n \n
\n
\n
" }, { "name": "AppComponent", "id": "component-AppComponent-3a385b85c0341a84bb09ccf96cd3dca77a277dbd79ec8eaa657f8be897200c5cb11af701293a9327a7dddf0b65d2c61135b51961cd67f3dfe430fe58df63643f", "file": "src/app/app.component.ts", "encapsulation": [], "entryComponents": [], "inputs": [], "outputs": [], "providers": [], "selector": "cm-app-component", "styleUrls": [], "styles": [], "templateUrl": [ "./app.component.html" ], "viewProviders": [], "inputsClass": [], "outputsClass": [], "propertiesClass": [], "methodsClass": [], "deprecated": false, "deprecationMessage": "", "hostBindings": [], "hostListeners": [], "description": "", "rawdescription": "\n", "type": "component", "sourceCode": "import { Component } from '@angular/core';\n\n@Component({\n selector: 'cm-app-component',\n templateUrl: './app.component.html'\n})\nexport class AppComponent {\n\n}\n", "assetsDirs": [], "styleUrlsData": "", "stylesData": "", "templateData": "
\n \n \n \n \n \n    Loading\n \n
\n

" }, { "name": "ButtonComponent", "id": "component-ButtonComponent-4ef205c97a334c309aa4001c8ab4a6d9571dcae18d0e85aaf0d367467ab5d3a9f13ab3573726f1fcb409bc9b49894dadfb80b1bbe1b6ba7041455ad9d4922004", "file": "src/stories/button.component.ts", "encapsulation": [], "entryComponents": [], "inputs": [], "outputs": [], "providers": [], "selector": "storybook-button", "styleUrls": [ "./button.css" ], "styles": [], "template": "", "templateUrl": [], "viewProviders": [], "inputsClass": [ { "name": "backgroundColor", "deprecated": false, "deprecationMessage": "", "rawdescription": "\n\nWhat background color to use\n", "description": "

What background color to use

\n", "line": 26, "type": "string", "decorators": [] }, { "name": "label", "defaultValue": "'Button'", "deprecated": false, "deprecationMessage": "", "jsdoctags": [ { "pos": 711, "end": 724, "flags": 4227072, "modifierFlagsCache": 0, "transformFlags": 0, "kind": 325, "tagName": { "pos": 712, "end": 720, "flags": 4227072, "modifierFlagsCache": 0, "transformFlags": 0, "kind": 79, "escapedText": "required" }, "comment": "" } ], "rawdescription": "\n\nButton contents\n\n", "description": "

Button contents

\n", "line": 40, "type": "string", "decorators": [] }, { "name": "primary", "defaultValue": "false", "deprecated": false, "deprecationMessage": "", "rawdescription": "\n\nIs this the principal call to action on the page?\n", "description": "

Is this the principal call to action on the page?

\n", "line": 20, "type": "boolean", "decorators": [] }, { "name": "size", "defaultValue": "'medium'", "deprecated": false, "deprecationMessage": "", "rawdescription": "\n\nHow large should the button be?\n", "description": "

How large should the button be?

\n", "line": 32, "type": "\"small\" | \"medium\" | \"large\"", "decorators": [] } ], "outputsClass": [ { "name": "onClick", "defaultValue": "new EventEmitter()", "deprecated": false, "deprecationMessage": "", "rawdescription": "\n\nOptional click handler\n", "description": "

Optional click handler

\n", "line": 46, "type": "EventEmitter" } ], "propertiesClass": [], "methodsClass": [], "deprecated": false, "deprecationMessage": "", "hostBindings": [], "hostListeners": [], "description": "", "rawdescription": "\n", "type": "component", "sourceCode": "import { Component, Input, Output, EventEmitter } from '@angular/core';\n\n@Component({\n selector: 'storybook-button',\n template: ` \n {{ label }}\n `,\n styleUrls: ['./button.css'],\n})\nexport default class ButtonComponent {\n /**\n * Is this the principal call to action on the page?\n */\n @Input()\n primary = false;\n\n /**\n * What background color to use\n */\n @Input()\n backgroundColor?: string;\n\n /**\n * How large should the button be?\n */\n @Input()\n size: 'small' | 'medium' | 'large' = 'medium';\n\n /**\n * Button contents\n *\n * @required\n */\n @Input()\n label = 'Button';\n\n /**\n * Optional click handler\n */\n @Output()\n onClick = new EventEmitter();\n\n public get classes(): string[] {\n const mode = this.primary ? 'storybook-button--primary' : 'storybook-button--secondary';\n\n return ['storybook-button', `storybook-button--${this.size}`, mode];\n }\n}\n", "assetsDirs": [], "styleUrlsData": [ { "data": ".storybook-button {\n font-family: 'Nunito Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;\n font-weight: 700;\n border: 0;\n border-radius: 3em;\n cursor: pointer;\n display: inline-block;\n line-height: 1;\n}\n.storybook-button--primary {\n color: white;\n background-color: #1ea7fd;\n}\n.storybook-button--secondary {\n color: #333;\n background-color: transparent;\n box-shadow: rgba(0, 0, 0, 0.15) 0px 0px 0px 1px inset;\n}\n.storybook-button--small {\n font-size: 12px;\n padding: 10px 16px;\n}\n.storybook-button--medium {\n font-size: 14px;\n padding: 11px 20px;\n}\n.storybook-button--large {\n font-size: 16px;\n padding: 12px 24px;\n}\n", "styleUrl": "./button.css" } ], "stylesData": "", "accessors": { "classes": { "name": "classes", "getSignature": { "name": "classes", "type": "[]", "returnType": "string[]", "line": 48 } } } }, { "name": "CustomerComponent", "id": "component-CustomerComponent-67de2143a23dc7ea05a550a21135e444028fdaeeb210f5fde5f8b5a393d771d314961d34469e295d362f0a4706a25c2d7411ed3837652083a74a670e0e2c1a45", "file": "src/app/customer/customer.component.ts", "encapsulation": [], "entryComponents": [], "inputs": [], "outputs": [], "providers": [], "selector": "cm-orders", "styleUrls": [], "styles": [], "templateUrl": [ "./customer.component.html" ], "viewProviders": [], "inputsClass": [], "outputsClass": [], "propertiesClass": [], "methodsClass": [ { "name": "ngOnInit", "args": [], "optional": false, "returnType": "void", "typeParameters": [], "line": 15, "deprecated": false, "deprecationMessage": "" } ], "deprecated": false, "deprecationMessage": "", "hostBindings": [], "hostListeners": [], "description": "", "rawdescription": "\n", "type": "component", "sourceCode": "import { Component, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\n\n@Component({\n selector: 'cm-orders',\n templateUrl: './customer.component.html'\n})\nexport class CustomerComponent implements OnInit {\n\n // displayMode: CustomerDisplayModeEnum;\n // displayModeEnum = CustomerDisplayModeEnum;\n\n constructor(private router: Router) { }\n\n ngOnInit() {\n\n // No longer needed due to routerLinkActive feature in Angular\n // const path = this.router.url.split('/')[3];\n // switch (path) {\n // case 'details':\n // this.displayMode = CustomerDisplayModeEnum.Details;\n // break;\n // case 'orders':\n // this.displayMode = CustomerDisplayModeEnum.Orders;\n // break;\n // case 'edit':\n // this.displayMode = CustomerDisplayModeEnum.Edit;\n // break;\n // }\n }\n\n}\n\n// enum CustomerDisplayModeEnum {\n// Details=0,\n// Orders=1,\n// Edit=2\n// }\n", "assetsDirs": [], "styleUrlsData": "", "stylesData": "", "constructorObj": { "name": "constructor", "description": "", "deprecated": false, "deprecationMessage": "", "args": [ { "name": "router", "type": "Router", "deprecated": false, "deprecationMessage": "" } ], "line": 8, "jsdoctags": [ { "name": "router", "type": "Router", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] }, "implements": [ "OnInit" ], "templateData": "
\n
\n
\n

  Customer Information

\n
\n
\n \n
\n \n
\n
\n View all Customers\n
\n
\n
\n\n\n\n\n\n\n" }, { "name": "CustomerDetailsComponent", "id": "component-CustomerDetailsComponent-ce986c8d87c666bbf715cc597382142bb020d6e2a8cbd3de73860519054e8e1788f993e51e0ecfe60515d518a944ef60297f9673b5f754dc0a884103c5d324f1", "file": "src/app/customer/customer-details/customer-details.component.ts", "encapsulation": [], "entryComponents": [], "inputs": [], "outputs": [], "providers": [], "selector": "cm-customer-details", "styleUrls": [ "./customer-details.component.css" ], "styles": [], "templateUrl": [ "./customer-details.component.html" ], "viewProviders": [], "inputsClass": [], "outputsClass": [], "propertiesClass": [ { "name": "customer", "defaultValue": "null", "deprecated": false, "deprecationMessage": "", "type": "ICustomer | null", "optional": false, "description": "", "line": 14 }, { "name": "mapComponentRef", "defaultValue": "{} as ComponentRef", "deprecated": false, "deprecationMessage": "", "type": "ComponentRef", "optional": false, "description": "", "line": 16 }, { "name": "mapEnabled", "defaultValue": "false", "deprecated": false, "deprecationMessage": "", "type": "boolean", "optional": false, "description": "", "line": 15 }, { "name": "mapsViewContainerRef", "defaultValue": "{} as ViewContainerRef", "deprecated": false, "deprecationMessage": "", "type": "ViewContainerRef", "optional": false, "description": "", "line": 19, "decorators": [ { "name": "ViewChild", "stringifiedArguments": "'mapsContainer', {read: ViewContainerRef}" } ], "modifierKind": [ 121 ] } ], "methodsClass": [ { "name": "lazyLoadMapComponent", "args": [], "optional": false, "returnType": "any", "typeParameters": [], "line": 42, "deprecated": false, "deprecationMessage": "", "modifierKind": [ 131 ] }, { "name": "ngOnInit", "args": [], "optional": false, "returnType": "void", "typeParameters": [], "line": 25, "deprecated": false, "deprecationMessage": "" } ], "deprecated": false, "deprecationMessage": "", "hostBindings": [], "hostListeners": [], "description": "", "rawdescription": "\n", "type": "component", "sourceCode": "import { Component, OnInit, ComponentRef, ViewChild, ViewContainerRef, ComponentFactoryResolver } from '@angular/core';\nimport { ActivatedRoute, Params } from '@angular/router';\n\nimport { ICustomer } from '../../shared/interfaces';\nimport { DataService } from '../../core/services/data.service';\n\n@Component({\n selector: 'cm-customer-details',\n templateUrl: './customer-details.component.html',\n styleUrls: ['./customer-details.component.css']\n})\nexport class CustomerDetailsComponent implements OnInit {\n\n customer: ICustomer | null = null;\n mapEnabled: boolean = false;\n mapComponentRef: ComponentRef = {} as ComponentRef;\n\n @ViewChild('mapsContainer', { read: ViewContainerRef }) \n private mapsViewContainerRef: ViewContainerRef = {} as ViewContainerRef;\n\n constructor(private route: ActivatedRoute, \n private dataService: DataService,\n private componentFactoryResolver: ComponentFactoryResolver) { }\n\n ngOnInit() {\n // Subscribe to params so if it changes we pick it up. Could use this.route.parent.snapshot.params[\"id\"] to simplify it.\n this.route.parent?.params.subscribe((params: Params) => {\n const id = +params['id'];\n if (id) {\n this.dataService.getCustomer(id)\n .subscribe((customer: ICustomer) => {\n this.customer = customer;\n if (this.customer && this.customer.latitude) {\n this.lazyLoadMapComponent();\n // this.mapEnabled = true; // For eager loading map\n }\n });\n }\n });\n }\n\n async lazyLoadMapComponent() {\n if (!this.mapsViewContainerRef.length) {\n // Lazy load MapComponent\n const { MapComponent } = await import('../../shared/map/map.component');\n console.log('Lazy loaded map component!');\n const component = this.componentFactoryResolver.resolveComponentFactory(MapComponent);\n this.mapComponentRef = this.mapsViewContainerRef.createComponent(component);\n this.mapComponentRef.instance.zoom = 10;\n this.mapComponentRef.instance.customer = this.customer;\n this.mapComponentRef.instance.enabled = true;\n }\n }\n\n\n}\n", "assetsDirs": [], "styleUrlsData": [ { "data": ".details-image {\n height:100px;width:100px;margin-top:10px;\n}", "styleUrl": "./customer-details.component.css" } ], "stylesData": "", "constructorObj": { "name": "constructor", "description": "", "deprecated": false, "deprecationMessage": "", "args": [ { "name": "route", "type": "ActivatedRoute", "deprecated": false, "deprecationMessage": "" }, { "name": "dataService", "type": "DataService", "deprecated": false, "deprecationMessage": "" }, { "name": "componentFactoryResolver", "type": "ComponentFactoryResolver", "deprecated": false, "deprecationMessage": "" } ], "line": 19, "jsdoctags": [ { "name": "route", "type": "ActivatedRoute", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } }, { "name": "dataService", "type": "DataService", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } }, { "name": "componentFactoryResolver", "type": "ComponentFactoryResolver", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] }, "implements": [ "OnInit" ], "templateData": "
\n
\n
\n \n
\n
\n

\n {{ customer.firstName | capitalize }} {{ customer.lastName | capitalize }}  \n

\n
\n {{ customer.address }}\n
\n {{ customer.city }}, {{ customer.state.name }}\n
\n
\n

\n
\n
\n \n \n \n
\n \n
\n
\n
\n
\n
\n No customer found\n
" }, { "name": "CustomerEditComponent", "id": "component-CustomerEditComponent-788d55b60c90741874c87b0c829b0768ffb360b610f730a58d3edcdb7336c5ef881a3a62e7520b6f0992e48b28e99bc7d5c694371590aefbda4f0063009f62f5", "file": "src/app/customer/customer-edit/customer-edit.component.ts", "encapsulation": [], "entryComponents": [], "inputs": [], "outputs": [], "providers": [], "selector": "cm-customer-edit", "styleUrls": [ "./customer-edit.component.css" ], "styles": [], "templateUrl": [ "./customer-edit.component.html" ], "viewProviders": [], "inputsClass": [], "outputsClass": [], "propertiesClass": [ { "name": "customer", "defaultValue": "{\n id: 0,\n firstName: '',\n lastName: '',\n gender: '',\n address: '',\n city: '',\n state: {\n abbreviation: '',\n name: ''\n }\n }", "deprecated": false, "deprecationMessage": "", "type": "ICustomer", "optional": false, "description": "", "line": 18 }, { "name": "customerForm", "defaultValue": "{} as NgForm", "deprecated": false, "deprecationMessage": "", "type": "NgForm", "optional": false, "description": "", "line": 35, "decorators": [ { "name": "ViewChild", "stringifiedArguments": "'customerForm', {static: true}" } ] }, { "name": "deleteMessageEnabled", "defaultValue": "false", "deprecated": false, "deprecationMessage": "", "type": "boolean", "optional": false, "description": "", "line": 33 }, { "name": "errorMessage", "defaultValue": "''", "deprecated": false, "deprecationMessage": "", "type": "string", "optional": false, "description": "", "line": 32 }, { "name": "operationText", "defaultValue": "'Insert'", "deprecated": false, "deprecationMessage": "", "type": "string", "optional": false, "description": "", "line": 34 }, { "name": "states", "defaultValue": "[]", "deprecated": false, "deprecationMessage": "", "type": "IState[]", "optional": false, "description": "", "line": 31 } ], "methodsClass": [ { "name": "cancel", "args": [ { "name": "event", "type": "Event", "deprecated": false, "deprecationMessage": "" } ], "optional": false, "returnType": "void", "typeParameters": [], "line": 98, "deprecated": false, "deprecationMessage": "", "jsdoctags": [ { "name": "event", "type": "Event", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] }, { "name": "canDeactivate", "args": [], "optional": false, "returnType": "Promise | boolean", "typeParameters": [], "line": 117, "deprecated": false, "deprecationMessage": "" }, { "name": "delete", "args": [ { "name": "event", "type": "Event", "deprecated": false, "deprecationMessage": "" } ], "optional": false, "returnType": "void", "typeParameters": [], "line": 104, "deprecated": false, "deprecationMessage": "", "jsdoctags": [ { "name": "event", "type": "Event", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] }, { "name": "getCustomer", "args": [ { "name": "id", "type": "number", "deprecated": false, "deprecationMessage": "" } ], "optional": false, "returnType": "void", "typeParameters": [], "line": 59, "deprecated": false, "deprecationMessage": "", "jsdoctags": [ { "name": "id", "type": "number", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] }, { "name": "ngOnInit", "args": [], "optional": false, "returnType": "void", "typeParameters": [], "line": 44, "deprecated": false, "deprecationMessage": "" }, { "name": "submit", "args": [], "optional": false, "returnType": "void", "typeParameters": [], "line": 65, "deprecated": false, "deprecationMessage": "" } ], "deprecated": false, "deprecationMessage": "", "hostBindings": [], "hostListeners": [], "description": "", "rawdescription": "\n", "type": "component", "sourceCode": "import { Component, OnInit, ViewChild } from '@angular/core';\nimport { Router, ActivatedRoute, Params } from '@angular/router';\nimport { NgForm } from '@angular/forms';\n\nimport { DataService } from '../../core/services/data.service';\nimport { ModalService, IModalContent } from '../../core/modal/modal.service';\nimport { ICustomer, IState } from '../../shared/interfaces';\nimport { GrowlerService, GrowlerMessageType } from '../../core/growler/growler.service';\nimport { LoggerService } from '../../core/services/logger.service';\n\n@Component({\n selector: 'cm-customer-edit',\n templateUrl: './customer-edit.component.html',\n styleUrls: ['./customer-edit.component.css']\n})\nexport class CustomerEditComponent implements OnInit {\n\n customer: ICustomer =\n {\n id: 0,\n firstName: '',\n lastName: '',\n gender: '',\n address: '',\n city: '',\n state: {\n abbreviation: '',\n name: ''\n }\n };\n states: IState[] = [];\n errorMessage: string = '';\n deleteMessageEnabled: boolean = false;\n operationText = 'Insert';\n @ViewChild('customerForm', { static: true }) customerForm: NgForm = {} as NgForm;\n\n constructor(private router: Router,\n private route: ActivatedRoute,\n private dataService: DataService,\n private growler: GrowlerService,\n private modalService: ModalService,\n private logger: LoggerService) { }\n\n ngOnInit() {\n // Subscribe to params so if it changes we pick it up. Don't technically need that here\n // since param won't be changing while component is alive.\n // Could use this.route.parent.snapshot.params[\"id\"] to simplify it.\n this.route.parent?.params.subscribe((params: Params) => {\n const id = +params['id'];\n if (id !== 0) {\n this.operationText = 'Update';\n this.getCustomer(id);\n }\n });\n\n this.dataService.getStates().subscribe((states: IState[]) => this.states = states);\n }\n\n getCustomer(id: number) {\n this.dataService.getCustomer(id).subscribe((customer: ICustomer) => {\n this.customer = customer;\n });\n }\n\n submit() {\n if (this.customer.id === 0) {\n this.dataService.insertCustomer(this.customer)\n .subscribe((insertedCustomer: ICustomer) => {\n if (insertedCustomer) {\n // Mark form as pristine so that CanDeactivateGuard won't prompt before navigation\n this.customerForm.form.markAsPristine();\n this.router.navigate(['/customers']);\n } else {\n const msg = 'Unable to insert customer';\n this.growler.growl(msg, GrowlerMessageType.Danger);\n this.errorMessage = msg;\n }\n },\n (err: any) => this.logger.log(err));\n } else {\n this.dataService.updateCustomer(this.customer)\n .subscribe((status: boolean) => {\n if (status) {\n // Mark form as pristine so that CanDeactivateGuard won't prompt before navigation\n this.customerForm.form.markAsPristine();\n this.growler.growl('Operation performed successfully.', GrowlerMessageType.Success);\n // this.router.navigate(['/customers']);\n } else {\n const msg = 'Unable to update customer';\n this.growler.growl(msg, GrowlerMessageType.Danger);\n this.errorMessage = msg;\n }\n },\n (err: any) => this.logger.log(err));\n }\n }\n\n cancel(event: Event) {\n event.preventDefault();\n // Route guard will take care of showing modal dialog service if data is dirty\n this.router.navigate(['/customers']);\n }\n\n delete(event: Event) {\n event.preventDefault();\n this.dataService.deleteCustomer(this.customer.id)\n .subscribe((status: boolean) => {\n if (status) {\n this.router.navigate(['/customers']);\n } else {\n this.errorMessage = 'Unable to delete customer';\n }\n },\n (err) => this.logger.log(err));\n }\n\n canDeactivate(): Promise | boolean {\n if (!this.customerForm.dirty) {\n return true;\n }\n\n // Dirty show display modal dialog to user to confirm leaving\n const modalContent: IModalContent = {\n header: 'Lose Unsaved Changes?',\n body: 'You have unsaved changes! Would you like to leave the page and lose them?',\n cancelButtonText: 'Cancel',\n OKButtonText: 'Leave'\n };\n return this.modalService.show(modalContent);\n }\n\n}\n", "assetsDirs": [], "styleUrlsData": [ { "data": ".customer-form input[type='text'], \n.customer-form input[type='number'],\n.customer-form input[type='email'],\n.customer-form select {\n width:100%;\n}\n\n.customer-form .ng-invalid {\n border-left: 5px solid #a94442;\n}\n\n.customer-form .ng-valid {\n border-left: 5px solid #42A948;\n}", "styleUrl": "./customer-edit.component.css" } ], "stylesData": "", "constructorObj": { "name": "constructor", "description": "", "deprecated": false, "deprecationMessage": "", "args": [ { "name": "router", "type": "Router", "deprecated": false, "deprecationMessage": "" }, { "name": "route", "type": "ActivatedRoute", "deprecated": false, "deprecationMessage": "" }, { "name": "dataService", "type": "DataService", "deprecated": false, "deprecationMessage": "" }, { "name": "growler", "type": "GrowlerService", "deprecated": false, "deprecationMessage": "" }, { "name": "modalService", "type": "ModalService", "deprecated": false, "deprecationMessage": "" }, { "name": "logger", "type": "LoggerService", "deprecated": false, "deprecationMessage": "" } ], "line": 35, "jsdoctags": [ { "name": "router", "type": "Router", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } }, { "name": "route", "type": "ActivatedRoute", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } }, { "name": "dataService", "type": "DataService", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } }, { "name": "growler", "type": "GrowlerService", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } }, { "name": "modalService", "type": "ModalService", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } }, { "name": "logger", "type": "LoggerService", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] }, "implements": [ "OnInit" ], "templateData": "
\n
\n
\n \n \n
First Name is required
\n
\n
\n \n \n
Last Name is required
\n
\n
\n \n \n
Address is required
\n
\n
\n \n \n
City is required
\n
\n
\n \n \n
\n
\n
\n Delete Customer?    \n \n
\n   \n\n
\n   \n \n
\n
\n
{{ errorMessage }}
\n
\n
\n
" }, { "name": "CustomerOrdersComponent", "id": "component-CustomerOrdersComponent-aa2cd65111fa0857835b46dd08abaf46db7cc879f29871f9a0709810e52c825612323c56913e35c5efb7937e9eb625335cdf438821ee66ea6c0823b46a1ee324", "file": "src/app/customer/customer-orders/customer-orders.component.ts", "encapsulation": [], "entryComponents": [], "inputs": [], "outputs": [], "providers": [], "selector": "cm-customer-orders", "styleUrls": [], "styles": [], "templateUrl": [ "./customer-orders.component.html" ], "viewProviders": [], "inputsClass": [], "outputsClass": [], "propertiesClass": [ { "name": "customer", "defaultValue": "{} as ICustomer", "deprecated": false, "deprecationMessage": "", "type": "ICustomer", "optional": false, "description": "", "line": 14 }, { "name": "orders", "defaultValue": "[]", "deprecated": false, "deprecationMessage": "", "type": "IOrder[]", "optional": false, "description": "", "line": 13 } ], "methodsClass": [ { "name": "ngOnInit", "args": [], "optional": false, "returnType": "void", "typeParameters": [], "line": 18, "deprecated": false, "deprecationMessage": "" }, { "name": "ordersTrackBy", "args": [ { "name": "index", "type": "number", "deprecated": false, "deprecationMessage": "" }, { "name": "orderItem", "type": "any", "deprecated": false, "deprecationMessage": "" } ], "optional": false, "returnType": "number", "typeParameters": [], "line": 28, "deprecated": false, "deprecationMessage": "", "jsdoctags": [ { "name": "index", "type": "number", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } }, { "name": "orderItem", "type": "any", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] } ], "deprecated": false, "deprecationMessage": "", "hostBindings": [], "hostListeners": [], "description": "", "rawdescription": "\n", "type": "component", "sourceCode": "import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute, Params } from '@angular/router';\n\nimport { DataService } from '../../core/services/data.service';\nimport { ICustomer, IOrder, IOrderItem } from '../../shared/interfaces';\n\n@Component({\n selector: 'cm-customer-orders',\n templateUrl: './customer-orders.component.html'\n})\nexport class CustomerOrdersComponent implements OnInit {\n\n orders: IOrder[] = [];\n customer: ICustomer = {} as ICustomer;\n\n constructor(private route: ActivatedRoute, private dataService: DataService) { }\n\n ngOnInit() {\n // Subscribe to params so if it changes we pick it up. Could use this.route.parent.snapshot.params[\"id\"] to simplify it.\n this.route.parent?.params.subscribe((params: Params) => {\n const id = +params['id'];\n this.dataService.getCustomer(id).subscribe((customer: ICustomer) => {\n this.customer = customer;\n });\n });\n }\n\n ordersTrackBy(index: number, orderItem: any) {\n return index;\n }\n\n}\n", "assetsDirs": [], "styleUrlsData": "", "stylesData": "", "constructorObj": { "name": "constructor", "description": "", "deprecated": false, "deprecationMessage": "", "args": [ { "name": "route", "type": "ActivatedRoute", "deprecated": false, "deprecationMessage": "" }, { "name": "dataService", "type": "DataService", "deprecated": false, "deprecationMessage": "" } ], "line": 14, "jsdoctags": [ { "name": "route", "type": "ActivatedRoute", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } }, { "name": "dataService", "type": "DataService", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] }, "implements": [ "OnInit" ], "templateData": "
\n
\n

Orders for {{ customer.firstName | capitalize }} {{ customer.lastName | capitalize }}

\n
\n \n \n \n \n \n \n \n \n \n
{{ order.productName }}{{ order.itemCost | currency:'USD':'symbol' }}
 {{ customer.orderTotal | currency:'USD':'symbol' }}
\n
\n
\n No orders found\n
\n
\n No customer found\n
\n
" }, { "name": "CustomersCardComponent", "id": "component-CustomersCardComponent-424ec723b1dec94c993792252c9bd42db20da5c940d49b9202f4b3fae40e62faf4c2586d4270bb10ef614f83517d5b3db2745a524a44c26e3b05fad6a6c432d1", "file": "src/app/customers/customers-card/customers-card.component.ts", "changeDetection": "ChangeDetectionStrategy.OnPush", "encapsulation": [], "entryComponents": [], "inputs": [], "outputs": [], "providers": [], "selector": "cm-customers-card", "styleUrls": [ "./customers-card.component.css" ], "styles": [], "templateUrl": [ "./customers-card.component.html" ], "viewProviders": [], "inputsClass": [ { "name": "customers", "defaultValue": "[]", "deprecated": false, "deprecationMessage": "", "line": 17, "type": "ICustomer[]", "decorators": [] } ], "outputsClass": [], "propertiesClass": [ { "name": "trackbyService", "deprecated": false, "deprecationMessage": "", "type": "TrackByService", "optional": false, "description": "", "line": 19, "modifierKind": [ 123 ] } ], "methodsClass": [ { "name": "ngOnInit", "args": [], "optional": false, "returnType": "void", "typeParameters": [], "line": 21, "deprecated": false, "deprecationMessage": "" } ], "deprecated": false, "deprecationMessage": "", "hostBindings": [], "hostListeners": [], "description": "", "rawdescription": "\n", "type": "component", "sourceCode": "import { Component, Input, OnInit, ChangeDetectionStrategy } from '@angular/core';\n\nimport { ICustomer } from '../../shared/interfaces';\nimport { TrackByService } from '../../core/services/trackby.service';\n\n@Component({\n selector: 'cm-customers-card',\n templateUrl: './customers-card.component.html',\n styleUrls: [ './customers-card.component.css' ],\n // When using OnPush detectors, then the framework will check an OnPush\n // component when any of its input properties changes, when it fires\n // an event, or when an observable fires an event ~ Victor Savkin (Angular Team)\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class CustomersCardComponent implements OnInit {\n\n @Input() customers: ICustomer[] = [];\n\n constructor(public trackbyService: TrackByService) { }\n\n ngOnInit() {\n\n }\n\n}\n\n", "assetsDirs": [], "styleUrlsData": [ { "data": ".card-container {\n width:85%;\n}\n\n.card {\n background-color:#fff;\n border: 1px solid #d4d4d4;\n height:120px;\n margin-bottom: 20px;\n position: relative;\n}\n\n.card-header {\n background-color:#027FF4;\n font-size:14pt;\n color:white;\n padding:5px;\n width:100%;\n}\n\n.card-close {\n color: white;\n font-weight:bold;\n margin-right:5px;\n}\n\n.card-body {\n padding-left: 5px;\n}\n\n.card-body-left {\n margin-top: -5px;\n}\n\n.card-body-right {\n margin-left: 20px;\n margin-top: 2px;\n}\n\n.card-body-content {\n width: 100px;\n}\n\n.card-image {\n height:50px;width:50px;margin-top:10px;\n}\n\n.white {\n color: white;\n}\n\n.white:hover {\n color: white;\n}", "styleUrl": "./customers-card.component.css" } ], "stylesData": "", "constructorObj": { "name": "constructor", "description": "", "deprecated": false, "deprecationMessage": "", "args": [ { "name": "trackbyService", "type": "TrackByService", "deprecated": false, "deprecationMessage": "" } ], "line": 17, "jsdoctags": [ { "name": "trackbyService", "type": "TrackByService", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] }, "implements": [ "OnInit" ], "templateData": "
\n
\n
\n
\n \n
\n
\n
\n \n \n \n
\n
\n
{{customer.city | trim }}, {{customer.state.name}}
\n View Orders\n
\n
\n
\n
\n
\n
\n No Records Found\n
\n
\n
" }, { "name": "CustomersComponent", "id": "component-CustomersComponent-f18e3bc33e55e33862c69aeaaae28524d36ec718bfcababebf97fac194bf709fbe1b51a7a4d18c191b183bd626a5c87f931bd7dc4c8c3ff1058c6daf83615e21", "file": "src/app/customers/customers.component.ts", "encapsulation": [], "entryComponents": [], "inputs": [], "outputs": [], "providers": [], "selector": "cm-customers", "styleUrls": [], "styles": [], "templateUrl": [ "./customers.component.html" ], "viewProviders": [], "inputsClass": [], "outputsClass": [], "propertiesClass": [ { "name": "_filteredCustomers", "defaultValue": "[]", "deprecated": false, "deprecationMessage": "", "type": "ICustomer[]", "optional": false, "description": "", "line": 24 }, { "name": "customers", "defaultValue": "[]", "deprecated": false, "deprecationMessage": "", "type": "ICustomer[]", "optional": false, "description": "", "line": 18 }, { "name": "displayMode", "defaultValue": "DisplayModeEnum.Card", "deprecated": false, "deprecationMessage": "", "type": "DisplayModeEnum", "optional": false, "description": "", "line": 19 }, { "name": "displayModeEnum", "defaultValue": "DisplayModeEnum", "deprecated": false, "deprecationMessage": "", "type": "", "optional": false, "description": "", "line": 20 }, { "name": "filterText", "defaultValue": "''", "deprecated": false, "deprecationMessage": "", "type": "string", "optional": false, "description": "", "line": 17 }, { "name": "mapComponentRef", "defaultValue": "{} as ComponentRef", "deprecated": false, "deprecationMessage": "", "type": "ComponentRef", "optional": false, "description": "", "line": 23 }, { "name": "mapsViewContainerRef", "defaultValue": "{} as ViewContainerRef", "deprecated": false, "deprecationMessage": "", "type": "ViewContainerRef", "optional": false, "description": "", "line": 36, "decorators": [ { "name": "ViewChild", "stringifiedArguments": "'mapsContainer', {read: ViewContainerRef}" } ], "modifierKind": [ 121 ] }, { "name": "pageSize", "defaultValue": "10", "deprecated": false, "deprecationMessage": "", "type": "number", "optional": false, "description": "", "line": 22 }, { "name": "title", "defaultValue": "''", "deprecated": false, "deprecationMessage": "", "type": "string", "optional": false, "description": "", "line": 16 }, { "name": "totalRecords", "defaultValue": "0", "deprecated": false, "deprecationMessage": "", "type": "number", "optional": false, "description": "", "line": 21 } ], "methodsClass": [ { "name": "changeDisplayMode", "args": [ { "name": "mode", "type": "DisplayModeEnum", "deprecated": false, "deprecationMessage": "" } ], "optional": false, "returnType": "void", "typeParameters": [], "line": 51, "deprecated": false, "deprecationMessage": "", "jsdoctags": [ { "name": "mode", "type": "DisplayModeEnum", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] }, { "name": "filterChanged", "args": [ { "name": "data", "type": "string", "deprecated": false, "deprecationMessage": "" } ], "optional": false, "returnType": "void", "typeParameters": [], "line": 69, "deprecated": false, "deprecationMessage": "", "jsdoctags": [ { "name": "data", "type": "string", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] }, { "name": "getCustomersPage", "args": [ { "name": "page", "type": "number", "deprecated": false, "deprecationMessage": "" } ], "optional": false, "returnType": "void", "typeParameters": [], "line": 59, "deprecated": false, "deprecationMessage": "", "jsdoctags": [ { "name": "page", "type": "number", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] }, { "name": "lazyLoadMapComponent", "args": [], "optional": false, "returnType": "any", "typeParameters": [], "line": 79, "deprecated": false, "deprecationMessage": "", "modifierKind": [ 131 ] }, { "name": "ngOnInit", "args": [], "optional": false, "returnType": "void", "typeParameters": [], "line": 43, "deprecated": false, "deprecationMessage": "" }, { "name": "pageChanged", "args": [ { "name": "page", "type": "number", "deprecated": false, "deprecationMessage": "" } ], "optional": false, "returnType": "void", "typeParameters": [], "line": 55, "deprecated": false, "deprecationMessage": "", "jsdoctags": [ { "name": "page", "type": "number", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] }, { "name": "updateMapComponentDataPoints", "args": [], "optional": false, "returnType": "void", "typeParameters": [], "line": 93, "deprecated": false, "deprecationMessage": "" } ], "deprecated": false, "deprecationMessage": "", "hostBindings": [], "hostListeners": [], "description": "", "rawdescription": "\n", "type": "component", "sourceCode": "import { Component, OnInit, ViewChild, \n ViewContainerRef, ComponentFactoryResolver, ComponentRef } from '@angular/core';\n\nimport { DataService } from '../core/services/data.service';\nimport { ICustomer, IPagedResults } from '../shared/interfaces';\nimport { FilterService } from '../core/services/filter.service';\nimport { LoggerService } from '../core/services/logger.service';\n\n\n@Component({\n selector: 'cm-customers',\n templateUrl: './customers.component.html'\n})\nexport class CustomersComponent implements OnInit {\n\n title: string = '';\n filterText: string = '';\n customers: ICustomer[] = [];\n displayMode: DisplayModeEnum = DisplayModeEnum.Card;\n displayModeEnum = DisplayModeEnum;\n totalRecords = 0;\n pageSize = 10;\n mapComponentRef: ComponentRef = {} as ComponentRef;\n _filteredCustomers: ICustomer[] = [];\n\n get filteredCustomers() {\n return this._filteredCustomers;\n }\n\n set filteredCustomers(value: ICustomer[]) {\n this._filteredCustomers = value;\n this.updateMapComponentDataPoints();\n }\n\n @ViewChild('mapsContainer', { read: ViewContainerRef }) \n private mapsViewContainerRef: ViewContainerRef = {} as ViewContainerRef;\n\n constructor(private componentFactoryResolver: ComponentFactoryResolver,\n private dataService: DataService,\n private filterService: FilterService,\n private logger: LoggerService) { }\n\n ngOnInit() {\n this.title = 'Customers';\n this.filterText = 'Filter Customers:';\n this.displayMode = DisplayModeEnum.Card;\n\n this.getCustomersPage(1);\n }\n\n changeDisplayMode(mode: DisplayModeEnum) {\n this.displayMode = mode;\n }\n\n pageChanged(page: number) {\n this.getCustomersPage(page);\n }\n\n getCustomersPage(page: number) {\n this.dataService.getCustomersPage((page - 1) * this.pageSize, this.pageSize)\n .subscribe((response: IPagedResults) => {\n this.customers = this.filteredCustomers = response.results;\n this.totalRecords = response.totalRecords;\n },\n (err: any) => this.logger.log(err),\n () => this.logger.log('getCustomersPage() retrieved customers for page: ' + page));\n }\n\n filterChanged(data: string) {\n if (data && this.customers) {\n data = data.toUpperCase();\n const props = ['firstName', 'lastName', 'city', 'state.name'];\n this.filteredCustomers = this.filterService.filter(this.customers, data, props);\n } else {\n this.filteredCustomers = this.customers;\n }\n }\n\n async lazyLoadMapComponent() {\n this.changeDisplayMode(DisplayModeEnum.Map);\n if (!this.mapsViewContainerRef.length) {\n // Lazy load MapComponent\n const { MapComponent } = await import('../shared/map/map.component');\n console.log('Lazy loaded map component!');\n const component = this.componentFactoryResolver.resolveComponentFactory(MapComponent);\n this.mapComponentRef = this.mapsViewContainerRef.createComponent(component);\n this.mapComponentRef.instance.zoom = 2;\n this.mapComponentRef.instance.dataPoints = this.filteredCustomers;\n this.mapComponentRef.instance.enabled = true;\n }\n }\n\n updateMapComponentDataPoints() {\n if (this.mapComponentRef && this.mapComponentRef.instance) {\n this.mapComponentRef.instance.dataPoints = this.filteredCustomers;\n }\n }\n\n\n}\n\nenum DisplayModeEnum {\n Card = 0,\n Grid = 1,\n Map = 2\n}\n", "assetsDirs": [], "styleUrlsData": "", "stylesData": "", "constructorObj": { "name": "constructor", "description": "", "deprecated": false, "deprecationMessage": "", "args": [ { "name": "componentFactoryResolver", "type": "ComponentFactoryResolver", "deprecated": false, "deprecationMessage": "" }, { "name": "dataService", "type": "DataService", "deprecated": false, "deprecationMessage": "" }, { "name": "filterService", "type": "FilterService", "deprecated": false, "deprecationMessage": "" }, { "name": "logger", "type": "LoggerService", "deprecated": false, "deprecationMessage": "" } ], "line": 36, "jsdoctags": [ { "name": "componentFactoryResolver", "type": "ComponentFactoryResolver", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } }, { "name": "dataService", "type": "DataService", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } }, { "name": "filterService", "type": "FilterService", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } }, { "name": "logger", "type": "LoggerService", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] }, "implements": [ "OnInit" ], "accessors": { "filteredCustomers": { "name": "filteredCustomers", "setSignature": { "name": "filteredCustomers", "type": "void", "deprecated": false, "deprecationMessage": "", "args": [ { "name": "value", "type": "ICustomer[]", "deprecated": false, "deprecationMessage": "" } ], "returnType": "void", "line": 30, "jsdoctags": [ { "name": "value", "type": "ICustomer[]", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] }, "getSignature": { "name": "filteredCustomers", "type": "", "returnType": "", "line": 26 } } }, "templateData": "
\n
\n
\n

\n \n {{ title }}\n

\n
\n
\n
\n
\n
\n \n \n
\n
\n
\n \n \n \n \n\n \n
\n \n
\n\n \n \n\n \n \n
\n
\n" }, { "name": "CustomersGridComponent", "id": "component-CustomersGridComponent-2badf79b81a214e9c258a754a8785406dd41079dbeea26df6000e870f653b56ecb34b6a2c8d13a29664e171a0af1e4dd3c16ab6e69859f6146bac03e6657e1f7", "file": "src/app/customers/customers-grid/customers-grid.component.ts", "changeDetection": "ChangeDetectionStrategy.OnPush", "encapsulation": [], "entryComponents": [], "inputs": [], "outputs": [], "providers": [], "selector": "cm-customers-grid", "styleUrls": [ "./customers-grid.component.css" ], "styles": [], "templateUrl": [ "./customers-grid.component.html" ], "viewProviders": [], "inputsClass": [ { "name": "customers", "defaultValue": "[]", "deprecated": false, "deprecationMessage": "", "line": 18, "type": "ICustomer[]", "decorators": [] } ], "outputsClass": [], "propertiesClass": [ { "name": "trackbyService", "deprecated": false, "deprecationMessage": "", "type": "TrackByService", "optional": false, "description": "", "line": 20, "modifierKind": [ 123 ] } ], "methodsClass": [ { "name": "ngOnInit", "args": [], "optional": false, "returnType": "void", "typeParameters": [], "line": 22, "deprecated": false, "deprecationMessage": "" }, { "name": "sort", "args": [ { "name": "prop", "type": "string", "deprecated": false, "deprecationMessage": "" } ], "optional": false, "returnType": "void", "typeParameters": [], "line": 26, "deprecated": false, "deprecationMessage": "", "jsdoctags": [ { "name": "prop", "type": "string", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] } ], "deprecated": false, "deprecationMessage": "", "hostBindings": [], "hostListeners": [], "description": "", "rawdescription": "\n", "type": "component", "sourceCode": "import { Component, Input, OnInit, ChangeDetectionStrategy } from '@angular/core';\n\nimport { SorterService } from '../../core/services/sorter.service';\nimport { TrackByService } from '../../core/services/trackby.service';\nimport { ICustomer } from '../../shared/interfaces';\n\n@Component({\n selector: 'cm-customers-grid',\n templateUrl: './customers-grid.component.html',\n styleUrls: ['./customers-grid.component.css'],\n // When using OnPush detectors, then the framework will check an OnPush\n // component when any of its input properties changes, when it fires\n // an event, or when an observable fires an event ~ Victor Savkin (Angular Team)\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class CustomersGridComponent implements OnInit {\n\n @Input() customers: ICustomer[] = [];\n\n constructor(private sorterService: SorterService, public trackbyService: TrackByService) { }\n\n ngOnInit() {\n\n }\n\n sort(prop: string) {\n this.customers = this.sorterService.sort(this.customers, prop);\n }\n\n}\n", "assetsDirs": [], "styleUrlsData": [ { "data": ".grid-container div {\n padding-left: 0px;\n}\n\n.grid-container td {\n vertical-align: middle;\n}\n\n.grid-image {\n height:50px;width:50px;margin-top:10px;\n}", "styleUrl": "./customers-grid.component.css" } ], "stylesData": "", "constructorObj": { "name": "constructor", "description": "", "deprecated": false, "deprecationMessage": "", "args": [ { "name": "sorterService", "type": "SorterService", "deprecated": false, "deprecationMessage": "" }, { "name": "trackbyService", "type": "TrackByService", "deprecated": false, "deprecationMessage": "" } ], "line": 18, "jsdoctags": [ { "name": "sorterService", "type": "SorterService", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } }, { "name": "trackbyService", "type": "TrackByService", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] }, "implements": [ "OnInit" ], "templateData": "
\n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
 First NameLast NameAddressCityStateOrder Total 
\"Customer{{ customer.firstName | capitalize }}{{ customer.lastName | capitalize }}{{ customer.address }}{{ customer.city | trim }}{{ customer.state.name }}{{ customer.orderTotal | currency:'USD':'symbol' }}View Orders
 No Records Found
\n
\n
\n
\n
\n" }, { "name": "FilterTextboxComponent", "id": "component-FilterTextboxComponent-b2a344cc26c99bbaf1a353392bfa472a08caa5a7181fa02d717029d741db26fa45e96cccb9ae6d5f3ea6647b095ed5b8f3b1531b49b6d4dbf88617db133e9ebf", "file": "src/app/shared/filter-textbox/filter-textbox.component.ts", "encapsulation": [], "entryComponents": [], "inputs": [], "outputs": [], "providers": [], "selector": "cm-filter-textbox", "styleUrls": [ "./filter-textbox.component.css" ], "styles": [], "templateUrl": [ "./filter-textbox.component.html" ], "viewProviders": [], "inputsClass": [], "outputsClass": [ { "name": "changed", "defaultValue": "new EventEmitter()", "deprecated": false, "deprecationMessage": "", "line": 13, "type": "EventEmitter" } ], "propertiesClass": [ { "name": "model", "defaultValue": "{ filter: '' }", "deprecated": false, "deprecationMessage": "", "type": "literal type", "optional": false, "description": "", "line": 10 } ], "methodsClass": [ { "name": "filterChanged", "args": [ { "name": "event", "type": "any", "deprecated": false, "deprecationMessage": "" } ], "optional": false, "returnType": "void", "typeParameters": [], "line": 15, "deprecated": false, "deprecationMessage": "", "jsdoctags": [ { "name": "event", "type": "any", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] } ], "deprecated": false, "deprecationMessage": "", "hostBindings": [], "hostListeners": [], "description": "", "rawdescription": "\n", "type": "component", "sourceCode": "import { Component, Output, EventEmitter } from '@angular/core';\n\n@Component({\n selector: 'cm-filter-textbox',\n templateUrl: './filter-textbox.component.html',\n styleUrls: [ './filter-textbox.component.css' ]\n})\nexport class FilterTextboxComponent {\n\n model: { filter: string } = { filter: '' };\n\n @Output()\n changed: EventEmitter = new EventEmitter();\n\n filterChanged(event: any) {\n event.preventDefault();\n this.changed.emit(this.model.filter); // Raise changed event\n }\n}\n", "assetsDirs": [], "styleUrlsData": [ { "data": "cm-filter-textbox {\n margin-top: 5px;\n}\n", "styleUrl": "./filter-textbox.component.css" } ], "stylesData": "", "templateData": "
\n Filter:\n \n
" }, { "name": "GrowlerComponent", "id": "component-GrowlerComponent-48f5a0fd816c6b355b58a3a34a66ea921f513fd639d282db7fb88d7513dc1548e823b9c2e4f04c042cca5cb26db31e7370ff0acea53d913e199b86691eb97ed0", "file": "src/app/core/growler/growler.component.ts", "encapsulation": [], "entryComponents": [], "inputs": [], "outputs": [], "providers": [], "selector": "cm-growler", "styleUrls": [ "growler.component.css" ], "styles": [], "template": "
\n
\n {{ growl.message }}\n
\n
\n", "templateUrl": [], "viewProviders": [], "inputsClass": [ { "name": "position", "defaultValue": "'bottom-right'", "deprecated": false, "deprecationMessage": "", "line": 23, "type": "string", "decorators": [] }, { "name": "timeout", "defaultValue": "3000", "deprecated": false, "deprecationMessage": "", "line": 24, "type": "number", "decorators": [] } ], "outputsClass": [], "propertiesClass": [ { "name": "growlCount", "defaultValue": "0", "deprecated": false, "deprecationMessage": "", "type": "number", "optional": false, "description": "", "line": 20, "modifierKind": [ 121 ] }, { "name": "growls", "defaultValue": "[]", "deprecated": false, "deprecationMessage": "", "type": "Growl[]", "optional": false, "description": "", "line": 21 } ], "methodsClass": [ { "name": "growl", "args": [ { "name": "message", "type": "string", "deprecated": false, "deprecationMessage": "" }, { "name": "growlType", "type": "GrowlerMessageType", "deprecated": false, "deprecationMessage": "" } ], "optional": false, "returnType": "number", "typeParameters": [], "line": 40, "deprecated": false, "deprecationMessage": "", "rawdescription": "\n\nDisplays a growl message.\n\n", "description": "

Displays a growl message.

\n", "jsdoctags": [ { "name": { "pos": 973, "end": 980, "flags": 4227072, "modifierFlagsCache": 0, "transformFlags": 0, "kind": 79, "escapedText": "message" }, "type": "string", "deprecated": false, "deprecationMessage": "", "tagName": { "pos": 958, "end": 963, "flags": 4227072, "modifierFlagsCache": 0, "transformFlags": 0, "kind": 79, "escapedText": "param" }, "comment": "
    \n
  • The message to display.
  • \n
\n", "typeExpression": { "pos": 964, "end": 972, "flags": 4227072, "modifierFlagsCache": 0, "transformFlags": 0, "kind": 307, "type": { "pos": 965, "end": 971, "flags": 4194304, "modifierFlagsCache": 0, "transformFlags": 1, "kind": 149 } } }, { "name": { "pos": 1037, "end": 1046, "flags": 4227072, "modifierFlagsCache": 0, "transformFlags": 0, "kind": 79, "escapedText": "growlType" }, "type": "GrowlerMessageType", "deprecated": false, "deprecationMessage": "", "tagName": { "pos": 1012, "end": 1017, "flags": 4227072, "modifierFlagsCache": 0, "transformFlags": 0, "kind": 79, "escapedText": "param" }, "comment": "
    \n
  • The type of message to display (a GrowlMessageType enumeration)
  • \n
\n", "typeExpression": { "pos": 1018, "end": 1036, "flags": 4227072, "modifierFlagsCache": 0, "transformFlags": 0, "kind": 307, "type": { "pos": 1019, "end": 1035, "flags": 4194304, "modifierFlagsCache": 0, "transformFlags": 1, "kind": 177, "typeName": { "pos": 1019, "end": 1035, "flags": 4194304, "modifierFlagsCache": 0, "transformFlags": 0, "kind": 79, "escapedText": "GrowlMessageType" } } } }, { "tagName": { "pos": 1118, "end": 1124, "flags": 4227072, "modifierFlagsCache": 0, "transformFlags": 0, "kind": 79, "originalKeywordKind": 105, "escapedText": "return" }, "comment": "

id - Returns the ID for the generated growl

\n", "returnType": "number" } ] }, { "name": "ngOnInit", "args": [], "optional": false, "returnType": "void", "typeParameters": [], "line": 31, "deprecated": false, "deprecationMessage": "" }, { "name": "removeGrowl", "args": [ { "name": "id", "type": "number", "deprecated": false, "deprecationMessage": "" } ], "optional": false, "returnType": "void", "typeParameters": [], "line": 50, "deprecated": false, "deprecationMessage": "", "jsdoctags": [ { "name": "id", "type": "number", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] } ], "deprecated": false, "deprecationMessage": "", "hostBindings": [], "hostListeners": [], "description": "", "rawdescription": "\n", "type": "component", "sourceCode": "import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\n\nimport { GrowlerService, GrowlerMessageType } from './growler.service';\nimport { LoggerService } from '../services/logger.service';\n\n@Component({\n selector: 'cm-growler',\n template: `\n
\n
\n {{ growl.message }}\n
\n
\n `,\n styleUrls: ['growler.component.css']\n})\nexport class GrowlerComponent implements OnInit {\n\n private growlCount = 0;\n growls: Growl[] = [];\n\n @Input() position = 'bottom-right';\n @Input() timeout = 3000;\n\n constructor(private growlerService: GrowlerService,\n private logger: LoggerService) {\n growlerService.growl = this.growl.bind(this);\n }\n\n ngOnInit() { }\n\n /**\n * Displays a growl message.\n *\n * @param {string} message - The message to display.\n * @param {GrowlMessageType} growlType - The type of message to display (a GrowlMessageType enumeration)\n * @return {number} id - Returns the ID for the generated growl\n */\n growl(message: string, growlType: GrowlerMessageType): number {\n this.growlCount++;\n const bootstrapAlertType = GrowlerMessageType[growlType].toLowerCase();\n const messageType = `alert-${ bootstrapAlertType }`;\n\n const growl = new Growl(this.growlCount, message, messageType, this.timeout, this);\n this.growls.push(growl);\n return growl.id;\n }\n\n removeGrowl(id: number) {\n this.growls.forEach((growl: Growl, index: number) => {\n if (growl.id === id) {\n this.growls.splice(index, 1);\n this.growlCount--;\n this.logger.log('removed ' + id);\n }\n });\n }\n}\n\nclass Growl {\n\n enabled: boolean = false;\n timeoutId: number = 0;\n\n constructor(public id: number,\n public message: string,\n public messageType: string,\n private timeout: number,\n private growlerContainer: GrowlerComponent) {\n this.show();\n }\n\n show() {\n window.setTimeout(() => {\n this.enabled = true;\n this.setTimeout();\n }, 0);\n }\n\n setTimeout() {\n window.setTimeout(() => {\n this.hide();\n }, this.timeout);\n }\n\n hide() {\n this.enabled = false;\n window.setTimeout(() => {\n this.growlerContainer.removeGrowl(this.id);\n }, this.timeout);\n }\n\n}\n", "assetsDirs": [], "styleUrlsData": [ { "data": " .growler {\n position: fixed;\n z-index: 999999;\n }\n \n .growler.close-button:focus {\n outline: 0;\n }\n \n .growler.top-left {\n top: 12px;\n left: 12px;\n }\n \n .growler.top-right {\n top: 12px;\n right: 12px;\n }\n \n .growler.bottom-right {\n bottom: 12px;\n right: 12px;\n }\n \n .growler.bottom-left {\n bottom: 12px;\n left: 12px;\n }\n \n .growler.top-center {\n top: 12px;\n left: 50%;\n -webkit-transform: translate(-50%, 0%);\n transform: translate(-50%, 0%);\n }\n \n .growler.bottom-center {\n bottom: 12px;\n left: 50%;\n -webkit-transform: translate(-50%, 0%);\n transform: translate(-50%, 0%);\n }\n \n .growl {\n cursor: pointer;\n padding: 5;\n width: 285px;\n height: 65px; \n opacity: 0; \n display: flex;\n align-items: center;\n justify-content: center;\n \n -webkit-transition: opacity 1s;\n -moz-transition: opacity 1s; \n -o-transition: opacity 1s;\n transition: opacity 1s; \n } \n \n .growl.active { \n opacity: 1;\n } \n \n .growl-message {\n\n }", "styleUrl": "growler.component.css" } ], "stylesData": "", "constructorObj": { "name": "constructor", "description": "", "deprecated": false, "deprecationMessage": "", "args": [ { "name": "growlerService", "type": "GrowlerService", "deprecated": false, "deprecationMessage": "" }, { "name": "logger", "type": "LoggerService", "deprecated": false, "deprecationMessage": "" } ], "line": 24, "jsdoctags": [ { "name": "growlerService", "type": "GrowlerService", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } }, { "name": "logger", "type": "LoggerService", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] }, "implements": [ "OnInit" ] }, { "name": "HeaderComponent", "id": "component-HeaderComponent-0cd94fbc94a83702e45bf987cb3b3f9074d69cd27e6ca2e4fbac0dc5b5047bd4dc3a9ce8a77f6bd9ab7ae3e6ca8e49b34bed529ca0da0fa428fec544a0324870", "file": "src/stories/header.component.ts", "encapsulation": [], "entryComponents": [], "inputs": [], "outputs": [], "providers": [], "selector": "storybook-header", "styleUrls": [ "./header.css" ], "styles": [], "template": "
\n
\n \n \n \n \n \n \n \n

Acme

\n
\n
\n \n \n \n
\n
\n
", "templateUrl": [], "viewProviders": [], "inputsClass": [ { "name": "user", "defaultValue": "null", "deprecated": false, "deprecationMessage": "", "line": 54, "type": "User | null", "decorators": [] } ], "outputsClass": [ { "name": "onCreateAccount", "defaultValue": "new EventEmitter()", "deprecated": false, "deprecationMessage": "", "line": 63, "type": "EventEmitter" }, { "name": "onLogin", "defaultValue": "new EventEmitter()", "deprecated": false, "deprecationMessage": "", "line": 57, "type": "EventEmitter" }, { "name": "onLogout", "defaultValue": "new EventEmitter()", "deprecated": false, "deprecationMessage": "", "line": 60, "type": "EventEmitter" } ], "propertiesClass": [], "methodsClass": [], "deprecated": false, "deprecationMessage": "", "hostBindings": [], "hostListeners": [], "description": "", "rawdescription": "\n", "type": "component", "sourceCode": "import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { User } from './User';\n\n@Component({\n selector: 'storybook-header',\n template: `
\n
\n
\n \n \n \n \n \n \n \n

Acme

\n
\n
\n \n \n \n
\n
\n
`,\n styleUrls: ['./header.css'],\n})\nexport default class HeaderComponent {\n @Input()\n user: User | null = null;\n\n @Output()\n onLogin = new EventEmitter();\n\n @Output()\n onLogout = new EventEmitter();\n\n @Output()\n onCreateAccount = new EventEmitter();\n}\n", "assetsDirs": [], "styleUrlsData": [ { "data": ".wrapper {\n font-family: 'Nunito Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;\n border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n padding: 15px 20px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n}\n\nsvg {\n display: inline-block;\n vertical-align: top;\n}\n\nh1 {\n font-weight: 900;\n font-size: 20px;\n line-height: 1;\n margin: 6px 0 6px 10px;\n display: inline-block;\n vertical-align: top;\n}\n\nbutton + button {\n margin-left: 10px;\n}\n", "styleUrl": "./header.css" } ], "stylesData": "" }, { "name": "LoginComponent", "id": "component-LoginComponent-622a1dd2024a9df9bc64681d3068855fac9c5b278dd4fd0a4c0eb956ec4d9e419f7ceb2679d2306ec3535a8743bb04c36d89db4312141f93737a50c61c68025e", "file": "src/app/login/login.component.ts", "encapsulation": [], "entryComponents": [], "inputs": [], "outputs": [], "providers": [], "selector": "cm-login", "styleUrls": [ "./login.component.css" ], "styles": [], "templateUrl": [ "./login.component.html" ], "viewProviders": [], "inputsClass": [], "outputsClass": [], "propertiesClass": [ { "name": "errorMessage", "defaultValue": "''", "deprecated": false, "deprecationMessage": "", "type": "string", "optional": false, "description": "", "line": 18 }, { "name": "loginForm", "defaultValue": "{} as FormGroup", "deprecated": false, "deprecationMessage": "", "type": "FormGroup", "optional": false, "description": "", "line": 17 } ], "methodsClass": [ { "name": "buildForm", "args": [], "optional": false, "returnType": "void", "typeParameters": [], "line": 33, "deprecated": false, "deprecationMessage": "" }, { "name": "ngOnInit", "args": [], "optional": false, "returnType": "void", "typeParameters": [], "line": 29, "deprecated": false, "deprecationMessage": "" }, { "name": "submit", "args": [ { "type": "literal type", "deprecated": false, "deprecationMessage": "" } ], "optional": false, "returnType": "void", "typeParameters": [], "line": 40, "deprecated": false, "deprecationMessage": "", "jsdoctags": [ { "type": "literal type", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] } ], "deprecated": false, "deprecationMessage": "", "hostBindings": [], "hostListeners": [], "description": "", "rawdescription": "\n", "type": "component", "sourceCode": "import { Component, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { AbstractControl, FormBuilder, FormGroup, Validators } from '@angular/forms';\n\nimport { AuthService } from '../core/services/auth.service';\nimport { ValidationService } from '../core/services/validation.service';\nimport { IUserLogin } from '../shared/interfaces';\nimport { GrowlerService, GrowlerMessageType } from '../core/growler/growler.service';\nimport { LoggerService } from '../core/services/logger.service';\n\n@Component({\n selector: 'cm-login',\n templateUrl: './login.component.html',\n styleUrls: [ './login.component.css' ]\n})\nexport class LoginComponent implements OnInit {\n loginForm: FormGroup = {} as FormGroup;\n errorMessage: string = '';\n get f(): { [key: string]: AbstractControl } {\n return this.loginForm.controls;\n }\n\n constructor(private formBuilder: FormBuilder,\n private router: Router,\n private authService: AuthService,\n private growler: GrowlerService,\n private logger: LoggerService) { }\n\n ngOnInit() {\n this.buildForm();\n }\n\n buildForm() {\n this.loginForm = this.formBuilder.group({\n email: ['', [ Validators.required, ValidationService.emailValidator ]],\n password: ['', [ Validators.required, ValidationService.passwordValidator ]]\n });\n }\n\n submit({ value, valid }: { value: IUserLogin, valid: boolean }) {\n this.authService.login(value)\n .subscribe((status: boolean) => {\n if (status) {\n this.growler.growl('Logged in', GrowlerMessageType.Info);\n if (this.authService.redirectUrl) {\n const redirectUrl = this.authService.redirectUrl;\n this.authService.redirectUrl = '';\n this.router.navigate([redirectUrl]);\n } else {\n this.router.navigate(['/customers']);\n }\n } else {\n const loginError = 'Unable to login';\n this.errorMessage = loginError;\n this.growler.growl(loginError, GrowlerMessageType.Danger);\n }\n },\n (err: any) => this.logger.log(err));\n }\n\n}\n", "assetsDirs": [], "styleUrlsData": [ { "data": ".login-form input[type='text'], \n.login-form input[type='email'],\n.login-form input[type='password'] {\n width:75%;\n}\n\n.login-form .ng-invalid {\n border-left: 5px solid #a94442;\n}\n\n.login-form .ng-valid {\n border-left: 5px solid #42A948;\n}\n", "styleUrl": "./login.component.css" } ], "stylesData": "", "constructorObj": { "name": "constructor", "description": "", "deprecated": false, "deprecationMessage": "", "args": [ { "name": "formBuilder", "type": "FormBuilder", "deprecated": false, "deprecationMessage": "" }, { "name": "router", "type": "Router", "deprecated": false, "deprecationMessage": "" }, { "name": "authService", "type": "AuthService", "deprecated": false, "deprecationMessage": "" }, { "name": "growler", "type": "GrowlerService", "deprecated": false, "deprecationMessage": "" }, { "name": "logger", "type": "LoggerService", "deprecated": false, "deprecationMessage": "" } ], "line": 21, "jsdoctags": [ { "name": "formBuilder", "type": "FormBuilder", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } }, { "name": "router", "type": "Router", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } }, { "name": "authService", "type": "AuthService", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } }, { "name": "growler", "type": "GrowlerService", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } }, { "name": "logger", "type": "LoggerService", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] }, "implements": [ "OnInit" ], "accessors": { "f": { "name": "f", "getSignature": { "name": "f", "type": "literal type", "returnType": "literal type", "line": 19 } } }, "templateData": "
\n
\n
\n

Login

\n
\n
\n
\n
\n
\n
\n Email:\n
\n
\n \n
\n A valid email address is required\n
\n
\n
\n
\n
\n
\n Password:\n
\n
\n \n
\n Password is required (6 or more characters with at least one number)\n
\n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n
\n   Error: {{ errorMessage }}\n
\n
\n
\n
\n \n
\n
" }, { "name": "MapComponent", "id": "component-MapComponent-4e80d23935688ca0ef1d36ac7b747c2fb38e342c198ed0054b6a445e1bb0c226fea55ce172ca39b2c44da657cce29e61aaf25b6e0e24d36678d5ae0738ec4139", "file": "src/app/shared/map/map.component.ts", "changeDetection": "ChangeDetectionStrategy.OnPush", "encapsulation": [], "entryComponents": [], "inputs": [], "outputs": [], "providers": [], "selector": "cm-map", "styleUrls": [], "styles": [], "templateUrl": [ "./map.component.html" ], "viewProviders": [], "inputsClass": [ { "name": "dataPoints", "deprecated": false, "deprecationMessage": "", "line": 36, "type": "{}", "decorators": [] }, { "name": "enabled", "deprecated": false, "deprecationMessage": "", "line": 47, "type": "boolean", "decorators": [] }, { "name": "height", "defaultValue": "0", "deprecated": false, "deprecationMessage": "", "line": 29, "type": "number", "decorators": [] }, { "name": "latitude", "defaultValue": "34.5133", "deprecated": false, "deprecationMessage": "", "line": 31, "type": "number", "decorators": [] }, { "name": "longitude", "defaultValue": "-94.1629", "deprecated": false, "deprecationMessage": "", "line": 32, "type": "number", "decorators": [] }, { "name": "markerText", "defaultValue": "'Your Location'", "deprecated": false, "deprecationMessage": "", "line": 33, "type": "string", "decorators": [] }, { "name": "width", "defaultValue": "0", "deprecated": false, "deprecationMessage": "", "line": 30, "type": "number", "decorators": [] }, { "name": "zoom", "defaultValue": "8", "deprecated": false, "deprecationMessage": "", "line": 34, "type": "number", "decorators": [] } ], "outputsClass": [], "propertiesClass": [ { "name": "_dataPoints", "defaultValue": "[]", "deprecated": false, "deprecationMessage": "", "type": "IMapDataPoint[]", "optional": false, "description": "", "line": 35, "modifierKind": [ 121 ] }, { "name": "isEnabled", "defaultValue": "false", "deprecated": false, "deprecationMessage": "", "type": "boolean", "optional": false, "description": "", "line": 22, "modifierKind": [ 121 ] }, { "name": "loadingScript", "defaultValue": "false", "deprecated": false, "deprecationMessage": "", "type": "boolean", "optional": false, "description": "", "line": 23, "modifierKind": [ 121 ] }, { "name": "map", "defaultValue": "{} as google.maps.Map", "deprecated": false, "deprecationMessage": "", "type": "google.maps.Map", "optional": false, "description": "", "line": 24, "modifierKind": [ 121 ] }, { "name": "mapDiv", "defaultValue": "{} as ElementRef", "deprecated": false, "deprecationMessage": "", "type": "ElementRef", "optional": false, "description": "", "line": 56, "decorators": [ { "name": "ViewChild", "stringifiedArguments": "'mapContainer', {static: true}" } ] }, { "name": "mapHeight", "defaultValue": "null", "deprecated": false, "deprecationMessage": "", "type": "string | null", "optional": false, "description": "", "line": 26 }, { "name": "mapPoints", "defaultValue": "{} as QueryList", "deprecated": false, "deprecationMessage": "", "type": "QueryList", "optional": false, "description": "", "line": 57, "decorators": [ { "name": "ContentChildren", "stringifiedArguments": "MapPointComponent" } ] }, { "name": "mapWidth", "defaultValue": "null", "deprecated": false, "deprecationMessage": "", "type": "string | null", "optional": false, "description": "", "line": 27 }, { "name": "markers", "defaultValue": "[]", "deprecated": false, "deprecationMessage": "", "type": "google.maps.Marker[]", "optional": false, "description": "", "line": 25, "modifierKind": [ 121 ] } ], "methodsClass": [ { "name": "clearMapPoints", "args": [], "optional": false, "returnType": "void", "typeParameters": [], "line": 169, "deprecated": false, "deprecationMessage": "", "modifierKind": [ 121 ] }, { "name": "createLatLong", "args": [ { "name": "latitude", "type": "number", "deprecated": false, "deprecationMessage": "" }, { "name": "longitude", "type": "number", "deprecated": false, "deprecationMessage": "" } ], "optional": false, "returnType": "any", "typeParameters": [], "line": 148, "deprecated": false, "deprecationMessage": "", "modifierKind": [ 121 ], "jsdoctags": [ { "name": "latitude", "type": "number", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } }, { "name": "longitude", "type": "number", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] }, { "name": "createMarker", "args": [ { "name": "position", "type": "google.maps.LatLng", "deprecated": false, "deprecationMessage": "" }, { "name": "title", "type": "string", "deprecated": false, "deprecationMessage": "" } ], "optional": false, "returnType": "void", "typeParameters": [], "line": 176, "deprecated": false, "deprecationMessage": "", "modifierKind": [ 121 ], "jsdoctags": [ { "name": "position", "type": "google.maps.LatLng", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } }, { "name": "title", "type": "string", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] }, { "name": "ensureScript", "args": [], "optional": false, "returnType": "void", "typeParameters": [], "line": 108, "deprecated": false, "deprecationMessage": "", "modifierKind": [ 121 ] }, { "name": "getWindowHeightWidth", "args": [ { "name": "document", "type": "Document", "deprecated": false, "deprecationMessage": "" } ], "optional": false, "returnType": "{ height: any; width: any; }", "typeParameters": [], "line": 94, "deprecated": false, "deprecationMessage": "", "modifierKind": [ 121 ], "jsdoctags": [ { "name": "document", "type": "Document", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] }, { "name": "init", "args": [], "optional": false, "returnType": "void", "typeParameters": [], "line": 86, "deprecated": false, "deprecationMessage": "" }, { "name": "ngAfterContentInit", "args": [], "optional": false, "returnType": "void", "typeParameters": [], "line": 74, "deprecated": false, "deprecationMessage": "" }, { "name": "ngOnInit", "args": [], "optional": false, "returnType": "void", "typeParameters": [], "line": 61, "deprecated": false, "deprecationMessage": "" }, { "name": "renderMap", "args": [], "optional": false, "returnType": "void", "typeParameters": [], "line": 129, "deprecated": false, "deprecationMessage": "", "modifierKind": [ 121 ] }, { "name": "renderMapPoints", "args": [], "optional": false, "returnType": "void", "typeParameters": [], "line": 152, "deprecated": false, "deprecationMessage": "", "modifierKind": [ 121 ] } ], "deprecated": false, "deprecationMessage": "", "hostBindings": [], "hostListeners": [], "description": "", "rawdescription": "\n", "type": "component", "sourceCode": "import {\n Component, OnInit, AfterContentInit, Input, ViewChild,\n ContentChildren, ElementRef, QueryList, ChangeDetectionStrategy\n} from '@angular/core';\n\nimport { debounceTime } from 'rxjs/operators';\nimport { MapPointComponent } from './map-point.component';\nimport { IMapDataPoint } from '../../shared/interfaces';\n\n@Component({\n selector: 'cm-map',\n templateUrl: './map.component.html',\n // When using OnPush detectors, then the framework will check an OnPush\n // component when any of its input properties changes, when it fires\n // an event, or when an observable fires an event ~ Victor Savkin (Angular Team)\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MapComponent implements OnInit, AfterContentInit {\n\n private isEnabled: boolean = false;\n private loadingScript: boolean = false;\n private map: google.maps.Map = {} as google.maps.Map;\n private markers: google.maps.Marker[] = [];\n mapHeight: string | null = null;\n mapWidth: string | null = null;\n\n @Input() height: number = 0;\n @Input() width: number = 0;\n @Input() latitude = 34.5133;\n @Input() longitude = -94.1629;\n @Input() markerText = 'Your Location';\n @Input() zoom = 8;\n private _dataPoints: IMapDataPoint[] = [];\n @Input() public get dataPoints() {\n return this._dataPoints as IMapDataPoint[];\n }\n\n public set dataPoints(value: any[]) {\n this._dataPoints = value;\n this.renderMapPoints();\n }\n\n // Necessary since a map rendered while container is hidden\n // will not load the map tiles properly and show a grey screen\n @Input() get enabled(): boolean {\n return this.isEnabled;\n }\n\n set enabled(isEnabled: boolean) {\n this.isEnabled = isEnabled;\n this.init();\n }\n\n @ViewChild('mapContainer', { static: true }) mapDiv: ElementRef = {} as ElementRef;\n @ContentChildren(MapPointComponent) mapPoints: QueryList = {} as QueryList;\n\n constructor() { }\n\n ngOnInit() {\n if (this.latitude && this.longitude) {\n if (this.mapHeight && this.mapWidth) {\n this.mapHeight = this.height + 'px';\n this.mapWidth = this.width + 'px';\n } else {\n const hw = this.getWindowHeightWidth(this.mapDiv.nativeElement.ownerDocument);\n this.mapHeight = hw.height / 2 + 'px';\n this.mapWidth = hw.width + 'px';\n }\n }\n }\n\n ngAfterContentInit() {\n this.mapPoints.changes\n .pipe(\n debounceTime(500)\n )\n .subscribe(() => {\n if (this.enabled) { \n this.renderMapPoints(); \n }\n });\n }\n\n init() {\n // Need slight delay to avoid grey box when google script has previously been loaded.\n // Otherwise map
container may not be visible yet which causes the grey box.\n setTimeout(() => {\n this.ensureScript();\n }, 200);\n }\n\n private getWindowHeightWidth(document: Document) {\n let width = window.innerWidth\n || document.documentElement.clientWidth\n || document.body.clientWidth;\n\n const height = window.innerHeight\n || document.documentElement.clientHeight\n || document.body.clientHeight;\n\n if (width > 900) { width = 900; }\n\n return { height: height, width: width };\n }\n\n private ensureScript() {\n this.loadingScript = true;\n const document = this.mapDiv.nativeElement.ownerDocument;\n const script = document.querySelector('script[id=\"googlemaps\"]');\n if (script) {\n if (this.isEnabled) { this.renderMap(); }\n } else {\n const mapsScript = document.createElement('script');\n mapsScript.id = 'googlemaps';\n mapsScript.type = 'text/javascript';\n mapsScript.async = true;\n mapsScript.defer = true;\n mapsScript.src = 'https://maps.googleapis.com/maps/api/js?key=AIzaSyCG1KDldeF_2GzaTXrEHR0l6cyCS7AnmBw';\n mapsScript.onload = () => {\n this.loadingScript = false;\n if (this.isEnabled) { this.renderMap(); }\n };\n document.body.appendChild(mapsScript);\n }\n }\n\n private renderMap() {\n const latlng = this.createLatLong(this.latitude, this.longitude) as google.maps.LatLng;\n const options = {\n zoom: this.zoom,\n center: latlng,\n mapTypeControl: true,\n mapTypeId: google.maps.MapTypeId.ROADMAP\n } as google.maps.MapOptions;\n\n this.map = new google.maps.Map(this.mapDiv.nativeElement, options);\n\n // See if we have any mapPoints (child content) or dataPoints (@Input property)\n if ((this.mapPoints && this.mapPoints.length) || (this.dataPoints && this.dataPoints.length)) {\n this.renderMapPoints();\n } else {\n this.createMarker(latlng, this.markerText);\n }\n }\n\n private createLatLong(latitude: number, longitude: number) {\n return (latitude && longitude) ? new google.maps.LatLng(latitude, longitude) : null;\n }\n\n private renderMapPoints() {\n if (this.map && this.isEnabled) {\n this.clearMapPoints();\n\n // lon/lat can be passed as child content or via the dataPoints @Input property\n const mapPoints = (this.mapPoints && this.mapPoints.length) ? this.mapPoints : this.dataPoints;\n\n if (mapPoints) {\n for (const point of mapPoints) {\n let markerText = (point.markerText) ? point.markerText : `

${point.firstName} ${point.lastName}

`;\n const mapPointLatlng = this.createLatLong(point.latitude, point.longitude) as google.maps.LatLng;\n this.createMarker(mapPointLatlng, markerText);\n }\n }\n }\n }\n\n private clearMapPoints() {\n this.markers.forEach((marker: google.maps.Marker) => {\n marker.setMap(null);\n });\n this.markers = [];\n }\n\n private createMarker(position: google.maps.LatLng, title: string) {\n const infowindow = new google.maps.InfoWindow({\n content: title\n });\n\n const marker = new google.maps.Marker({\n position: position,\n map: this.map,\n title: title,\n animation: google.maps.Animation.DROP\n });\n\n this.markers.push(marker);\n\n marker.addListener('click', () => {\n infowindow.open(this.map, marker);\n });\n }\n}\n", "assetsDirs": [], "styleUrlsData": "", "stylesData": "", "constructorObj": { "name": "constructor", "description": "", "deprecated": false, "deprecationMessage": "", "args": [], "line": 57 }, "implements": [ "OnInit", "AfterContentInit" ], "accessors": { "dataPoints": { "name": "dataPoints", "setSignature": { "name": "dataPoints", "type": "void", "deprecated": false, "deprecationMessage": "", "args": [ { "name": "value", "type": "any[]", "deprecated": false, "deprecationMessage": "" } ], "returnType": "void", "line": 40, "jsdoctags": [ { "name": "value", "type": "any[]", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] }, "getSignature": { "name": "dataPoints", "type": "", "returnType": "", "line": 36 } }, "enabled": { "name": "enabled", "setSignature": { "name": "enabled", "type": "void", "deprecated": false, "deprecationMessage": "", "args": [ { "name": "isEnabled", "type": "boolean", "deprecated": false, "deprecationMessage": "" } ], "returnType": "void", "line": 51, "jsdoctags": [ { "name": "isEnabled", "type": "boolean", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] }, "getSignature": { "name": "enabled", "type": "boolean", "returnType": "boolean", "line": 47 } } }, "templateData": "
Map Loading....
" }, { "name": "MapPointComponent", "id": "component-MapPointComponent-9d0dda82f8b14d746691ec7b5c35f93579646c251262cabdfd39767d10e0d43bff9b2e5588453ea00d2bfbd39a3bbe29e457f496d49e932bdf9fc76dcca3efcb", "file": "src/app/shared/map/map-point.component.ts", "encapsulation": [], "entryComponents": [], "inputs": [], "outputs": [], "providers": [], "selector": "cm-map-point", "styleUrls": [], "styles": [], "template": "", "templateUrl": [], "viewProviders": [], "inputsClass": [ { "name": "latitude", "defaultValue": "0", "deprecated": false, "deprecationMessage": "", "line": 10, "type": "number", "decorators": [] }, { "name": "longitude", "defaultValue": "0", "deprecated": false, "deprecationMessage": "", "line": 9, "type": "number", "decorators": [] }, { "name": "markerText", "defaultValue": "''", "deprecated": false, "deprecationMessage": "", "line": 11, "type": "string", "decorators": [] } ], "outputsClass": [], "propertiesClass": [], "methodsClass": [ { "name": "ngOnInit", "args": [], "optional": false, "returnType": "void", "typeParameters": [], "line": 15, "deprecated": false, "deprecationMessage": "" } ], "deprecated": false, "deprecationMessage": "", "hostBindings": [], "hostListeners": [], "description": "", "rawdescription": "\n", "type": "component", "sourceCode": "import { Component, OnInit, Input } from '@angular/core';\n\n@Component({\n selector: 'cm-map-point',\n template: ``\n})\nexport class MapPointComponent implements OnInit {\n\n @Input() longitude: number = 0;\n @Input() latitude: number = 0;\n @Input() markerText: string = '';\n\n constructor() { }\n\n ngOnInit() {\n\n }\n\n}\n", "assetsDirs": [], "styleUrlsData": "", "stylesData": "", "constructorObj": { "name": "constructor", "description": "", "deprecated": false, "deprecationMessage": "", "args": [], "line": 11 }, "implements": [ "OnInit" ] }, { "name": "ModalComponent", "id": "component-ModalComponent-de3d00e35a66a8586f0cb3dfe75ae003765ef56ccec320f3303917db2bd0f04b7c134f2636f290465310fc211047fd3885cb54502fcaeb0a49fcf4ec1572a0f8", "file": "src/app/core/modal/modal.component.ts", "encapsulation": [], "entryComponents": [], "inputs": [], "outputs": [], "providers": [], "selector": "cm-modal", "styleUrls": [ "./modal.component.css" ], "styles": [], "templateUrl": [ "./modal.component.html" ], "viewProviders": [], "inputsClass": [], "outputsClass": [], "propertiesClass": [ { "name": "cancel", "defaultValue": "() => {...}", "deprecated": false, "deprecationMessage": "", "type": "function", "optional": false, "description": "", "line": 15 }, { "name": "defaultModalContent", "defaultValue": "{\n header: 'Please Confirm',\n body: 'Are you sure you want to continue?',\n cancelButtonText: 'Cancel',\n OKButtonText: 'OK',\n cancelButtonVisible: true\n }", "deprecated": false, "deprecationMessage": "", "type": "IModalContent", "optional": false, "description": "", "line": 17 }, { "name": "modalContent", "defaultValue": "{}", "deprecated": false, "deprecationMessage": "", "type": "IModalContent", "optional": false, "description": "", "line": 14 }, { "name": "modalVisible", "defaultValue": "false", "deprecated": false, "deprecationMessage": "", "type": "", "optional": false, "description": "", "line": 12 }, { "name": "modalVisibleAnimate", "defaultValue": "false", "deprecated": false, "deprecationMessage": "", "type": "", "optional": false, "description": "", "line": 13 }, { "name": "ok", "defaultValue": "() => {...}", "deprecated": false, "deprecationMessage": "", "type": "function", "optional": false, "description": "", "line": 16 } ], "methodsClass": [ { "name": "hide", "args": [], "optional": false, "returnType": "void", "typeParameters": [], "line": 52, "deprecated": false, "deprecationMessage": "" }, { "name": "ngOnInit", "args": [], "optional": false, "returnType": "void", "typeParameters": [], "line": 30, "deprecated": false, "deprecationMessage": "" }, { "name": "show", "args": [ { "name": "modalContent", "type": "IModalContent", "deprecated": false, "deprecationMessage": "" } ], "optional": false, "returnType": "any", "typeParameters": [], "line": 34, "deprecated": false, "deprecationMessage": "", "jsdoctags": [ { "name": "modalContent", "type": "IModalContent", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] } ], "deprecated": false, "deprecationMessage": "", "hostBindings": [], "hostListeners": [], "description": "", "rawdescription": "\n", "type": "component", "sourceCode": "import { Component, OnInit, EventEmitter } from '@angular/core';\n\nimport { ModalService, IModalContent } from './modal.service';\n\n@Component({\n selector: 'cm-modal',\n templateUrl: './modal.component.html',\n styleUrls: [ './modal.component.css' ]\n})\nexport class ModalComponent implements OnInit {\n\n modalVisible = false;\n modalVisibleAnimate = false;\n modalContent: IModalContent = {};\n cancel: () => void = () => {};\n ok: () => void = () => {};\n defaultModalContent: IModalContent = {\n header: 'Please Confirm',\n body: 'Are you sure you want to continue?',\n cancelButtonText: 'Cancel',\n OKButtonText: 'OK',\n cancelButtonVisible: true\n };\n\n constructor(private modalService: ModalService) {\n modalService.show = this.show.bind(this);\n modalService.hide = this.hide.bind(this);\n }\n\n ngOnInit() {\n\n }\n\n show(modalContent: IModalContent) {\n this.modalContent = Object.assign(this.defaultModalContent, modalContent);\n this.modalVisible = true;\n setTimeout(() => this.modalVisibleAnimate = true);\n\n const promise = new Promise((resolve, reject) => {\n this.cancel = () => {\n this.hide();\n resolve(false);\n };\n this.ok = () => {\n this.hide();\n resolve(true);\n };\n });\n return promise;\n }\n\n hide() {\n this.modalVisibleAnimate = false;\n setTimeout(() => this.modalVisible = false, 300);\n }\n\n}\n", "assetsDirs": [], "styleUrlsData": [ { "data": ".modal {\n background: rgba(0,0,0,0.6);\n}", "styleUrl": "./modal.component.css" } ], "stylesData": "", "constructorObj": { "name": "constructor", "description": "", "deprecated": false, "deprecationMessage": "", "args": [ { "name": "modalService", "type": "ModalService", "deprecated": false, "deprecationMessage": "" } ], "line": 23, "jsdoctags": [ { "name": "modalService", "type": "ModalService", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] }, "implements": [ "OnInit" ], "templateData": "
\n
\n
\n
\n \n

{{ modalContent.header }}

\n
\n
\n {{ modalContent.body }}\n
\n
\n \n \n
\n
\n
\n
" }, { "name": "NavbarComponent", "id": "component-NavbarComponent-901352739697484dbf90386032c04c046aac0e6ade40da8b84a015e65638ab8a13a38e5e7da17f02b7c2e0787820a7ecd709ac65d391f8e3e67c2d703d45d2e8", "file": "src/app/core/navbar/navbar.component.ts", "encapsulation": [], "entryComponents": [], "inputs": [], "outputs": [], "providers": [], "selector": "cm-navbar", "styleUrls": [], "styles": [], "templateUrl": [ "./navbar.component.html" ], "viewProviders": [], "inputsClass": [], "outputsClass": [], "propertiesClass": [ { "name": "isCollapsed", "defaultValue": "false", "deprecated": false, "deprecationMessage": "", "type": "boolean", "optional": false, "description": "", "line": 16 }, { "name": "loginLogoutText", "defaultValue": "'Login'", "deprecated": false, "deprecationMessage": "", "type": "string", "optional": false, "description": "", "line": 17 }, { "name": "sub", "defaultValue": "{} as Subscription", "deprecated": false, "deprecationMessage": "", "type": "Subscription", "optional": false, "description": "", "line": 18 } ], "methodsClass": [ { "name": "loginOrOut", "args": [], "optional": false, "returnType": "void", "typeParameters": [], "line": 37, "deprecated": false, "deprecationMessage": "" }, { "name": "ngOnDestroy", "args": [], "optional": false, "returnType": "void", "typeParameters": [], "line": 33, "deprecated": false, "deprecationMessage": "" }, { "name": "ngOnInit", "args": [], "optional": false, "returnType": "void", "typeParameters": [], "line": 25, "deprecated": false, "deprecationMessage": "" }, { "name": "redirectToLogin", "args": [], "optional": false, "returnType": "void", "typeParameters": [], "line": 52, "deprecated": false, "deprecationMessage": "" }, { "name": "setLoginLogoutText", "args": [], "optional": false, "returnType": "void", "typeParameters": [], "line": 56, "deprecated": false, "deprecationMessage": "" } ], "deprecated": false, "deprecationMessage": "", "hostBindings": [], "hostListeners": [], "description": "", "rawdescription": "\n", "type": "component", "sourceCode": "import { Component, OnInit, OnDestroy } from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { Subscription } from 'rxjs';\n\nimport { AuthService } from '../services/auth.service';\nimport { GrowlerService, GrowlerMessageType } from '../growler/growler.service';\nimport { LoggerService } from '../services/logger.service';\n\n@Component({\n selector: 'cm-navbar',\n templateUrl: './navbar.component.html'\n})\nexport class NavbarComponent implements OnInit, OnDestroy {\n\n isCollapsed: boolean = false;\n loginLogoutText = 'Login';\n sub: Subscription = {} as Subscription;\n\n constructor(private router: Router,\n private authservice: AuthService,\n private growler: GrowlerService,\n private logger: LoggerService) { }\n\n ngOnInit() {\n this.sub = this.authservice.authChanged\n .subscribe((loggedIn: boolean) => {\n this.setLoginLogoutText();\n },\n (err: any) => this.logger.log(err));\n }\n\n ngOnDestroy() {\n this.sub.unsubscribe();\n }\n\n loginOrOut() {\n const isAuthenticated = this.authservice.isAuthenticated;\n if (isAuthenticated) {\n this.authservice.logout()\n .subscribe((status: boolean) => {\n this.setLoginLogoutText();\n this.growler.growl('Logged Out', GrowlerMessageType.Info);\n this.router.navigate(['/customers']);\n return;\n },\n (err: any) => this.logger.log(err));\n }\n this.redirectToLogin();\n }\n\n redirectToLogin() {\n this.router.navigate(['/login']);\n }\n\n setLoginLogoutText() {\n this.loginLogoutText = (this.authservice.isAuthenticated) ? 'Logout' : 'Login';\n }\n\n}\n", "assetsDirs": [], "styleUrlsData": "", "stylesData": "", "constructorObj": { "name": "constructor", "description": "", "deprecated": false, "deprecationMessage": "", "args": [ { "name": "router", "type": "Router", "deprecated": false, "deprecationMessage": "" }, { "name": "authservice", "type": "AuthService", "deprecated": false, "deprecationMessage": "" }, { "name": "growler", "type": "GrowlerService", "deprecated": false, "deprecationMessage": "" }, { "name": "logger", "type": "LoggerService", "deprecated": false, "deprecationMessage": "" } ], "line": 18, "jsdoctags": [ { "name": "router", "type": "Router", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } }, { "name": "authservice", "type": "AuthService", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } }, { "name": "growler", "type": "GrowlerService", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } }, { "name": "logger", "type": "LoggerService", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] }, "implements": [ "OnInit", "OnDestroy" ], "templateData": "" }, { "name": "OrdersComponent", "id": "component-OrdersComponent-a1a1b3700af6429febeabb8e679fcf87efcf921d5c6bad2a6e73055856b4e0d5a411eb3b7a82d2450aa99ac4b8a8304400d7a550babe75cb2842466032ab9d64", "file": "src/app/orders/orders.component.ts", "encapsulation": [], "entryComponents": [], "inputs": [], "outputs": [], "providers": [], "selector": "cm-customers-orders", "styleUrls": [], "styles": [], "templateUrl": [ "./orders.component.html" ], "viewProviders": [], "inputsClass": [], "outputsClass": [], "propertiesClass": [ { "name": "customers", "defaultValue": "[]", "deprecated": false, "deprecationMessage": "", "type": "ICustomer[]", "optional": false, "description": "", "line": 13 }, { "name": "pageSize", "defaultValue": "5", "deprecated": false, "deprecationMessage": "", "type": "number", "optional": false, "description": "", "line": 15 }, { "name": "totalRecords", "defaultValue": "0", "deprecated": false, "deprecationMessage": "", "type": "number", "optional": false, "description": "", "line": 14 }, { "name": "trackbyService", "deprecated": false, "deprecationMessage": "", "type": "TrackByService", "optional": false, "description": "", "line": 17, "modifierKind": [ 123 ] } ], "methodsClass": [ { "name": "getCustomersPage", "args": [ { "name": "page", "type": "number", "deprecated": false, "deprecationMessage": "" } ], "optional": false, "returnType": "void", "typeParameters": [], "line": 27, "deprecated": false, "deprecationMessage": "", "jsdoctags": [ { "name": "page", "type": "number", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] }, { "name": "ngOnInit", "args": [], "optional": false, "returnType": "void", "typeParameters": [], "line": 19, "deprecated": false, "deprecationMessage": "" }, { "name": "pageChanged", "args": [ { "name": "page", "type": "number", "deprecated": false, "deprecationMessage": "" } ], "optional": false, "returnType": "void", "typeParameters": [], "line": 23, "deprecated": false, "deprecationMessage": "", "jsdoctags": [ { "name": "page", "type": "number", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] } ], "deprecated": false, "deprecationMessage": "", "hostBindings": [], "hostListeners": [], "description": "", "rawdescription": "\n", "type": "component", "sourceCode": "import { Component, OnInit } from '@angular/core';\n\nimport { DataService } from '../core/services/data.service';\nimport { ICustomer, IPagedResults } from '../shared/interfaces';\nimport { TrackByService } from '../core/services/trackby.service';\n\n@Component({\n selector: 'cm-customers-orders',\n templateUrl: './orders.component.html'\n})\nexport class OrdersComponent implements OnInit {\n\n customers: ICustomer[] = [];\n totalRecords = 0;\n pageSize = 5;\n\n constructor(private dataService: DataService, public trackbyService: TrackByService) { }\n\n ngOnInit() {\n this.getCustomersPage(1);\n }\n\n pageChanged(page: number) {\n this.getCustomersPage(page);\n }\n\n getCustomersPage(page: number) {\n this.dataService.getCustomersPage((page - 1) * this.pageSize, this.pageSize)\n .subscribe((response: IPagedResults) => {\n this.totalRecords = response.totalRecords;\n this.customers = response.results;\n });\n }\n\n}\n", "assetsDirs": [], "styleUrlsData": "", "stylesData": "", "constructorObj": { "name": "constructor", "description": "", "deprecated": false, "deprecationMessage": "", "args": [ { "name": "dataService", "type": "DataService", "deprecated": false, "deprecationMessage": "" }, { "name": "trackbyService", "type": "TrackByService", "deprecated": false, "deprecationMessage": "" } ], "line": 15, "jsdoctags": [ { "name": "dataService", "type": "DataService", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } }, { "name": "trackbyService", "type": "TrackByService", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] }, "implements": [ "OnInit" ], "templateData": "
\n
\n
\n

\n   Orders\n

\n
\n
\n\n
\n
\n\n
\n

{{ customer.firstName | capitalize }} {{ customer.lastName | capitalize }}

\n
\n \n \n \n \n \n \n \n \n
{{order.productName}}{{ order.itemCost | currency:'USD':'symbol' }}
 {{ customer.orderTotal | currency:'USD':'symbol' }}\n
\n
\n No orders found\n
\n
\n\n \n\n
\n
\n No customers found\n
\n
\n\n
\n
\n" }, { "name": "OverlayComponent", "id": "component-OverlayComponent-4fdb15e2ea429e8c5a6c9a1c3e4c60bc832f57ecdd1d6ba9f6f881cf6e90e3e4a7321a0856b40f29ff9b2d92083f749583988b41dd3d63db34abcf243b916394", "file": "src/app/core/overlay/overlay.component.ts", "encapsulation": [], "entryComponents": [], "inputs": [], "outputs": [], "providers": [], "selector": "cm-overlay", "styleUrls": [ "./overlay.component.css" ], "styles": [], "templateUrl": [ "./overlay.component.html" ], "viewProviders": [], "inputsClass": [ { "name": "delay", "defaultValue": "500", "deprecated": false, "deprecationMessage": "", "line": 20, "type": "number", "decorators": [] } ], "outputsClass": [], "propertiesClass": [ { "name": "enabled", "defaultValue": "false", "deprecated": false, "deprecationMessage": "", "type": "", "optional": false, "description": "", "line": 15 }, { "name": "httpRequestSub", "defaultValue": "{} as Subscription", "deprecated": false, "deprecationMessage": "", "type": "Subscription", "optional": false, "description": "", "line": 13 }, { "name": "httpResponseSub", "defaultValue": "{} as Subscription", "deprecated": false, "deprecationMessage": "", "type": "Subscription", "optional": false, "description": "", "line": 14 }, { "name": "queue", "defaultValue": "[]", "deprecated": false, "deprecationMessage": "", "type": "any[]", "optional": false, "description": "", "line": 16 }, { "name": "timerHideId", "defaultValue": "0", "deprecated": false, "deprecationMessage": "", "type": "number", "optional": false, "description": "", "line": 18 }, { "name": "timerId", "defaultValue": "0", "deprecated": false, "deprecationMessage": "", "type": "number", "optional": false, "description": "", "line": 17 } ], "methodsClass": [ { "name": "ngOnDestroy", "args": [], "optional": false, "returnType": "void", "typeParameters": [], "line": 52, "deprecated": false, "deprecationMessage": "" }, { "name": "ngOnInit", "args": [], "optional": false, "returnType": "void", "typeParameters": [], "line": 24, "deprecated": false, "deprecationMessage": "" } ], "deprecated": false, "deprecationMessage": "", "hostBindings": [], "hostListeners": [], "description": "", "rawdescription": "\n", "type": "component", "sourceCode": "import { Component, OnInit, Input, OnDestroy } from '@angular/core';\n\nimport { EventBusService, Events } from '../services/event-bus.service';\nimport { Subscription } from 'rxjs';\n\n@Component({\n selector: 'cm-overlay',\n templateUrl: './overlay.component.html',\n styleUrls: ['./overlay.component.css']\n})\nexport class OverlayComponent implements OnInit, OnDestroy {\n\n httpRequestSub: Subscription = {} as Subscription;\n httpResponseSub: Subscription = {} as Subscription;\n enabled = false;\n queue: any[] = [];\n timerId: number = 0;\n timerHideId: number = 0;\n\n @Input() delay = 500;\n\n constructor(private eventBus: EventBusService) { }\n\n ngOnInit() {\n // Handle request\n this.httpRequestSub = this.eventBus.on(Events.httpRequest, (() => {\n this.queue.push({});\n if (this.queue.length === 1) {\n // Only show if we have an item in the queue after the delay time\n setTimeout(() => {\n if (this.queue.length) { this.enabled = true; }\n }, this.delay);\n }\n }));\n\n // Handle response\n this.httpResponseSub = this.eventBus.on(Events.httpResponse, (() => {\n this.queue.pop();\n if (this.queue.length === 0) {\n // Since we don't know if another XHR request will be made, pause before\n // hiding the overlay. If another XHR request comes in then the overlay\n // will stay visible which prevents a flicker\n setTimeout(() => {\n // Make sure queue is still 0 since a new XHR request may have come in\n // while timer was running\n if (this.queue.length === 0) { this.enabled = false; }\n }, this.delay);\n }\n }));\n }\n\n ngOnDestroy() {\n this.httpRequestSub.unsubscribe();\n this.httpResponseSub.unsubscribe();\n }\n\n}\n", "assetsDirs": [], "styleUrlsData": [ { "data": ".overlay {\n display:none;\n}\n\n.overlay.active { \n display: block;\n} \n\n.overlay-background {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1050;\n display: block;\n overflow: hidden;\n -webkit-overflow-scrolling: touch;\n outline: 0;\n background-color:rgba(0,0,0,0.6);\n}\n\n.overlay-content {\n\n}\n\n.overlay-content {\n position: fixed;\n z-index: 999999;\n top: 50%;\n left: 50%;\n background-color: white;\n border: 1px solid rgb(94, 94, 94);\n -webkit-transform: translate(-50%, 0%);\n transform: translate(-50%, 0%);\n\n cursor: pointer;\n padding: 5;\n width: 285px;\n height: 100px; \n display: flex;\n align-items: center;\n justify-content: center;\n \n \n -webkit-transition: opacity 1s;\n -moz-transition: opacity 1s; \n -o-transition: opacity 1s;\n transition: opacity 1s; \n} \n", "styleUrl": "./overlay.component.css" } ], "stylesData": "", "constructorObj": { "name": "constructor", "description": "", "deprecated": false, "deprecationMessage": "", "args": [ { "name": "eventBus", "type": "EventBusService", "deprecated": false, "deprecationMessage": "" } ], "line": 20, "jsdoctags": [ { "name": "eventBus", "type": "EventBusService", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] }, "implements": [ "OnInit", "OnDestroy" ], "templateData": "
\n
\n
\n \n
\n
" }, { "name": "PageComponent", "id": "component-PageComponent-432c9ae0bcf6e2e1f46701f7565a67376cb10145b7d049c5fe930cf8f075c6e02e24151589750b18cbaa8266f7c61393b95c4d833fbfd71ee228904aa014349f", "file": "src/stories/page.component.ts", "encapsulation": [], "entryComponents": [], "inputs": [], "outputs": [], "providers": [], "selector": "storybook-page", "styleUrls": [ "./page.css" ], "styles": [], "template": "
\n
\n

Pages in Storybook

\n

\n We recommend building UIs with a\n \n component-driven\n \n process starting with atomic components and ending with pages.\n

\n

\n Render pages with mock data. This makes it easy to build and review page states without\n needing to navigate to them in your app. Here are some handy patterns for managing page data\n in Storybook:\n

\n
    \n
  • \n Use a higher-level connected component. Storybook helps you compose such data from the\n \"args\" of child component stories\n
  • \n
  • \n Assemble data in the page component from your services. You can mock these services out\n using Storybook.\n
  • \n
\n

\n Get a guided tutorial on component-driven development at\n \n Storybook tutorials\n \n . Read more in the\n docs \n .\n

\n
\n Tip Adjust the width of the canvas with the\n \n \n \n \n \n Viewports addon in the toolbar\n
\n
\n
", "templateUrl": [], "viewProviders": [], "inputsClass": [ { "name": "user", "defaultValue": "null", "deprecated": false, "deprecationMessage": "", "line": 65, "type": "User | null", "decorators": [] } ], "outputsClass": [ { "name": "onCreateAccount", "defaultValue": "new EventEmitter()", "deprecated": false, "deprecationMessage": "", "line": 74, "type": "EventEmitter" }, { "name": "onLogin", "defaultValue": "new EventEmitter()", "deprecated": false, "deprecationMessage": "", "line": 68, "type": "EventEmitter" }, { "name": "onLogout", "defaultValue": "new EventEmitter()", "deprecated": false, "deprecationMessage": "", "line": 71, "type": "EventEmitter" } ], "propertiesClass": [], "methodsClass": [], "deprecated": false, "deprecationMessage": "", "hostBindings": [], "hostListeners": [], "description": "", "rawdescription": "\n", "type": "component", "sourceCode": "import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { User } from './User';\n\n@Component({\n selector: 'storybook-page',\n template: `
\n \n
\n

Pages in Storybook

\n

\n We recommend building UIs with a\n \n component-driven\n \n process starting with atomic components and ending with pages.\n

\n

\n Render pages with mock data. This makes it easy to build and review page states without\n needing to navigate to them in your app. Here are some handy patterns for managing page data\n in Storybook:\n

\n
    \n
  • \n Use a higher-level connected component. Storybook helps you compose such data from the\n \"args\" of child component stories\n
  • \n
  • \n Assemble data in the page component from your services. You can mock these services out\n using Storybook.\n
  • \n
\n

\n Get a guided tutorial on component-driven development at\n \n Storybook tutorials\n \n . Read more in the\n docs \n .\n

\n
\n Tip Adjust the width of the canvas with the\n \n \n \n \n \n Viewports addon in the toolbar\n
\n
\n
`,\n styleUrls: ['./page.css'],\n})\nexport default class PageComponent {\n @Input()\n user: User | null = null;\n\n @Output()\n onLogin = new EventEmitter();\n\n @Output()\n onLogout = new EventEmitter();\n\n @Output()\n onCreateAccount = new EventEmitter();\n}\n\n// export const Page = ({ user, onLogin, onLogout, onCreateAccount }) => (\n//
\n//
\n\n// );\n// Page.propTypes = {\n// user: PropTypes.shape({}),\n// onLogin: PropTypes.func.isRequired,\n// onLogout: PropTypes.func.isRequired,\n// onCreateAccount: PropTypes.func.isRequired,\n// };\n\n// Page.defaultProps = {\n// user: null,\n// };\n", "assetsDirs": [], "styleUrlsData": [ { "data": "section {\n font-family: 'Nunito Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;\n font-size: 14px;\n line-height: 24px;\n padding: 48px 20px;\n margin: 0 auto;\n max-width: 600px;\n color: #333;\n}\n\nsection h2 {\n font-weight: 900;\n font-size: 32px;\n line-height: 1;\n margin: 0 0 4px;\n display: inline-block;\n vertical-align: top;\n}\n\nsection p {\n margin: 1em 0;\n}\n\nsection a {\n text-decoration: none;\n color: #1ea7fd;\n}\n\nsection ul {\n padding-left: 30px;\n margin: 1em 0;\n}\n\nsection li {\n margin-bottom: 8px;\n}\n\nsection .tip {\n display: inline-block;\n border-radius: 1em;\n font-size: 11px;\n line-height: 12px;\n font-weight: 700;\n background: #e7fdd8;\n color: #66bf3c;\n padding: 4px 12px;\n margin-right: 10px;\n vertical-align: top;\n}\n\nsection .tip-wrapper {\n font-size: 13px;\n line-height: 20px;\n margin-top: 40px;\n margin-bottom: 40px;\n}\n\nsection .tip-wrapper svg {\n display: inline-block;\n height: 12px;\n width: 12px;\n margin-right: 4px;\n vertical-align: top;\n margin-top: 3px;\n}\n\nsection .tip-wrapper svg path {\n fill: #1ea7fd;\n}\n", "styleUrl": "./page.css" } ], "stylesData": "" }, { "name": "PaginationComponent", "id": "component-PaginationComponent-9d67a1888117b51b7c6c7ffda5140d3d462020b73f441cb3123618279e4d16527c9c430850e82dbb106e67f62e396eb6bdd2c72ef5b007ffc4422ea77810a45b", "file": "src/app/shared/pagination/pagination.component.ts", "encapsulation": [], "entryComponents": [], "inputs": [], "outputs": [], "providers": [], "selector": "cm-pagination", "styleUrls": [ "./pagination.component.css" ], "styles": [], "templateUrl": [ "./pagination.component.html" ], "viewProviders": [], "inputsClass": [ { "name": "pageSize", "deprecated": false, "deprecationMessage": "", "line": 21, "type": "number", "decorators": [] }, { "name": "totalItems", "deprecated": false, "deprecationMessage": "", "line": 30, "type": "number", "decorators": [] } ], "outputsClass": [ { "name": "pageChanged", "defaultValue": "new EventEmitter()", "deprecated": false, "deprecationMessage": "", "line": 39, "type": "EventEmitter" } ], "propertiesClass": [ { "name": "currentPage", "defaultValue": "1", "deprecated": false, "deprecationMessage": "", "type": "number", "optional": false, "description": "", "line": 16 }, { "name": "isVisible", "defaultValue": "false", "deprecated": false, "deprecationMessage": "", "type": "", "optional": false, "description": "", "line": 17 }, { "name": "nextEnabled", "defaultValue": "true", "deprecated": false, "deprecationMessage": "", "type": "", "optional": false, "description": "", "line": 19 }, { "name": "pagerPageSize", "defaultValue": "0", "deprecated": false, "deprecationMessage": "", "type": "number", "optional": false, "description": "", "line": 12, "modifierKind": [ 121 ] }, { "name": "pagerTotalItems", "defaultValue": "0", "deprecated": false, "deprecationMessage": "", "type": "number", "optional": false, "description": "", "line": 11, "modifierKind": [ 121 ] }, { "name": "pages", "defaultValue": "[]", "deprecated": false, "deprecationMessage": "", "type": "number[]", "optional": false, "description": "", "line": 15 }, { "name": "previousEnabled", "defaultValue": "false", "deprecated": false, "deprecationMessage": "", "type": "", "optional": false, "description": "", "line": 18 }, { "name": "totalPages", "defaultValue": "0", "deprecated": false, "deprecationMessage": "", "type": "number", "optional": false, "description": "", "line": 14 } ], "methodsClass": [ { "name": "changePage", "args": [ { "name": "page", "type": "number", "deprecated": false, "deprecationMessage": "" }, { "name": "event", "type": "MouseEvent", "deprecated": false, "deprecationMessage": "", "optional": true } ], "optional": false, "returnType": "void", "typeParameters": [], "line": 72, "deprecated": false, "deprecationMessage": "", "jsdoctags": [ { "name": "page", "type": "number", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } }, { "name": "event", "type": "MouseEvent", "deprecated": false, "deprecationMessage": "", "optional": true, "tagName": { "text": "param" } } ] }, { "name": "ngOnInit", "args": [], "optional": false, "returnType": "void", "typeParameters": [], "line": 43, "deprecated": false, "deprecationMessage": "" }, { "name": "previousNext", "args": [ { "name": "direction", "type": "number", "deprecated": false, "deprecationMessage": "" }, { "name": "event", "type": "MouseEvent", "deprecated": false, "deprecationMessage": "", "optional": true } ], "optional": false, "returnType": "void", "typeParameters": [], "line": 62, "deprecated": false, "deprecationMessage": "", "jsdoctags": [ { "name": "direction", "type": "number", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } }, { "name": "event", "type": "MouseEvent", "deprecated": false, "deprecationMessage": "", "optional": true, "tagName": { "text": "param" } } ] }, { "name": "update", "args": [], "optional": false, "returnType": "void", "typeParameters": [], "line": 47, "deprecated": false, "deprecationMessage": "" } ], "deprecated": false, "deprecationMessage": "", "hostBindings": [], "hostListeners": [], "description": "", "rawdescription": "\n", "type": "component", "sourceCode": "import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\n\n@Component({\n selector: 'cm-pagination',\n templateUrl: './pagination.component.html',\n styleUrls: [ './pagination.component.css' ]\n})\n\nexport class PaginationComponent implements OnInit {\n\n private pagerTotalItems: number = 0;\n private pagerPageSize: number = 0;\n\n totalPages: number = 0;\n pages: number[] = [];\n currentPage = 1;\n isVisible = false;\n previousEnabled = false;\n nextEnabled = true;\n\n @Input() get pageSize(): number {\n return this.pagerPageSize;\n }\n\n set pageSize(size: number) {\n this.pagerPageSize = size;\n this.update();\n }\n\n @Input() get totalItems(): number {\n return this.pagerTotalItems;\n }\n\n set totalItems(itemCount: number) {\n this.pagerTotalItems = itemCount;\n this.update();\n }\n\n @Output() pageChanged: EventEmitter = new EventEmitter();\n\n constructor() { }\n\n ngOnInit() {\n\n }\n\n update() {\n if (this.pagerTotalItems && this.pagerPageSize) {\n this.totalPages = Math.ceil(this.pagerTotalItems / this.pageSize);\n this.isVisible = true;\n if (this.totalItems >= this.pageSize) {\n for (let i = 1; i < this.totalPages + 1; i++) {\n this.pages.push(i);\n }\n }\n return;\n }\n\n this.isVisible = false;\n }\n\n previousNext(direction: number, event?: MouseEvent) {\n let page: number = this.currentPage;\n if (direction === -1) {\n if (page > 1) { page--; }\n } else {\n if (page < this.totalPages) { page++; }\n }\n this.changePage(page, event);\n }\n\n changePage(page: number, event?: MouseEvent) {\n if (event) {\n event.preventDefault();\n }\n if (this.currentPage === page) { return; }\n this.currentPage = page;\n this.previousEnabled = this.currentPage > 1;\n this.nextEnabled = this.currentPage < this.totalPages;\n this.pageChanged.emit(page);\n }\n\n}\n", "assetsDirs": [], "styleUrlsData": [ { "data": ".pagination>.active>a, \n.pagination>.active>a:focus, \n.pagination>.active>a:hover, \n.pagination>.active>span, \n.pagination>.active>span:focus, \n.pagination>.active>span:hover {\n background-color: #027FF4;\n border-color: #027FF4;\n}\n\n.pagination a {\n cursor: pointer;\n}", "styleUrl": "./pagination.component.css" } ], "stylesData": "", "constructorObj": { "name": "constructor", "description": "", "deprecated": false, "deprecationMessage": "", "args": [], "line": 39 }, "implements": [ "OnInit" ], "accessors": { "pageSize": { "name": "pageSize", "setSignature": { "name": "pageSize", "type": "void", "deprecated": false, "deprecationMessage": "", "args": [ { "name": "size", "type": "number", "deprecated": false, "deprecationMessage": "" } ], "returnType": "void", "line": 25, "jsdoctags": [ { "name": "size", "type": "number", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] }, "getSignature": { "name": "pageSize", "type": "number", "returnType": "number", "line": 21 } }, "totalItems": { "name": "totalItems", "setSignature": { "name": "totalItems", "type": "void", "deprecated": false, "deprecationMessage": "", "args": [ { "name": "itemCount", "type": "number", "deprecated": false, "deprecationMessage": "" } ], "returnType": "void", "line": 34, "jsdoctags": [ { "name": "itemCount", "type": "number", "deprecated": false, "deprecationMessage": "", "tagName": { "text": "param" } } ] }, "getSignature": { "name": "totalItems", "type": "number", "returnType": "number", "line": 30 } } }, "templateData": "" } ], "modules": [ { "name": "AboutModule", "id": "module-AboutModule-0fea291390caa7f43aa6fee82c3524a69be0bdb7bcb3e1e8aa4a24d94501d8705886ca69d2183d6c9cd974c31a5f9efdee16935758dd19d9232c28f7dee04344", "description": "", "deprecationMessage": "", "deprecated": false, "file": "src/app/about/about.module.ts", "methods": [], "sourceCode": "import { NgModule } from '@angular/core';\n\nimport { AboutRoutingModule } from './about-routing.module';\n\n@NgModule({\n imports: [ AboutRoutingModule ],\n declarations: [ AboutRoutingModule.components ]\n})\nexport class AboutModule { }\n", "children": [ { "type": "providers", "elements": [] }, { "type": "declarations", "elements": [] }, { "type": "imports", "elements": [ { "name": "AboutRoutingModule" } ] }, { "type": "exports", "elements": [] }, { "type": "bootstrap", "elements": [] }, { "type": "classes", "elements": [] } ] }, { "name": "AboutRoutingModule", "id": "module-AboutRoutingModule-b31000df8518ebc794d2d58b2990d54e4bf492d013de9a02448ef296b784c01cafa463bce6f1b77372415edaead19ef97e8f262e51ce9ddb9a0c351f6df19479", "description": "", "deprecationMessage": "", "deprecated": false, "file": "src/app/about/about-routing.module.ts", "methods": [], "sourceCode": "import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\n\nimport { AboutComponent } from './about.component';\n\nconst routes: Routes = [\n { path: '', component: AboutComponent }\n];\n\n@NgModule({\n imports: [ RouterModule.forChild(routes) ],\n exports: [ RouterModule ]\n})\nexport class AboutRoutingModule {\n static components = [ AboutComponent ];\n}\n", "children": [ { "type": "providers", "elements": [] }, { "type": "declarations", "elements": [] }, { "type": "imports", "elements": [] }, { "type": "exports", "elements": [] }, { "type": "bootstrap", "elements": [] }, { "type": "classes", "elements": [] } ] }, { "name": "AppModule", "id": "module-AppModule-68be586abe9e86cfae85c65b0923858ee7b95fd2d43d01a8150cf22efcf534a4fffa11d75cdcbb190396b5694e7b554ad20ae58780feed767f32a74d4fd25b2d", "description": "", "deprecationMessage": "", "deprecated": false, "file": "src/app/app.module.ts", "methods": [], "sourceCode": "import { NgModule } from '@angular/core';\nimport { BrowserModule } from '@angular/platform-browser';\n\nimport { AppComponent } from './app.component';\nimport { AppRoutingModule } from './app-routing.module';\n\nimport { LoginModule } from './login/login.module';\nimport { CoreModule } from './core/core.module';\nimport { SharedModule } from './shared/shared.module';\n\n@NgModule({\n imports: [\n BrowserModule,\n LoginModule, // Eager loaded since we may need to go here right away as browser loads based on route user enters\n AppRoutingModule, // Main routes for application\n CoreModule, // Singleton objects (services, components that are loaded only once, etc.)\n SharedModule // Shared (multi-instance) objects\n ],\n declarations: [AppComponent],\n bootstrap: [AppComponent]\n})\nexport class AppModule { }\n", "children": [ { "type": "providers", "elements": [] }, { "type": "declarations", "elements": [ { "name": "AppComponent" } ] }, { "type": "imports", "elements": [ { "name": "AppRoutingModule" }, { "name": "CoreModule" }, { "name": "LoginModule" }, { "name": "SharedModule" } ] }, { "type": "exports", "elements": [] }, { "type": "bootstrap", "elements": [ { "name": "AppComponent" } ] }, { "type": "classes", "elements": [] } ] }, { "name": "AppRoutingModule", "id": "module-AppRoutingModule-bca749a297d1e5fca526deeac0e6436565579c0a1f4692c63e5c177b9a4a49c447cc6b9923c6096f1a338a299bb9ddbe141cbc4bbb61d15547545491e8abf9fa", "description": "", "deprecationMessage": "", "deprecated": false, "file": "src/app/app-routing.module.ts", "methods": [], "sourceCode": "import { NgModule } from '@angular/core';\nimport { RouterModule, Routes, PreloadAllModules, NoPreloading } from '@angular/router';\n\nimport { PreloadModulesStrategy } from './core/strategies/preload-modules.strategy';\n\nconst app_routes: Routes = [\n { path: '', pathMatch: 'full', redirectTo: '/customers' },\n { path: 'customers/:id', data: { preload: true }, loadChildren: () => \"import('./customer/customer.module').then(m => m.CustomerModule)\" },\n { path: 'customers', loadChildren: () => \"import('./customers/customers.module').then(m => m.CustomersModule)\" },\n { path: 'orders', data: { preload: true }, loadChildren: () => \"import('./orders/orders.module').then(m => m.OrdersModule)\" },\n { path: 'about', loadChildren: () => \"import('./about/about.module').then(m => m.AboutModule)\" },\n { path: '**', pathMatch: 'full', redirectTo: '/customers' } // catch any unfound routes and redirect to home page\n\n // NOTE: If you're using Angular 7 or lower you'll lazy loads routes the following way\n \n // { path: 'customers/:id', data: { preload: true }, loadChildren: 'app/customer/customer.module#CustomerModule' },\n // { path: 'customers', loadChildren: 'app/customers/customers.module#CustomersModule' },\n // { path: 'orders', data: { preload: true }, loadChildren: 'app/orders/orders.module#OrdersModule' },\n // { path: 'about', loadChildren: 'app/about/about.module#AboutModule' },\n\n];\n\n@NgModule({\n imports: [ RouterModule.forRoot(app_routes, { preloadingStrategy: PreloadModulesStrategy, relativeLinkResolution: 'legacy' }) ],\n exports: [ RouterModule ],\n providers: [PreloadModulesStrategy]\n})\nexport class AppRoutingModule { }\n", "children": [ { "type": "providers", "elements": [ { "name": "PreloadModulesStrategy" } ] }, { "type": "declarations", "elements": [] }, { "type": "imports", "elements": [] }, { "type": "exports", "elements": [] }, { "type": "bootstrap", "elements": [] }, { "type": "classes", "elements": [] } ] }, { "name": "CoreModule", "id": "module-CoreModule-5ff30bacdd1eae65a6dcc9fae6da4c5c1ceb988ab595ed429f2272c168e6a122b9782c94e4095351db63cfef4bef462f4ed9630f14fc177e15c217664b357660", "description": "", "deprecationMessage": "", "deprecated": false, "file": "src/app/core/core.module.ts", "methods": [], "sourceCode": "import { NgModule, Optional, SkipSelf } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule } from '@angular/router';\nimport { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';\n\nimport { GrowlerModule } from './growler/growler.module';\nimport { ModalModule } from './modal/modal.module';\nimport { OverlayModule } from './overlay/overlay.module';\n\nimport { DataService } from './services/data.service';\nimport { NavbarComponent } from './navbar/navbar.component';\nimport { FilterService } from './services/filter.service';\nimport { SorterService } from './services/sorter.service';\nimport { TrackByService } from './services/trackby.service';\nimport { DialogService } from './services/dialog.service';\nimport { EnsureModuleLoadedOnceGuard } from './ensure-module-loaded-once.guard';\nimport { AuthService } from './services/auth.service';\nimport { EventBusService } from './services/event-bus.service';\nimport { AuthInterceptor } from './interceptors/auth.interceptor';\n\n@NgModule({\n imports: [CommonModule, RouterModule, HttpClientModule, GrowlerModule, ModalModule, OverlayModule],\n exports: [GrowlerModule, RouterModule, HttpClientModule, ModalModule, OverlayModule, NavbarComponent],\n declarations: [NavbarComponent],\n providers: [SorterService, FilterService, DataService, TrackByService,\n DialogService, AuthService, EventBusService,\n {\n provide: HTTP_INTERCEPTORS,\n useClass: AuthInterceptor,\n multi: true,\n },\n { provide: 'Window', useFactory: () => window }\n ] // these should be singleton\n})\nexport class CoreModule extends EnsureModuleLoadedOnceGuard { // Ensure that CoreModule is only loaded into AppModule\n\n // Looks for the module in the parent injector to see if it's already been loaded (only want it loaded once)\n constructor(@Optional() @SkipSelf() parentModule: CoreModule) {\n super(parentModule);\n }\n\n}\n\n\n\n", "children": [ { "type": "providers", "elements": [ { "name": "AuthInterceptor" }, { "name": "AuthService" }, { "name": "DataService" }, { "name": "DialogService" }, { "name": "EventBusService" }, { "name": "FilterService" }, { "name": "SorterService" }, { "name": "TrackByService" } ] }, { "type": "declarations", "elements": [ { "name": "NavbarComponent" } ] }, { "type": "imports", "elements": [ { "name": "GrowlerModule" }, { "name": "ModalModule" }, { "name": "OverlayModule" } ] }, { "type": "exports", "elements": [ { "name": "GrowlerModule" }, { "name": "ModalModule" }, { "name": "NavbarComponent" }, { "name": "OverlayModule" } ] }, { "type": "bootstrap", "elements": [] }, { "type": "classes", "elements": [] } ] }, { "name": "CustomerModule", "id": "module-CustomerModule-67ce9acfa01b363ad76b831c2c11d3ee2d7710e09c72a3c58c1b56d5e0c31785a44675839affa398d0aee4091dce861c04e98629a8c96b213061e49f9ad66efe", "description": "", "deprecationMessage": "", "deprecated": false, "file": "src/app/customer/customer.module.ts", "methods": [], "sourceCode": "import { NgModule } from '@angular/core';\n\nimport { SharedModule } from '../shared/shared.module';\nimport { CustomerRoutingModule } from './customer-routing.module';\n\n@NgModule({\n imports: [CustomerRoutingModule, SharedModule],\n declarations: [CustomerRoutingModule.components]\n})\nexport class CustomerModule { }\n", "children": [ { "type": "providers", "elements": [] }, { "type": "declarations", "elements": [] }, { "type": "imports", "elements": [ { "name": "CustomerRoutingModule" }, { "name": "SharedModule" } ] }, { "type": "exports", "elements": [] }, { "type": "bootstrap", "elements": [] }, { "type": "classes", "elements": [] } ] }, { "name": "CustomerRoutingModule", "id": "module-CustomerRoutingModule-40d7c0dad5fe26168799f8c66dca4e1f3e2e14f1abd8eb2250988b00c3cf750aee23922ecbeca5529ff0ddca10ce4a29e21c7d3c648de82bd9925395a8ea6fc3", "description": "", "deprecationMessage": "", "deprecated": false, "file": "src/app/customer/customer-routing.module.ts", "methods": [], "sourceCode": "import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\n\nimport { CustomerComponent } from './customer.component';\nimport { CustomerOrdersComponent } from './customer-orders/customer-orders.component';\nimport { CustomerDetailsComponent } from './customer-details/customer-details.component';\nimport { CustomerEditComponent } from './customer-edit/customer-edit.component';\nimport { CanActivateGuard } from './guards/can-activate.guard';\nimport { CanDeactivateGuard } from './guards/can-deactivate.guard';\n\nconst routes: Routes = [\n {\n path: '',\n component: CustomerComponent,\n children: [\n { path: 'orders', component: CustomerOrdersComponent },\n { path: 'details', component: CustomerDetailsComponent },\n {\n path: 'edit',\n component: CustomerEditComponent,\n canActivate: [CanActivateGuard],\n canDeactivate: [CanDeactivateGuard]\n }\n ]\n }\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule],\n providers: [CanActivateGuard, CanDeactivateGuard]\n})\nexport class CustomerRoutingModule {\n static components = [CustomerComponent, CustomerOrdersComponent, CustomerDetailsComponent, CustomerEditComponent];\n}\n\n", "children": [ { "type": "providers", "elements": [] }, { "type": "declarations", "elements": [] }, { "type": "imports", "elements": [] }, { "type": "exports", "elements": [] }, { "type": "bootstrap", "elements": [] }, { "type": "classes", "elements": [] } ] }, { "name": "CustomersModule", "id": "module-CustomersModule-1f20e9d2ae07be87cb3c143a26e3a069f62037e0f4a681bf8cc2e2abcff0cf905782cf450ab9a5b41c37340b3e4013cde16ea61168f825e9212adacf31bfd9a8", "description": "", "deprecationMessage": "", "deprecated": false, "file": "src/app/customers/customers.module.ts", "methods": [], "sourceCode": "import { NgModule } from '@angular/core';\n\nimport { SharedModule } from '../shared/shared.module';\nimport { CustomersRoutingModule } from './customers-routing.module';\n\n@NgModule({\n imports: [CustomersRoutingModule, SharedModule],\n declarations: [CustomersRoutingModule.components]\n})\nexport class CustomersModule { }\n", "children": [ { "type": "providers", "elements": [] }, { "type": "declarations", "elements": [] }, { "type": "imports", "elements": [ { "name": "CustomersRoutingModule" }, { "name": "SharedModule" } ] }, { "type": "exports", "elements": [] }, { "type": "bootstrap", "elements": [] }, { "type": "classes", "elements": [] } ] }, { "name": "CustomersRoutingModule", "id": "module-CustomersRoutingModule-0dbad897e9bc4ae3b2fb0221460d0d4aa4caaca66c15b880b623beb28c5391fc87d9127072d33478f382d85fbf1179838cd6e6b6483b75c3dcbeaaacc6fe6044", "description": "", "deprecationMessage": "", "deprecated": false, "file": "src/app/customers/customers-routing.module.ts", "methods": [], "sourceCode": "import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\n\nimport { CustomersComponent } from './customers.component';\nimport { CustomersCardComponent } from './customers-card/customers-card.component';\nimport { CustomersGridComponent } from './customers-grid/customers-grid.component';\n\nconst routes: Routes = [\n { path: '', component: CustomersComponent }\n];\n\n@NgModule({\n imports: [ RouterModule.forChild(routes) ],\n exports: [ RouterModule ]\n})\nexport class CustomersRoutingModule {\n static components = [ CustomersComponent, CustomersCardComponent, CustomersGridComponent ];\n}\n", "children": [ { "type": "providers", "elements": [] }, { "type": "declarations", "elements": [] }, { "type": "imports", "elements": [] }, { "type": "exports", "elements": [] }, { "type": "bootstrap", "elements": [] }, { "type": "classes", "elements": [] } ] }, { "name": "FilterTextboxModule", "id": "module-FilterTextboxModule-9498405e6eb7280d1d0f88ab49c6f8c167686681547ecc3125885cf9422bbbbce9e2e504e0b620306f70904a7cc0fa9ee4bdf6de06e84e460b44e4882474febc", "description": "", "deprecationMessage": "", "deprecated": false, "file": "src/app/shared/filter-textbox/filter-textbox.module.ts", "methods": [], "sourceCode": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\n\nimport { FilterTextboxComponent } from './filter-textbox.component';\n\n@NgModule({\n imports: [CommonModule, FormsModule],\n exports: [FilterTextboxComponent],\n declarations: [FilterTextboxComponent]\n})\nexport class FilterTextboxModule { }\n", "children": [ { "type": "providers", "elements": [] }, { "type": "declarations", "elements": [ { "name": "FilterTextboxComponent" } ] }, { "type": "imports", "elements": [] }, { "type": "exports", "elements": [ { "name": "FilterTextboxComponent" } ] }, { "type": "bootstrap", "elements": [] }, { "type": "classes", "elements": [] } ] }, { "name": "GrowlerModule", "id": "module-GrowlerModule-50ebdeee66ddbdd8f9caab4e8bb229e5d2d47868c62ca6c9e9efa34f7897a0a0091f9c7a729809035abaca9501de4cd5b4de4890fb890b17ede99358c02ae1b8", "description": "", "deprecationMessage": "", "deprecated": false, "file": "src/app/core/growler/growler.module.ts", "methods": [], "sourceCode": "import { NgModule, Optional, SkipSelf } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { GrowlerComponent } from './growler.component';\nimport { GrowlerService } from './growler.service';\nimport { EnsureModuleLoadedOnceGuard } from '../ensure-module-loaded-once.guard';\n\n@NgModule({\n imports: [CommonModule],\n exports: [GrowlerComponent],\n providers: [GrowlerService],\n declarations: [GrowlerComponent]\n})\nexport class GrowlerModule extends EnsureModuleLoadedOnceGuard { // Ensure that GrowlerModule is only loaded into AppModule\n\n // Looks for the module in the parent injector to see if it's already been loaded (only want it loaded once)\n constructor(@Optional() @SkipSelf() parentModule: GrowlerModule) {\n super(parentModule);\n }\n}\n", "children": [ { "type": "providers", "elements": [ { "name": "GrowlerService" } ] }, { "type": "declarations", "elements": [ { "name": "GrowlerComponent" } ] }, { "type": "imports", "elements": [] }, { "type": "exports", "elements": [ { "name": "GrowlerComponent" } ] }, { "type": "bootstrap", "elements": [] }, { "type": "classes", "elements": [] } ] }, { "name": "LoginModule", "id": "module-LoginModule-d32af22e0466dc8064d533f73b8afb6ddadfb9ef2062cc87094845d20d545e90087294d93a3181568f66b21c4d911d9e90f5e8bde0919c42403d8a9d91516762", "description": "", "deprecationMessage": "", "deprecated": false, "file": "src/app/login/login.module.ts", "methods": [], "sourceCode": "import { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\n\nimport { SharedModule } from '../shared/shared.module';\nimport { LoginRoutingModule } from './login-routing.module';\n\n@NgModule({\n imports: [ ReactiveFormsModule, SharedModule, LoginRoutingModule ],\n declarations: [ LoginRoutingModule.components ]\n})\nexport class LoginModule { }\n", "children": [ { "type": "providers", "elements": [] }, { "type": "declarations", "elements": [] }, { "type": "imports", "elements": [ { "name": "LoginRoutingModule" }, { "name": "SharedModule" } ] }, { "type": "exports", "elements": [] }, { "type": "bootstrap", "elements": [] }, { "type": "classes", "elements": [] } ] }, { "name": "LoginRoutingModule", "id": "module-LoginRoutingModule-ce23cb8d718e090c5ff0712dbb32a8bec2b544b38963350fdf667e7adae289bce47bc7223577b83689ad0a5f5998242ccea3ab6538e1628db538fc645f4dc97d", "description": "", "deprecationMessage": "", "deprecated": false, "file": "src/app/login/login-routing.module.ts", "methods": [], "sourceCode": "import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\n\nimport { LoginComponent } from './login.component';\n\nconst routes: Routes = [\n { path: 'login', component: LoginComponent }\n];\n\n@NgModule({\n imports: [ RouterModule.forChild(routes) ],\n exports: [ RouterModule ]\n})\nexport class LoginRoutingModule {\n static components = [ LoginComponent ];\n}\n", "children": [ { "type": "providers", "elements": [] }, { "type": "declarations", "elements": [] }, { "type": "imports", "elements": [] }, { "type": "exports", "elements": [] }, { "type": "bootstrap", "elements": [] }, { "type": "classes", "elements": [] } ] }, { "name": "MapModule", "id": "module-MapModule-8359c4f9ceaaf2924ca7a2ea687067552228b27e549b8dc0a6249a6c5a29c0098319a6c28263a9d56091171fdd96302b0a056646758a1920ee34ae9970c80d4c", "description": "", "deprecationMessage": "", "deprecated": false, "file": "src/app/shared/map/map.module.ts", "methods": [], "sourceCode": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { MapComponent } from './map.component';\nimport { MapPointComponent } from './map-point.component';\n\n@NgModule({\n imports: [CommonModule],\n exports: [MapComponent, MapPointComponent],\n declarations: [MapComponent, MapPointComponent]\n})\nexport class MapModule { }\n", "children": [ { "type": "providers", "elements": [] }, { "type": "declarations", "elements": [ { "name": "MapComponent" }, { "name": "MapPointComponent" } ] }, { "type": "imports", "elements": [] }, { "type": "exports", "elements": [ { "name": "MapComponent" }, { "name": "MapPointComponent" } ] }, { "type": "bootstrap", "elements": [] }, { "type": "classes", "elements": [] } ] }, { "name": "ModalModule", "id": "module-ModalModule-954364f74ce2d08ac40b82051df2b9150dcfa6f7ff40362e0904fe9266283831abd2db5ca02453a81d630be3e5c566c2a2633f55c49b4a8fb9879863f3505a41", "description": "", "deprecationMessage": "", "deprecated": false, "file": "src/app/core/modal/modal.module.ts", "methods": [], "sourceCode": "import { NgModule, Optional, SkipSelf } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { ModalComponent } from './modal.component';\nimport { ModalService } from './modal.service';\nimport { EnsureModuleLoadedOnceGuard } from '../ensure-module-loaded-once.guard';\n\n@NgModule({\n imports: [CommonModule],\n exports: [ModalComponent],\n declarations: [ModalComponent],\n providers: [ModalService]\n})\nexport class ModalModule extends EnsureModuleLoadedOnceGuard { // Ensure that ModalModule is only loaded into AppModule\n\n // Looks for the module in the parent injector to see if it's already been loaded (only want it loaded once)\n constructor(@Optional() @SkipSelf() parentModule: ModalModule) {\n super(parentModule);\n }\n\n}\n", "children": [ { "type": "providers", "elements": [ { "name": "ModalService" } ] }, { "type": "declarations", "elements": [ { "name": "ModalComponent" } ] }, { "type": "imports", "elements": [] }, { "type": "exports", "elements": [ { "name": "ModalComponent" } ] }, { "type": "bootstrap", "elements": [] }, { "type": "classes", "elements": [] } ] }, { "name": "OrdersModule", "id": "module-OrdersModule-f4173d321d33f832ac88c7bf2296c7f784f7592a26201448b398f68b6837c10897e499461aa08ec42dfcf35891df07b9afb61516c1fb865c80c6988fba74b485", "description": "", "deprecationMessage": "", "deprecated": false, "file": "src/app/orders/orders.module.ts", "methods": [], "sourceCode": "import { NgModule } from '@angular/core';\n\nimport { SharedModule } from '../shared/shared.module';\nimport { OrdersRoutingModule } from './orders-routing.module';\n\n@NgModule({\n imports: [SharedModule, OrdersRoutingModule],\n declarations: [OrdersRoutingModule.components]\n})\nexport class OrdersModule { }\n", "children": [ { "type": "providers", "elements": [] }, { "type": "declarations", "elements": [] }, { "type": "imports", "elements": [ { "name": "OrdersRoutingModule" }, { "name": "SharedModule" } ] }, { "type": "exports", "elements": [] }, { "type": "bootstrap", "elements": [] }, { "type": "classes", "elements": [] } ] }, { "name": "OrdersRoutingModule", "id": "module-OrdersRoutingModule-81be2ea31907871cdc8e917db526014ebcdcf50a885b2a382ec2e94f90be2d903c1acd512488fb30ac70162215f55d9574bcfcb832a181c39a771cba806539cc", "description": "", "deprecationMessage": "", "deprecated": false, "file": "src/app/orders/orders-routing.module.ts", "methods": [], "sourceCode": "import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\n\nimport { OrdersComponent } from './orders.component';\n\nconst routes: Routes = [\n { path: '', component: OrdersComponent }\n];\n\n@NgModule({\n imports: [ RouterModule.forChild(routes) ],\n exports: [ RouterModule ]\n})\nexport class OrdersRoutingModule {\n static components = [ OrdersComponent ];\n}\n", "children": [ { "type": "providers", "elements": [] }, { "type": "declarations", "elements": [] }, { "type": "imports", "elements": [] }, { "type": "exports", "elements": [] }, { "type": "bootstrap", "elements": [] }, { "type": "classes", "elements": [] } ] }, { "name": "OverlayModule", "id": "module-OverlayModule-2a15c24a5315b7a743bef4ff68eeab7519d79fce69a6919939f9f7ed3bf0e04157090d3d55b7594f6af69b96e4af9fa312c12b75e6e2ce7729b0dd86de8edac9", "description": "", "deprecationMessage": "", "deprecated": false, "file": "src/app/core/overlay/overlay.module.ts", "methods": [], "sourceCode": "import { NgModule, Optional, SkipSelf } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HTTP_INTERCEPTORS } from '@angular/common/http';\n\nimport { OverlayRequestResponseInterceptor } from './overlay-request-response.interceptor';\nimport { OverlayComponent } from './overlay.component';\nimport { EnsureModuleLoadedOnceGuard } from '../ensure-module-loaded-once.guard';\n\n\n@NgModule({\n imports: [CommonModule],\n exports: [OverlayComponent],\n declarations: [OverlayComponent],\n providers: [\n {\n provide: HTTP_INTERCEPTORS,\n useClass: OverlayRequestResponseInterceptor,\n multi: true,\n }\n ]\n})\nexport class OverlayModule extends EnsureModuleLoadedOnceGuard { // Ensure that OverlayModule is only loaded into AppModule\n\n // Looks for the module in the parent injector to see if it's already been loaded (only want it loaded once)\n constructor(@Optional() @SkipSelf() parentModule: OverlayModule) {\n super(parentModule);\n }\n}\n", "children": [ { "type": "providers", "elements": [ { "name": "OverlayRequestResponseInterceptor" } ] }, { "type": "declarations", "elements": [ { "name": "OverlayComponent" } ] }, { "type": "imports", "elements": [] }, { "type": "exports", "elements": [ { "name": "OverlayComponent" } ] }, { "type": "bootstrap", "elements": [] }, { "type": "classes", "elements": [] } ] }, { "name": "PaginationModule", "id": "module-PaginationModule-1e2b267f0a4ace0dd7f2e53a3260f0b151ed3baedb479b1c7673287e9b09d6f38439a57a5eccce8bc60658ac9a371eb1e16cea46eeae75a492ae0f6d0dd3c258", "description": "", "deprecationMessage": "", "deprecated": false, "file": "src/app/shared/pagination/pagination.module.ts", "methods": [], "sourceCode": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { PaginationComponent } from './pagination.component';\n\n@NgModule({\n imports: [CommonModule],\n exports: [PaginationComponent],\n declarations: [PaginationComponent]\n})\nexport class PaginationModule { }\n", "children": [ { "type": "providers", "elements": [] }, { "type": "declarations", "elements": [ { "name": "PaginationComponent" } ] }, { "type": "imports", "elements": [] }, { "type": "exports", "elements": [ { "name": "PaginationComponent" } ] }, { "type": "bootstrap", "elements": [] }, { "type": "classes", "elements": [] } ] }, { "name": "SharedModule", "id": "module-SharedModule-bbf26de0130a6a081ab35faa1e77a704e1cf8cc3308ea8cec17e74435b0b4924a5be2a5eeb1698423cf6074cc78fb36013f4d6ff290d974fed2767dc610a49e1", "description": "", "deprecationMessage": "", "deprecated": false, "file": "src/app/shared/shared.module.ts", "methods": [], "sourceCode": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\n\nimport { FilterTextboxModule } from './filter-textbox/filter-textbox.module';\nimport { PaginationModule } from './pagination/pagination.module';\n\nimport { CapitalizePipe } from './pipes/capitalize.pipe';\nimport { TrimPipe } from './pipes/trim.pipe';\nimport { SortByDirective } from './directives/sortby.directive';\n\n@NgModule({\n imports: [CommonModule, FilterTextboxModule, PaginationModule ],\n exports: [ CommonModule, FormsModule, CapitalizePipe, TrimPipe, SortByDirective, FilterTextboxModule, PaginationModule ],\n declarations: [ CapitalizePipe, TrimPipe, SortByDirective ]\n})\nexport class SharedModule { }\n", "children": [ { "type": "providers", "elements": [] }, { "type": "declarations", "elements": [ { "name": "CapitalizePipe" }, { "name": "SortByDirective" }, { "name": "TrimPipe" } ] }, { "type": "imports", "elements": [ { "name": "FilterTextboxModule" }, { "name": "PaginationModule" } ] }, { "type": "exports", "elements": [ { "name": "CapitalizePipe" }, { "name": "FilterTextboxModule" }, { "name": "PaginationModule" }, { "name": "SortByDirective" }, { "name": "TrimPipe" } ] }, { "type": "bootstrap", "elements": [] }, { "type": "classes", "elements": [] } ] } ], "miscellaneous": { "variables": [ { "name": "About", "ctype": "miscellaneous", "subtype": "variable", "file": "src/stories/About.stories.ts", "deprecated": false, "deprecationMessage": "", "type": "", "defaultValue": "Template.bind({})" }, { "name": "context", "ctype": "miscellaneous", "subtype": "variable", "file": "src/test.ts", "deprecated": false, "deprecationMessage": "", "type": "", "defaultValue": "require.context('./', true, /\\.spec\\.ts$/)" }, { "name": "CustomerCards", "ctype": "miscellaneous", "subtype": "variable", "file": "src/stories/Customers-card.stories.ts", "deprecated": false, "deprecationMessage": "", "type": "", "defaultValue": "Template.bind({})" }, { "name": "CustomerCards10", "ctype": "miscellaneous", "subtype": "variable", "file": "src/stories/Customers-card.stories.ts", "deprecated": false, "deprecationMessage": "", "type": "", "defaultValue": "Template.bind({})" }, { "name": "CustomerCards4", "ctype": "miscellaneous", "subtype": "variable", "file": "src/stories/Customers-card.stories.ts", "deprecated": false, "deprecationMessage": "", "type": "", "defaultValue": "Template.bind({})" }, { "name": "CustomerCardsNone", "ctype": "miscellaneous", "subtype": "variable", "file": "src/stories/Customers-card.stories.ts", "deprecated": false, "deprecationMessage": "", "type": "", "defaultValue": "Template.bind({})" }, { "name": "customers", "ctype": "miscellaneous", "subtype": "variable", "file": "deno/routes.ts", "deprecated": false, "deprecationMessage": "", "type": "", "defaultValue": "JSON.parse(loadFile('../data/customers.json'))" }, { "name": "customers", "ctype": "miscellaneous", "subtype": "variable", "file": "src/app/shared/mocks.ts", "deprecated": false, "deprecationMessage": "", "type": "[]", "defaultValue": "[\n {\n 'id': 1,\n 'firstName': 'ted',\n 'lastName': 'james',\n 'gender': 'male',\n 'address': '1234 Anywhere St.',\n 'city': ' Phoenix ',\n 'state': {\n 'abbreviation': 'AZ',\n 'name': 'Arizona'\n },\n 'orders': [\n { 'productName': 'Basketball', 'itemCost': 7.99 },\n { 'productName': 'Shoes', 'itemCost': 199.99 }\n ],\n 'latitude': 33.299,\n 'longitude': -111.963\n },\n {\n 'id': 2,\n 'firstName': 'Michelle',\n 'lastName': 'Thompson',\n 'gender': 'female',\n 'address': '345 Cedar Point Ave.',\n 'city': 'Encinitas ',\n 'state': {\n 'abbreviation': 'CA',\n 'name': 'California'\n },\n 'orders': [\n { 'productName': 'Frisbee', 'itemCost': 2.99 },\n { 'productName': 'Hat', 'itemCost': 5.99 }\n ],\n 'latitude': 33.037,\n 'longitude': -117.291\n },\n {\n 'id': 3,\n 'firstName': 'Zed',\n 'lastName': 'Bishop',\n 'gender': 'male',\n 'address': '1822 Long Bay Dr.',\n 'city': ' Seattle ',\n 'state': {\n 'abbreviation': 'WA',\n 'name': 'Washington'\n },\n 'orders': [\n { 'productName': 'Boomerang', 'itemCost': 29.99 },\n { 'productName': 'Helmet', 'itemCost': 19.99 },\n { 'productName': 'Kangaroo Saddle', 'itemCost': 179.99 }\n ],\n 'latitude': 47.596,\n 'longitude': -122.331\n },\n {\n 'id': 4,\n 'firstName': 'Tina',\n 'lastName': 'Adams',\n 'gender': 'female',\n 'address': '79455 Pinetop Way',\n 'city': 'Chandler',\n 'state': {\n 'abbreviation': 'AZ',\n 'name': ' Arizona '\n },\n 'orders': [\n { 'productName': 'Budgie Smugglers', 'itemCost': 19.99 },\n { 'productName': 'Swimming Cap', 'itemCost': 5.49 }\n ],\n 'latitude': 33.299,\n 'longitude': -111.963\n },\n {\n 'id': 5,\n 'firstName': 'Igor',\n 'lastName': 'Minar',\n 'gender': 'male',\n 'address': '576 Crescent Blvd.',\n 'city': ' Dallas',\n 'state': {\n 'abbreviation': 'TX',\n 'name': 'Texas'\n },\n 'orders': [\n { 'productName': 'Bow', 'itemCost': 399.99 },\n { 'productName': 'Arrows', 'itemCost': 69.99 }\n ],\n 'latitude': 32.782927,\n 'longitude': -96.806191\n },\n {\n 'id': 6,\n 'firstName': 'Brad',\n 'lastName': 'Green',\n 'gender': 'male',\n 'address': '9874 Center St.',\n 'city': 'Orlando ',\n 'state': {\n 'abbreviation': 'FL',\n 'name': 'Florida'\n },\n 'orders': [\n { 'productName': 'Baseball', 'itemCost': 9.99 },\n { 'productName': 'Bat', 'itemCost': 19.99 }\n ],\n 'latitude': 28.384238,\n 'longitude': -81.564103\n },\n {\n 'id': 7,\n 'firstName': 'Misko',\n 'lastName': 'Hevery',\n 'gender': 'male',\n 'address': '9812 Builtway Appt #1',\n 'city': 'Carey ',\n 'state': {\n 'abbreviation': 'NC',\n 'name': 'North Carolina'\n },\n 'orders': [\n { 'productName': 'Surfboard', 'itemCost': 299.99 },\n { 'productName': 'Wax', 'itemCost': 5.99 },\n { 'productName': 'Shark Repellent', 'itemCost': 15.99 }\n ],\n 'latitude': 35.727985,\n 'longitude': -78.797594\n },\n {\n 'id': 8,\n 'firstName': 'Heedy',\n 'lastName': 'Wahlin',\n 'gender': 'female',\n 'address': '4651 Tuvo St.',\n 'city': 'Anaheim',\n 'state': {\n 'abbreviation': 'CA',\n 'name': 'California'\n },\n 'orders': [\n { 'productName': 'Saddle', 'itemCost': 599.99 },\n { 'productName': 'Riding cap', 'itemCost': 79.99 }\n ],\n 'latitude': 33.809898,\n 'longitude': -117.918757\n },\n {\n 'id': 9,\n 'firstName': 'John',\n 'lastName': 'Papa',\n 'gender': 'male',\n 'address': '66 Ray St.',\n 'city': ' Orlando',\n 'state': {\n 'abbreviation': 'FL',\n 'name': 'Florida'\n },\n 'orders': [\n { 'productName': 'Baseball', 'itemCost': 9.99 },\n { 'productName': 'Bat', 'itemCost': 19.99 }\n ],\n 'latitude': 28.384238,\n 'longitude': -81.564103\n },\n {\n 'id': 10,\n 'firstName': 'Tonya',\n 'lastName': 'Smith',\n 'gender': 'female',\n 'address': '1455 Chandler Blvd.',\n 'city': ' Atlanta',\n 'state': {\n 'abbreviation': 'GA',\n 'name': 'Georgia'\n },\n 'orders': [\n { 'productName': 'Surfboard', 'itemCost': 299.99 },\n { 'productName': 'Wax', 'itemCost': 5.99 },\n { 'productName': 'Shark Repellent', 'itemCost': 7.99 }\n ],\n 'latitude': 33.762297,\n 'longitude': -84.392953\n },\n {\n 'id': 11,\n 'firstName': 'ward',\n 'lastName': 'bell',\n 'gender': 'male',\n 'address': '888 Central St.',\n 'city': 'Los Angeles',\n 'state': {\n 'abbreviation': 'CA',\n 'name': 'California'\n },\n 'latitude': 34.042552,\n 'longitude': -118.266429\n },\n {\n 'id': 12,\n 'firstName': 'Marcus',\n 'lastName': 'Hightower',\n 'gender': 'male',\n 'address': '1699 Atomic St.',\n 'city': 'Dallas',\n 'state': {\n 'abbreviation': 'TX',\n 'name': 'Texas'\n },\n 'latitude': 32.782927,\n 'longitude': -96.806191\n },\n {\n 'id': 13,\n 'firstName': 'Thomas',\n 'lastName': 'Martin',\n 'gender': 'male',\n 'address': '98756 Center St.',\n 'city': 'New York',\n 'state': {\n 'abbreviation': 'NY',\n 'name': 'New York City'\n },\n 'orders': [\n { 'productName': 'Car', 'itemCost': 42999.99 },\n { 'productName': 'Wax', 'itemCost': 5.99 },\n { 'productName': 'Shark Repellent', 'itemCost': 7.99 }\n ],\n 'latitude': 40.725037,\n 'longitude': -74.004903\n },\n {\n 'id': 14,\n 'firstName': 'Jean',\n 'lastName': 'Martin',\n 'gender': 'female',\n 'address': '98756 Center St.',\n 'city': 'New York City',\n 'state': {\n 'abbreviation': 'NY',\n 'name': 'New York'\n },\n 'latitude': 40.725037,\n 'longitude': -74.004903\n },\n {\n 'id': 15,\n 'firstName': 'Pinal',\n 'lastName': 'Dave',\n 'gender': 'male',\n 'address': '23566 Directive Pl.',\n 'city': 'White Plains',\n 'state': {\n 'abbreviation': 'NY',\n 'name': 'New York'\n },\n 'latitude': 41.028726,\n 'longitude': -73.758261\n },\n {\n 'id': 16,\n 'firstName': 'Robin',\n 'lastName': 'Cleark',\n 'gender': 'female',\n 'address': '35632 Richmond Circle Apt B',\n 'city': 'Las Vegas',\n 'state': {\n 'abbreviation': 'NV',\n 'name': 'Nevada'\n },\n 'latitude': 36.091824,\n 'longitude': -115.174247\n },\n {\n 'id': 17,\n 'firstName': 'Fred',\n 'lastName': 'Roberts',\n 'gender': 'male',\n 'address': '12 Ocean View St.',\n 'city': 'Houston',\n 'state': {\n 'abbreviation': 'TX',\n 'name': 'Texas'\n },\n 'latitude': 29.750163,\n 'longitude': -95.362769\n },\n {\n 'id': 18,\n 'firstName': 'Robyn',\n 'lastName': 'Flores',\n 'gender': 'female',\n 'address': '23423 Adams St.',\n 'city': 'Seattle',\n 'state': {\n 'abbreviation': 'WA',\n 'name': 'Washington'\n },\n 'latitude': 47.596,\n 'longitude': -122.331\n },\n {\n 'id': 19,\n 'firstName': 'Elaine',\n 'lastName': 'Jones',\n 'gender': 'female',\n 'address': '98756 Center St.',\n 'city': 'Barcelona',\n 'state': {\n 'abbreviation': 'CAT',\n 'name': 'Catalonia'\n },\n 'latitude': 41.386444,\n 'longitude': 2.111988\n },\n {\n 'id': 20,\n 'firstName': 'Lilija',\n 'lastName': 'Arnarson',\n 'gender': 'female',\n 'address': '23423 Adams St.',\n 'city': 'Reykjavik',\n 'state': {\n 'abbreviation': 'IS',\n 'name': 'Iceland'\n },\n 'latitude': 64.120278,\n 'longitude': -21.830471\n },\n {\n 'id': 21,\n 'firstName': 'Laurent',\n 'lastName': 'Bugnion',\n 'gender': 'male',\n 'address': '9874 Lake Blvd.',\n 'city': 'Zurich',\n 'state': {\n 'abbreviation': 'COZ',\n 'name': 'Canton of Zurick'\n },\n 'orders': [\n { 'productName': 'Baseball', 'itemCost': 9.99 },\n { 'productName': 'Bat', 'itemCost': 19.99 }\n ],\n 'latitude': 47.341337,\n 'longitude': 8.582503\n },\n {\n 'id': 22,\n 'firstName': 'Gabriel',\n 'lastName': 'Flores',\n 'gender': 'male',\n 'address': '2543 Cassiano',\n 'city': 'Rio de Janeiro',\n 'state': {\n 'abbreviation': 'WA',\n 'name': 'Rio de Janeiro'\n },\n 'latitude': -22.919369,\n 'longitude': -43.181836\n }\n]" }, { "name": "Deno", "ctype": "miscellaneous", "subtype": "variable", "file": "deno/loadfile.ts", "deprecated": false, "deprecationMessage": "", "type": "any" }, { "name": "environment", "ctype": "miscellaneous", "subtype": "variable", "file": "src/environments/environment.prod.ts", "deprecated": false, "deprecationMessage": "", "type": "object", "defaultValue": "{\n production: true\n}" }, { "name": "environment", "ctype": "miscellaneous", "subtype": "variable", "file": "src/environments/environment.ts", "deprecated": false, "deprecationMessage": "", "type": "object", "defaultValue": "{\n production: false\n}" }, { "name": "Large", "ctype": "miscellaneous", "subtype": "variable", "file": "src/stories/Button.stories.ts", "deprecated": false, "deprecationMessage": "", "type": "", "defaultValue": "Template.bind({})" }, { "name": "LoggedIn", "ctype": "miscellaneous", "subtype": "variable", "file": "src/stories/Header.stories.ts", "deprecated": false, "deprecationMessage": "", "type": "", "defaultValue": "Template.bind({})" }, { "name": "LoggedIn", "ctype": "miscellaneous", "subtype": "variable", "file": "src/stories/Page.stories.ts", "deprecated": false, "deprecationMessage": "", "type": "", "defaultValue": "Template.bind({})" }, { "name": "LoggedOut", "ctype": "miscellaneous", "subtype": "variable", "file": "src/stories/Header.stories.ts", "deprecated": false, "deprecationMessage": "", "type": "", "defaultValue": "Template.bind({})" }, { "name": "LoggedOut", "ctype": "miscellaneous", "subtype": "variable", "file": "src/stories/Page.stories.ts", "deprecated": false, "deprecationMessage": "", "type": "", "defaultValue": "Template.bind({})" }, { "name": "port", "ctype": "miscellaneous", "subtype": "variable", "file": "deno/server.ts", "deprecated": false, "deprecationMessage": "", "type": "number", "defaultValue": "8080" }, { "name": "Primary", "ctype": "miscellaneous", "subtype": "variable", "file": "src/stories/Button.stories.ts", "deprecated": false, "deprecationMessage": "", "type": "", "defaultValue": "Template.bind({})" }, { "name": "require", "ctype": "miscellaneous", "subtype": "variable", "file": "src/test.ts", "deprecated": false, "deprecationMessage": "", "type": "literal type" }, { "name": "sandboxConfig", "ctype": "miscellaneous", "subtype": "variable", "file": "src/app/customers/customers.component.sandbox.ts", "deprecated": false, "deprecationMessage": "", "type": "object", "defaultValue": "{\n imports: [ SharedModule, CoreModule, RouterTestingModule ],\n declarations: [ CustomersCardComponent, CustomersGridComponent ],\n providers: [\n { provide: DataService, useClass: MockDataService }\n],\n label: 'Customers Component'\n}" }, { "name": "sandboxConfig", "ctype": "miscellaneous", "subtype": "variable", "file": "src/app/customers/customers-grid/customers-grid.component.sandbox.ts", "deprecated": false, "deprecationMessage": "", "type": "object", "defaultValue": "{\n imports: [ SharedModule, CoreModule, RouterTestingModule ],\n label: 'Customers Grid Component'\n}" }, { "name": "sandboxConfig", "ctype": "miscellaneous", "subtype": "variable", "file": "src/app/customers/customers-card/customers-card.component.sandbox.ts", "deprecated": false, "deprecationMessage": "", "type": "object", "defaultValue": "{\n imports: [ SharedModule, CoreModule, RouterTestingModule ],\n label: 'Customers Card Component'\n}" }, { "name": "sandboxConfig", "ctype": "miscellaneous", "subtype": "variable", "file": "src/app/customer/customer-details/customer-details.component.sandbox.ts", "deprecated": false, "deprecationMessage": "", "type": "object", "defaultValue": "{\n imports: [ SharedModule, CoreModule ],\n providers: [\n { provide: DataService, useClass: MockDataService },\n { provide: ActivatedRoute, useFactory: () => {\n const route = getActivatedRouteWithParent([{ id: '1' }]);\n return route;\n }}\n ],\n label: 'Customer Details Component'\n}" }, { "name": "sandboxConfig", "ctype": "miscellaneous", "subtype": "variable", "file": "src/app/customer/customer-orders/customer-orders.component.sandbox.ts", "deprecated": false, "deprecationMessage": "", "type": "object", "defaultValue": "{\n imports: [ SharedModule, CoreModule ],\n providers: [\n { provide: DataService, useClass: MockDataService },\n { provide: ActivatedRoute, useFactory: () => {\n const route = getActivatedRouteWithParent([{ id: '1' }]);\n return route;\n }}\n ],\n label: 'Customer Orders Component'\n}" }, { "name": "Secondary", "ctype": "miscellaneous", "subtype": "variable", "file": "src/stories/Button.stories.ts", "deprecated": false, "deprecationMessage": "", "type": "", "defaultValue": "Template.bind({})" }, { "name": "Small", "ctype": "miscellaneous", "subtype": "variable", "file": "src/stories/Button.stories.ts", "deprecated": false, "deprecationMessage": "", "type": "", "defaultValue": "Template.bind({})" }, { "name": "Template", "ctype": "miscellaneous", "subtype": "variable", "file": "src/stories/About.stories.ts", "deprecated": false, "deprecationMessage": "", "type": "Story", "defaultValue": "(args: AboutComponent) => ({\n component: AboutComponent,\n props: args,\n})" }, { "name": "Template", "ctype": "miscellaneous", "subtype": "variable", "file": "src/stories/Button.stories.ts", "deprecated": false, "deprecationMessage": "", "type": "Story