tnx-shared 5.3.377 → 5.3.379

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"public-function.d.ts","sourceRoot":"","sources":["../../../projects/tnx-shared/src/lib/classes/public-function.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAsB,MAAM,iBAAiB,CAAC;AAC5E,OAAO,EAAqB,UAAU,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAIvF,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,OAAO,EAAmB,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAIvE,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5E,OAAO,EAAE,uBAAuB,EAAE,MAAM,uEAAuE,CAAC;AAEhH,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,0BAA0B,EAAE,MAAM,8CAA8C,CAAC;AAC1F,OAAO,EAAE,0BAA0B,EAAE,MAAM,+CAA+C,CAAC;AAC3F,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAK/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAC;AAIhF,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAOzE,qBAAa,cAAc;IAEvB,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,EAAE;IAQ9B,MAAM,CAAC,YAAY,CAAC,MAAM,KAAA;IA2C1B,MAAM,CAAC,aAAa;;;;IAMpB,MAAM,CAAC,qBAAqB,CAAC,IAAI,EAAE,UAAU;IAS7C,MAAM,CAAC,gBAAgB,CAAC,WAAW,KAAA;IAInC,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,KAAA,EAAE,QAAQ,CAAC,KAAA;IAW5C,MAAM,CAAC,gBAAgB,CAAC,WAAW,KAAA;IAyBnC,MAAM,CAAC,eAAe,CAAC,WAAW,KAAA;;;;;;;;;;;;;;;;;;;;;;;;;;CAyCrC"}
1
+ {"version":3,"file":"public-function.d.ts","sourceRoot":"","sources":["../../../projects/tnx-shared/src/lib/classes/public-function.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAsB,MAAM,iBAAiB,CAAC;AAC5E,OAAO,EAAqB,UAAU,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAIvF,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,OAAO,EAAmB,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAIvE,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5E,OAAO,EAAE,uBAAuB,EAAE,MAAM,uEAAuE,CAAC;AAEhH,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,0BAA0B,EAAE,MAAM,8CAA8C,CAAC;AAC1F,OAAO,EAAE,0BAA0B,EAAE,MAAM,+CAA+C,CAAC;AAC3F,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAK/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAC;AAIhF,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAOzE,qBAAa,cAAc;IAEvB,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,EAAE;IAQ9B,MAAM,CAAC,YAAY,CAAC,MAAM,KAAA;IAyD1B,MAAM,CAAC,aAAa;;;;IAMpB,MAAM,CAAC,qBAAqB,CAAC,IAAI,EAAE,UAAU;IAS7C,MAAM,CAAC,gBAAgB,CAAC,WAAW,KAAA;IAInC,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,KAAA,EAAE,QAAQ,CAAC,KAAA;IAW5C,MAAM,CAAC,gBAAgB,CAAC,WAAW,KAAA;IAyBnC,MAAM,CAAC,eAAe,CAAC,WAAW,KAAA;;;;;;;;;;;;;;;;;;;;;;;;;;CAyCrC"}
@@ -46,35 +46,49 @@ export class PublicFunction {
46
46
  const result = [
47
47
  {
48
48
  path: '',
49
- component: SplashComponentComponent,
49
+ component: SplashComponentComponent
50
50
  },
51
51
  {
52
52
  path: 'dashboard',
53
53
  component: CommonDashboardComponent,
54
+ canActivate: [],
55
+ canActivateChild: []
54
56
  },
55
57
  {
56
58
  path: 'access-denied',
57
59
  component: AccessDeniedComponent,
60
+ canActivate: [],
61
+ canActivateChild: []
58
62
  },
59
63
  {
60
64
  path: 'universal-link',
61
65
  component: UniversalLinkProcessorComponent,
66
+ canActivate: [],
67
+ canActivateChild: []
62
68
  },
63
69
  {
64
70
  path: 'thong-bao',
65
71
  component: ThongBaoComponent,
72
+ canActivate: [],
73
+ canActivateChild: []
66
74
  },
67
75
  {
68
76
  path: 'my-drive',
69
77
  component: MyDriveComponent,
78
+ canActivate: [],
79
+ canActivateChild: []
70
80
  },
71
81
  {
72
82
  path: 'change-password',
73
83
  component: ChangePasswordComponent,
84
+ canActivate: [],
85
+ canActivateChild: []
74
86
  },
75
87
  {
76
88
  path: 'profile',
77
89
  component: ProfileComponent,
90
+ canActivate: [],
91
+ canActivateChild: []
78
92
  },
79
93
  ];
80
94
  result.forEach(item => {
@@ -171,4 +185,4 @@ export class PublicFunction {
171
185
  ];
172
186
  }
173
187
  }
174
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWZ1bmN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliL2NsYXNzZXMvcHVibGljLWZ1bmN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZGLE9BQU8sUUFBUSxNQUFNLDRCQUE0QixDQUFDO0FBQ2xELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMvRSxPQUFPLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM1RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx1RUFBdUUsQ0FBQztBQUNoSCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwyREFBMkQsQ0FBQztBQUNyRyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDakUsT0FBTyxFQUFFLDBCQUEw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RUFBRTtvQkFDWixXQUFXLEVBQUUsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQztvQkFDNUMsZUFBZSxFQUFFLEtBQUs7aUJBQ3pCO2FBQ0osQ0FBQztZQUNGLGlCQUFpQjtTQUNwQixDQUFDO0lBQ04sQ0FBQztJQUVELE1BQU0sQ0FBQyxlQUFlLENBQUMsV0FBVztRQUM5QixPQUFPO1lBQ0gsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUU7WUFDekM7Z0JBQ0ksT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsUUFBUSxFQUFFLDBCQUEwQjtnQkFDcEMsS0FBSyxFQUFFLElBQUk7YUFDZDtZQUNEO2dCQUNJLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFFBQVEsRUFBRSxjQUFjO2dCQUN4QixLQUFLLEVBQUUsSUFBSTthQUNkO1lBQ0Q7Z0JBQ0ksT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsUUFBUSxFQUFFLDBCQUEwQjtnQkFDcEMsS0FBSyxFQUFFLElBQUk7YUFDZDtZQUNEO2dCQUNJLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFFBQVEsRUFBRSxnQkFBZ0I7Z0JBQzFCLEtBQUssRUFBRSxJQUFJO2FBQ2Q7WUFDRCxjQUFjO1lBQ2QsbUJBQW1CO1lBQ25CLFFBQVE7WUFDUixjQUFjO1lBQ2QsWUFBWTtZQUNaLHNCQUFzQjtZQUN0Qix1QkFBdUI7WUFDdkIsY0FBYztZQUNkLGVBQWU7WUFDZixXQUFXO1lBQ1gsb0JBQW9CO1lBQ3BCLGdDQUFnQztZQUNoQyxnQ0FBZ0M7WUFDaEMsdUJBQXVCO1NBQzFCLENBQUM7SUFDTixDQUFDO0NBR0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlUGlwZSwgRGVjaW1hbFBpcGUsIHJlZ2lzdGVyTG9jYWxlRGF0YSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBIVFRQX0lOVEVSQ0VQVE9SUywgSHR0cENsaWVudCwgSHR0cENsaWVudE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCBsb2NhbGVWaSBmcm9tICdAYW5ndWxhci9jb21tb24vbG9jYWxlcy92aSc7XG5pbXBvcnQgeyBMT0NBTEVfSUQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQnJvd3Nlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgQnJvd3NlckFuaW1hdGlvbnNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTG9hZGVyLCBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IE9BdXRoTW9kdWxlIH0gZnJvbSAnYW5ndWxhci1vYXV0aDItb2lkYyc7XG5pbXBvcnQgeyBJbWdGYWxsYmFja01vZHVsZSB9IGZyb20gJ25neC1pbWctZmFsbGJhY2snO1xuaW1wb3J0IHsgTmd4TWFza01vZHVsZSB9IGZyb20gJ25neC1tYXNrJztcbmltcG9ydCB7IENvbmZpcm1hdGlvblNlcnZpY2UsIE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvYXBpJztcbmltcG9ydCB7IEVudGl0eVBlcm1pc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi4vY29tcG9uZW50cy9lbnRpdHktcGVybWlzc2lvbi9zZXJ2aWNlcy5jcy9lbnRpdHktcGVybWlzc2lvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFNwbGFzaENvbXBvbmVudENvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvc3BsYXNoLWNvbXBvbmVudC9zcGxhc2gtY29tcG9uZW50LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBMb2dJbnRlcmNlcHRvciB9IGZyb20gJy4uL2ludGVyY2VwdGVycy9sb2cuaW50ZXJjZXB0b3InO1xuaW1wb3J0IHsgUGVybWlzc2lvblV0aWxzSW50ZXJjZXB0b3IgfSBmcm9tICcuLi9pbnRlcmNlcHRlcnMvcGVybWlzc2lvbi11dGlscy5pbnRlcmNlcHRvcic7XG5pbXBvcnQgeyBTZW5kQWNjZXNzVG9rZW5JbnRlcmNlcHRvciB9IGZyb20gJy4uL2ludGVyY2VwdGVycy9zZW5kLWFjY2Vzcy10b2tlbi5pbnRlcmNlcHRvcic7XG5pbXBvcnQgeyBIdG1sRm9ybWF0UGlwZSB9IGZyb20gJy4uL3BpcGVzL2h0bWwtZm9ybWF0LnBpcGUnO1xuaW1wb3J0IHsgTWFzdGVyRGF0YVBpcGUgfSBmcm9tICcuLi9waXBlcy9tYXN0ZXJEYXRhLnBpcGUnO1xuaW1wb3J0IHsgT3JnYW5pemF0aW9uRm9ybWF0UGlwZSB9IGZyb20gJy4uL3BpcGVzL29yZ2FuaXphdGlvbi1mb3JtYXQucGlwZSc7XG5pbXBvcnQgeyBPcmdhbml6YXRpb25zRm9ybWF0UGlwZSB9IGZyb20gJy4uL3BpcGVzL29yZ2FuaXphdGlvbnMtZm9ybWF0LnBpcGUnO1xuaW1wb3J0IHsgU2FmZUh0bWxQaXBlIH0gZnJvbSAnLi4vcGlwZXMvc2FmZS1odG1sLnBpcGUnO1xuaW1wb3J0IHsgQ29yZUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9jb3JlLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IE5vdGlmaWVyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL25vdGlmaWVyLnNlcnZpY2UnO1xuLy8gVE9ETzogVXBncmFkZSBzYXVcbi8vIGltcG9ydCB7IEJyb3dzZXJGYXZpY29ucywgQlJPV1NFUl9GQVZJQ09OU19DT05GSUcsIEZhdmljb25zIH0gZnJvbSAnLi9mYXZpY29uJztcbmltcG9ydCB7IEFjY2Vzc0RlbmllZENvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvYWNjZXNzLWRlbmllZC1jb21wb25lbnQvYWNjZXNzLWRlbmllZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29tbW9uRGFzaGJvYXJkQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9jb21tb24tZGFzaGJvYXJkL2NvbW1vbi1kYXNoYm9hcmQuY29tcG9uZW50JztcbmltcG9ydCB7IE5vdEZvdW5kQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9ub3QtZm91bmQvbm90LWZvdW5kLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICAgIFVuaXZlcnNhbExpbmtQcm9jZXNzb3JDb21wb25lbnRcbn0gZnJvbSAnLi4vY29tcG9uZW50cy91bml2ZXJzYWwtbGluay1wcm9jZXNzb3IvdW5pdmVyc2FsLWxpbmstcHJvY2Vzc29yLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUcmFjZUludGVyY2VwdG9yIH0gZnJvbSAnLi4vaW50ZXJjZXB0ZXJzL3RyYWNlLmludGVyY2VwdG9yJztcbmltcG9ydCB7IE11bHRpVHJhbnNsYXRlSHR0cExvYWRlciB9IGZyb20gJy4vbXVsdGktdHJhbnNsYXRlLWh0dHAtbG9hZGVyJztcbmltcG9ydCB7IFRob25nQmFvQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy90aG9uZy1iYW8tY29tcG9uZW50L3Rob25nLWJhby5jb21wb25lbnQnO1xuaW1wb3J0IHsgTXlEcml2ZUNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvbXktZHJpdmUtY29tcG9uZW50L215LWRyaXZlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDaGFuZ2VQYXNzd29yZENvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvY2hhbmdlLXBhc3N3b3JkLWNvbXBvbmVudC9jaGFuZ2UtcGFzc3dvcmQuY29tcG9uZW50JztcbmltcG9ydCB7IFByb2ZpbGVDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL3Byb2ZpbGUtY29tcG9uZW50L3Byb2ZpbGUuY29tcG9uZW50JztcblxuXG5leHBvcnQgY2xhc3MgUHVibGljRnVuY3Rpb24ge1xuXG4gICAgc3RhdGljIGluaXRSb3V0ZShyb3V0ZXM6IGFueVtdKSB7XG4gICAgICAgIFB1YmxpY0Z1bmN0aW9uLmNvbW1vblJvdXRlcyhyb3V0ZXMpO1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgLi4ucm91dGVzLFxuICAgICAgICAgICAgLi4uUHVibGljRnVuY3Rpb24uZGVmYXVsdFJvdXRlcygpLFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIHN0YXRpYyBjb21tb25Sb3V0ZXMocm91dGVzKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwYXRoOiAnJyxcbiAgICAgICAgICAgICAgICBjb21wb25lbnQ6IFNwbGFzaENvbXBvbmVudENvbXBvbmVudCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcGF0aDogJ2Rhc2hib2FyZCcsXG4gICAgICAgICAgICAgICAgY29tcG9uZW50OiBDb21tb25EYXNoYm9hcmRDb21wb25lbnQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHBhdGg6ICdhY2Nlc3MtZGVuaWVkJyxcbiAgICAgICAgICAgICAgICBjb21wb25lbnQ6IEFjY2Vzc0RlbmllZENvbXBvbmVudCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcGF0aDogJ3VuaXZlcnNhbC1saW5rJyxcbiAgICAgICAgICAgICAgICBjb21wb25lbnQ6IFVuaXZlcnNhbExpbmtQcm9jZXNzb3JDb21wb25lbnQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHBhdGg6ICd0aG9uZy1iYW8nLFxuICAgICAgICAgICAgICAgIGNvbXBvbmVudDogVGhvbmdCYW9Db21wb25lbnQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHBhdGg6ICdteS1kcml2ZScsXG4gICAgICAgICAgICAgICAgY29tcG9uZW50OiBNeURyaXZlQ29tcG9uZW50LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwYXRoOiAnY2hhbmdlLXBhc3N3b3JkJyxcbiAgICAgICAgICAgICAgICBjb21wb25lbnQ6IENoYW5nZVBhc3N3b3JkQ29tcG9uZW50LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwYXRoOiAncHJvZmlsZScsXG4gICAgICAgICAgICAgICAgY29tcG9uZW50OiBQcm9maWxlQ29tcG9uZW50LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICAgICAgcmVzdWx0LmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjdXN0b21Sb3V0ZSA9IHJvdXRlcy5maW5kKHJvdXRlID0+IHJvdXRlLnBhdGggPT0gaXRlbS5wYXRoKTtcbiAgICAgICAgICAgIGlmICghY3VzdG9tUm91dGUpIHtcbiAgICAgICAgICAgICAgICByb3V0ZXMucHVzaChpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc3RhdGljIGRlZmF1bHRSb3V0ZXMoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB7IHBhdGg6ICcqKicsIGNvbXBvbmVudDogTm90Rm91bmRDb21wb25lbnQgfSxcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBzdGF0aWMgY3JlYXRlVHJhbnNsYXRlTG9hZGVyKGh0dHA6IEh0dHBDbGllbnQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBNdWx0aVRyYW5zbGF0ZUh0dHBMb2FkZXIoaHR0cCxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICB7IHByZWZpeDogJ2Fzc2V0cy9pMThuLycsIHN1ZmZpeDogJy5qc29uJyB9LFxuICAgICAgICAgICAgICAgIHsgcHJlZml4OiAnYXNzZXRzL2kxOG4vc2hhcmVkLycsIHN1ZmZpeDogJy5qc29uJyB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0U2lnbmFsckNvbmZpZyhlbnZpcm9ubWVudCkge1xuICAgICAgICByZXR1cm4gQ29yZUNvbmZpZ1NlcnZpY2UuZ2V0U2lnbmFsUkNvbmZpZyhlbnZpcm9ubWVudCk7XG4gICAgfVxuXG4gICAgc3RhdGljIHJlZ2lzdGVyTG9jYWxlRGF0YShsb2NhbGU/LCBsYW5ndWFnZT8pIHtcbiAgICAgICAgaWYgKCFsb2NhbGUpIHtcbiAgICAgICAgICAgIGxvY2FsZSA9IGxvY2FsZVZpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbGFuZ3VhZ2UpIHtcbiAgICAgICAgICAgIGxhbmd1YWdlID0gJ3ZpJztcbiAgICAgICAgfVxuXG4gICAgICAgIHJlZ2lzdGVyTG9jYWxlRGF0YShsb2NhbGUsIGxhbmd1YWdlKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgaW1wb3J0Um9vdE1vZHVsZShlbnZpcm9ubWVudCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgQnJvd3Nlck1vZHVsZSxcbiAgICAgICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICAgICAgSHR0cENsaWVudE1vZHVsZSxcbiAgICAgICAgICAgIEJyb3dzZXJBbmltYXRpb25zTW9kdWxlLFxuICAgICAgICAgICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICAgICAgICAgIFRyYW5zbGF0ZU1vZHVsZS5mb3JSb290KHtcbiAgICAgICAgICAgICAgICBsb2FkZXI6IHtcbiAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogVHJhbnNsYXRlTG9hZGVyLFxuICAgICAgICAgICAgICAgICAgICB1c2VGYWN0b3J5OiBQdWJsaWNGdW5jdGlvbi5jcmVhdGVUcmFuc2xhdGVMb2FkZXIsXG4gICAgICAgICAgICAgICAgICAgIGRlcHM6IFtIdHRwQ2xpZW50XSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBOZ3hNYXNrTW9kdWxlLmZvclJvb3QoKSxcbiAgICAgICAgICAgIE9BdXRoTW9kdWxlLmZvclJvb3Qoe1xuICAgICAgICAgICAgICAgIHJlc291cmNlU2VydmVyOiB7XG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZWRVcmxzOiBbZW52aXJvbm1lbnQuYXBpRG9tYWluLmdhdGV3YXldLFxuICAgICAgICAgICAgICAgICAgICBzZW5kQWNjZXNzVG9rZW46IGZhbHNlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIEltZ0ZhbGxiYWNrTW9kdWxlLFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIHN0YXRpYyB1c2VSb290UHJvdmlkZXIoZW52aXJvbW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHsgcHJvdmlkZTogTE9DQUxFX0lELCB1c2VWYWx1ZTogJ3ZpLVZOJyB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHByb3ZpZGU6IEhUVFBfSU5URVJDRVBUT1JTLFxuICAgICAgICAgICAgICAgIHVzZUNsYXNzOiBTZW5kQWNjZXNzVG9rZW5JbnRlcmNlcHRvcixcbiAgICAgICAgICAgICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcHJvdmlkZTogSFRUUF9JTlRFUkNFUFRPUlMsXG4gICAgICAgICAgICAgICAgdXNlQ2xhc3M6IExvZ0ludGVyY2VwdG9yLFxuICAgICAgICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwcm92aWRlOiBIVFRQX0lOVEVSQ0VQVE9SUyxcbiAgICAgICAgICAgICAgICB1c2VDbGFzczogUGVybWlzc2lvblV0aWxzSW50ZXJjZXB0b3IsXG4gICAgICAgICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHByb3ZpZGU6IEhUVFBfSU5URVJDRVBUT1JTLFxuICAgICAgICAgICAgICAgIHVzZUNsYXNzOiBUcmFjZUludGVyY2VwdG9yLFxuICAgICAgICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIE1lc3NhZ2VTZXJ2aWNlLFxuICAgICAgICAgICAgQ29uZmlybWF0aW9uU2VydmljZSxcbiAgICAgICAgICAgIERhdGVQaXBlLFxuICAgICAgICAgICAgSHRtbEZvcm1hdFBpcGUsXG4gICAgICAgICAgICBTYWZlSHRtbFBpcGUsXG4gICAgICAgICAgICBPcmdhbml6YXRpb25Gb3JtYXRQaXBlLFxuICAgICAgICAgICAgT3JnYW5pemF0aW9uc0Zvcm1hdFBpcGUsXG4gICAgICAgICAgICBNYXN0ZXJEYXRhUGlwZSxcbiAgICAgICAgICAgIE5vdGlmaWVyU2VydmljZSxcbiAgICAgICAgICAgIERlY2ltYWxQaXBlLFxuICAgICAgICAgICAgLy8gVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgICAgIC8vIEVudGl0eVdvcmtmbG93U2V0dGluZ1NlcnZpY2UsXG4gICAgICAgICAgICAvLyBFbnRpdHlXb3JrZmxvd0hpc3RvcnlTZXJ2aWNlLFxuICAgICAgICAgICAgRW50aXR5UGVybWlzc2lvblNlcnZpY2UsXG4gICAgICAgIF07XG4gICAgfVxuXG5cbn1cbiJdfQ==
188
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWZ1bmN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliL2NsYXNzZXMvcHVibGljLWZ1bmN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZGLE9BQU8sUUFBUSxNQUFNLDRCQUE0QixDQUFDO0FBQ2xELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMvRSxPQUFPLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM1RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx1RUFBdUUsQ0FBQztBQUNoSCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwyREFBMkQsQ0FBQztBQUNyRyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDakUsT0FBTyxFQUFFLDBCQUEw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WTtZQUNaLHNCQUFzQjtZQUN0Qix1QkFBdUI7WUFDdkIsY0FBYztZQUNkLGVBQWU7WUFDZixXQUFXO1lBQ1gsb0JBQW9CO1lBQ3BCLGdDQUFnQztZQUNoQyxnQ0FBZ0M7WUFDaEMsdUJBQXVCO1NBQzFCLENBQUM7SUFDTixDQUFDO0NBR0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlUGlwZSwgRGVjaW1hbFBpcGUsIHJlZ2lzdGVyTG9jYWxlRGF0YSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBIVFRQX0lOVEVSQ0VQVE9SUywgSHR0cENsaWVudCwgSHR0cENsaWVudE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCBsb2NhbGVWaSBmcm9tICdAYW5ndWxhci9jb21tb24vbG9jYWxlcy92aSc7XG5pbXBvcnQgeyBMT0NBTEVfSUQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQnJvd3Nlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgQnJvd3NlckFuaW1hdGlvbnNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTG9hZGVyLCBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IE9BdXRoTW9kdWxlIH0gZnJvbSAnYW5ndWxhci1vYXV0aDItb2lkYyc7XG5pbXBvcnQgeyBJbWdGYWxsYmFja01vZHVsZSB9IGZyb20gJ25neC1pbWctZmFsbGJhY2snO1xuaW1wb3J0IHsgTmd4TWFza01vZHVsZSB9IGZyb20gJ25neC1tYXNrJztcbmltcG9ydCB7IENvbmZpcm1hdGlvblNlcnZpY2UsIE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvYXBpJztcbmltcG9ydCB7IEVudGl0eVBlcm1pc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi4vY29tcG9uZW50cy9lbnRpdHktcGVybWlzc2lvbi9zZXJ2aWNlcy5jcy9lbnRpdHktcGVybWlzc2lvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFNwbGFzaENvbXBvbmVudENvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvc3BsYXNoLWNvbXBvbmVudC9zcGxhc2gtY29tcG9uZW50LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBMb2dJbnRlcmNlcHRvciB9IGZyb20gJy4uL2ludGVyY2VwdGVycy9sb2cuaW50ZXJjZXB0b3InO1xuaW1wb3J0IHsgUGVybWlzc2lvblV0aWxzSW50ZXJjZXB0b3IgfSBmcm9tICcuLi9pbnRlcmNlcHRlcnMvcGVybWlzc2lvbi11dGlscy5pbnRlcmNlcHRvcic7XG5pbXBvcnQgeyBTZW5kQWNjZXNzVG9rZW5JbnRlcmNlcHRvciB9IGZyb20gJy4uL2ludGVyY2VwdGVycy9zZW5kLWFjY2Vzcy10b2tlbi5pbnRlcmNlcHRvcic7XG5pbXBvcnQgeyBIdG1sRm9ybWF0UGlwZSB9IGZyb20gJy4uL3BpcGVzL2h0bWwtZm9ybWF0LnBpcGUnO1xuaW1wb3J0IHsgTWFzdGVyRGF0YVBpcGUgfSBmcm9tICcuLi9waXBlcy9tYXN0ZXJEYXRhLnBpcGUnO1xuaW1wb3J0IHsgT3JnYW5pemF0aW9uRm9ybWF0UGlwZSB9IGZyb20gJy4uL3BpcGVzL29yZ2FuaXphdGlvbi1mb3JtYXQucGlwZSc7XG5pbXBvcnQgeyBPcmdhbml6YXRpb25zRm9ybWF0UGlwZSB9IGZyb20gJy4uL3BpcGVzL29yZ2FuaXphdGlvbnMtZm9ybWF0LnBpcGUnO1xuaW1wb3J0IHsgU2FmZUh0bWxQaXBlIH0gZnJvbSAnLi4vcGlwZXMvc2FmZS1odG1sLnBpcGUnO1xuaW1wb3J0IHsgQ29yZUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9jb3JlLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IE5vdGlmaWVyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL25vdGlmaWVyLnNlcnZpY2UnO1xuLy8gVE9ETzogVXBncmFkZSBzYXVcbi8vIGltcG9ydCB7IEJyb3dzZXJGYXZpY29ucywgQlJPV1NFUl9GQVZJQ09OU19DT05GSUcsIEZhdmljb25zIH0gZnJvbSAnLi9mYXZpY29uJztcbmltcG9ydCB7IEFjY2Vzc0RlbmllZENvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvYWNjZXNzLWRlbmllZC1jb21wb25lbnQvYWNjZXNzLWRlbmllZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29tbW9uRGFzaGJvYXJkQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9jb21tb24tZGFzaGJvYXJkL2NvbW1vbi1kYXNoYm9hcmQuY29tcG9uZW50JztcbmltcG9ydCB7IE5vdEZvdW5kQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9ub3QtZm91bmQvbm90LWZvdW5kLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICAgIFVuaXZlcnNhbExpbmtQcm9jZXNzb3JDb21wb25lbnRcbn0gZnJvbSAnLi4vY29tcG9uZW50cy91bml2ZXJzYWwtbGluay1wcm9jZXNzb3IvdW5pdmVyc2FsLWxpbmstcHJvY2Vzc29yLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUcmFjZUludGVyY2VwdG9yIH0gZnJvbSAnLi4vaW50ZXJjZXB0ZXJzL3RyYWNlLmludGVyY2VwdG9yJztcbmltcG9ydCB7IE11bHRpVHJhbnNsYXRlSHR0cExvYWRlciB9IGZyb20gJy4vbXVsdGktdHJhbnNsYXRlLWh0dHAtbG9hZGVyJztcbmltcG9ydCB7IFRob25nQmFvQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy90aG9uZy1iYW8tY29tcG9uZW50L3Rob25nLWJhby5jb21wb25lbnQnO1xuaW1wb3J0IHsgTXlEcml2ZUNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvbXktZHJpdmUtY29tcG9uZW50L215LWRyaXZlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDaGFuZ2VQYXNzd29yZENvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvY2hhbmdlLXBhc3N3b3JkLWNvbXBvbmVudC9jaGFuZ2UtcGFzc3dvcmQuY29tcG9uZW50JztcbmltcG9ydCB7IFByb2ZpbGVDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL3Byb2ZpbGUtY29tcG9uZW50L3Byb2ZpbGUuY29tcG9uZW50JztcblxuXG5leHBvcnQgY2xhc3MgUHVibGljRnVuY3Rpb24ge1xuXG4gICAgc3RhdGljIGluaXRSb3V0ZShyb3V0ZXM6IGFueVtdKSB7XG4gICAgICAgIFB1YmxpY0Z1bmN0aW9uLmNvbW1vblJvdXRlcyhyb3V0ZXMpO1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgLi4ucm91dGVzLFxuICAgICAgICAgICAgLi4uUHVibGljRnVuY3Rpb24uZGVmYXVsdFJvdXRlcygpLFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIHN0YXRpYyBjb21tb25Sb3V0ZXMocm91dGVzKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwYXRoOiAnJyxcbiAgICAgICAgICAgICAgICBjb21wb25lbnQ6IFNwbGFzaENvbXBvbmVudENvbXBvbmVudFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwYXRoOiAnZGFzaGJvYXJkJyxcbiAgICAgICAgICAgICAgICBjb21wb25lbnQ6IENvbW1vbkRhc2hib2FyZENvbXBvbmVudCxcbiAgICAgICAgICAgICAgICBjYW5BY3RpdmF0ZTogW10sXG4gICAgICAgICAgICAgICAgY2FuQWN0aXZhdGVDaGlsZDogW11cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcGF0aDogJ2FjY2Vzcy1kZW5pZWQnLFxuICAgICAgICAgICAgICAgIGNvbXBvbmVudDogQWNjZXNzRGVuaWVkQ29tcG9uZW50LFxuICAgICAgICAgICAgICAgIGNhbkFjdGl2YXRlOiBbXSxcbiAgICAgICAgICAgICAgICBjYW5BY3RpdmF0ZUNoaWxkOiBbXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwYXRoOiAndW5pdmVyc2FsLWxpbmsnLFxuICAgICAgICAgICAgICAgIGNvbXBvbmVudDogVW5pdmVyc2FsTGlua1Byb2Nlc3NvckNvbXBvbmVudCxcbiAgICAgICAgICAgICAgICBjYW5BY3RpdmF0ZTogW10sXG4gICAgICAgICAgICAgICAgY2FuQWN0aXZhdGVDaGlsZDogW11cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcGF0aDogJ3Rob25nLWJhbycsXG4gICAgICAgICAgICAgICAgY29tcG9uZW50OiBUaG9uZ0Jhb0NvbXBvbmVudCxcbiAgICAgICAgICAgICAgICBjYW5BY3RpdmF0ZTogW10sXG4gICAgICAgICAgICAgICAgY2FuQWN0aXZhdGVDaGlsZDogW11cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcGF0aDogJ215LWRyaXZlJyxcbiAgICAgICAgICAgICAgICBjb21wb25lbnQ6IE15RHJpdmVDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgY2FuQWN0aXZhdGU6IFtdLFxuICAgICAgICAgICAgICAgIGNhbkFjdGl2YXRlQ2hpbGQ6IFtdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHBhdGg6ICdjaGFuZ2UtcGFzc3dvcmQnLFxuICAgICAgICAgICAgICAgIGNvbXBvbmVudDogQ2hhbmdlUGFzc3dvcmRDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgY2FuQWN0aXZhdGU6IFtdLFxuICAgICAgICAgICAgICAgIGNhbkFjdGl2YXRlQ2hpbGQ6IFtdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHBhdGg6ICdwcm9maWxlJyxcbiAgICAgICAgICAgICAgICBjb21wb25lbnQ6IFByb2ZpbGVDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgY2FuQWN0aXZhdGU6IFtdLFxuICAgICAgICAgICAgICAgIGNhbkFjdGl2YXRlQ2hpbGQ6IFtdXG4gICAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgICAgICByZXN1bHQuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGN1c3RvbVJvdXRlID0gcm91dGVzLmZpbmQocm91dGUgPT4gcm91dGUucGF0aCA9PSBpdGVtLnBhdGgpO1xuICAgICAgICAgICAgaWYgKCFjdXN0b21Sb3V0ZSkge1xuICAgICAgICAgICAgICAgIHJvdXRlcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZGVmYXVsdFJvdXRlcygpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHsgcGF0aDogJyoqJywgY29tcG9uZW50OiBOb3RGb3VuZENvbXBvbmVudCB9LFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIHN0YXRpYyBjcmVhdGVUcmFuc2xhdGVMb2FkZXIoaHR0cDogSHR0cENsaWVudCkge1xuICAgICAgICByZXR1cm4gbmV3IE11bHRpVHJhbnNsYXRlSHR0cExvYWRlcihodHRwLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIHsgcHJlZml4OiAnYXNzZXRzL2kxOG4vJywgc3VmZml4OiAnLmpzb24nIH0sXG4gICAgICAgICAgICAgICAgeyBwcmVmaXg6ICdhc3NldHMvaTE4bi9zaGFyZWQvJywgc3VmZml4OiAnLmpzb24nIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRTaWduYWxyQ29uZmlnKGVudmlyb25tZW50KSB7XG4gICAgICAgIHJldHVybiBDb3JlQ29uZmlnU2VydmljZS5nZXRTaWduYWxSQ29uZmlnKGVudmlyb25tZW50KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgcmVnaXN0ZXJMb2NhbGVEYXRhKGxvY2FsZT8sIGxhbmd1YWdlPykge1xuICAgICAgICBpZiAoIWxvY2FsZSkge1xuICAgICAgICAgICAgbG9jYWxlID0gbG9jYWxlVmk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFsYW5ndWFnZSkge1xuICAgICAgICAgICAgbGFuZ3VhZ2UgPSAndmknO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVnaXN0ZXJMb2NhbGVEYXRhKGxvY2FsZSwgbGFuZ3VhZ2UpO1xuICAgIH1cblxuICAgIHN0YXRpYyBpbXBvcnRSb290TW9kdWxlKGVudmlyb25tZW50KSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBCcm93c2VyTW9kdWxlLFxuICAgICAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgICAgICBIdHRwQ2xpZW50TW9kdWxlLFxuICAgICAgICAgICAgQnJvd3NlckFuaW1hdGlvbnNNb2R1bGUsXG4gICAgICAgICAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgICAgICAgICAgVHJhbnNsYXRlTW9kdWxlLmZvclJvb3Qoe1xuICAgICAgICAgICAgICAgIGxvYWRlcjoge1xuICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBUcmFuc2xhdGVMb2FkZXIsXG4gICAgICAgICAgICAgICAgICAgIHVzZUZhY3Rvcnk6IFB1YmxpY0Z1bmN0aW9uLmNyZWF0ZVRyYW5zbGF0ZUxvYWRlcixcbiAgICAgICAgICAgICAgICAgICAgZGVwczogW0h0dHBDbGllbnRdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIE5neE1hc2tNb2R1bGUuZm9yUm9vdCgpLFxuICAgICAgICAgICAgT0F1dGhNb2R1bGUuZm9yUm9vdCh7XG4gICAgICAgICAgICAgICAgcmVzb3VyY2VTZXJ2ZXI6IHtcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZFVybHM6IFtlbnZpcm9ubWVudC5hcGlEb21haW4uZ2F0ZXdheV0sXG4gICAgICAgICAgICAgICAgICAgIHNlbmRBY2Nlc3NUb2tlbjogZmFsc2UsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgSW1nRmFsbGJhY2tNb2R1bGUsXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgc3RhdGljIHVzZVJvb3RQcm92aWRlcihlbnZpcm9tbWVudCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgeyBwcm92aWRlOiBMT0NBTEVfSUQsIHVzZVZhbHVlOiAndmktVk4nIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcHJvdmlkZTogSFRUUF9JTlRFUkNFUFRPUlMsXG4gICAgICAgICAgICAgICAgdXNlQ2xhc3M6IFNlbmRBY2Nlc3NUb2tlbkludGVyY2VwdG9yLFxuICAgICAgICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwcm92aWRlOiBIVFRQX0lOVEVSQ0VQVE9SUyxcbiAgICAgICAgICAgICAgICB1c2VDbGFzczogTG9nSW50ZXJjZXB0b3IsXG4gICAgICAgICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHByb3ZpZGU6IEhUVFBfSU5URVJDRVBUT1JTLFxuICAgICAgICAgICAgICAgIHVzZUNsYXNzOiBQZXJtaXNzaW9uVXRpbHNJbnRlcmNlcHRvcixcbiAgICAgICAgICAgICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcHJvdmlkZTogSFRUUF9JTlRFUkNFUFRPUlMsXG4gICAgICAgICAgICAgICAgdXNlQ2xhc3M6IFRyYWNlSW50ZXJjZXB0b3IsXG4gICAgICAgICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgTWVzc2FnZVNlcnZpY2UsXG4gICAgICAgICAgICBDb25maXJtYXRpb25TZXJ2aWNlLFxuICAgICAgICAgICAgRGF0ZVBpcGUsXG4gICAgICAgICAgICBIdG1sRm9ybWF0UGlwZSxcbiAgICAgICAgICAgIFNhZmVIdG1sUGlwZSxcbiAgICAgICAgICAgIE9yZ2FuaXphdGlvbkZvcm1hdFBpcGUsXG4gICAgICAgICAgICBPcmdhbml6YXRpb25zRm9ybWF0UGlwZSxcbiAgICAgICAgICAgIE1hc3RlckRhdGFQaXBlLFxuICAgICAgICAgICAgTm90aWZpZXJTZXJ2aWNlLFxuICAgICAgICAgICAgRGVjaW1hbFBpcGUsXG4gICAgICAgICAgICAvLyBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICAgICAgLy8gRW50aXR5V29ya2Zsb3dTZXR0aW5nU2VydmljZSxcbiAgICAgICAgICAgIC8vIEVudGl0eVdvcmtmbG93SGlzdG9yeVNlcnZpY2UsXG4gICAgICAgICAgICBFbnRpdHlQZXJtaXNzaW9uU2VydmljZSxcbiAgICAgICAgXTtcbiAgICB9XG5cblxufVxuIl19
@@ -62,11 +62,11 @@ export class TreeTableComponent extends ListComponentBase {
62
62
  TreeTableComponent.decorators = [
63
63
  { type: Component, args: [{
64
64
  selector: 'tn-tree-table',
65
- template: "<div #container class=\"custom-card card card-w-title tn-g-page-layout-1\">\n <div class=\"ui-helper-clearfix tn-g-page-layout-1__header-area\">\n <div *ngIf=\"searchCustom\" class=\"p-grid ui-fluid custom-p-col custom-search-area\">\n <div class=\"p-col-12 main-container-search\">\n <div class=\"p-grid main-container-search-inner\">\n <ng-container>\n <ng-container *ngTemplateOutlet=\"searchCustom; context: {$implicit: this}\"></ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n <div class=\"p-grid ui-fluid custom-p-col page-title-area\">\n <div class=\"main-title p-col-8\">\n <h1 *ngIf=\"!hasTemplate('customTitle')\">\n {{setting.title != null ? setting.title : 'Danh s\u00E1ch ' + setting.objectName}}\n </h1>\n\n <ng-container *ngIf=\"hasTemplate('customTitle')\" [ngTemplateOutlet]=\"getTemplate('customTitle')\"\n [ngTemplateOutletContext]=\"{crudList: this}\">\n </ng-container>\n </div>\n <div class=\"p-col-4\">\n <paging-next-back-only [model]=\"model\" [setting]=\"setting\" (onChanged)=\"getData()\"\n (onChangeLimitPage)=\"savePageSize()\">\n </paging-next-back-only>\n </div>\n </div>\n </div>\n <div class=\"p-grid crudListToolbar tn-g-page-layout-1__toolbar-area\">\n <div class=\"p-col-7 button-group function-topbar\">\n <ng-container [ngTemplateOutlet]=\"getTemplate('buttonBeforeToolbar')\"\n [ngTemplateOutletContext]=\"{crudList: this}\"></ng-container>\n <ng-container *ngIf=\"!hiddenAdd\" [ngTemplateOutlet]=\"buttonAdd\"></ng-container>\n <ng-container *ngIf=\"setting.showExportSelectedItems\" [ngTemplateOutlet]=\"buttonExport\">\n </ng-container>\n <ng-container *ngIf=\"setting.showExportWordSelectedItems\" [ngTemplateOutlet]=\"buttonExportWord\">\n </ng-container>\n <ng-container *ngIf=\"!hiddenDelete\" [ngTemplateOutlet]=\"buttonDelete\">\n </ng-container>\n <button pButton pRipple type=\"button\" label=\"\u0110\u00E1nh l\u1EA1i m\u00E3 ph\u00E2n c\u1EA5p\" icon=\"pi pi-share-alt\"\n class=\"p-button-text\" style=\"display: none;\" (click)=\"handleDanhMaPC($event)\"></button>\n <ng-container [ngTemplateOutlet]=\"getTemplate('buttonAfterToolbar')\"\n [ngTemplateOutletContext]=\"{crudList: this}\"></ng-container>\n </div>\n <div class=\"p-col-5 p-inputgroup advance-search-container\">\n <ng-container *ngIf=\"!setting.hiddenAdvanceSearch\">\n <advance-search #advanceSearch [parentSetting]=\"setting\" [searchInfo]=\"searchInfo\"\n [loading]=\"model.loading\" (onSearch)=\"handleSearchAdvs($event)\"\n (onInit)=\"handleInitAdvanceSearch($event)\">\n </advance-search>\n </ng-container>\n </div>\n </div>\n <div class=\"tn-g-page-layout-1__table-area\">\n <tn-custom-scrollbar [showScrollHorizontal]=\"true\" class=\"--has-border\">\n <p-treeTable #treetable [value]=\"_dataSource\" [columns]=\"setting.cols\" [class]=\"_tableClass\"\n styleClass=\"treeOrganization\">\n <ng-template pTemplate=\"colgroup\" let-columns>\n <colgroup>\n <col *ngIf=\"!setting.hiddenCheckbox\" style=\"width: 50px\" />\n <col *ngIf=\"!setting.hiddenOrderColumn\" style=\"width: 50px\" />\n <ng-container *ngFor=\"let col of columns; let i = index\">\n <col *ngIf=\"col && col.visible && col.field!='function'\" [style.width]=\"col.width\" />\n </ng-container>\n <col *ngIf=\"!setting.hiddenFunctionColumn\"\n [style.width]=\"widthFunctionColumn || _widthFunctionColumn\" />\n </colgroup>\n </ng-template>\n <ng-template pTemplate=\"header\" let-columns>\n <tr>\n <th *ngIf=\"!setting.hiddenCheckbox\" class=\"chkbox\">\n <button type=\"button\" pButton pRipple icon=\"pi pi-refresh\"\n class=\"p-button-rounded p-button-text btnReload\" pTooltip=\"L\u00E0m m\u1EDBi d\u1EEF li\u1EC7u\"\n tooltipPosition=\"top\" [disabled]=\"model.loading\" (click)=\"getData()\"></button>\n </th>\n <th *ngIf=\"!setting.hiddenOrderColumn\" class=\"stt nopad center\"\n [class.sticky]=\"setting.stickyColumn\" (dblclick)=\"reload()\">\n {{ 'TT' |translate}}\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n <ng-container *ngFor=\"let col of columns; let i = index\">\n <th *ngIf=\"col && col.visible && col.field!='function'\" [ttSortableColumn]=\"col.field\"\n [className]=\"col.class\" [pTooltip]=\"col.fullLabel\" tooltipStyleClass=\"unset-width\"\n style=\"text-align: center;\">\n {{col.label}}\n <p-treeTableSortIcon [field]=\"col.field\"></p-treeTableSortIcon>\n </th>\n </ng-container>\n <th *ngIf=\"!setting.hiddenFunctionColumn\" class=\"column-function\" style=\"text-align: center;\"\n [class.sticky]=\"setting.stickyColumn\">\n Ch\u1EE9c n\u0103ng\n </th>\n </tr>\n <ng-container *ngTemplateOutlet=\"rowHeaderFilter; context: {columns: columns}\">\n </ng-container>\n </ng-template>\n <ng-template pTemplate=\"body\" let-rowNode let-rowData=\"rowData\" let-index=\"rowIndex\"\n let-columns=\"columns\">\n <tr [ttRow]=\"rowNode\" [class.generated-by-base]=\"rowData._GeneratedByBase\"\n [attr.rowIndex]=\"rowData[fieldIndexInDataSource]\" [class.ui-state-highlight]=\"rowData._checked\"\n [pTooltip]=\"rowData.tooltip\" tooltipPosition=\"top\" (click)=\"handleSelectRow($event, rowData)\">\n <td *ngIf=\"!setting.hiddenCheckbox\" class=\"chkbox link-or-action cell-checkbox\">\n <p-checkbox [(ngModel)]=\"rowData._checked\" binary=\"true\"\n (onChange)=\"handleCheckRowData(rowData)\">\n </p-checkbox>\n </td>\n <td class=\"stt\" style=\"text-align: center;\">{{rowData[fieldOrder]}}</td>\n <ng-container *ngFor=\"let col of columns; let i = index\">\n <ng-container\n *ngTemplateOutlet=\"contentTd; context: {$implicit: rowData, rowNode: rowNode, col: col, index: index, i: i}\">\n </ng-container>\n </ng-container>\n <td *ngIf=\"!setting.hiddenFunctionColumn\" style=\"text-align: center;\" class=\"column-function\"\n [class.sticky]=\"setting.stickyColumn\">\n <div *ngIf=\"hasTemplate('function')\" class=\"p-toolbar-group-center button-group\">\n <ng-container [ngTemplateOutlet]=\"getTemplate('function')\"\n [ngTemplateOutletContext]=\"{rowData: rowData, rowIndex: index}\"></ng-container>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </div>\n <div *ngIf=\"!hasTemplate('function')\" class=\"p-toolbar-group-center button-group\">\n <ng-container [ngTemplateOutletContext]=\"{rowData: rowData, rowIndex: index}\"\n [ngTemplateOutlet]=\"getTemplate('buttonBefore')\"></ng-container>\n <button *ngIf=\"!rowData.hiddenEdit\" type=\"button\" pButton pRipple\n [pTooltip]=\"'FORM.EDIT' | translate\" tooltipPosition=\"top\"\n [disabled]=\"disableEdit(rowData)\"\n class=\"p-button-rounded p-button-text p-button-info link-or-action\"\n icon=\"pi pi-pencil\" (click)=\"edit(rowData)\"></button>\n <button *ngIf=\"!rowData.hiddenDelete\" type=\"button\" pButton pRipple\n [disabled]=\"disableDelete(rowData)\" [pTooltip]=\"'FORM.DELETE' | translate\"\n tooltipPosition=\"top\"\n class=\"p-button-rounded p-button-text p-button-danger link-or-action\"\n icon=\"pi pi-trash\" (click)=\"delete(rowData)\"></button>\n <!-- <button *ngIf=\"this.menuButtons\" type=\"button\" pButton icon=\"pi pi-ellipsis-v\"\n class=\"link-or-action p-button-text p-button-info p-button-rounded\"\n pTooltip=\"Ch\u1EE9c n\u0103ng kh\u00E1c\" tooltipPosition=\"top\"\n (click)=\"showContextMenu($event, rowData)\"></button> -->\n </div>\n </td>\n </tr>\n <after-view-checked *ngIf=\"rowData._index == _rawDataSource.length - 1\" style=\"display: none;\"\n [renderKey]=\"dataSource\" (loaded)=\"handleTableRendered()\">\n </after-view-checked>\n </ng-template>\n </p-treeTable>\n <div class=\"row-bottom-sticky\"></div>\n </tn-custom-scrollbar>\n </div>\n</div>\n<ng-template #buttonAdd>\n <span [appAuthorize]=\"serviceCode\" [permission]=\"authorizePaths[commonConst.ADD]\"\n [enableAuthorize]=\"buttonApplyAuthorize[commonConst.ADD]\">\n <button type=\"button\" pButton pRipple label=\"Th\u00EAm m\u1EDBi\" icon=\"pi pi-plus\" class=\"p-button-text\"\n [disabled]=\"!model.baseReady\" (click)=\"add()\"></button>\n </span>\n</ng-template>\n<ng-template #buttonDelete>\n <button *ngIf=\"!hiddenDelete && model.selectedItems.length > 0 && !disableMultipleDelete()\"\n [appAuthorize]=\"serviceCode\" [permission]=\"authorizePaths[commonConst.DELETE_MULTIPLE]\"\n [enableAuthorize]=\"buttonApplyAuthorize[commonConst.DELETE_MULTIPLE]\" type=\"button\" pButton pRipple\n [label]=\"'X\u00F3a ' + (model.selectedItems.length) | translate\" icon=\"pi pi-trash\"\n class=\"p-button-text p-button-danger\" (click)=\"deleteMutiple()\"></button>\n</ng-template>\n<ng-template #contentTd let-rowData let-rowNode=\"rowNode\" let-col=\"col\" let-index=\"index\" let-i=\"i\"\n let-expanded=\"expanded\">\n <td *ngIf=\"col && col.visible && col.field != 'function' && (!rowData.hidden || !rowData.hidden[col.field])\"\n [attr.colSpan]=\"rowData.colSpan && rowData.colSpan[col.field]\"\n [attr.rowSpan]=\"rowData.rowSpan && rowData.rowSpan[col.field]\" [ngStyle]=\"col.extendData.style\"\n [class]=\"col.cellClass\" [class.first-td]=\"i == 0\">\n <tn-treeTableToggler *ngIf=\"col.colHasToggleIcon\" [rowNode]=\"rowNode\"></tn-treeTableToggler>\n <span *ngIf=\"col.pipe\">\n <!-- <span class=\"p-column-title\" [pTooltip]=\"col.fullLabel\" [escape]=\"false\"\n tooltipPosition=\"top\">{{col.label}}</span> -->\n {{rowData['pipe__' + col.field]}}\n </span>\n <span *ngIf=\"!col.pipe\">\n <!-- <span class=\"p-column-title\" [pTooltip]=\"col.fullLabel\" [escape]=\"false\"\n tooltipPosition=\"top\">{{col.label}}</span> -->\n <span *ngIf=\"setting.showEditLink && col.showEditLink\" [pTooltip]=\"config.tooltipView\" tooltipPosition=\"top\"\n class=\"link-or-action\">\n <a href=\"javascript:;\" (click)=\"view(rowData)\" [pTooltip]=\"config.tooltipView\" tooltipPosition=\"top\">\n <ng-container [ngTemplateOutlet]=\"contentCell\"\n [ngTemplateOutletContext]=\"getContextCell(rowData, index, col, expanded, this)\">\n </ng-container>\n </a>\n </span>\n <span *ngIf=\"!setting.showEditLink || !col.showEditLink\">\n <ng-container [ngTemplateOutlet]=\"contentCell\"\n [ngTemplateOutletContext]=\"getContextCell(rowData, index, col, expanded, this)\">\n </ng-container>\n </span>\n </span>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </td>\n</ng-template>\n<ng-template #contentCell let-col=\"col\" let-rowData=\"rowData\" let-rowIndex=\"rowIndex\" let-field=\"field\"\n let-expanded=\"expanded\">\n <ng-container *ngIf=\"col.template\">\n <ng-container [ngTemplateOutlet]=\"col.template\"\n [ngTemplateOutletContext]=\"getContextCell(rowData, rowIndex, col, expanded, this)\">\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!col.template\">\n <ng-container [ngSwitch]=\"col.dataType\">\n <span *ngSwitchCase=\"'color'\" style=\"display:block;text-align:center;\">\n <div [pTooltip]=\"rowData[field]\" tooltipPosition=\"top\" [ngStyle]=\"{'background-color':rowData[field]}\"\n style=\"width:30px;height:30px;margin:0 auto;\"></div>\n </span>\n <span *ngSwitchCase=\"'icon'\" style=\"display:block;text-align:center;\">\n <i [pTooltip]=\"rowData[field]\" tooltipPosition=\"top\" style=\"text-align: center;\"\n [ngClass]=\"rowData[field]\"></i>\n </span>\n <span *ngSwitchCase=\"'date'\" [pTooltip]=\"rowData[field] | date:'dd/MM/yyyy'\" tooltipPosition=\"top\">\n {{_crudService.renderDate(rowData[field], col.format)}}\n </span>\n <span *ngSwitchCase=\"'datetime'\" [pTooltip]=\"rowData[field] | date:'dd/MM/yyyy HH:mm'\"\n tooltipPosition=\"top\">\n {{_crudService.renderDateTime(rowData[field], col.format)}}\n </span>\n <span *ngSwitchCase=\"'int'\">\n {{rowData[field]}}\n </span>\n <span *ngSwitchCase=\"'decimal'\">\n {{rowData[field]}}\n </span>\n <span *ngSwitchCase=\"'boolean'\">\n <p-checkbox class=\"boolean-data-type\" [(ngModel)]=\"rowData[field]\" binary=\"true\"\n [disabled]=\"col.disableCheckBox\">\n </p-checkbox>\n </span>\n <span *ngSwitchCase=\"'html'\">\n <div *ngIf=\"rowData[field]==null?'':rowData[field]\" [innerHTML]=\"rowData[field] | safeHtml\"></div>\n </span>\n <span *ngSwitchCase=\"'metadataStatus'\">\n <span *ngIf=\"rowData['rejectReason']\" class=\"label-danger\" [pTooltip]=\"rowData['rejectReason']\"\n tooltipStyleClass=\"unset-width\" [escape]=\"false\" tooltipPosition=\"top\">T\u1EEB ch\u1ED1i</span>\n <span *ngIf=\"rowData[field] == '0' && !rowData['rejectReason']\" class=\"label-secondary\">Ch\u01B0a\n duy\u1EC7t</span>\n <span *ngIf=\"rowData[field] == '1' && !rowData['rejectReason']\" class=\"label-warning\">Ch\u1EDD duy\u1EC7t</span>\n <span *ngIf=\"rowData[field] == '2'\" class=\"label-primary\">\u0110\u00E3 duy\u1EC7t</span>\n </span>\n <ng-container *ngSwitchCase=\"'string'\">\n <ng-container *ngTemplateOutlet=\"contentCellString; context: {$implicit: rowData, field: col.field}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"null\">\n <ng-container *ngTemplateOutlet=\"contentCellString; context: {$implicit: rowData, field: col.field}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <ng-container [ngTemplateOutlet]=\"getComponentByType(col.dataType)\"\n [ngTemplateOutletContext]=\"getContextCell(rowData, rowIndex, col, expanded, this)\">\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n<ng-template #contentCellString let-rowData let-field=\"field\">\n <span>\n <!-- __sv: Short Value -->\n <ng-container *ngIf=\"rowData[field + '__sv']\">\n <ng-container *ngIf=\"!rowData[field + '__showFull']\">\n {{rowData[field + '__sv']}}\n <span class=\"toggle-showfull\" (click)=\"toggleShowFull(rowData, field)\" pTooltip=\"B\u1EA5m \u0111\u1EC3 xem th\u00EAm\"\n tooltipPosition=\"top\">[...]</span>\n </ng-container>\n <ng-container *ngIf=\"rowData[field + '__showFull']\">\n {{rowData[field]}}\n <span class=\"toggle-showfull\" (click)=\"toggleShowFull(rowData, field)\">Thu g\u1ECDn</span>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!rowData[field + '__sv']\">\n {{rowData[field]}}\n </ng-container>\n </span>\n</ng-template>\n<ng-template #containerSticky>\n <span class=\"fix-sticky top\"></span>\n <span class=\"fix-sticky right\"></span>\n <!-- <span class=\"fix-sticky bottom\"></span> -->\n <span class=\"fix-sticky left\"></span>\n</ng-template>\n<ng-template #rowHeaderFilter let-columns=\"columns\">\n <tr class=\"filter-row\" *ngIf=\"!setting.hiddenFilterRow\">\n <th *ngIf=\"!setting.hiddenCheckbox\" class=\"chkbox nopad center\" [class.sticky]=\"setting.stickyColumn\"\n [class.tricheckbox-custom-false]=\"checkedAll === false\">\n <p-triStateCheckbox [(ngModel)]=\"checkedAll\" binary=\"true\" (onChange)=\"handleCheckAll()\">\n </p-triStateCheckbox>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n <th class=\"chkbox nopad center\" [class.sticky]=\"setting.stickyColumn\">\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n <ng-container *ngFor=\"let col of columns; let i = index\">\n <th *ngIf=\"col.visible && col.field != 'function'\" class=\"cell-header-filter center\">\n <ng-container *ngIf=\"col.allowFilter\">\n <ng-container *ngIf=\"col.templateFilter\">\n <ng-container [ngTemplateOutlet]=\"col.templateFilter\"\n [ngTemplateOutletContext]=\"{col: col, filterData: filterData, onSearch: onSearch, onShowFilterDropdownPanel: onShowFilterDropdownPanel, onHideFilterDropdownPanel: onHideFilterDropdownPanel}\">\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!col.templateFilter\" [ngSwitch]=\"col.controlType\">\n <ng-container *ngSwitchCase=\"'dropdown'\">\n <ng-container [ngTemplateOutlet]=\"filterDropdown\"\n [ngTemplateOutletContext]=\"{col: col.rawColumn}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'number'\">\n <ng-container [ngTemplateOutlet]=\"filterNumber\" [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'date'\">\n <ng-container [ngTemplateOutlet]=\"filterDate\" [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'datetime'\">\n <ng-container [ngTemplateOutlet]=\"filterDate\" [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <ng-container [ngSwitch]=\"col.dataType\">\n <ng-container *ngSwitchCase=\"'int'\">\n <ng-container [ngTemplateOutlet]=\"filterNumber\"\n [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'decimal'\">\n <ng-container [ngTemplateOutlet]=\"filterNumber\"\n [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'date'\">\n <ng-container [ngTemplateOutlet]=\"filterDate\"\n [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'datetime'\">\n <ng-container [ngTemplateOutlet]=\"filterDate\"\n [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'boolean'\">\n <ng-container [ngTemplateOutlet]=\"filterBoolean\"\n [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <ng-container [ngTemplateOutlet]=\"filterText\"\n [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n </ng-container>\n <th *ngIf=\"!setting.hiddenFunctionColumn\" class=\"center setting-cell column-function\"\n [class.sticky]=\"setting.stickyColumn\">\n <!-- <button *ngIf=\"!setting.hiddenSetting\" type=\"button\" pButton pRipple icon=\"pi pi-cog\"\n class=\"p-button-rounded p-button-text\" pTooltip=\"C\u1EA5u h\u00ECnh hi\u1EC3n th\u1ECB\" tooltipPosition=\"top\"\n (click)=\"showSettings()\"></button>\n <button *ngIf=\"!setting.hiddenSettingPermission\" type=\"button\" pButton pRipple icon=\"pi pi-users\"\n class=\"p-button-rounded p-button-text\" pTooltip=\"Ph\u00E2n quy\u1EC1n d\u1EEF li\u1EC7u\" tooltipPosition=\"left\"\n [disabled]=\"checkPermissionToUseButton(BUTTON_PHAN_QUYEN)\" (click)=\"showSettingsPermission()\"></button>\n <button *ngIf=\"!setting.hiddenSettingWorkflow\" type=\"button\" pButton pRipple icon=\"pi pi-sitemap\"\n class=\"p-button-rounded p-button-text\" pTooltip=\"C\u1EA5u h\u00ECnh quy tr\u00ECnh\" tooltipPosition=\"left\"\n [disabled]=\"checkPermissionToUseButton(BUTTON_CAU_HINH_QUY_TRINH)\"\n (click)=\"showSettingsWorkflowNew()\"></button> -->\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n </tr>\n</ng-template>\n<ng-template #filterDropdown let-col=\"col\">\n <div #filterBox style=\"width: 100%; border-radius: 4px;\">\n <dropdown *ngIf=\"col && filterSchema.dropdown[col.field]\" [control]=\"filterSchema.dropdown[col.field]\"\n [dataSource]=\"filterSchema.dropdown[col.field].dataSource\" [(value)]=\"filterData[col.field]\"\n (onHideSmartEvent)=\"onSearch()\" (onShow)=\"onShowFilterDropdownPanel($event)\"\n (onHide)=\"onHideFilterDropdownPanel($event)\" (mousedown)=\"initFilterBoxFocus(filterBox)\"></dropdown>\n </div>\n</ng-template>\n<ng-template #filterText let-col=\"col\">\n <div #filterBox class=\"text-filter filter-box\" tabindex=\"-1\" (mousedown)=\"initFilterBoxFocus(filterBox)\">\n <div tabindex=\"-1\">\n <input pInputText type=\"text\" class=\"input-search\" [placeholder]=\"col.label\"\n [(ngModel)]=\"filterData[col.field]\" (change)=\"onSearch()\"\n (keyup.esc)=\"onClearSearch(filterBox, col.field)\">\n </div>\n <span [ngClass]=\"{'action-clear': true, 'dirty': filterData[col.field] != null && filterData[col.field] !== ''}\"\n [pTooltip]=\"'B\u1ECF filter'\" tooltipPosition=\"top\" (mousedown)=\"onClearSearch(filterBox, col.field)\"\n tabindex=\"-1\"><i class=\"pi pi-filter-slash\"></i></span>\n <after-view-checked style=\"display: none;\" (loaded)=\"initFilterBoxFocus(filterBox)\">\n </after-view-checked>\n </div>\n</ng-template>\n<ng-template #filterNumber let-col=\"col\">\n <div #filterBox class=\"number-picker-range filter-box\" tabindex=\"-1\" (mousedown)=\"initFilterBoxFocus(filterBox)\">\n <div tabindex=\"-1\">\n <tn-number-picker-range #numberRange [maskType]=\"col.dataType\" [(ngModel)]=\"filterData[col.field]\"\n [min]=\"col.min\" [max]=\"col.max\" (change)=\"onSearch()\">\n </tn-number-picker-range>\n </div>\n <span\n [ngClass]=\"{'action-clear': true, 'dirty': filterData[col.field] && ((filterData[col.field][0] != null && filterData[col.field][0] !== '') || (filterData[col.field][1] != null && filterData[col.field][1] !== ''))}\"\n [pTooltip]=\"'B\u1ECF filter'\" tooltipPosition=\"top\" (mousedown)=\"onClearNumberSearch(filterBox, numberRange)\"\n tabindex=\"-1\">\n <i class=\"pi pi-filter-slash\"></i></span>\n <after-view-checked style=\"display: none;\" (loaded)=\"initFilterBoxFocus(filterBox)\">\n </after-view-checked>\n </div>\n</ng-template>\n<ng-template #filterDate let-col=\"col\">\n <div #filterBox class=\"date-picker-range filter-box\" tabindex=\"-1\" (mousedown)=\"initFilterBoxFocus(filterBox)\">\n <div tabindex=\"-1\">\n <tn-datetime-picker-range #dateRange [control]=\"filterSchema.dateRange\"\n (onChanged)=\"onChangeDateTime($event, col.field)\">\n </tn-datetime-picker-range>\n </div>\n <span\n [ngClass]=\"{'action-clear': true, 'dirty': filterData[col.field] && ((filterData[col.field][0] != null && filterData[col.field][0] !== '') || (filterData[col.field][1] != null && filterData[col.field][1] !== ''))}\"\n [pTooltip]=\"'B\u1ECF filter'\" tooltipPosition=\"top\"\n (mousedown)=\"onClearDateSearch(filterBox, dateRange, col.field)\" tabindex=\"-1\"><i\n class=\"pi pi-filter-slash\"></i></span>\n <after-view-checked style=\"display: none;\" (loaded)=\"initFilterBoxFocus(filterBox)\">\n </after-view-checked>\n </div>\n</ng-template>\n<ng-template #filterBoolean let-col=\"col\">\n <div class=\"filter-boolean-box\">\n <p-selectButton\n [options]=\"[{value: true, label: 'C\u00F3', icon: 'pi pi-check'}, {value: false, label: 'Kh\u00F4ng', icon: 'pi pi-times'}]\"\n [multiple]=\"true\" [(ngModel)]=\"filterData[col.field]\" (onChange)=\"onChangeBoolean($event, col.field)\">\n <ng-template let-item>\n <i style=\"padding: 3px 0;\" [class]=\"item.icon\"></i>\n </ng-template>\n </p-selectButton>\n </div>\n</ng-template>\n<ng-template #buttonExport>\n <button *ngIf=\"model.selectedItems.length > 0\" [appAuthorize]=\"serviceCode\"\n [permission]=\"authorizePaths[commonConst.EXPORT_EXCEL]\"\n [enableAuthorize]=\"buttonApplyAuthorize[commonConst.EXPORT_EXCEL]\" type=\"button\" pButton pRipple\n label=\"Xu\u1EA5t c\u00E1c m\u1EE5c \u0111\u00E3 ch\u1ECDn ({{model.selectedItems.length}})\" icon=\"fas fa-file-excel\"\n class=\"p-button-text p-button-success\" (click)=\"xuatCacMucDaChon(true)\"></button>\n</ng-template>\n<ng-template #buttonExportWord>\n <button *ngIf=\"model.selectedItems.length > 0\" [appAuthorize]=\"serviceCode\"\n [permission]=\"authorizePaths[commonConst.EXPORT_EXCEL]\"\n [enableAuthorize]=\"buttonApplyAuthorize[commonConst.EXPORT_EXCEL]\" type=\"button\" pButton pRipple\n label=\"In c\u00E1c m\u1EE5c \u0111\u00E3 ch\u1ECDn ({{model.selectedItems.length}})\" icon=\"fas fa-file-word\"\n class=\"p-button-text p-button-success\" (click)=\"printByReadingHtml(true)\"></button>\n</ng-template>",
66
- styles: [".filter-row>th:not(.sticky):not(.chkbox){padding:3px!important}.advance-search-container{display:flex;justify-content:flex-end}::ng-deep tn-tree-table advance-search{display:block;flex:1;max-width:400px}::ng-deep tn-tree-table p-treetable .p-treetable .p-treetable-tbody>tr.ui-state-highlight{background:#e3f2fd!important}::ng-deep tn-tree-table p-treetable .p-treetable .p-treetable-tbody>tr.ui-state-highlight td{border-color:#fff}::ng-deep tn-tree-table p-treetable .p-treetable .p-treetable-tbody>tr.ui-state-highlight td .fix-sticky{background-color:#fff}::ng-deep tn-tree-table .sticky-columns-active .column-function{right:0;background:#fcfbfb!important}::ng-deep tn-tree-table .ps__rail-x,::ng-deep tn-tree-table .ps__rail-y{z-index:5}::ng-deep tn-tree-table .p-treetable .p-treetable-thead>tr>th.cell-fixed-filter{z-index:999}::ng-deep tn-tree-table .p-treetable .p-treetable-thead>tr>th.cell-fixed-filter .fixed-filter{z-index:10;position:fixed;min-width:200px}::ng-deep tn-tree-table .p-treetable .p-treetable-thead>tr>th .container-icon-loading{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}::ng-deep tn-tree-table tr.generated-by-base td.chkbox{background:#e9ecef}::ng-deep tn-tree-table .cell-header-filter{position:relative}::ng-deep tn-tree-table .cell-header-filter .tn-dropdown{height:32px}::ng-deep tn-tree-table .cell-header-filter tn-mask .p-inputtext{width:100%}::ng-deep tn-tree-table .cell-header-filter .filter-box{display:flex;min-width:0;background-color:#fff;border-radius:3px}::ng-deep tn-tree-table .cell-header-filter .filter-box>div{flex:1;border:1px solid #ced4da;border-right:none;border-radius:3px 0 0 3px;outline:none;overflow:hidden}::ng-deep tn-tree-table .cell-header-filter .filter-box>span{cursor:pointer;min-width:unset;flex-basis:32px;height:32px;display:inline-flex;align-items:center;justify-content:center;background:#f5f6f8;color:#6c757d;border:1px solid #ced4da;outline:none}::ng-deep tn-tree-table .cell-header-filter .filter-box>span.action-clear{border-radius:0 3px 3px 0}::ng-deep tn-tree-table .cell-header-filter .filter-box>span.action-clear.dirty{color:#008eff}::ng-deep tn-tree-table .cell-header-filter .filter-box input{padding-left:5px;padding-right:5px;border:none;box-shadow:none!important}::ng-deep tn-tree-table .cell-header-filter .filter-box:not(.no-transition){transition:min-width .1s}::ng-deep tn-tree-table .cell-header-filter .filter-box.boolean-filter>div{flex:0 0 109px;width:109px}::ng-deep tn-tree-table .cell-header-filter .p-multiselect-label.p-placeholder{padding-left:.5rem;padding-right:.5rem}::ng-deep tn-tree-table .cell-header-filter.focus-within,::ng-deep tn-tree-table .cell-header-filter:focus-within{z-index:10!important}::ng-deep tn-tree-table .cell-header-filter.focus-within .filter-boolean-box .p-button,::ng-deep tn-tree-table .cell-header-filter:focus-within .filter-boolean-box .p-button{z-index:10}::ng-deep tn-tree-table .cell-header-filter.focus-within .filter-box>div,::ng-deep tn-tree-table .cell-header-filter:focus-within .filter-box>div{box-shadow:0 0 0 .2rem #a6d5fa;border-color:#2196f3;z-index:0}::ng-deep tn-tree-table .cell-header-filter.focus-within .short-filter-box,::ng-deep tn-tree-table .cell-header-filter:focus-within .short-filter-box{position:absolute;top:calc(50% - 16px);min-width:250px;z-index:2;box-shadow:5px 0 15px 1px rgba(0,0,0,.27058823529411763)}::ng-deep tn-tree-table .cell-header-filter.focus-within .short-filter-box>div,::ng-deep tn-tree-table .cell-header-filter:focus-within .short-filter-box>div{flex:1;box-shadow:0 0 0 .2rem #a6d5fa;border-color:#2196f3;z-index:0}::ng-deep tn-tree-table .cell-header-filter.focus-within .short-filter-box>span.action-clear,::ng-deep tn-tree-table .cell-header-filter:focus-within .short-filter-box>span.action-clear{display:flex}::ng-deep tn-tree-table .cell-header-filter.focus-within .short-filter-box.boolean-filter,::ng-deep tn-tree-table .cell-header-filter:focus-within .short-filter-box.boolean-filter{min-width:140px}::ng-deep tn-tree-table .cell-header-filter.focus-within .short-filter-box.boolean-filter>div,::ng-deep tn-tree-table .cell-header-filter:focus-within .short-filter-box.boolean-filter>div{flex:0 0 109px;width:109px}::ng-deep tn-tree-table .cell-header-filter.focus-within:nth-last-child(2) .short-filter-box,::ng-deep tn-tree-table .cell-header-filter:focus-within:nth-last-child(2) .short-filter-box{left:50%;transform:translateX(-50%)}::ng-deep tn-tree-table .cell-header-filter:last-child .filter-box{right:3px}::ng-deep tn-tree-table .table-border-line{position:absolute;z-index:5;background-color:#eee}::ng-deep tn-tree-table .table-border-line.--left,::ng-deep tn-tree-table .table-border-line.--right{top:0;bottom:0;width:1px}::ng-deep tn-tree-table .table-border-line.--bottom,::ng-deep tn-tree-table .table-border-line.--top{left:0;right:0;height:1px}::ng-deep tn-tree-table .table-border-line.--left{left:0}::ng-deep tn-tree-table .table-border-line.--right{right:0}::ng-deep tn-tree-table .table-border-line.--top{top:0}::ng-deep tn-tree-table .table-border-line.--bottom{bottom:0}::ng-deep tn-tree-table .filter-boolean-box{text-align:center}::ng-deep tn-tree-table .filter-boolean-box .p-selectbutton{white-space:nowrap}::ng-deep tn-tree-table .custom-search-area crud-form{width:100%}::ng-deep tn-tree-table>p-contextmenu{display:none}"]
65
+ template: "<div #container class=\"custom-card card card-w-title tn-g-page-layout-1\">\n <div class=\"ui-helper-clearfix tn-g-page-layout-1__header-area\">\n <div *ngIf=\"searchCustom\" class=\"p-grid ui-fluid custom-p-col custom-search-area\">\n <div class=\"p-col-12 main-container-search\">\n <div class=\"p-grid main-container-search-inner\">\n <ng-container>\n <ng-container *ngTemplateOutlet=\"searchCustom; context: {$implicit: this}\"></ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n <div class=\"p-grid ui-fluid custom-p-col page-title-area\">\n <div class=\"main-title p-col-8\">\n <h1 *ngIf=\"!hasTemplate('customTitle')\">\n {{setting.title != null ? setting.title : 'Danh s\u00E1ch ' + setting.objectName}}\n </h1>\n\n <ng-container *ngIf=\"hasTemplate('customTitle')\" [ngTemplateOutlet]=\"getTemplate('customTitle')\"\n [ngTemplateOutletContext]=\"{crudList: this}\">\n </ng-container>\n </div>\n <div class=\"p-col-4\">\n <paging-next-back-only [model]=\"model\" [setting]=\"setting\" (onChanged)=\"getData()\"\n (onChangeLimitPage)=\"savePageSize()\">\n </paging-next-back-only>\n </div>\n </div>\n </div>\n <div class=\"p-grid crudListToolbar tn-g-page-layout-1__toolbar-area\">\n <div class=\"p-col-7 button-group function-topbar\">\n <ng-container [ngTemplateOutlet]=\"getTemplate('buttonBeforeToolbar')\"\n [ngTemplateOutletContext]=\"{crudList: this}\"></ng-container>\n <ng-container *ngIf=\"!hiddenAdd\" [ngTemplateOutlet]=\"buttonAdd\"></ng-container>\n <ng-container *ngIf=\"setting.showExportSelectedItems\" [ngTemplateOutlet]=\"buttonExport\">\n </ng-container>\n <ng-container *ngIf=\"setting.showExportWordSelectedItems\" [ngTemplateOutlet]=\"buttonExportWord\">\n </ng-container>\n <ng-container *ngIf=\"!hiddenDelete\" [ngTemplateOutlet]=\"buttonDelete\">\n </ng-container>\n <button pButton pRipple type=\"button\" label=\"\u0110\u00E1nh l\u1EA1i m\u00E3 ph\u00E2n c\u1EA5p\" icon=\"pi pi-share-alt\"\n class=\"p-button-text\" style=\"display: none;\" (click)=\"handleDanhMaPC($event)\"></button>\n <ng-container [ngTemplateOutlet]=\"getTemplate('buttonAfterToolbar')\"\n [ngTemplateOutletContext]=\"{crudList: this}\"></ng-container>\n </div>\n <div class=\"p-col-5 p-inputgroup advance-search-container\">\n <ng-container *ngIf=\"!setting.hiddenAdvanceSearch\">\n <advance-search #advanceSearch [parentSetting]=\"setting\" [searchInfo]=\"searchInfo\"\n [loading]=\"model.loading\" (onSearch)=\"handleSearchAdvs($event)\"\n (onInit)=\"handleInitAdvanceSearch($event)\">\n </advance-search>\n </ng-container>\n </div>\n </div>\n <div class=\"tn-g-page-layout-1__table-area\">\n <tn-custom-scrollbar [showScrollHorizontal]=\"true\" class=\"--has-border\">\n <p-treeTable #treetable [value]=\"_dataSource\" [columns]=\"setting.cols\" [class]=\"_tableClass\"\n styleClass=\"treeOrganization\">\n <ng-template pTemplate=\"colgroup\" let-columns>\n <colgroup>\n <col *ngIf=\"!setting.hiddenCheckbox\" style=\"width: 50px\" />\n <col *ngIf=\"!setting.hiddenOrderColumn\" style=\"width: 50px\" />\n <ng-container *ngFor=\"let col of columns; let i = index\">\n <col *ngIf=\"col && col.visible && col.field!='function'\" [style.width]=\"col.width\" />\n </ng-container>\n <col *ngIf=\"!setting.hiddenFunctionColumn\"\n [style.width]=\"widthFunctionColumn || _widthFunctionColumn\" />\n </colgroup>\n </ng-template>\n <ng-template pTemplate=\"header\" let-columns>\n <tr> \n <th *ngIf=\"!setting.hiddenCheckbox\" class=\"chkbox\" [class.sticky]=\"setting.stickyColumn\">\n <button type=\"button\" pButton pRipple icon=\"pi pi-refresh\"\n class=\"p-button-rounded p-button-text btnReload\" pTooltip=\"L\u00E0m m\u1EDBi d\u1EEF li\u1EC7u\"\n tooltipPosition=\"top\" [disabled]=\"model.loading\" (click)=\"getData()\"></button>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n <th *ngIf=\"!setting.hiddenOrderColumn\" class=\"stt nopad center\"\n [class.sticky]=\"setting.stickyColumn\" (dblclick)=\"reload()\">\n {{ 'TT' |translate}}\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n <ng-container *ngFor=\"let col of columns; let i = index\">\n <th *ngIf=\"col && col.visible && col.field!='function'\" [ttSortableColumn]=\"col.field\"\n [className]=\"col.class\" [pTooltip]=\"col.fullLabel\" tooltipStyleClass=\"unset-width\"\n style=\"text-align: center;\">\n {{col.label}}\n <p-treeTableSortIcon [field]=\"col.field\"></p-treeTableSortIcon>\n </th>\n </ng-container>\n <th *ngIf=\"!setting.hiddenFunctionColumn\" class=\"column-function\" style=\"text-align: center;\"\n [class.sticky]=\"setting.stickyColumn\">\n Ch\u1EE9c n\u0103ng\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n </tr>\n <ng-container *ngTemplateOutlet=\"rowHeaderFilter; context: {columns: columns}\">\n </ng-container>\n </ng-template>\n <ng-template pTemplate=\"body\" let-rowNode let-rowData=\"rowData\" let-index=\"rowIndex\"\n let-columns=\"columns\">\n <tr [ttRow]=\"rowNode\" [class.generated-by-base]=\"rowData._GeneratedByBase\"\n [attr.rowIndex]=\"rowData[fieldIndexInDataSource]\" [class.ui-state-highlight]=\"rowData._checked\"\n [pTooltip]=\"rowData.tooltip\" tooltipPosition=\"top\" (click)=\"handleSelectRow($event, rowData)\">\n <td *ngIf=\"!setting.hiddenCheckbox\" class=\"chkbox link-or-action cell-checkbox\" [class.sticky]=\"setting.stickyColumn\">\n <p-checkbox [(ngModel)]=\"rowData._checked\" binary=\"true\"\n (onChange)=\"handleCheckRowData(rowData)\">\n </p-checkbox>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </td>\n <td class=\"stt\" style=\"text-align: center;\" [class.sticky]=\"setting.stickyColumn\">\n {{rowData[fieldOrder]}}\n \n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </td>\n <ng-container *ngFor=\"let col of columns; let i = index\">\n <ng-container\n *ngTemplateOutlet=\"contentTd; context: {$implicit: rowData, rowNode: rowNode, col: col, index: index, i: i}\">\n </ng-container>\n </ng-container>\n <td *ngIf=\"!setting.hiddenFunctionColumn\" style=\"text-align: center;\" class=\"column-function\"\n [class.sticky]=\"setting.stickyColumn\">\n <div *ngIf=\"hasTemplate('function')\" class=\"p-toolbar-group-center button-group\">\n <ng-container [ngTemplateOutlet]=\"getTemplate('function')\"\n [ngTemplateOutletContext]=\"{rowData: rowData, rowIndex: index}\"></ng-container>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </div>\n <div *ngIf=\"!hasTemplate('function')\" class=\"p-toolbar-group-center button-group\">\n <ng-container [ngTemplateOutletContext]=\"{rowData: rowData, rowIndex: index}\"\n [ngTemplateOutlet]=\"getTemplate('buttonBefore')\"></ng-container>\n <button *ngIf=\"!rowData.hiddenEdit\" type=\"button\" pButton pRipple\n [pTooltip]=\"'FORM.EDIT' | translate\" tooltipPosition=\"top\"\n [disabled]=\"disableEdit(rowData)\"\n class=\"p-button-rounded p-button-text p-button-info link-or-action\"\n icon=\"pi pi-pencil\" (click)=\"edit(rowData)\"></button>\n <button *ngIf=\"!rowData.hiddenDelete\" type=\"button\" pButton pRipple\n [disabled]=\"disableDelete(rowData)\" [pTooltip]=\"'FORM.DELETE' | translate\"\n tooltipPosition=\"top\"\n class=\"p-button-rounded p-button-text p-button-danger link-or-action\"\n icon=\"pi pi-trash\" (click)=\"delete(rowData)\"></button>\n <!-- <button *ngIf=\"this.menuButtons\" type=\"button\" pButton icon=\"pi pi-ellipsis-v\"\n class=\"link-or-action p-button-text p-button-info p-button-rounded\"\n pTooltip=\"Ch\u1EE9c n\u0103ng kh\u00E1c\" tooltipPosition=\"top\"\n (click)=\"showContextMenu($event, rowData)\"></button> -->\n </div>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </td>\n </tr>\n <after-view-checked *ngIf=\"rowData._index == _rawDataSource.length - 1\" style=\"display: none;\"\n [renderKey]=\"dataSource\" (loaded)=\"handleTableRendered()\">\n </after-view-checked>\n </ng-template>\n </p-treeTable>\n <div class=\"row-bottom-sticky\"></div>\n </tn-custom-scrollbar>\n </div>\n</div>\n<ng-template #buttonAdd>\n <span [appAuthorize]=\"serviceCode\" [permission]=\"authorizePaths[commonConst.ADD]\"\n [enableAuthorize]=\"buttonApplyAuthorize[commonConst.ADD]\">\n <button type=\"button\" pButton pRipple label=\"Th\u00EAm m\u1EDBi\" icon=\"pi pi-plus\" class=\"p-button-text\"\n [disabled]=\"!model.baseReady\" (click)=\"add()\"></button>\n </span>\n</ng-template>\n<ng-template #buttonDelete>\n <button *ngIf=\"!hiddenDelete && model.selectedItems.length > 0 && !disableMultipleDelete()\"\n [appAuthorize]=\"serviceCode\" [permission]=\"authorizePaths[commonConst.DELETE_MULTIPLE]\"\n [enableAuthorize]=\"buttonApplyAuthorize[commonConst.DELETE_MULTIPLE]\" type=\"button\" pButton pRipple\n [label]=\"'X\u00F3a ' + (model.selectedItems.length) | translate\" icon=\"pi pi-trash\"\n class=\"p-button-text p-button-danger\" (click)=\"deleteMutiple()\"></button>\n</ng-template>\n<ng-template #contentTd let-rowData let-rowNode=\"rowNode\" let-col=\"col\" let-index=\"index\" let-i=\"i\"\n let-expanded=\"expanded\">\n <td *ngIf=\"col && col.visible && col.field != 'function' && (!rowData.hidden || !rowData.hidden[col.field])\"\n [attr.colSpan]=\"rowData.colSpan && rowData.colSpan[col.field]\"\n [attr.rowSpan]=\"rowData.rowSpan && rowData.rowSpan[col.field]\" [ngStyle]=\"col.extendData.style\"\n [class]=\"col.cellClass\" [class.first-td]=\"i == 0\">\n <tn-treeTableToggler *ngIf=\"col.colHasToggleIcon\" [rowNode]=\"rowNode\"></tn-treeTableToggler>\n <span *ngIf=\"col.pipe\">\n <!-- <span class=\"p-column-title\" [pTooltip]=\"col.fullLabel\" [escape]=\"false\"\n tooltipPosition=\"top\">{{col.label}}</span> -->\n {{rowData['pipe__' + col.field]}}\n </span>\n <span *ngIf=\"!col.pipe\">\n <!-- <span class=\"p-column-title\" [pTooltip]=\"col.fullLabel\" [escape]=\"false\"\n tooltipPosition=\"top\">{{col.label}}</span> -->\n <span *ngIf=\"setting.showEditLink && col.showEditLink\" [pTooltip]=\"config.tooltipView\" tooltipPosition=\"top\"\n class=\"link-or-action\">\n <a href=\"javascript:;\" (click)=\"view(rowData)\" [pTooltip]=\"config.tooltipView\" tooltipPosition=\"top\">\n <ng-container [ngTemplateOutlet]=\"contentCell\"\n [ngTemplateOutletContext]=\"getContextCell(rowData, index, col, expanded, this)\">\n </ng-container>\n </a>\n </span>\n <span *ngIf=\"!setting.showEditLink || !col.showEditLink\">\n <ng-container [ngTemplateOutlet]=\"contentCell\"\n [ngTemplateOutletContext]=\"getContextCell(rowData, index, col, expanded, this)\">\n </ng-container>\n </span>\n </span>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </td>\n</ng-template>\n<ng-template #contentCell let-col=\"col\" let-rowData=\"rowData\" let-rowIndex=\"rowIndex\" let-field=\"field\"\n let-expanded=\"expanded\">\n <ng-container *ngIf=\"col.template\">\n <ng-container [ngTemplateOutlet]=\"col.template\"\n [ngTemplateOutletContext]=\"getContextCell(rowData, rowIndex, col, expanded, this)\">\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!col.template\">\n <ng-container [ngSwitch]=\"col.dataType\">\n <span *ngSwitchCase=\"'color'\" style=\"display:block;text-align:center;\">\n <div [pTooltip]=\"rowData[field]\" tooltipPosition=\"top\" [ngStyle]=\"{'background-color':rowData[field]}\"\n style=\"width:30px;height:30px;margin:0 auto;\"></div>\n </span>\n <span *ngSwitchCase=\"'icon'\" style=\"display:block;text-align:center;\">\n <i [pTooltip]=\"rowData[field]\" tooltipPosition=\"top\" style=\"text-align: center;\"\n [ngClass]=\"rowData[field]\"></i>\n </span>\n <span *ngSwitchCase=\"'date'\" [pTooltip]=\"rowData[field] | date:'dd/MM/yyyy'\" tooltipPosition=\"top\">\n {{_crudService.renderDate(rowData[field], col.format)}}\n </span>\n <span *ngSwitchCase=\"'datetime'\" [pTooltip]=\"rowData[field] | date:'dd/MM/yyyy HH:mm'\"\n tooltipPosition=\"top\">\n {{_crudService.renderDateTime(rowData[field], col.format)}}\n </span>\n <span *ngSwitchCase=\"'int'\">\n {{rowData[field]}}\n </span>\n <span *ngSwitchCase=\"'decimal'\">\n {{rowData[field]}}\n </span>\n <span *ngSwitchCase=\"'boolean'\">\n <p-checkbox class=\"boolean-data-type\" [(ngModel)]=\"rowData[field]\" binary=\"true\"\n [disabled]=\"col.disableCheckBox\">\n </p-checkbox>\n </span>\n <span *ngSwitchCase=\"'html'\">\n <div *ngIf=\"rowData[field]==null?'':rowData[field]\" [innerHTML]=\"rowData[field] | safeHtml\"></div>\n </span>\n <span *ngSwitchCase=\"'metadataStatus'\">\n <span *ngIf=\"rowData['rejectReason']\" class=\"label-danger\" [pTooltip]=\"rowData['rejectReason']\"\n tooltipStyleClass=\"unset-width\" [escape]=\"false\" tooltipPosition=\"top\">T\u1EEB ch\u1ED1i</span>\n <span *ngIf=\"rowData[field] == '0' && !rowData['rejectReason']\" class=\"label-secondary\">Ch\u01B0a\n duy\u1EC7t</span>\n <span *ngIf=\"rowData[field] == '1' && !rowData['rejectReason']\" class=\"label-warning\">Ch\u1EDD duy\u1EC7t</span>\n <span *ngIf=\"rowData[field] == '2'\" class=\"label-primary\">\u0110\u00E3 duy\u1EC7t</span>\n </span>\n <ng-container *ngSwitchCase=\"'string'\">\n <ng-container *ngTemplateOutlet=\"contentCellString; context: {$implicit: rowData, field: col.field}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"null\">\n <ng-container *ngTemplateOutlet=\"contentCellString; context: {$implicit: rowData, field: col.field}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <ng-container [ngTemplateOutlet]=\"getComponentByType(col.dataType)\"\n [ngTemplateOutletContext]=\"getContextCell(rowData, rowIndex, col, expanded, this)\">\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n<ng-template #contentCellString let-rowData let-field=\"field\">\n <span>\n <!-- __sv: Short Value -->\n <ng-container *ngIf=\"rowData[field + '__sv']\">\n <ng-container *ngIf=\"!rowData[field + '__showFull']\">\n {{rowData[field + '__sv']}}\n <span class=\"toggle-showfull\" (click)=\"toggleShowFull(rowData, field)\" pTooltip=\"B\u1EA5m \u0111\u1EC3 xem th\u00EAm\"\n tooltipPosition=\"top\">[...]</span>\n </ng-container>\n <ng-container *ngIf=\"rowData[field + '__showFull']\">\n {{rowData[field]}}\n <span class=\"toggle-showfull\" (click)=\"toggleShowFull(rowData, field)\">Thu g\u1ECDn</span>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!rowData[field + '__sv']\">\n {{rowData[field]}}\n </ng-container>\n </span>\n</ng-template>\n<ng-template #containerSticky>\n <span class=\"fix-sticky top\"></span>\n <span class=\"fix-sticky right\"></span>\n <!-- <span class=\"fix-sticky bottom\"></span> -->\n <span class=\"fix-sticky left\"></span>\n</ng-template>\n<ng-template #rowHeaderFilter let-columns=\"columns\">\n <tr class=\"filter-row\" *ngIf=\"!setting.hiddenFilterRow\">\n <th *ngIf=\"!setting.hiddenCheckbox\" class=\"chkbox nopad center\" [class.sticky]=\"setting.stickyColumn\"\n [class.tricheckbox-custom-false]=\"checkedAll === false\">\n <p-triStateCheckbox [(ngModel)]=\"checkedAll\" binary=\"true\" (onChange)=\"handleCheckAll()\">\n </p-triStateCheckbox>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n <th class=\"nopad center stt\" [class.sticky]=\"setting.stickyColumn\">\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n <ng-container *ngFor=\"let col of columns; let i = index\">\n <th *ngIf=\"col.visible && col.field != 'function'\" class=\"cell-header-filter center\">\n <ng-container *ngIf=\"col.allowFilter\">\n <ng-container *ngIf=\"col.templateFilter\">\n <ng-container [ngTemplateOutlet]=\"col.templateFilter\"\n [ngTemplateOutletContext]=\"{col: col, filterData: filterData, onSearch: onSearch, onShowFilterDropdownPanel: onShowFilterDropdownPanel, onHideFilterDropdownPanel: onHideFilterDropdownPanel}\">\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!col.templateFilter\" [ngSwitch]=\"col.controlType\">\n <ng-container *ngSwitchCase=\"'dropdown'\">\n <ng-container [ngTemplateOutlet]=\"filterDropdown\"\n [ngTemplateOutletContext]=\"{col: col.rawColumn}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'number'\">\n <ng-container [ngTemplateOutlet]=\"filterNumber\" [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'date'\">\n <ng-container [ngTemplateOutlet]=\"filterDate\" [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'datetime'\">\n <ng-container [ngTemplateOutlet]=\"filterDate\" [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <ng-container [ngSwitch]=\"col.dataType\">\n <ng-container *ngSwitchCase=\"'int'\">\n <ng-container [ngTemplateOutlet]=\"filterNumber\"\n [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'decimal'\">\n <ng-container [ngTemplateOutlet]=\"filterNumber\"\n [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'date'\">\n <ng-container [ngTemplateOutlet]=\"filterDate\"\n [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'datetime'\">\n <ng-container [ngTemplateOutlet]=\"filterDate\"\n [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'boolean'\">\n <ng-container [ngTemplateOutlet]=\"filterBoolean\"\n [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <ng-container [ngTemplateOutlet]=\"filterText\"\n [ngTemplateOutletContext]=\"{col: col}\">\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n </ng-container>\n <th *ngIf=\"!setting.hiddenFunctionColumn\" class=\"center setting-cell column-function\"\n [class.sticky]=\"setting.stickyColumn\">\n <!-- <button *ngIf=\"!setting.hiddenSetting\" type=\"button\" pButton pRipple icon=\"pi pi-cog\"\n class=\"p-button-rounded p-button-text\" pTooltip=\"C\u1EA5u h\u00ECnh hi\u1EC3n th\u1ECB\" tooltipPosition=\"top\"\n (click)=\"showSettings()\"></button>\n <button *ngIf=\"!setting.hiddenSettingPermission\" type=\"button\" pButton pRipple icon=\"pi pi-users\"\n class=\"p-button-rounded p-button-text\" pTooltip=\"Ph\u00E2n quy\u1EC1n d\u1EEF li\u1EC7u\" tooltipPosition=\"left\"\n [disabled]=\"checkPermissionToUseButton(BUTTON_PHAN_QUYEN)\" (click)=\"showSettingsPermission()\"></button>\n <button *ngIf=\"!setting.hiddenSettingWorkflow\" type=\"button\" pButton pRipple icon=\"pi pi-sitemap\"\n class=\"p-button-rounded p-button-text\" pTooltip=\"C\u1EA5u h\u00ECnh quy tr\u00ECnh\" tooltipPosition=\"left\"\n [disabled]=\"checkPermissionToUseButton(BUTTON_CAU_HINH_QUY_TRINH)\"\n (click)=\"showSettingsWorkflowNew()\"></button> -->\n <ng-container *ngTemplateOutlet=\"containerSticky\"></ng-container>\n </th>\n </tr>\n</ng-template>\n<ng-template #filterDropdown let-col=\"col\">\n <div #filterBox style=\"width: 100%; border-radius: 4px;\">\n <dropdown *ngIf=\"col && filterSchema.dropdown[col.field]\" [control]=\"filterSchema.dropdown[col.field]\"\n [dataSource]=\"filterSchema.dropdown[col.field].dataSource\" [(value)]=\"filterData[col.field]\"\n (onHideSmartEvent)=\"onSearch()\" (onShow)=\"onShowFilterDropdownPanel($event)\"\n (onHide)=\"onHideFilterDropdownPanel($event)\" (mousedown)=\"initFilterBoxFocus(filterBox)\"></dropdown>\n </div>\n</ng-template>\n<ng-template #filterText let-col=\"col\">\n <div #filterBox class=\"text-filter filter-box\" tabindex=\"-1\" (mousedown)=\"initFilterBoxFocus(filterBox)\">\n <div tabindex=\"-1\">\n <input pInputText type=\"text\" class=\"input-search\" [placeholder]=\"col.label\"\n [(ngModel)]=\"filterData[col.field]\" (change)=\"onSearch()\"\n (keyup.esc)=\"onClearSearch(filterBox, col.field)\">\n </div>\n <span [ngClass]=\"{'action-clear': true, 'dirty': filterData[col.field] != null && filterData[col.field] !== ''}\"\n [pTooltip]=\"'B\u1ECF filter'\" tooltipPosition=\"top\" (mousedown)=\"onClearSearch(filterBox, col.field)\"\n tabindex=\"-1\"><i class=\"pi pi-filter-slash\"></i></span>\n <after-view-checked style=\"display: none;\" (loaded)=\"initFilterBoxFocus(filterBox)\">\n </after-view-checked>\n </div>\n</ng-template>\n<ng-template #filterNumber let-col=\"col\">\n <div #filterBox class=\"number-picker-range filter-box\" tabindex=\"-1\" (mousedown)=\"initFilterBoxFocus(filterBox)\">\n <div tabindex=\"-1\">\n <tn-number-picker-range #numberRange [maskType]=\"col.dataType\" [(ngModel)]=\"filterData[col.field]\"\n [min]=\"col.min\" [max]=\"col.max\" (change)=\"onSearch()\">\n </tn-number-picker-range>\n </div>\n <span\n [ngClass]=\"{'action-clear': true, 'dirty': filterData[col.field] && ((filterData[col.field][0] != null && filterData[col.field][0] !== '') || (filterData[col.field][1] != null && filterData[col.field][1] !== ''))}\"\n [pTooltip]=\"'B\u1ECF filter'\" tooltipPosition=\"top\" (mousedown)=\"onClearNumberSearch(filterBox, numberRange)\"\n tabindex=\"-1\">\n <i class=\"pi pi-filter-slash\"></i></span>\n <after-view-checked style=\"display: none;\" (loaded)=\"initFilterBoxFocus(filterBox)\">\n </after-view-checked>\n </div>\n</ng-template>\n<ng-template #filterDate let-col=\"col\">\n <div #filterBox class=\"date-picker-range filter-box\" tabindex=\"-1\" (mousedown)=\"initFilterBoxFocus(filterBox)\">\n <div tabindex=\"-1\">\n <tn-datetime-picker-range #dateRange [control]=\"filterSchema.dateRange\"\n (onChanged)=\"onChangeDateTime($event, col.field)\">\n </tn-datetime-picker-range>\n </div>\n <span\n [ngClass]=\"{'action-clear': true, 'dirty': filterData[col.field] && ((filterData[col.field][0] != null && filterData[col.field][0] !== '') || (filterData[col.field][1] != null && filterData[col.field][1] !== ''))}\"\n [pTooltip]=\"'B\u1ECF filter'\" tooltipPosition=\"top\"\n (mousedown)=\"onClearDateSearch(filterBox, dateRange, col.field)\" tabindex=\"-1\"><i\n class=\"pi pi-filter-slash\"></i></span>\n <after-view-checked style=\"display: none;\" (loaded)=\"initFilterBoxFocus(filterBox)\">\n </after-view-checked>\n </div>\n</ng-template>\n<ng-template #filterBoolean let-col=\"col\">\n <div class=\"filter-boolean-box\">\n <p-selectButton\n [options]=\"[{value: true, label: 'C\u00F3', icon: 'pi pi-check'}, {value: false, label: 'Kh\u00F4ng', icon: 'pi pi-times'}]\"\n [multiple]=\"true\" [(ngModel)]=\"filterData[col.field]\" (onChange)=\"onChangeBoolean($event, col.field)\">\n <ng-template let-item>\n <i style=\"padding: 3px 0;\" [class]=\"item.icon\"></i>\n </ng-template>\n </p-selectButton>\n </div>\n</ng-template>\n<ng-template #buttonExport>\n <button *ngIf=\"model.selectedItems.length > 0\" [appAuthorize]=\"serviceCode\"\n [permission]=\"authorizePaths[commonConst.EXPORT_EXCEL]\"\n [enableAuthorize]=\"buttonApplyAuthorize[commonConst.EXPORT_EXCEL]\" type=\"button\" pButton pRipple\n label=\"Xu\u1EA5t c\u00E1c m\u1EE5c \u0111\u00E3 ch\u1ECDn ({{model.selectedItems.length}})\" icon=\"fas fa-file-excel\"\n class=\"p-button-text p-button-success\" (click)=\"xuatCacMucDaChon(true)\"></button>\n</ng-template>\n<ng-template #buttonExportWord>\n <button *ngIf=\"model.selectedItems.length > 0\" [appAuthorize]=\"serviceCode\"\n [permission]=\"authorizePaths[commonConst.EXPORT_EXCEL]\"\n [enableAuthorize]=\"buttonApplyAuthorize[commonConst.EXPORT_EXCEL]\" type=\"button\" pButton pRipple\n label=\"In c\u00E1c m\u1EE5c \u0111\u00E3 ch\u1ECDn ({{model.selectedItems.length}})\" icon=\"fas fa-file-word\"\n class=\"p-button-text p-button-success\" (click)=\"printByReadingHtml(true)\"></button>\n</ng-template>",
66
+ styles: [".filter-row>th:not(.sticky):not(.chkbox){padding:3px!important}.advance-search-container{display:flex;justify-content:flex-end}::ng-deep tn-tree-table advance-search{display:block;flex:1;max-width:400px}::ng-deep tn-tree-table .sticky-columns-active .column-function{right:0;background:inherit}::ng-deep tn-tree-table .sticky-columns-active td.sticky{background:inherit}::ng-deep tn-tree-table .sticky-columns-active .chkbox.sticky{left:0}::ng-deep tn-tree-table .sticky-columns-active .stt.sticky{left:50px}::ng-deep tn-tree-table .sticky-columns-active .row-expansion-toggle.sticky{left:6rem}::ng-deep tn-tree-table .sticky-columns-active .column-function.sticky{right:1px}::ng-deep tn-tree-table .sticky-columns-active .container-row-group-toggle.sticky{position:sticky;left:calc(2.5rem + 1px)}::ng-deep tn-tree-table .sticky-columns-active.hidden-column-checkbox .stt.sticky{left:0}::ng-deep tn-tree-table .sticky-columns-active.hidden-column-checkbox .row-expansion-toggle.sticky{left:3.5rem}::ng-deep tn-tree-table .sticky-columns-active.hidden-column-checkbox .container-row-group-toggle.sticky{left:0}::ng-deep tn-tree-table .sticky-columns-active.hidden-column-order .row-expansion-toggle.sticky{left:2.5rem}::ng-deep tn-tree-table .sticky-columns-active.hidden-column-checkbox.hidden-column-order .row-expansion-toggle.sticky{left:0}::ng-deep tn-tree-table p-treetable .p-treetable .p-treetable-tbody>tr.ui-state-highlight{background:#e3f2fd!important}::ng-deep tn-tree-table p-treetable .p-treetable .p-treetable-tbody>tr.ui-state-highlight td{border-color:#fff}::ng-deep tn-tree-table p-treetable .p-treetable .p-treetable-tbody>tr.ui-state-highlight td .fix-sticky{background-color:#fff}::ng-deep tn-tree-table .ps__rail-x,::ng-deep tn-tree-table .ps__rail-y{z-index:5}::ng-deep tn-tree-table .p-treetable .p-treetable-thead>tr>th.cell-fixed-filter{z-index:999}::ng-deep tn-tree-table .p-treetable .p-treetable-thead>tr>th.cell-fixed-filter .fixed-filter{z-index:10;position:fixed;min-width:200px}::ng-deep tn-tree-table .p-treetable .p-treetable-thead>tr>th .container-icon-loading{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}::ng-deep tn-tree-table tr.generated-by-base td.chkbox{background:#e9ecef}::ng-deep tn-tree-table .cell-header-filter{position:relative}::ng-deep tn-tree-table .cell-header-filter .tn-dropdown{height:32px}::ng-deep tn-tree-table .cell-header-filter tn-mask .p-inputtext{width:100%}::ng-deep tn-tree-table .cell-header-filter .filter-box{display:flex;min-width:0;background-color:#fff;border-radius:3px}::ng-deep tn-tree-table .cell-header-filter .filter-box>div{flex:1;border:1px solid #ced4da;border-right:none;border-radius:3px 0 0 3px;outline:none;overflow:hidden}::ng-deep tn-tree-table .cell-header-filter .filter-box>span{cursor:pointer;min-width:unset;flex-basis:32px;height:32px;display:inline-flex;align-items:center;justify-content:center;background:#f5f6f8;color:#6c757d;border:1px solid #ced4da;outline:none}::ng-deep tn-tree-table .cell-header-filter .filter-box>span.action-clear{border-radius:0 3px 3px 0}::ng-deep tn-tree-table .cell-header-filter .filter-box>span.action-clear.dirty{color:#008eff}::ng-deep tn-tree-table .cell-header-filter .filter-box input{padding-left:5px;padding-right:5px;border:none;box-shadow:none!important}::ng-deep tn-tree-table .cell-header-filter .filter-box:not(.no-transition){transition:min-width .1s}::ng-deep tn-tree-table .cell-header-filter .filter-box.boolean-filter>div{flex:0 0 109px;width:109px}::ng-deep tn-tree-table .cell-header-filter .p-multiselect-label.p-placeholder{padding-left:.5rem;padding-right:.5rem}::ng-deep tn-tree-table .cell-header-filter.focus-within,::ng-deep tn-tree-table .cell-header-filter:focus-within{z-index:10!important}::ng-deep tn-tree-table .cell-header-filter.focus-within .filter-boolean-box .p-button,::ng-deep tn-tree-table .cell-header-filter:focus-within .filter-boolean-box .p-button{z-index:10}::ng-deep tn-tree-table .cell-header-filter.focus-within .filter-box>div,::ng-deep tn-tree-table .cell-header-filter:focus-within .filter-box>div{box-shadow:0 0 0 .2rem #a6d5fa;border-color:#2196f3;z-index:0}::ng-deep tn-tree-table .cell-header-filter.focus-within .short-filter-box,::ng-deep tn-tree-table .cell-header-filter:focus-within .short-filter-box{position:absolute;top:calc(50% - 16px);min-width:250px;z-index:2;box-shadow:5px 0 15px 1px rgba(0,0,0,.27058823529411763)}::ng-deep tn-tree-table .cell-header-filter.focus-within .short-filter-box>div,::ng-deep tn-tree-table .cell-header-filter:focus-within .short-filter-box>div{flex:1;box-shadow:0 0 0 .2rem #a6d5fa;border-color:#2196f3;z-index:0}::ng-deep tn-tree-table .cell-header-filter.focus-within .short-filter-box>span.action-clear,::ng-deep tn-tree-table .cell-header-filter:focus-within .short-filter-box>span.action-clear{display:flex}::ng-deep tn-tree-table .cell-header-filter.focus-within .short-filter-box.boolean-filter,::ng-deep tn-tree-table .cell-header-filter:focus-within .short-filter-box.boolean-filter{min-width:140px}::ng-deep tn-tree-table .cell-header-filter.focus-within .short-filter-box.boolean-filter>div,::ng-deep tn-tree-table .cell-header-filter:focus-within .short-filter-box.boolean-filter>div{flex:0 0 109px;width:109px}::ng-deep tn-tree-table .cell-header-filter.focus-within:nth-last-child(2) .short-filter-box,::ng-deep tn-tree-table .cell-header-filter:focus-within:nth-last-child(2) .short-filter-box{left:50%;transform:translateX(-50%)}::ng-deep tn-tree-table .cell-header-filter:last-child .filter-box{right:3px}::ng-deep tn-tree-table .table-border-line{position:absolute;z-index:5;background-color:#eee}::ng-deep tn-tree-table .table-border-line.--left,::ng-deep tn-tree-table .table-border-line.--right{top:0;bottom:0;width:1px}::ng-deep tn-tree-table .table-border-line.--bottom,::ng-deep tn-tree-table .table-border-line.--top{left:0;right:0;height:1px}::ng-deep tn-tree-table .table-border-line.--left{left:0}::ng-deep tn-tree-table .table-border-line.--right{right:0}::ng-deep tn-tree-table .table-border-line.--top{top:0}::ng-deep tn-tree-table .table-border-line.--bottom{bottom:0}::ng-deep tn-tree-table .filter-boolean-box{text-align:center}::ng-deep tn-tree-table .filter-boolean-box .p-selectbutton{white-space:nowrap}::ng-deep tn-tree-table .custom-search-area crud-form{width:100%}::ng-deep tn-tree-table>p-contextmenu{display:none}"]
67
67
  },] }
68
68
  ];
69
69
  TreeTableComponent.ctorParameters = () => [
70
70
  { type: Injector }
71
71
  ];
72
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90bngtc2hhcmVkL3NyYy9saWIvY29tcG9uZW50cy9jcnVkL3RyZWUtdGFibGUvdHJlZS10YWJsZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFFNUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDOUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBTy9ELE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxpQkFBaUI7SUFDckQsWUFDSSxRQUFrQjtRQUVsQixLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRCxRQUFRO1FBQ0osTUFBTSxjQUFjLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUM3QyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFO1lBQzlCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQywyQkFBMkIsSUFBSSxjQUFjLENBQUMsMkJBQTJCO21CQUNuRixJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQywyQkFBMkIsSUFBSSxTQUFTO21CQUNyRSxJQUFJLENBQUMsT0FBTyxDQUFDLDJCQUEyQixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLDJCQUEyQixFQUFFO2dCQUN6RyxJQUFJLENBQUMsT0FBTyxDQUFDLDJCQUEyQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLDJCQUEyQixDQUFDO2FBQ3ZHO1NBQ0o7UUFDRCxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVNLGNBQWMsQ0FBQyxHQUFHO1FBQ3JCLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLG1CQUFtQixFQUFFO2FBQ3pDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLGlDQUFpQyxFQUFFLENBQUMsQ0FBQyxFQUFFO1lBQ3pFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ1osQ0FBQztJQUVELHlCQUF5QjtRQUNyQixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDZixhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ2hDO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsdUJBQXVCLEVBQUU7WUFDM0QsT0FBTztTQUNWO1FBQ0QscUNBQXFDO1FBQ3JDLGlIQUFpSDtRQUNqSCxxQkFBcUI7UUFDckIscURBQXFEO1FBQ3JELHdCQUF3QjtRQUN4Qiw4REFBOEQ7UUFDOUQsNEVBQTRFO1FBQzVFLDBCQUEwQjtRQUMxQixnQkFBZ0I7UUFDaEIsZ0VBQWdFO1FBQ2hFLFlBQVk7UUFDWiw2QkFBNkI7UUFDN0IsK0NBQStDO1FBQy9DLHFHQUFxRztRQUNyRyxtRUFBbUU7UUFDbkUsc0ZBQXNGO1FBQ3RGLG1GQUFtRjtRQUNuRiwrREFBK0Q7UUFDL0QsK0RBQStEO1FBQy9ELHdEQUF3RDtRQUN4RCwwREFBMEQ7UUFDMUQseURBQXlEO1FBQ3pELGtCQUFrQjtRQUVsQixRQUFRO1FBQ1IsYUFBYTtRQUNiLDRDQUE0QztRQUM1QyxRQUFRO1FBQ1IsVUFBVTtJQUNkLENBQUM7OztZQW5FSixTQUFTLFNBQUM7Z0JBQ1AsUUFBUSxFQUFFLGVBQWU7Z0JBQ3pCLHMzNkJBQTBDOzthQUU3Qzs7O1lBVG1CLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdG9yLCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElMaXN0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9iYXNlL2ktbGlzdC1jb21wb25lbnQnO1xuaW1wb3J0IHsgTGlzdENvbXBvbmVudEJhc2UgfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL2Jhc2UvbGlzdC1jb21wb25lbnQtYmFzZSc7XG5pbXBvcnQgeyBDcnVkTGlzdFNldHRpbmcgfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL2Zvcm0tc2NoZW1hJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd0bi10cmVlLXRhYmxlJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdHJlZS10YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vdHJlZS10YWJsZS5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFRyZWVUYWJsZUNvbXBvbmVudCBleHRlbmRzIExpc3RDb21wb25lbnRCYXNlIGltcGxlbWVudHMgSUxpc3RDb21wb25lbnQsIE9uSW5pdCB7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvclxuICAgICkge1xuICAgICAgICBzdXBlcihpbmplY3RvciwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRTZXR0aW5nID0gbmV3IENydWRMaXN0U2V0dGluZygpO1xuICAgICAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5jdXN0b21pemVVaSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5zaG93RXhwb3J0V29yZFNlbGVjdGVkSXRlbXMgPT0gZGVmYXVsdFNldHRpbmcuc2hvd0V4cG9ydFdvcmRTZWxlY3RlZEl0ZW1zXG4gICAgICAgICAgICAgICAgJiYgdGhpcy5lbnZpcm9ubWVudC5jdXN0b21pemVVaS5zaG93RXhwb3J0V29yZFNlbGVjdGVkSXRlbXMgIT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgJiYgdGhpcy5zZXR0aW5nLnNob3dFeHBvcnRXb3JkU2VsZWN0ZWRJdGVtcyAhPSB0aGlzLmVudmlyb25tZW50LmN1c3RvbWl6ZVVpLnNob3dFeHBvcnRXb3JkU2VsZWN0ZWRJdGVtcykge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5zaG93RXhwb3J0V29yZFNlbGVjdGVkSXRlbXMgPSB0aGlzLmVudmlyb25tZW50LmN1c3RvbWl6ZVVpLnNob3dFeHBvcnRXb3JkU2VsZWN0ZWRJdGVtcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYW5kbGVEYW5oTWFQQyhldnQpIHtcbiAgICAgICAgdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLnVwZGF0ZU1hUGhhbkNhcEJhc2UoKVxuICAgICAgICAgICAgLnRoZW4ocmVzID0+IHRoaXMuaGFuZGxlUmVzcG9uc2UocmVzLCAnxJDDoW5oIGzhuqFpIG3DoyBwaMOibiBj4bqlcCB0aMOgbmggY8O0bmcnLCBmID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbG9hZCgpO1xuICAgICAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIGFkanVzdFBvc2l0aW9uTG9hZGluZ01hc2soKSB7XG4gICAgICAgIGlmICh0aGlzLmludGVydmFsKSB7XG4gICAgICAgICAgICBjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5tb2RlbC5sb2FkaW5nIHx8IHRoaXMubW9kZWwuYWRqdXN0ZWRQb3NpdGlvbkxvYWRpbmcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyB0aGlzLmludGVydmFsID0gc2V0SW50ZXJ2YWwoZiA9PiB7XG4gICAgICAgIC8vICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy50YWJsZS5jb250YWluZXJWaWV3Q2hpbGQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcucC1kYXRhdGFibGUtbG9hZGluZy1vdmVybGF5Jyk7XG4gICAgICAgIC8vICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAvLyAgICAgICAgIGNvbnN0IHBhcmVudCA9IGVsZW1lbnQuY2xvc2VzdCgncC10YWJsZScpO1xuICAgICAgICAvLyAgICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgY29uc3Qgbm9kZVNjcm9sbEJhckNvbnRlbnQgPSBwYXJlbnQucGFyZW50Tm9kZTtcbiAgICAgICAgLy8gICAgICAgICAgICAgaWYgKCFub2RlU2Nyb2xsQmFyQ29udGVudC5jbGFzc0xpc3QuY29udGFpbnMoJ3BzLWNvbnRlbnQnKSkge1xuICAgICAgICAvLyAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAvLyAgICAgICAgICAgICB9XG4gICAgICAgIC8vICAgICAgICAgICAgIG5vZGVTY3JvbGxCYXJDb250ZW50LnBhcmVudE5vZGUucHJlcGVuZChlbGVtZW50KTtcbiAgICAgICAgLy8gICAgICAgICB9XG4gICAgICAgIC8vICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIC8vICAgICAgICAgICAgIGlmICghZWxlbWVudC5wYXJlbnROb2RlKSByZXR1cm47XG4gICAgICAgIC8vICAgICAgICAgICAgIGNvbnN0IGZpcnN0VGggPSBlbGVtZW50LnBhcmVudE5vZGUucXVlcnlTZWxlY3RvcigncC10YWJsZSB0aGVhZCB0cjpmaXJzdC1jaGlsZCA+IHRoJyk7XG4gICAgICAgIC8vICAgICAgICAgICAgIGNvbnN0IGZpcnN0VGhTaXplID0gZmlyc3RUaC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgLy8gICAgICAgICAgICAgY29uc3QgbG9hZGluZ0ljb24gPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5wLWRhdGF0YWJsZS1sb2FkaW5nLWljb24nKTtcbiAgICAgICAgLy8gICAgICAgICAgICAgY29uc3QgZm9udFNpemUgPSBwYXJzZUZsb2F0KGdldENvbXB1dGVkU3R5bGUobG9hZGluZ0ljb24pLmZvbnRTaXplKTtcbiAgICAgICAgLy8gICAgICAgICAgICAgY29uc3QgdG9wID0gKGZpcnN0VGhTaXplLmhlaWdodCAtIGZvbnRTaXplKSAvIDI7XG4gICAgICAgIC8vICAgICAgICAgICAgIGNvbnN0IGxlZnQgPSAoZmlyc3RUaFNpemUud2lkdGggLSBmb250U2l6ZSkgLyAyO1xuICAgICAgICAvLyAgICAgICAgICAgICBsb2FkaW5nSWNvbi5zdHlsZS5tYXJnaW5Ub3AgPSBgJHt0b3B9cHhgO1xuICAgICAgICAvLyAgICAgICAgICAgICBsb2FkaW5nSWNvbi5zdHlsZS5tYXJnaW5MZWZ0ID0gYCR7bGVmdH1weGA7XG4gICAgICAgIC8vICAgICAgICAgICAgIHRoaXMubW9kZWwuYWRqdXN0ZWRQb3NpdGlvbkxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAvLyAgICAgICAgIH0sIDIwKTtcblxuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyAgICAgZWxzZSB7XG4gICAgICAgIC8vICAgICAgICAgdGhpcy5hZGp1c3RQb3NpdGlvbkxvYWRpbmdNYXNrKCk7XG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vIH0sIDIwKTtcbiAgICB9XG59XG4iXX0=
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90bngtc2hhcmVkL3NyYy9saWIvY29tcG9uZW50cy9jcnVkL3RyZWUtdGFibGUvdHJlZS10YWJsZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFFNUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDOUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBTy9ELE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxpQkFBaUI7SUFDckQsWUFDSSxRQUFrQjtRQUVsQixLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRCxRQUFRO1FBQ0osTUFBTSxjQUFjLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUM3QyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFO1lBQzlCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQywyQkFBMkIsSUFBSSxjQUFjLENBQUMsMkJBQTJCO21CQUNuRixJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQywyQkFBMkIsSUFBSSxTQUFTO21CQUNyRSxJQUFJLENBQUMsT0FBTyxDQUFDLDJCQUEyQixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLDJCQUEyQixFQUFFO2dCQUN6RyxJQUFJLENBQUMsT0FBTyxDQUFDLDJCQUEyQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLDJCQUEyQixDQUFDO2FBQ3ZHO1NBQ0o7UUFDRCxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVNLGNBQWMsQ0FBQyxHQUFHO1FBQ3JCLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLG1CQUFtQixFQUFFO2FBQ3pDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLGlDQUFpQyxFQUFFLENBQUMsQ0FBQyxFQUFFO1lBQ3pFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ1osQ0FBQztJQUVELHlCQUF5QjtRQUNyQixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDZixhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ2hDO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsdUJBQXVCLEVBQUU7WUFDM0QsT0FBTztTQUNWO1FBQ0QscUNBQXFDO1FBQ3JDLGlIQUFpSDtRQUNqSCxxQkFBcUI7UUFDckIscURBQXFEO1FBQ3JELHdCQUF3QjtRQUN4Qiw4REFBOEQ7UUFDOUQsNEVBQTRFO1FBQzVFLDBCQUEwQjtRQUMxQixnQkFBZ0I7UUFDaEIsZ0VBQWdFO1FBQ2hFLFlBQVk7UUFDWiw2QkFBNkI7UUFDN0IsK0NBQStDO1FBQy9DLHFHQUFxRztRQUNyRyxtRUFBbUU7UUFDbkUsc0ZBQXNGO1FBQ3RGLG1GQUFtRjtRQUNuRiwrREFBK0Q7UUFDL0QsK0RBQStEO1FBQy9ELHdEQUF3RDtRQUN4RCwwREFBMEQ7UUFDMUQseURBQXlEO1FBQ3pELGtCQUFrQjtRQUVsQixRQUFRO1FBQ1IsYUFBYTtRQUNiLDRDQUE0QztRQUM1QyxRQUFRO1FBQ1IsVUFBVTtJQUNkLENBQUM7OztZQW5FSixTQUFTLFNBQUM7Z0JBQ1AsUUFBUSxFQUFFLGVBQWU7Z0JBQ3pCLG1pOEJBQTBDOzthQUU3Qzs7O1lBVG1CLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdG9yLCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElMaXN0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9iYXNlL2ktbGlzdC1jb21wb25lbnQnO1xuaW1wb3J0IHsgTGlzdENvbXBvbmVudEJhc2UgfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL2Jhc2UvbGlzdC1jb21wb25lbnQtYmFzZSc7XG5pbXBvcnQgeyBDcnVkTGlzdFNldHRpbmcgfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL2Zvcm0tc2NoZW1hJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd0bi10cmVlLXRhYmxlJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdHJlZS10YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vdHJlZS10YWJsZS5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFRyZWVUYWJsZUNvbXBvbmVudCBleHRlbmRzIExpc3RDb21wb25lbnRCYXNlIGltcGxlbWVudHMgSUxpc3RDb21wb25lbnQsIE9uSW5pdCB7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvclxuICAgICkge1xuICAgICAgICBzdXBlcihpbmplY3RvciwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRTZXR0aW5nID0gbmV3IENydWRMaXN0U2V0dGluZygpO1xuICAgICAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5jdXN0b21pemVVaSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5zaG93RXhwb3J0V29yZFNlbGVjdGVkSXRlbXMgPT0gZGVmYXVsdFNldHRpbmcuc2hvd0V4cG9ydFdvcmRTZWxlY3RlZEl0ZW1zXG4gICAgICAgICAgICAgICAgJiYgdGhpcy5lbnZpcm9ubWVudC5jdXN0b21pemVVaS5zaG93RXhwb3J0V29yZFNlbGVjdGVkSXRlbXMgIT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgJiYgdGhpcy5zZXR0aW5nLnNob3dFeHBvcnRXb3JkU2VsZWN0ZWRJdGVtcyAhPSB0aGlzLmVudmlyb25tZW50LmN1c3RvbWl6ZVVpLnNob3dFeHBvcnRXb3JkU2VsZWN0ZWRJdGVtcykge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5zaG93RXhwb3J0V29yZFNlbGVjdGVkSXRlbXMgPSB0aGlzLmVudmlyb25tZW50LmN1c3RvbWl6ZVVpLnNob3dFeHBvcnRXb3JkU2VsZWN0ZWRJdGVtcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYW5kbGVEYW5oTWFQQyhldnQpIHtcbiAgICAgICAgdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLnVwZGF0ZU1hUGhhbkNhcEJhc2UoKVxuICAgICAgICAgICAgLnRoZW4ocmVzID0+IHRoaXMuaGFuZGxlUmVzcG9uc2UocmVzLCAnxJDDoW5oIGzhuqFpIG3DoyBwaMOibiBj4bqlcCB0aMOgbmggY8O0bmcnLCBmID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbG9hZCgpO1xuICAgICAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIGFkanVzdFBvc2l0aW9uTG9hZGluZ01hc2soKSB7XG4gICAgICAgIGlmICh0aGlzLmludGVydmFsKSB7XG4gICAgICAgICAgICBjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5tb2RlbC5sb2FkaW5nIHx8IHRoaXMubW9kZWwuYWRqdXN0ZWRQb3NpdGlvbkxvYWRpbmcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyB0aGlzLmludGVydmFsID0gc2V0SW50ZXJ2YWwoZiA9PiB7XG4gICAgICAgIC8vICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy50YWJsZS5jb250YWluZXJWaWV3Q2hpbGQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcucC1kYXRhdGFibGUtbG9hZGluZy1vdmVybGF5Jyk7XG4gICAgICAgIC8vICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAvLyAgICAgICAgIGNvbnN0IHBhcmVudCA9IGVsZW1lbnQuY2xvc2VzdCgncC10YWJsZScpO1xuICAgICAgICAvLyAgICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgY29uc3Qgbm9kZVNjcm9sbEJhckNvbnRlbnQgPSBwYXJlbnQucGFyZW50Tm9kZTtcbiAgICAgICAgLy8gICAgICAgICAgICAgaWYgKCFub2RlU2Nyb2xsQmFyQ29udGVudC5jbGFzc0xpc3QuY29udGFpbnMoJ3BzLWNvbnRlbnQnKSkge1xuICAgICAgICAvLyAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAvLyAgICAgICAgICAgICB9XG4gICAgICAgIC8vICAgICAgICAgICAgIG5vZGVTY3JvbGxCYXJDb250ZW50LnBhcmVudE5vZGUucHJlcGVuZChlbGVtZW50KTtcbiAgICAgICAgLy8gICAgICAgICB9XG4gICAgICAgIC8vICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIC8vICAgICAgICAgICAgIGlmICghZWxlbWVudC5wYXJlbnROb2RlKSByZXR1cm47XG4gICAgICAgIC8vICAgICAgICAgICAgIGNvbnN0IGZpcnN0VGggPSBlbGVtZW50LnBhcmVudE5vZGUucXVlcnlTZWxlY3RvcigncC10YWJsZSB0aGVhZCB0cjpmaXJzdC1jaGlsZCA+IHRoJyk7XG4gICAgICAgIC8vICAgICAgICAgICAgIGNvbnN0IGZpcnN0VGhTaXplID0gZmlyc3RUaC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgLy8gICAgICAgICAgICAgY29uc3QgbG9hZGluZ0ljb24gPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5wLWRhdGF0YWJsZS1sb2FkaW5nLWljb24nKTtcbiAgICAgICAgLy8gICAgICAgICAgICAgY29uc3QgZm9udFNpemUgPSBwYXJzZUZsb2F0KGdldENvbXB1dGVkU3R5bGUobG9hZGluZ0ljb24pLmZvbnRTaXplKTtcbiAgICAgICAgLy8gICAgICAgICAgICAgY29uc3QgdG9wID0gKGZpcnN0VGhTaXplLmhlaWdodCAtIGZvbnRTaXplKSAvIDI7XG4gICAgICAgIC8vICAgICAgICAgICAgIGNvbnN0IGxlZnQgPSAoZmlyc3RUaFNpemUud2lkdGggLSBmb250U2l6ZSkgLyAyO1xuICAgICAgICAvLyAgICAgICAgICAgICBsb2FkaW5nSWNvbi5zdHlsZS5tYXJnaW5Ub3AgPSBgJHt0b3B9cHhgO1xuICAgICAgICAvLyAgICAgICAgICAgICBsb2FkaW5nSWNvbi5zdHlsZS5tYXJnaW5MZWZ0ID0gYCR7bGVmdH1weGA7XG4gICAgICAgIC8vICAgICAgICAgICAgIHRoaXMubW9kZWwuYWRqdXN0ZWRQb3NpdGlvbkxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAvLyAgICAgICAgIH0sIDIwKTtcblxuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyAgICAgZWxzZSB7XG4gICAgICAgIC8vICAgICAgICAgdGhpcy5hZGp1c3RQb3NpdGlvbkxvYWRpbmdNYXNrKCk7XG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vIH0sIDIwKTtcbiAgICB9XG59XG4iXX0=
@@ -38,7 +38,7 @@ export class GenericGuardService {
38
38
  top.location.href = '/';
39
39
  }
40
40
  else {
41
- top.location.href = '/access-denied';
41
+ top.location.href = window['baseHref'] + '/access-denied';
42
42
  }
43
43
  resolve(false);
44
44
  }
@@ -56,4 +56,4 @@ GenericGuardService.ctorParameters = () => [
56
56
  { type: PermissionService },
57
57
  { type: Injector }
58
58
  ];
59
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1ndWFyZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliL3NlcnZpY2VzL2dlbmVyaWMtZ3VhcmQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHckQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDdkYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7OztBQUt6RCxNQUFNLE9BQU8sbUJBQW1CO0lBSTVCLFlBQ1ksa0JBQXFDLEVBQ3JDLFNBQW1CO1FBRG5CLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBbUI7UUFDckMsY0FBUyxHQUFULFNBQVMsQ0FBVTtRQUp0QixZQUFPLEdBQUcsY0FBYyxDQUFDO0lBT2xDLENBQUM7SUFFRCxXQUFXLENBQUMsS0FBNkIsRUFBRSxLQUEwQjtRQUNqRSxPQUFPLElBQUksT0FBTyxDQUFDLENBQU8sT0FBTyxFQUFFLEVBQUU7WUFFakMsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1lBQzFFLE1BQU0sSUFBSSxHQUFHLG1CQUFtQixDQUFDLGNBQWMsRUFBRSxDQUFDO1lBRWxELElBQUksS0FBSyxDQUFDLEdBQUcsSUFBSSxHQUFHLEVBQUU7Z0JBQ2xCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDZCxPQUFPO2FBQ1Y7WUFFRCxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO21CQUMzQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3ZELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDZCxPQUFPO2FBQ1Y7WUFFRCx3Q0FBd0M7WUFDeEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUM7WUFDbEQsTUFBTSxVQUFVLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUVoSCxNQUFNLFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQ3JGLElBQUksWUFBWSxFQUFFO2dCQUNkLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNqQjtpQkFDSTtnQkFDRCw4RkFBOEY7Z0JBQzlGLE1BQU0sY0FBYyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztnQkFDOUQsSUFBSSxjQUFjLElBQUksY0FBYyxLQUFLLEVBQUUsSUFBSSxjQUFjLElBQUksTUFBTSxFQUFFO29CQUNyRSxZQUFZLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLENBQUM7b0JBQzFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztpQkFDM0I7cUJBQ0k7b0JBQ0QsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUM7aUJBQ3hDO2dCQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNsQjtZQUNELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQixDQUFDLENBQUEsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs7OztZQXJESixVQUFVLFNBQUM7Z0JBQ1IsVUFBVSxFQUFFLE1BQU07YUFDckI7OztZQUpRLGlCQUFpQjtZQUpMLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgQ2FuQWN0aXZhdGUsIFJvdXRlclN0YXRlU25hcHNob3QgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQgeyBBcHBsaWNhdGlvbkNvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vYXBwLWNvbnRleHQvYXBwbGljYXRpb24tY29udGV4dC5zZXJ2aWNlJztcbmltcG9ydCB7IFBlcm1pc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi9wZXJtaXNzaW9uLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEdlbmVyaWNHdWFyZFNlcnZpY2UgaW1wbGVtZW50cyBDYW5BY3RpdmF0ZSB7XG5cbiAgICByZWFkb25seSBzdG9yYWdlID0gc2Vzc2lvblN0b3JhZ2U7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfcGVybWlzc2lvblNlcnZpY2U6IFBlcm1pc3Npb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9pbmplY3RvcjogSW5qZWN0b3JcbiAgICApIHtcblxuICAgIH1cblxuICAgIGNhbkFjdGl2YXRlKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUpID0+IHtcblxuICAgICAgICAgICAgY29uc3QgX2FwcGxpY2F0aW9uQ29udGV4dCA9IHRoaXMuX2luamVjdG9yLmdldChBcHBsaWNhdGlvbkNvbnRleHRTZXJ2aWNlKTtcbiAgICAgICAgICAgIGNvbnN0IHJvb3QgPSBfYXBwbGljYXRpb25Db250ZXh0LmdldFJvb3RDb250ZXh0KCk7XG5cbiAgICAgICAgICAgIGlmIChzdGF0ZS51cmwgPT0gJy8nKSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICgodG9wLmxvY2F0aW9uLmhyZWYuaW5kZXhPZignL2Rhc2hib2FyZCcpID4gLTEpXG4gICAgICAgICAgICAgICAgfHwgKHRvcC5sb2NhdGlvbi5ocmVmLmluZGV4T2YoJy9hY2Nlc3MtZGVuaWVkJykgPiAtMSkpIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gdG9kbzogY8OybiBjYXNlIHPhu60gZOG7pW5nIGJp4bq/biB0cm9uZyB1cmxcbiAgICAgICAgICAgIGNvbnN0IHNlcnZpY2UgPSByb290LmRhdGEuY3VycmVudEFwcE1ldGFkYXRhLmNvZGU7XG4gICAgICAgICAgICBjb25zdCBwZXJtaXNzaW9uID0gYCR7cm9vdC5kYXRhLmN1cnJlbnRBcHBNZXRhZGF0YS5jb2RlfSR7c3RhdGUudXJsLnNwbGl0KCcjJylbMF0uc3BsaXQoJz8nKVswXX1gLnRvVXBwZXJDYXNlKCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGlzQXV0aG9yaXplZCA9IGF3YWl0IHRoaXMuX3Blcm1pc3Npb25TZXJ2aWNlLmlzQXV0aG9yaXplZChzZXJ2aWNlLCBwZXJtaXNzaW9uKTtcbiAgICAgICAgICAgIGlmIChpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdC4bqhbiBraMO0bmcgY8OzIHF1eeG7gW4gdHJ1eSBj4bqtcCB2w6BvIHRyYW5nIG7DoHknLCAnQ+G6o25oIGLDoW8nKTtcbiAgICAgICAgICAgICAgICBjb25zdCBmaXJzdFRpbWVMb2dpbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdmaXJzdFRpbWVMb2dpbicpO1xuICAgICAgICAgICAgICAgIGlmIChmaXJzdFRpbWVMb2dpbiAmJiBmaXJzdFRpbWVMb2dpbiAhPT0gJycgJiYgZmlyc3RUaW1lTG9naW4gPT0gJ3RydWUnKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdmaXJzdFRpbWVMb2dpbicpO1xuICAgICAgICAgICAgICAgICAgICB0b3AubG9jYXRpb24uaHJlZiA9ICcvJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRvcC5sb2NhdGlvbi5ocmVmID0gJy9hY2Nlc3MtZGVuaWVkJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1ndWFyZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliL3NlcnZpY2VzL2dlbmVyaWMtZ3VhcmQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHckQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDdkYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7OztBQUt6RCxNQUFNLE9BQU8sbUJBQW1CO0lBSTVCLFlBQ1ksa0JBQXFDLEVBQ3JDLFNBQW1CO1FBRG5CLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBbUI7UUFDckMsY0FBUyxHQUFULFNBQVMsQ0FBVTtRQUp0QixZQUFPLEdBQUcsY0FBYyxDQUFDO0lBT2xDLENBQUM7SUFFRCxXQUFXLENBQUMsS0FBNkIsRUFBRSxLQUEwQjtRQUNqRSxPQUFPLElBQUksT0FBTyxDQUFDLENBQU8sT0FBTyxFQUFFLEVBQUU7WUFFakMsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1lBQzFFLE1BQU0sSUFBSSxHQUFHLG1CQUFtQixDQUFDLGNBQWMsRUFBRSxDQUFDO1lBRWxELElBQUksS0FBSyxDQUFDLEdBQUcsSUFBSSxHQUFHLEVBQUU7Z0JBQ2xCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDZCxPQUFPO2FBQ1Y7WUFFRCxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO21CQUMzQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3ZELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDZCxPQUFPO2FBQ1Y7WUFFRCx3Q0FBd0M7WUFDeEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUM7WUFDbEQsTUFBTSxVQUFVLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUVoSCxNQUFNLFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQ3JGLElBQUksWUFBWSxFQUFFO2dCQUNkLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNqQjtpQkFDSTtnQkFDRCw4RkFBOEY7Z0JBQzlGLE1BQU0sY0FBYyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztnQkFDOUQsSUFBSSxjQUFjLElBQUksY0FBYyxLQUFLLEVBQUUsSUFBSSxjQUFjLElBQUksTUFBTSxFQUFFO29CQUNyRSxZQUFZLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLENBQUM7b0JBQzFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztpQkFDM0I7cUJBQ0k7b0JBQ0QsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLGdCQUFnQixDQUFDO2lCQUM3RDtnQkFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDbEI7WUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEIsQ0FBQyxDQUFBLENBQUMsQ0FBQztJQUNQLENBQUM7Ozs7WUFyREosVUFBVSxTQUFDO2dCQUNSLFVBQVUsRUFBRSxNQUFNO2FBQ3JCOzs7WUFKUSxpQkFBaUI7WUFKTCxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIENhbkFjdGl2YXRlLCBSb3V0ZXJTdGF0ZVNuYXBzaG90IH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHsgQXBwbGljYXRpb25Db250ZXh0U2VydmljZSB9IGZyb20gJy4uL2FwcC1jb250ZXh0L2FwcGxpY2F0aW9uLWNvbnRleHQuc2VydmljZSc7XG5pbXBvcnQgeyBQZXJtaXNzaW9uU2VydmljZSB9IGZyb20gJy4vcGVybWlzc2lvbi5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBHZW5lcmljR3VhcmRTZXJ2aWNlIGltcGxlbWVudHMgQ2FuQWN0aXZhdGUge1xuXG4gICAgcmVhZG9ubHkgc3RvcmFnZSA9IHNlc3Npb25TdG9yYWdlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX3Blcm1pc3Npb25TZXJ2aWNlOiBQZXJtaXNzaW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfaW5qZWN0b3I6IEluamVjdG9yXG4gICAgKSB7XG5cbiAgICB9XG5cbiAgICBjYW5BY3RpdmF0ZShyb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgc3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlKSA9PiB7XG5cbiAgICAgICAgICAgIGNvbnN0IF9hcHBsaWNhdGlvbkNvbnRleHQgPSB0aGlzLl9pbmplY3Rvci5nZXQoQXBwbGljYXRpb25Db250ZXh0U2VydmljZSk7XG4gICAgICAgICAgICBjb25zdCByb290ID0gX2FwcGxpY2F0aW9uQ29udGV4dC5nZXRSb290Q29udGV4dCgpO1xuXG4gICAgICAgICAgICBpZiAoc3RhdGUudXJsID09ICcvJykge1xuICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoKHRvcC5sb2NhdGlvbi5ocmVmLmluZGV4T2YoJy9kYXNoYm9hcmQnKSA+IC0xKVxuICAgICAgICAgICAgICAgIHx8ICh0b3AubG9jYXRpb24uaHJlZi5pbmRleE9mKCcvYWNjZXNzLWRlbmllZCcpID4gLTEpKSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHRvZG86IGPDsm4gY2FzZSBz4butIGThu6VuZyBiaeG6v24gdHJvbmcgdXJsXG4gICAgICAgICAgICBjb25zdCBzZXJ2aWNlID0gcm9vdC5kYXRhLmN1cnJlbnRBcHBNZXRhZGF0YS5jb2RlO1xuICAgICAgICAgICAgY29uc3QgcGVybWlzc2lvbiA9IGAke3Jvb3QuZGF0YS5jdXJyZW50QXBwTWV0YWRhdGEuY29kZX0ke3N0YXRlLnVybC5zcGxpdCgnIycpWzBdLnNwbGl0KCc/JylbMF19YC50b1VwcGVyQ2FzZSgpO1xuXG4gICAgICAgICAgICBjb25zdCBpc0F1dGhvcml6ZWQgPSBhd2FpdCB0aGlzLl9wZXJtaXNzaW9uU2VydmljZS5pc0F1dGhvcml6ZWQoc2VydmljZSwgcGVybWlzc2lvbik7XG4gICAgICAgICAgICBpZiAoaXNBdXRob3JpemVkKSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnQuG6oW4ga2jDtG5nIGPDsyBxdXnhu4FuIHRydXkgY+G6rXAgdsOgbyB0cmFuZyBuw6B5JywgJ0PhuqNuaCBiw6FvJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlyc3RUaW1lTG9naW4gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZmlyc3RUaW1lTG9naW4nKTtcbiAgICAgICAgICAgICAgICBpZiAoZmlyc3RUaW1lTG9naW4gJiYgZmlyc3RUaW1lTG9naW4gIT09ICcnICYmIGZpcnN0VGltZUxvZ2luID09ICd0cnVlJykge1xuICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnZmlyc3RUaW1lTG9naW4nKTtcbiAgICAgICAgICAgICAgICAgICAgdG9wLmxvY2F0aW9uLmhyZWYgPSAnLyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0b3AubG9jYXRpb24uaHJlZiA9IHdpbmRvd1snYmFzZUhyZWYnXSArICcvYWNjZXNzLWRlbmllZCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19