ngx-techlify-core 18.74.0 → 18.76.0
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.
- package/esm2022/lib/base-model/index.mjs +3 -2
- package/esm2022/lib/base-model/techlify-form/contract/techlify-form.contract.mjs +191 -0
- package/esm2022/lib/base-model/techlify-form/techlify-form.component.mjs +134 -0
- package/esm2022/lib/base-model/techlify-list/techlify-list.component.mjs +17 -2
- package/esm2022/lib/entity-files/entity-file-form/entity-file-form.component.mjs +76 -76
- package/esm2022/lib/entity-files/entity-file-list/entity-file-list.component.mjs +230 -0
- package/esm2022/lib/entity-files/entity-file-list.module.mjs +49 -0
- package/esm2022/lib/entity-files/index.mjs +2 -2
- package/esm2022/lib/pipes/file-size.pipe.mjs +21 -0
- package/esm2022/lib/role/permission/permissions-management.component.mjs +8 -5
- package/esm2022/lib/shared.module.mjs +57 -0
- package/esm2022/lib/subscription/subscription-form/subscription-form.component.mjs +2 -2
- package/esm2022/lib/subscription/subscription-package-listing/subscription-package-listing.component.mjs +1 -2
- package/esm2022/lib/techlify-view/techlify-view-form/techlify-view-form.component.mjs +2 -2
- package/esm2022/lib/user-tenant-accept-invitation/user-tenant-accept-invitation.component.mjs +27 -0
- package/esm2022/lib/user-tenant-accept-invitation/user-tenant-accept-invitation.service.mjs +18 -0
- package/esm2022/public-api.mjs +7 -2
- package/fesm2022/ngx-techlify-core.mjs +6312 -6071
- package/fesm2022/ngx-techlify-core.mjs.map +1 -1
- package/lib/base-model/index.d.ts +2 -1
- package/lib/base-model/techlify-form/contract/techlify-form.contract.d.ts +18 -0
- package/lib/base-model/{techlify-form.component.d.ts → techlify-form/techlify-form.component.d.ts} +3 -3
- package/lib/base-model/techlify-list/techlify-list.component.d.ts +3 -1
- package/lib/entity-files/entity-file-form/entity-file-form.component.d.ts +17 -20
- package/lib/entity-files/entity-file-list/entity-file-list.component.d.ts +67 -0
- package/lib/entity-files/entity-file-list.module.d.ts +15 -0
- package/lib/entity-files/index.d.ts +1 -1
- package/lib/pipes/file-size.pipe.d.ts +7 -0
- package/lib/shared.module.d.ts +15 -0
- package/lib/subscription/subscription-form/subscription-form.component.d.ts +1 -1
- package/lib/subscription/subscription-package-listing/subscription-package-listing.component.d.ts +0 -1
- package/lib/techlify-view/techlify-view-form/techlify-view-form.component.d.ts +1 -1
- package/lib/user-tenant-accept-invitation/user-tenant-accept-invitation.component.d.ts +14 -0
- package/lib/user-tenant-accept-invitation/user-tenant-accept-invitation.service.d.ts +8 -0
- package/package.json +1 -1
- package/public-api.d.ts +5 -1
- package/esm2022/lib/base-model/techlify-form.component.mjs +0 -132
- package/esm2022/lib/entity-files/entity-files-view-all.component.mjs +0 -277
- package/esm2022/lib/entity-files/entity-files-view-all.module.mjs +0 -76
- package/lib/entity-files/entity-files-view-all.component.d.ts +0 -67
- package/lib/entity-files/entity-files-view-all.module.d.ts +0 -22
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
export * from './techlify-form.component';
|
|
1
|
+
export * from './techlify-form/techlify-form.component';
|
|
2
|
+
export * from './techlify-form/contract/techlify-form.contract';
|
|
2
3
|
export * from './techlify-list/techlify-list.component';
|
|
3
4
|
export * from './techlify-list/contract/techlify-list.contract';
|
|
4
5
|
export * from './techlify-service';
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { TechlifyFormComponent } from '../techlify-form.component';
|
|
2
|
+
export interface TechlifyFormContractOptions {
|
|
3
|
+
getComponent: () => TechlifyFormComponent;
|
|
4
|
+
getService: () => any;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Reusable test contract for components extending TechlifyFormComponent.
|
|
8
|
+
*
|
|
9
|
+
* Ensures all form components follow the same base behaviour:
|
|
10
|
+
* - Service injection
|
|
11
|
+
* - Default state initialization
|
|
12
|
+
* - Create/update submission flow
|
|
13
|
+
* - Form validation handling
|
|
14
|
+
* - Success event handling
|
|
15
|
+
* - Dialog handling
|
|
16
|
+
* - Field helper methods
|
|
17
|
+
*/
|
|
18
|
+
export declare function techlifyFormContract(options: TechlifyFormContractOptions): void;
|
package/lib/base-model/{techlify-form.component.d.ts → techlify-form/techlify-form.component.d.ts}
RENAMED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { UntypedFormGroup } from '@angular/forms';
|
|
2
|
-
import { FormValidatorService } from '
|
|
2
|
+
import { FormValidatorService } from '../../core/form-validator.service';
|
|
3
3
|
import { EventEmitter } from '@angular/core';
|
|
4
|
-
import { TechlifyService } from '
|
|
4
|
+
import { TechlifyService } from '../techlify-service';
|
|
5
5
|
import { MatDialogRef } from '@angular/material/dialog';
|
|
6
|
-
import { AlertService } from '
|
|
6
|
+
import { AlertService } from '../../core/alert.service';
|
|
7
7
|
import * as i0 from "@angular/core";
|
|
8
8
|
/**
|
|
9
9
|
* Interface used to ensure we have a consistent structure across our form components
|
|
@@ -21,10 +21,12 @@ export declare abstract class TechlifyListComponent {
|
|
|
21
21
|
page: number;
|
|
22
22
|
perPage: number;
|
|
23
23
|
lastPage: number;
|
|
24
|
-
isWorking: boolean;
|
|
25
24
|
filterForm: any;
|
|
26
25
|
isViewLoaded: boolean;
|
|
27
26
|
columnConfigs: ColumnConfig[];
|
|
27
|
+
_isWorking: boolean;
|
|
28
|
+
get isWorking(): boolean;
|
|
29
|
+
set isWorking(value: boolean);
|
|
28
30
|
filters: any;
|
|
29
31
|
/**
|
|
30
32
|
* Boolean to turn off, if we don't want to patch filters from route.
|
|
@@ -1,45 +1,42 @@
|
|
|
1
1
|
import { OnInit } from "@angular/core";
|
|
2
|
+
import { DatePipe } from "@angular/common";
|
|
2
3
|
import { MatDialogRef } from "@angular/material/dialog";
|
|
3
|
-
import {
|
|
4
|
+
import { UntypedFormBuilder } from "@angular/forms";
|
|
4
5
|
import { EntityFileService } from '../entity-file.service';
|
|
5
6
|
import { FileDropperConfig } from '../../file-dropper/file-dropper.model';
|
|
6
7
|
import { ViewerConfig } from '../../document-viewer/viewer-config.model';
|
|
7
8
|
import { FormValidatorService } from '../../core/form-validator.service';
|
|
8
|
-
import {
|
|
9
|
+
import { TechlifyFormComponent } from '../../base-model';
|
|
10
|
+
import { FormConfigurationFormService } from '../../form-configuration/form-configuration-form.service';
|
|
11
|
+
import { FormConfigurationUtilityService } from '../../form-configuration/form-configuration-utility.service';
|
|
9
12
|
import { TechlifyTaggerTagFormConfigModel } from "../../tag/techlify-tagger-tag-form-field/techlify-tagger-tag-form-config.model";
|
|
10
13
|
import * as i0 from "@angular/core";
|
|
11
|
-
export declare class EntityFileFormComponent implements OnInit {
|
|
14
|
+
export declare class EntityFileFormComponent extends TechlifyFormComponent implements OnInit {
|
|
12
15
|
dialogRef: MatDialogRef<EntityFileFormComponent>;
|
|
13
16
|
data: any;
|
|
14
|
-
|
|
17
|
+
protected formValidatorService: FormValidatorService;
|
|
18
|
+
protected service: EntityFileService;
|
|
15
19
|
private fb;
|
|
16
|
-
private
|
|
17
|
-
private
|
|
18
|
-
|
|
19
|
-
assignmentFileFirstAttempt: boolean;
|
|
20
|
-
updateMode: boolean;
|
|
20
|
+
private formConfigService;
|
|
21
|
+
private datePipe;
|
|
22
|
+
errorMessages: any;
|
|
21
23
|
fileConfig: FileDropperConfig;
|
|
22
24
|
fileList: any[];
|
|
23
25
|
viewerConfig: ViewerConfig;
|
|
24
26
|
hideTitleAndDetails: boolean;
|
|
25
|
-
isSaving: boolean;
|
|
26
|
-
/**
|
|
27
|
-
* Should we allow tagging entity-files?
|
|
28
|
-
*/
|
|
29
27
|
useTechlifyTags: boolean;
|
|
30
28
|
techlifyTagCategories: string[];
|
|
31
29
|
techlifyTagConfig: TechlifyTaggerTagFormConfigModel;
|
|
32
|
-
|
|
33
|
-
|
|
30
|
+
formConfigurationUtilityService: FormConfigurationUtilityService;
|
|
31
|
+
isFormConfigurationLoaded: boolean;
|
|
32
|
+
constructor(dialogRef: MatDialogRef<EntityFileFormComponent>, data: any, formValidatorService: FormValidatorService, service: EntityFileService, fb: UntypedFormBuilder, formConfigService: FormConfigurationFormService, datePipe: DatePipe);
|
|
34
33
|
private createForm;
|
|
35
34
|
ngOnInit(): void;
|
|
36
|
-
|
|
35
|
+
private initializeFormConfiguration;
|
|
36
|
+
submit(model?: any): void;
|
|
37
|
+
finalisedResponse(response: any): void;
|
|
37
38
|
fileChanged(event: any): Promise<void>;
|
|
38
39
|
removeFile(): Promise<void>;
|
|
39
|
-
/**Method to evaluate form fields*/
|
|
40
|
-
isFieldValid(field: string): any;
|
|
41
|
-
/**Method to find error in form fields*/
|
|
42
|
-
getErrorMessage(field: string): any;
|
|
43
40
|
static ɵfac: i0.ɵɵFactoryDeclaration<EntityFileFormComponent, never>;
|
|
44
41
|
static ɵcmp: i0.ɵɵComponentDeclaration<EntityFileFormComponent, "entity-file-form", never, {}, {}, never, never, false, never>;
|
|
45
42
|
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { OnInit } from '@angular/core';
|
|
2
|
+
import { EntityFileFormComponent } from '../entity-file-form/entity-file-form.component';
|
|
3
|
+
import { EntityFileService } from '../entity-file.service';
|
|
4
|
+
import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms';
|
|
5
|
+
import { AlertService } from '../../core/alert.service';
|
|
6
|
+
import { ViewerConfig } from '../../document-viewer/viewer-config.model';
|
|
7
|
+
import { FileDropperConfig } from '../../file-dropper';
|
|
8
|
+
import { ErrorHandlerService } from '../../core/error-handler.service';
|
|
9
|
+
import { TechlifyTaggerTagFormConfigModel } from "../../tag/techlify-tagger-tag-form-field/techlify-tagger-tag-form-config.model";
|
|
10
|
+
import { TechlifyListComponent } from '../../base-model';
|
|
11
|
+
import { NgxPermissionsService } from 'ngx-permissions';
|
|
12
|
+
import * as i0 from "@angular/core";
|
|
13
|
+
/**
|
|
14
|
+
* We are using both app-entity-file-list and app-entity-files-view-all
|
|
15
|
+
* to ensure backward compatibility with older projects `ngx-techlify-documents, ngx-techlify-checksheets`
|
|
16
|
+
* etc. `app-entity-files-view-all` will be removed by `v18.80.0`
|
|
17
|
+
*/
|
|
18
|
+
export declare class EntityFileListComponent extends TechlifyListComponent implements OnInit {
|
|
19
|
+
service: EntityFileService;
|
|
20
|
+
private alertService;
|
|
21
|
+
private fb;
|
|
22
|
+
private errorHandler;
|
|
23
|
+
private permissionsService;
|
|
24
|
+
entityId: number;
|
|
25
|
+
entityType: string;
|
|
26
|
+
viewOnly: boolean;
|
|
27
|
+
removeSearch: boolean;
|
|
28
|
+
hideTitleAndDetails: boolean;
|
|
29
|
+
displayMode: boolean;
|
|
30
|
+
allowMultipleFiles: boolean;
|
|
31
|
+
allowBulkUpdate: boolean;
|
|
32
|
+
viewMode: 'list' | 'timeline';
|
|
33
|
+
fileDropperHeight: string;
|
|
34
|
+
isShowDragDropSection: boolean;
|
|
35
|
+
set isFilterPatchFromRoute(value: boolean);
|
|
36
|
+
get isFilterPatchFromRoute(): boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Should we allow tagging entity-files?
|
|
39
|
+
*/
|
|
40
|
+
useTechlifyTags: boolean;
|
|
41
|
+
techlifyTagCategories: string[];
|
|
42
|
+
techlifyTagConfig: TechlifyTaggerTagFormConfigModel;
|
|
43
|
+
entityFileForm: import("@angular/core").WritableSignal<typeof EntityFileFormComponent>;
|
|
44
|
+
formData: Record<string, any>;
|
|
45
|
+
viewerConfig: ViewerConfig;
|
|
46
|
+
title: string;
|
|
47
|
+
displayedColumns: string[];
|
|
48
|
+
fileConfig: FileDropperConfig;
|
|
49
|
+
updateRowForm: UntypedFormGroup;
|
|
50
|
+
isShowCreateAction: boolean;
|
|
51
|
+
isShowUpdateAction: boolean;
|
|
52
|
+
isShowDeleteAction: boolean;
|
|
53
|
+
isShowReadAction: boolean;
|
|
54
|
+
permission: {
|
|
55
|
+
create: string;
|
|
56
|
+
update: string;
|
|
57
|
+
delete: string;
|
|
58
|
+
read: string;
|
|
59
|
+
};
|
|
60
|
+
constructor(service: EntityFileService, alertService: AlertService, fb: UntypedFormBuilder, errorHandler: ErrorHandlerService, permissionsService: NgxPermissionsService);
|
|
61
|
+
ngOnInit(): Promise<void>;
|
|
62
|
+
loadData(): void;
|
|
63
|
+
fileChanged(event: any): Promise<void>;
|
|
64
|
+
bulkUpdate(fieldName: any): Promise<void>;
|
|
65
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<EntityFileListComponent, never>;
|
|
66
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<EntityFileListComponent, "app-entity-file-list, app-entity-files-view-all", never, { "entityId": { "alias": "entityId"; "required": false; }; "entityType": { "alias": "entityType"; "required": false; }; "viewOnly": { "alias": "viewOnly"; "required": false; }; "removeSearch": { "alias": "removeSearch"; "required": false; }; "hideTitleAndDetails": { "alias": "hideTitleAndDetails"; "required": false; }; "displayMode": { "alias": "displayMode"; "required": false; }; "allowMultipleFiles": { "alias": "allowMultipleFiles"; "required": false; }; "allowBulkUpdate": { "alias": "allowBulkUpdate"; "required": false; }; "viewMode": { "alias": "viewMode"; "required": false; }; "fileDropperHeight": { "alias": "fileDropperHeight"; "required": false; }; "isShowDragDropSection": { "alias": "isShowDragDropSection"; "required": false; }; "isFilterPatchFromRoute": { "alias": "isFilterPatchFromRoute"; "required": false; }; "useTechlifyTags": { "alias": "useTechlifyTags"; "required": false; }; "techlifyTagCategories": { "alias": "techlifyTagCategories"; "required": false; }; "techlifyTagConfig": { "alias": "techlifyTagConfig"; "required": false; }; "title": { "alias": "title"; "required": false; }; "permission": { "alias": "permission"; "required": false; }; }, {}, never, never, false, never>;
|
|
67
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
import * as i1 from "./entity-file-form/entity-file-form.component";
|
|
3
|
+
import * as i2 from "./entity-file-list/entity-file-list.component";
|
|
4
|
+
import * as i3 from "../shared.module";
|
|
5
|
+
import * as i4 from "../file-dropper/file-dropper.module";
|
|
6
|
+
import * as i5 from "../document-viewer/document-viewer.module";
|
|
7
|
+
import * as i6 from "../tag/techlify-tagger-tag-form-field/techlify-tagger-tag-form-field.module";
|
|
8
|
+
import * as i7 from "../read-more/read-more.module";
|
|
9
|
+
import * as i8 from "../pipes/wrap.pipe";
|
|
10
|
+
import * as i9 from "../pipes/file-size.pipe";
|
|
11
|
+
export declare class EntityFileListModule {
|
|
12
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<EntityFileListModule, never>;
|
|
13
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<EntityFileListModule, [typeof i1.EntityFileFormComponent, typeof i2.EntityFileListComponent], [typeof i3.SharedModule, typeof i4.FileDropperModule, typeof i5.DocumentViewerModule, typeof i6.TechlifyTaggerTagFormFieldModule, typeof i7.ReadMoreModule, typeof i8.WrapPipe, typeof i9.FileSizePipe], [typeof i2.EntityFileListComponent]>;
|
|
14
|
+
static ɵinj: i0.ɵɵInjectorDeclaration<EntityFileListModule>;
|
|
15
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { PipeTransform } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export declare class FileSizePipe implements PipeTransform {
|
|
4
|
+
transform(bytes: any): string;
|
|
5
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<FileSizePipe, never>;
|
|
6
|
+
static ɵpipe: i0.ɵɵPipeDeclaration<FileSizePipe, "fileSize", true>;
|
|
7
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
import * as i1 from "ngx-infinite-scroll";
|
|
3
|
+
import * as i2 from "./delete-button/techlify-delete-button.component";
|
|
4
|
+
import * as i3 from "./form-button/techlify-form-button.component";
|
|
5
|
+
import * as i4 from "@angular/common";
|
|
6
|
+
import * as i5 from "./form-configuration/form-configuration-for-form/form-configuration-for-form.module";
|
|
7
|
+
import * as i6 from "@angular/forms";
|
|
8
|
+
import * as i7 from "./material.module";
|
|
9
|
+
import * as i8 from "./searchable-selector/searchable-selector.module";
|
|
10
|
+
import * as i9 from "./techlify-icon/techlify-icon.module";
|
|
11
|
+
export declare class SharedModule {
|
|
12
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SharedModule, never>;
|
|
13
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<SharedModule, never, [typeof i1.InfiniteScrollDirective, typeof i2.TechlifyDeleteButtonComponent, typeof i3.TechlifyFormButtonComponent], [typeof i4.CommonModule, typeof i5.FormConfigurationForFormModule, typeof i6.FormsModule, typeof i1.InfiniteScrollDirective, typeof i7.MaterialModule, typeof i6.ReactiveFormsModule, typeof i8.SearchableSelectorModule, typeof i2.TechlifyDeleteButtonComponent, typeof i3.TechlifyFormButtonComponent, typeof i9.TechlifyIconModule]>;
|
|
14
|
+
static ɵinj: i0.ɵɵInjectorDeclaration<SharedModule>;
|
|
15
|
+
}
|
|
@@ -2,7 +2,7 @@ import { EventEmitter, OnInit, TemplateRef } from '@angular/core';
|
|
|
2
2
|
import { MatDialog, MatDialogRef } from '@angular/material/dialog';
|
|
3
3
|
import { UntypedFormBuilder } from '@angular/forms';
|
|
4
4
|
import { SubscriptionService } from '../subscription.service';
|
|
5
|
-
import { TechlifyFormComponent } from '../../base-model/techlify-form.component';
|
|
5
|
+
import { TechlifyFormComponent } from '../../base-model/techlify-form/techlify-form.component';
|
|
6
6
|
import { FormValidatorService } from '../../core/form-validator.service';
|
|
7
7
|
import * as i0 from "@angular/core";
|
|
8
8
|
export declare class SubscriptionFormComponent extends TechlifyFormComponent implements OnInit {
|
package/lib/subscription/subscription-package-listing/subscription-package-listing.component.d.ts
CHANGED
|
@@ -14,7 +14,6 @@ export declare class SubscriptionPackageListingComponent extends TechlifyListCom
|
|
|
14
14
|
private dialog;
|
|
15
15
|
private fb;
|
|
16
16
|
displayedColumns: string[];
|
|
17
|
-
isWorking: boolean;
|
|
18
17
|
filterFormGroup: UntypedFormGroup;
|
|
19
18
|
constructor(subscriptionPackageService: SubscriptionPackageService, activatedRoute: ActivatedRoute, filterService: FilterService, router: Router, dialog: MatDialog, fb: UntypedFormBuilder);
|
|
20
19
|
ngOnInit(): void;
|
|
@@ -2,7 +2,7 @@ import { EventEmitter, OnInit, TemplateRef } from '@angular/core';
|
|
|
2
2
|
import { MatDialog, MatDialogRef } from '@angular/material/dialog';
|
|
3
3
|
import { UntypedFormBuilder } from '@angular/forms';
|
|
4
4
|
import { TechlifyViewService } from '../techlify-view.service';
|
|
5
|
-
import { TechlifyFormComponent } from '../../base-model/techlify-form.component';
|
|
5
|
+
import { TechlifyFormComponent } from '../../base-model/techlify-form/techlify-form.component';
|
|
6
6
|
import { FormValidatorService } from '../../core/form-validator.service';
|
|
7
7
|
import * as i0 from "@angular/core";
|
|
8
8
|
export declare class TechlifyViewFormComponent extends TechlifyFormComponent implements OnInit {
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { OnInit } from '@angular/core';
|
|
2
|
+
import { ActivatedRoute } from '@angular/router';
|
|
3
|
+
import { UserTenantAcceptInvitationService } from './user-tenant-accept-invitation.service';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export declare class UserTenantAcceptInvitationComponent implements OnInit {
|
|
6
|
+
private activatedRoute;
|
|
7
|
+
private userTenantAcceptInvitationService;
|
|
8
|
+
invitationCode?: string;
|
|
9
|
+
userTenant: any;
|
|
10
|
+
constructor(activatedRoute: ActivatedRoute, userTenantAcceptInvitationService: UserTenantAcceptInvitationService);
|
|
11
|
+
ngOnInit(): void;
|
|
12
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<UserTenantAcceptInvitationComponent, never>;
|
|
13
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<UserTenantAcceptInvitationComponent, "app-user-tenant-accept-invitation", never, {}, {}, never, never, true, never>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { TechlifyService } from '../base-model/techlify-service';
|
|
2
|
+
import { HttpService } from '../core/http.service';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class UserTenantAcceptInvitationService extends TechlifyService {
|
|
5
|
+
constructor(http: HttpService);
|
|
6
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<UserTenantAcceptInvitationService, never>;
|
|
7
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<UserTenantAcceptInvitationService>;
|
|
8
|
+
}
|
package/package.json
CHANGED
package/public-api.d.ts
CHANGED
|
@@ -15,7 +15,9 @@ export * from './lib/core/core.module';
|
|
|
15
15
|
export * from './lib/action-popup/action-popup.module';
|
|
16
16
|
export * from './lib/data-table/data-table.module';
|
|
17
17
|
export * from './lib/document-viewer/document-viewer.module';
|
|
18
|
-
export * from './lib/entity-files/entity-
|
|
18
|
+
export * from './lib/entity-files/entity-file-list.module';
|
|
19
|
+
/** @deprecated use EntityFileListModule — kept because ngx-techlify-checksheet still imports the old name */
|
|
20
|
+
export { EntityFileListModule as EntityFilesViewAllModule } from './lib/entity-files/entity-file-list.module';
|
|
19
21
|
export * from './lib/file-dropper/file-dropper.module';
|
|
20
22
|
export * from './lib/note/note.module';
|
|
21
23
|
export * from './lib/searchable-selector/searchable-selector.module';
|
|
@@ -202,3 +204,5 @@ export * from './lib/tag/techlify-tagger-tag-form/techlify-tagger-tag-form.compo
|
|
|
202
204
|
export * from './lib/tag/tag.service';
|
|
203
205
|
export * from './lib/techlify-auto-complete-select/techlify-auto-complete-select.component';
|
|
204
206
|
export * from './lib/techlify-currency-pipe/techlify-currency-pipe.directive';
|
|
207
|
+
export * from './lib/user-tenant-accept-invitation/user-tenant-accept-invitation.component';
|
|
208
|
+
export * from './lib/user-tenant-accept-invitation/user-tenant-accept-invitation.service';
|
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
import { Directive, EventEmitter, inject, Input, Optional, Output } from '@angular/core';
|
|
2
|
-
import { finalize } from 'rxjs';
|
|
3
|
-
import { AlertService } from '../core/alert.service';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "../core/form-validator.service";
|
|
6
|
-
import * as i2 from "./techlify-service";
|
|
7
|
-
/**
|
|
8
|
-
* Interface used to ensure we have a consistent structure across our form components
|
|
9
|
-
*
|
|
10
|
-
* It also provides some abstraction of repeated code to reduce our codebase size
|
|
11
|
-
*
|
|
12
|
-
* @todo This should be moved to ngx-techlify-core
|
|
13
|
-
*
|
|
14
|
-
* Advantages of this abstract class
|
|
15
|
-
* - Less code, less maintenance, less bugs
|
|
16
|
-
* - more consistent code
|
|
17
|
-
* - comments on more code
|
|
18
|
-
* - save time, save energy
|
|
19
|
-
*/
|
|
20
|
-
export class TechlifyFormComponent {
|
|
21
|
-
constructor(formValidatorService, service) {
|
|
22
|
-
this.formValidatorService = formValidatorService;
|
|
23
|
-
this.service = service;
|
|
24
|
-
//Boolean to denote the form is in API progress
|
|
25
|
-
this.isWorking = false;
|
|
26
|
-
//Array of created multiple entries
|
|
27
|
-
this.createdEntries = [];
|
|
28
|
-
//Boolean to denote if form is in update mode
|
|
29
|
-
this.isUpdate = false;
|
|
30
|
-
//Boolean to denote if form has ability to create multiple entries
|
|
31
|
-
this.isAllowCreateAnother = true;
|
|
32
|
-
//Emits an event once form submit is success
|
|
33
|
-
this.success = new EventEmitter();
|
|
34
|
-
//Injected alert service
|
|
35
|
-
this.alertService = inject(AlertService, { optional: true });
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Submits the form
|
|
39
|
-
* @param model form model optional, if needed to be overriden
|
|
40
|
-
* @returns
|
|
41
|
-
*/
|
|
42
|
-
submit(model) {
|
|
43
|
-
this.form.markAllAsTouched();
|
|
44
|
-
if (!this.service) {
|
|
45
|
-
throw new Error(`${this.constructor.name}: Service is required to submit the form`);
|
|
46
|
-
}
|
|
47
|
-
if (!this.form.valid) {
|
|
48
|
-
return;
|
|
49
|
-
}
|
|
50
|
-
if (!model) {
|
|
51
|
-
model = this.form.value;
|
|
52
|
-
}
|
|
53
|
-
this.isWorking = true;
|
|
54
|
-
(this.isUpdate ?
|
|
55
|
-
this.service.update(model) :
|
|
56
|
-
this.service.store(model))
|
|
57
|
-
.pipe(finalize(() => this.isWorking = false))
|
|
58
|
-
.subscribe((res) => {
|
|
59
|
-
this.createdEntries.unshift(res?.item);
|
|
60
|
-
if (model?.is_create_another) {
|
|
61
|
-
this.alertService.addAlert('Successfully Created', 'success');
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
64
|
-
if (this.isUpdate) {
|
|
65
|
-
this.finalisedResponse(res?.item);
|
|
66
|
-
}
|
|
67
|
-
else {
|
|
68
|
-
this.finalisedResponse((this.createdEntries.length == 1) ? this.createdEntries[0] : this.createdEntries);
|
|
69
|
-
}
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
//Send uniformed finalised response for both form button and dialog
|
|
73
|
-
finalisedResponse(response) {
|
|
74
|
-
this.success.emit(response);
|
|
75
|
-
if (this.dialogRef) {
|
|
76
|
-
this.dialogRef.close(response);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
/**
|
|
80
|
-
* Close the active dialog
|
|
81
|
-
*/
|
|
82
|
-
closeDialog() {
|
|
83
|
-
if (this.createdEntries?.length > 0) {
|
|
84
|
-
this.success.emit(this.createdEntries);
|
|
85
|
-
}
|
|
86
|
-
this.dialogRef.close();
|
|
87
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* Resets the value of a field in the HTML form
|
|
90
|
-
*
|
|
91
|
-
* @param event
|
|
92
|
-
* @param field
|
|
93
|
-
*/
|
|
94
|
-
resetFieldValue(event, field) {
|
|
95
|
-
this.form?.get(field)?.setValue('');
|
|
96
|
-
}
|
|
97
|
-
/**
|
|
98
|
-
* Retrieves the value of a field from the HTML form
|
|
99
|
-
*
|
|
100
|
-
* @param field
|
|
101
|
-
* @returns
|
|
102
|
-
*/
|
|
103
|
-
getFieldValue(field) {
|
|
104
|
-
return this.form?.get(field)?.value;
|
|
105
|
-
}
|
|
106
|
-
/**
|
|
107
|
-
* Method to evaluate form fields
|
|
108
|
-
* */
|
|
109
|
-
isFieldValid(field) {
|
|
110
|
-
return this.formValidatorService.isFieldValid(field, this.form);
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* Method to find error in form fields
|
|
114
|
-
* */
|
|
115
|
-
getErrorMessage(field) {
|
|
116
|
-
return this.formValidatorService.getErrorMessage(field, this.form, this.errorMessages);
|
|
117
|
-
}
|
|
118
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TechlifyFormComponent, deps: [{ token: i1.FormValidatorService }, { token: i2.TechlifyService, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
119
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: TechlifyFormComponent, inputs: { isUpdate: "isUpdate", isAllowCreateAnother: "isAllowCreateAnother" }, outputs: { success: "success" }, ngImport: i0 }); }
|
|
120
|
-
}
|
|
121
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TechlifyFormComponent, decorators: [{
|
|
122
|
-
type: Directive
|
|
123
|
-
}], ctorParameters: () => [{ type: i1.FormValidatorService }, { type: i2.TechlifyService, decorators: [{
|
|
124
|
-
type: Optional
|
|
125
|
-
}] }], propDecorators: { isUpdate: [{
|
|
126
|
-
type: Input
|
|
127
|
-
}], isAllowCreateAnother: [{
|
|
128
|
-
type: Input
|
|
129
|
-
}], success: [{
|
|
130
|
-
type: Output
|
|
131
|
-
}] } });
|
|
132
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVjaGxpZnktZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGVjaGxpZnktY29yZS9zcmMvbGliL2Jhc2UtbW9kZWwvdGVjaGxpZnktZm9ybS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFaEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7O0FBRXJEOzs7Ozs7Ozs7Ozs7R0FZRztBQUVILE1BQU0sT0FBZ0IscUJBQXFCO0lBNkJ6QyxZQUNZLG9CQUEwQyxFQUM5QixPQUF5QjtRQURyQyx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO1FBQzlCLFlBQU8sR0FBUCxPQUFPLENBQWtCO1FBdkJqRCwrQ0FBK0M7UUFDL0MsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUszQixtQ0FBbUM7UUFDbkMsbUJBQWMsR0FBUSxFQUFFLENBQUM7UUFFekIsNkNBQTZDO1FBQ3BDLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFFbkMsa0VBQWtFO1FBQ3pELHlCQUFvQixHQUFZLElBQUksQ0FBQztRQUU5Qyw0Q0FBNEM7UUFDbEMsWUFBTyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFFNUMsd0JBQXdCO1FBQ2QsaUJBQVksR0FBRyxNQUFNLENBQUMsWUFBWSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFNbEUsQ0FBQztJQUNEOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsS0FBVztRQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLElB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QUM7SUFFRDs7U0FFSztJQUNMLGVBQWUsQ0FBQyxLQUFhO1FBQzNCLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDekYsQ0FBQzsrR0E5SG1CLHFCQUFxQjttR0FBckIscUJBQXFCOzs0RkFBckIscUJBQXFCO2tCQUQxQyxTQUFTOzswQkFnQ0wsUUFBUTt5Q0FiRixRQUFRO3NCQUFoQixLQUFLO2dCQUdHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFHSSxPQUFPO3NCQUFoQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVW50eXBlZEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZvcm1WYWxpZGF0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS9mb3JtLXZhbGlkYXRvci5zZXJ2aWNlJztcbmltcG9ydCB7IERpcmVjdGl2ZSwgRXZlbnRFbWl0dGVyLCBpbmplY3QsIElucHV0LCBPcHRpb25hbCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUZWNobGlmeVNlcnZpY2UgfSBmcm9tICcuL3RlY2hsaWZ5LXNlcnZpY2UnO1xuaW1wb3J0IHsgZmluYWxpemUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBBbGVydFNlcnZpY2UgfSBmcm9tICcuLi9jb3JlL2FsZXJ0LnNlcnZpY2UnO1xuXG4vKipcbiAqIEludGVyZmFjZSB1c2VkIHRvIGVuc3VyZSB3ZSBoYXZlIGEgY29uc2lzdGVudCBzdHJ1Y3R1cmUgYWNyb3NzIG91ciBmb3JtIGNvbXBvbmVudHNcbiAqXG4gKiBJdCBhbHNvIHByb3ZpZGVzIHNvbWUgYWJzdHJhY3Rpb24gb2YgcmVwZWF0ZWQgY29kZSB0byByZWR1Y2Ugb3VyIGNvZGViYXNlIHNpemVcbiAqXG4gKiBAdG9kbyBUaGlzIHNob3VsZCBiZSBtb3ZlZCB0byBuZ3gtdGVjaGxpZnktY29yZVxuICpcbiAqIEFkdmFudGFnZXMgb2YgdGhpcyBhYnN0cmFjdCBjbGFzc1xuICogLSBMZXNzIGNvZGUsIGxlc3MgbWFpbnRlbmFuY2UsIGxlc3MgYnVnc1xuICogLSBtb3JlIGNvbnNpc3RlbnQgY29kZVxuICogLSBjb21tZW50cyBvbiBtb3JlIGNvZGVcbiAqIC0gc2F2ZSB0aW1lLCBzYXZlIGVuZXJneVxuICovXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBUZWNobGlmeUZvcm1Db21wb25lbnQge1xuXG4gIC8vRm9ybSBidWlsZGVyIGluc3RhbmNlXG4gIGZvcm06IFVudHlwZWRGb3JtR3JvdXA7XG5cbiAgLy9FcnJvciBtZXNzYWdlcyBjb25maWcgZm9yIHRoZSBmb3JtXG4gIGVycm9yTWVzc2FnZXM6IGFueTtcblxuICAvL0Jvb2xlYW4gdG8gZGVub3RlIHRoZSBmb3JtIGlzIGluIEFQSSBwcm9ncmVzc1xuICBpc1dvcmtpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvL0Zvcm0gZGlhbG9ncmVmIHJlZmVyZW5jZVxuICBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxhbnksIGFueT47XG5cbiAgLy9BcnJheSBvZiBjcmVhdGVkIG11bHRpcGxlIGVudHJpZXNcbiAgY3JlYXRlZEVudHJpZXM6IGFueSA9IFtdO1xuXG4gIC8vQm9vbGVhbiB0byBkZW5vdGUgaWYgZm9ybSBpcyBpbiB1cGRhdGUgbW9kZVxuICBASW5wdXQoKSBpc1VwZGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vQm9vbGVhbiB0byBkZW5vdGUgaWYgZm9ybSBoYXMgYWJpbGl0eSB0byBjcmVhdGUgbXVsdGlwbGUgZW50cmllc1xuICBASW5wdXQoKSBpc0FsbG93Q3JlYXRlQW5vdGhlcjogYm9vbGVhbiA9IHRydWU7XG5cbiAgLy9FbWl0cyBhbiBldmVudCBvbmNlIGZvcm0gc3VibWl0IGlzIHN1Y2Nlc3NcbiAgQE91dHB1dCgpIHN1Y2Nlc3MgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAvL0luamVjdGVkIGFsZXJ0IHNlcnZpY2VcbiAgcHJvdGVjdGVkIGFsZXJ0U2VydmljZSA9IGluamVjdChBbGVydFNlcnZpY2UsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGZvcm1WYWxpZGF0b3JTZXJ2aWNlOiBGb3JtVmFsaWRhdG9yU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBwcm90ZWN0ZWQgc2VydmljZT86IFRlY2hsaWZ5U2VydmljZSkge1xuXG4gIH1cbiAgLyoqXG4gICAqIFN1Ym1pdHMgdGhlIGZvcm1cbiAgICogQHBhcmFtIG1vZGVsIGZvcm0gbW9kZWwgb3B0aW9uYWwsIGlmIG5lZWRlZCB0byBiZSBvdmVycmlkZW5cbiAgICogQHJldHVybnMgXG4gICAqL1xuICBzdWJtaXQobW9kZWw/OiBhbnkpIHtcbiAgICB0aGlzLmZvcm0ubWFya0FsbEFzVG91Y2hlZCgpO1xuICAgIGlmICghdGhpcy5zZXJ2aWNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IFNlcnZpY2UgaXMgcmVxdWlyZWQgdG8gc3VibWl0IHRoZSBmb3JtYFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmZvcm0udmFsaWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFtb2RlbCkge1xuICAgICAgbW9kZWwgPSB0aGlzLmZvcm0udmFsdWU7XG4gICAgfVxuICAgIHRoaXMuaXNXb3JraW5nID0gdHJ1ZTtcbiAgICAoXG4gICAgICB0aGlzLmlzVXBkYXRlID9cbiAgICAgICAgdGhpcy5zZXJ2aWNlLnVwZGF0ZShtb2RlbCkgOlxuICAgICAgICB0aGlzLnNlcnZpY2Uuc3RvcmUobW9kZWwpXG4gICAgKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbmFsaXplKCgpID0+IHRoaXMuaXNXb3JraW5nID0gZmFsc2UpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5jcmVhdGVkRW50cmllcy51bnNoaWZ0KHJlcz8uaXRlbSk7XG4gICAgICAgIGlmIChtb2RlbD8uaXNfY3JlYXRlX2Fub3RoZXIpIHtcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRBbGVydCgnU3VjY2Vzc2Z1bGx5IENyZWF0ZWQnLCAnc3VjY2VzcycpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc1VwZGF0ZSkge1xuICAgICAgICAgIHRoaXMuZmluYWxpc2VkUmVzcG9uc2UocmVzPy5pdGVtKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmZpbmFsaXNlZFJlc3BvbnNlKCh0aGlzLmNyZWF0ZWRFbnRyaWVzLmxlbmd0aCA9PSAxKSA/IHRoaXMuY3JlYXRlZEVudHJpZXNbMF0gOiB0aGlzLmNyZWF0ZWRFbnRyaWVzKTtcbiAgICAgICAgfVxuXG4gICAgICB9KTtcbiAgfVxuXG4gIC8vU2VuZCB1bmlmb3JtZWQgZmluYWxpc2VkIHJlc3BvbnNlIGZvciBib3RoIGZvcm0gYnV0dG9uIGFuZCBkaWFsb2dcbiAgZmluYWxpc2VkUmVzcG9uc2UocmVzcG9uc2U6IGFueSkge1xuICAgIHRoaXMuc3VjY2Vzcy5lbWl0KHJlc3BvbnNlKTtcbiAgICBpZiAodGhpcy5kaWFsb2dSZWYpIHtcbiAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHJlc3BvbnNlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2UgdGhlIGFjdGl2ZSBkaWFsb2dcbiAgICovXG4gIGNsb3NlRGlhbG9nKCkge1xuICAgIGlmICh0aGlzLmNyZWF0ZWRFbnRyaWVzPy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnN1Y2Nlc3MuZW1pdCh0aGlzLmNyZWF0ZWRFbnRyaWVzKTtcbiAgICB9XG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldHMgdGhlIHZhbHVlIG9mIGEgZmllbGQgaW4gdGhlIEhUTUwgZm9ybVxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnRcbiAgICogQHBhcmFtIGZpZWxkXG4gICAqL1xuICByZXNldEZpZWxkVmFsdWUoZXZlbnQ6IGFueSwgZmllbGQ6IHN0cmluZykge1xuICAgIHRoaXMuZm9ybT8uZ2V0KGZpZWxkKT8uc2V0VmFsdWUoJycpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgdmFsdWUgb2YgYSBmaWVsZCBmcm9tIHRoZSBIVE1MIGZvcm1cbiAgICpcbiAgICogQHBhcmFtIGZpZWxkXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBnZXRGaWVsZFZhbHVlKGZpZWxkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtPy5nZXQoZmllbGQpPy52YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2QgdG8gZXZhbHVhdGUgZm9ybSBmaWVsZHNcbiAgICogKi9cbiAgaXNGaWVsZFZhbGlkKGZpZWxkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtVmFsaWRhdG9yU2VydmljZS5pc0ZpZWxkVmFsaWQoZmllbGQsIHRoaXMuZm9ybSk7XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIHRvIGZpbmQgZXJyb3IgaW4gZm9ybSBmaWVsZHNcbiAgICogKi9cbiAgZ2V0RXJyb3JNZXNzYWdlKGZpZWxkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtVmFsaWRhdG9yU2VydmljZS5nZXRFcnJvck1lc3NhZ2UoZmllbGQsIHRoaXMuZm9ybSwgdGhpcy5lcnJvck1lc3NhZ2VzKTtcbiAgfVxuXG59XG4iXX0=
|