ngx-techlify-core 11.3.7 → 11.4.1
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/bundles/ngx-techlify-core.umd.js +589 -265
- package/bundles/ngx-techlify-core.umd.js.map +1 -1
- package/bundles/ngx-techlify-core.umd.min.js +2 -2
- package/bundles/ngx-techlify-core.umd.min.js.map +1 -1
- package/esm2015/lib/audit-log/audit-log-view/audit-log-view.component.js +7 -9
- package/esm2015/lib/audit-log/audit-log-view-model/audit-log-view-model.component.js +7 -9
- package/esm2015/lib/email-subscription/email-subscription-type/email-subscription-type-list/email-subscription-type-list.component.js +2 -2
- package/esm2015/lib/email-subscription/email-subscription-user/email-subscription-user-list-filter/email-subscription-user-list-filter.component.js +2 -2
- package/esm2015/lib/import-csv/data-import/data-import.component.js +18 -0
- package/esm2015/lib/import-csv/failed-items-list/failed-items-list.component.js +33 -0
- package/esm2015/lib/import-csv/field-mapping/field-mapping.component.js +148 -0
- package/esm2015/lib/import-csv/import-csv-config.js +2 -0
- package/esm2015/lib/import-csv/import-csv.component.js +143 -59
- package/esm2015/lib/import-csv/import-csv.module.js +32 -13
- package/esm2015/lib/import-csv/import-history-list/import-history-list.component.js +70 -0
- package/esm2015/lib/import-csv/import-success/import-success.component.js +19 -0
- package/esm2015/lib/login-history-for-user/login-history-for-user.component.js +11 -2
- package/esm2015/lib/searchable-selector/searchable-selector.component.js +34 -4
- package/esm2015/lib/techlify-feature/techlify-feature-enabled.directive.js +3 -2
- package/esm2015/lib/techlify-feature/techlify-feature-listing.component.js +5 -2
- package/esm2015/lib/timeline-filter/calculate-timeline.js +2 -2
- package/esm2015/lib/timeline-filter/timeline-filter.component.js +145 -16
- package/esm2015/ngx-techlify-core.js +11 -4
- package/esm2015/public-api.js +2 -9
- package/fesm2015/ngx-techlify-core.js +532 -218
- package/fesm2015/ngx-techlify-core.js.map +1 -1
- package/lib/import-csv/data-import/data-import.component.d.ts +6 -0
- package/lib/import-csv/failed-items-list/failed-items-list.component.d.ts +12 -0
- package/lib/import-csv/{import-items/import-items.component.d.ts → field-mapping/field-mapping.component.d.ts} +11 -7
- package/lib/import-csv/import-csv-config.d.ts +17 -0
- package/lib/import-csv/import-csv.component.d.ts +17 -11
- package/lib/import-csv/import-history-list/import-history-list.component.d.ts +20 -0
- package/lib/import-csv/import-success/import-success.component.d.ts +8 -0
- package/lib/login-history-for-user/login-history-for-user.component.d.ts +2 -0
- package/lib/searchable-selector/searchable-selector.component.d.ts +5 -0
- package/lib/techlify-feature/techlify-feature-enabled.directive.d.ts +2 -1
- package/lib/techlify-feature/techlify-feature-listing.component.d.ts +4 -1
- package/lib/timeline-filter/calculate-timeline.d.ts +5 -0
- package/lib/timeline-filter/timeline-filter.component.d.ts +47 -6
- package/ngx-techlify-core.d.ts +10 -3
- package/ngx-techlify-core.metadata.json +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +1 -8
- package/esm2015/lib/import-csv/failed-items/failed-items-routing.module.js +0 -12
- package/esm2015/lib/import-csv/failed-items/failed-items.component.js +0 -23
- package/esm2015/lib/import-csv/failed-items/failed-items.module.js +0 -21
- package/esm2015/lib/import-csv/import-config.js +0 -3
- package/esm2015/lib/import-csv/import-csv-routing.module.js +0 -12
- package/esm2015/lib/import-csv/import-items/import-items-routing.module.js +0 -12
- package/esm2015/lib/import-csv/import-items/import-items.component.js +0 -139
- package/esm2015/lib/import-csv/import-items/import-items.module.js +0 -23
- package/lib/import-csv/failed-items/failed-items-routing.module.d.ts +0 -2
- package/lib/import-csv/failed-items/failed-items.component.d.ts +0 -8
- package/lib/import-csv/failed-items/failed-items.module.d.ts +0 -2
- package/lib/import-csv/import-config.d.ts +0 -5
- package/lib/import-csv/import-csv-routing.module.d.ts +0 -2
- package/lib/import-csv/import-items/import-items-routing.module.d.ts +0 -2
- package/lib/import-csv/import-items/import-items.module.d.ts +0 -2
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Location } from '@angular/common';
|
|
2
|
+
import { EventEmitter, OnInit } from '@angular/core';
|
|
3
|
+
export declare class FailedItemsListComponent implements OnInit {
|
|
4
|
+
location: Location;
|
|
5
|
+
failedItems: any[];
|
|
6
|
+
selectedFields: any[];
|
|
7
|
+
onReUpload: EventEmitter<any>;
|
|
8
|
+
constructor(location: Location);
|
|
9
|
+
ngOnInit(): void;
|
|
10
|
+
isValidDate(d: any): boolean;
|
|
11
|
+
reUpload(): void;
|
|
12
|
+
}
|
|
@@ -1,24 +1,27 @@
|
|
|
1
|
+
import { FormValidatorService } from '../../core/form-validator.service';
|
|
1
2
|
import { ChangeDetectorRef, EventEmitter, OnInit } from '@angular/core';
|
|
2
3
|
import { FormArray, FormBuilder, FormGroup } from '@angular/forms';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
export declare class
|
|
4
|
+
import { Location } from '@angular/common';
|
|
5
|
+
import { ImportCsvConfig } from '../import-csv-config';
|
|
6
|
+
export declare class FieldMappingComponent implements OnInit {
|
|
6
7
|
private fb;
|
|
7
8
|
private formValidatorService;
|
|
8
9
|
private changeDetectorRef;
|
|
10
|
+
location: Location;
|
|
9
11
|
importMappingForm: FormGroup;
|
|
10
12
|
data: any[];
|
|
11
|
-
|
|
13
|
+
config: ImportCsvConfig;
|
|
12
14
|
firstDataArray: any[];
|
|
13
15
|
properties: any[];
|
|
14
16
|
onSave: EventEmitter<any>;
|
|
15
|
-
|
|
17
|
+
onReUpload: EventEmitter<any>;
|
|
18
|
+
constructor(fb: FormBuilder, formValidatorService: FormValidatorService, changeDetectorRef: ChangeDetectorRef, location: Location);
|
|
16
19
|
ngOnInit(): void;
|
|
17
20
|
createImportMappingForm(): void;
|
|
18
21
|
get fieldsArray(): FormArray;
|
|
19
22
|
createField(field: any): FormGroup;
|
|
20
|
-
|
|
21
|
-
|
|
23
|
+
reFectorAttributes(data: any): void;
|
|
24
|
+
next(): void;
|
|
22
25
|
/** Method to evaluate form fields*/
|
|
23
26
|
isFieldValid(field: string, form: any): any;
|
|
24
27
|
/** Method to find error in form fields*/
|
|
@@ -27,4 +30,5 @@ export declare class ImportItemsComponent implements OnInit {
|
|
|
27
30
|
updatePropertyType(event: any, index: any): void;
|
|
28
31
|
uniqueValidator(): void;
|
|
29
32
|
removeField(index: number): void;
|
|
33
|
+
reUpload(): void;
|
|
30
34
|
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export declare class ImportCsvConfig {
|
|
2
|
+
apiUrl: string;
|
|
3
|
+
title: string;
|
|
4
|
+
importType: string;
|
|
5
|
+
properties: any[];
|
|
6
|
+
customErrorMessages?: any[]; /** Optional */
|
|
7
|
+
sampleFile?: {
|
|
8
|
+
name: string;
|
|
9
|
+
path: string;
|
|
10
|
+
}; /** Optional */
|
|
11
|
+
viewRouterLink?: string;
|
|
12
|
+
importHistory: {
|
|
13
|
+
isEnabled: boolean;
|
|
14
|
+
type?: string;
|
|
15
|
+
apiUrl?: string;
|
|
16
|
+
};
|
|
17
|
+
}
|
|
@@ -1,26 +1,32 @@
|
|
|
1
|
-
import { OnInit } from '@angular/core';
|
|
2
|
-
import { ImportConfig } from './import-config';
|
|
3
|
-
import { Location } from '@angular/common';
|
|
4
|
-
import { FileDropperConfig } from '../file-dropper/file-dropper.model';
|
|
5
1
|
import { ViewerConfig } from '../document-viewer/viewer-config.model';
|
|
6
|
-
import {
|
|
2
|
+
import { FileDropperConfig } from '../file-dropper/file-dropper.model';
|
|
7
3
|
import { HttpService } from '../core/http.service';
|
|
4
|
+
import { OnInit } from '@angular/core';
|
|
5
|
+
import { AlertService, ErrorHandlerService } from '../core';
|
|
6
|
+
import { ImportCsvConfig } from './import-csv-config';
|
|
8
7
|
export declare class ImportCsvComponent implements OnInit {
|
|
9
8
|
private alertService;
|
|
9
|
+
private errorHandler;
|
|
10
10
|
private http;
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
result: any;
|
|
12
|
+
config: ImportCsvConfig;
|
|
13
13
|
filesConfig: FileDropperConfig;
|
|
14
14
|
filesList: any[];
|
|
15
|
+
data: any[];
|
|
16
|
+
isUploaded: boolean;
|
|
17
|
+
isImportTypeSelected: boolean;
|
|
15
18
|
viewerConfig: ViewerConfig;
|
|
16
19
|
fileData: any[];
|
|
17
20
|
failedItems: any[];
|
|
18
21
|
selectedFields: any[];
|
|
19
|
-
|
|
22
|
+
importSteps: any;
|
|
23
|
+
currentStep: any;
|
|
24
|
+
constructor(alertService: AlertService, errorHandler: ErrorHandlerService, http: HttpService);
|
|
20
25
|
ngOnInit(): void;
|
|
21
|
-
|
|
22
|
-
fileChanged(event: any): void
|
|
26
|
+
get step(): any;
|
|
27
|
+
fileChanged(event: any): Promise<void>;
|
|
23
28
|
mappingProcessed(event: any): void;
|
|
24
|
-
save(tempFileData: any): void
|
|
29
|
+
save(tempFileData: any): Promise<void>;
|
|
25
30
|
isValidDate(d: any): boolean;
|
|
31
|
+
reUpload(): void;
|
|
26
32
|
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { PageEvent } from './../../data-table/data-table.model';
|
|
2
|
+
import { ErrorHandlerService, HttpService } from '../../core';
|
|
3
|
+
import { OnInit } from '@angular/core';
|
|
4
|
+
import { ImportCsvConfig } from '../import-csv-config';
|
|
5
|
+
export declare class ImportHistoryListComponent implements OnInit {
|
|
6
|
+
private errorHandler;
|
|
7
|
+
private http;
|
|
8
|
+
config: ImportCsvConfig;
|
|
9
|
+
histories: any[];
|
|
10
|
+
displayedColumns: string[];
|
|
11
|
+
isWorking: boolean;
|
|
12
|
+
filter: any;
|
|
13
|
+
pageEvent: PageEvent;
|
|
14
|
+
constructor(errorHandler: ErrorHandlerService, http: HttpService);
|
|
15
|
+
ngOnInit(): void;
|
|
16
|
+
loadData(): void;
|
|
17
|
+
onScroll(): void;
|
|
18
|
+
reload(): void;
|
|
19
|
+
ngOnDestroy(): void;
|
|
20
|
+
}
|
|
@@ -2,6 +2,7 @@ import { OnInit } from '@angular/core';
|
|
|
2
2
|
import { FormBuilder, FormGroup } from '@angular/forms';
|
|
3
3
|
import { PageEvent } from '../data-table/data-table.model';
|
|
4
4
|
import { HttpService } from '../core/http.service';
|
|
5
|
+
import { TimelineValue } from '../timeline-filter';
|
|
5
6
|
export declare class LoginHistoryForUserComponent implements OnInit {
|
|
6
7
|
private http;
|
|
7
8
|
private fb;
|
|
@@ -13,6 +14,7 @@ export declare class LoginHistoryForUserComponent implements OnInit {
|
|
|
13
14
|
userId: any;
|
|
14
15
|
constructor(http: HttpService, fb: FormBuilder);
|
|
15
16
|
ngOnInit(): void;
|
|
17
|
+
onTimelineChange(range: TimelineValue): void;
|
|
16
18
|
initializeData(): void;
|
|
17
19
|
filterChange(event: any): void;
|
|
18
20
|
onScroll(): void;
|
|
@@ -27,6 +27,9 @@ export declare class SearchableSelectorComponent implements ControlValueAccessor
|
|
|
27
27
|
searchField: string;
|
|
28
28
|
itemComponent: ComponentType<unknown> | TemplateRef<unknown>;
|
|
29
29
|
items: any[];
|
|
30
|
+
cache: boolean;
|
|
31
|
+
perPage: number;
|
|
32
|
+
inDataSearch: boolean;
|
|
30
33
|
selectionChange: EventEmitter<any>;
|
|
31
34
|
itemsChange: EventEmitter<any>;
|
|
32
35
|
isLoading: boolean;
|
|
@@ -40,6 +43,7 @@ export declare class SearchableSelectorComponent implements ControlValueAccessor
|
|
|
40
43
|
id: string;
|
|
41
44
|
describedBy: string;
|
|
42
45
|
filters: any;
|
|
46
|
+
cachedItems: any[];
|
|
43
47
|
get empty(): boolean;
|
|
44
48
|
get shouldLabelFloat(): boolean;
|
|
45
49
|
get required(): boolean;
|
|
@@ -69,6 +73,7 @@ export declare class SearchableSelectorComponent implements ControlValueAccessor
|
|
|
69
73
|
onScroll(): void;
|
|
70
74
|
reloadData(): void;
|
|
71
75
|
search(event: any): void;
|
|
76
|
+
filterItems(event: string): void;
|
|
72
77
|
addItem(event: any): void;
|
|
73
78
|
editItem(event: any): void;
|
|
74
79
|
ngOnDestroy(): void;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { ElementRef } from '@angular/core';
|
|
2
|
+
import { ErrorHandlerService } from '../core/error-handler.service';
|
|
3
|
+
import { StorageService } from '../core/storage.service';
|
|
2
4
|
import { TechlifyFeatureService } from './techlify-feature.service';
|
|
3
|
-
import { ErrorHandlerService, StorageService } from '../core';
|
|
4
5
|
export declare class TechlifyFeatureEnabledDirective {
|
|
5
6
|
private el;
|
|
6
7
|
private featureService;
|
|
@@ -3,7 +3,10 @@ import { FormBuilder, FormGroup } from '@angular/forms';
|
|
|
3
3
|
import { MatDialog } from '@angular/material/dialog';
|
|
4
4
|
import { MatTableDataSource } from '@angular/material/table';
|
|
5
5
|
import { TechlifyFeatureService } from './techlify-feature.service';
|
|
6
|
-
import {
|
|
6
|
+
import { DataManager } from '../core/dataManager.service';
|
|
7
|
+
import { ErrorHandlerService } from '../core/error-handler.service';
|
|
8
|
+
import { AlertService } from '../core/alert.service';
|
|
9
|
+
import { StorageService } from '../core/storage.service';
|
|
7
10
|
export declare class TechlifyFeatureListingComponent implements OnInit {
|
|
8
11
|
private dataManager;
|
|
9
12
|
private errorHandler;
|
|
@@ -1,20 +1,61 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
1
|
+
import { DatePipe } from '@angular/common';
|
|
2
|
+
import { EventEmitter, OnInit } from '@angular/core';
|
|
3
|
+
import { ControlValueAccessor, FormBuilder, FormControl, FormGroup, NgControl } from '@angular/forms';
|
|
4
|
+
import { TimelineValue } from './calculate-timeline';
|
|
5
|
+
import { Subject } from 'rxjs';
|
|
6
|
+
export declare class TimelineFilterComponent implements OnInit, ControlValueAccessor {
|
|
7
|
+
ngControl: NgControl;
|
|
8
|
+
private datePipe;
|
|
9
|
+
picker: any;
|
|
4
10
|
timelineValue: FormControl;
|
|
5
11
|
timelines: any[];
|
|
6
|
-
labelText: string;
|
|
7
12
|
dateFrom: string;
|
|
8
13
|
dateTo: string;
|
|
9
14
|
appearance: any;
|
|
10
15
|
showClearbutton: boolean;
|
|
16
|
+
/**
|
|
17
|
+
* @deprecated The form input is deprated
|
|
18
|
+
*/
|
|
11
19
|
form: FormGroup;
|
|
20
|
+
labelText: string;
|
|
21
|
+
selectedValue: any;
|
|
22
|
+
touchUi: boolean;
|
|
23
|
+
selectedValueChange: EventEmitter<any>;
|
|
24
|
+
selectionChange: EventEmitter<any>;
|
|
25
|
+
selectorForm: FormGroup;
|
|
26
|
+
onChange: any;
|
|
27
|
+
onTouched: any;
|
|
28
|
+
static nextId: number;
|
|
29
|
+
stateChanges: Subject<void>;
|
|
30
|
+
controlType: string;
|
|
31
|
+
id: string;
|
|
32
|
+
describedBy: string;
|
|
33
|
+
selectedRange: TimelineValue;
|
|
12
34
|
set defaultValue(value: any);
|
|
13
35
|
showCustomDateFields: boolean;
|
|
14
|
-
constructor();
|
|
15
|
-
|
|
36
|
+
constructor(formBuilder: FormBuilder, ngControl: NgControl, datePipe: DatePipe);
|
|
37
|
+
get required(): boolean;
|
|
38
|
+
set required(value: boolean);
|
|
39
|
+
private _required;
|
|
40
|
+
get disabled(): boolean;
|
|
41
|
+
set disabled(value: boolean);
|
|
42
|
+
private _disabled;
|
|
43
|
+
get value(): any;
|
|
44
|
+
set value(data: any);
|
|
45
|
+
getDateRangeString(): string;
|
|
16
46
|
resetFieldValue(field: string): void;
|
|
17
47
|
getFieldValue(field: string): any;
|
|
18
48
|
setFieldValue(field: string, value: any): void;
|
|
19
49
|
changeTimeline(value: any): void;
|
|
50
|
+
_handleInput(): void;
|
|
51
|
+
dateRangeChange(dateRangeStart: HTMLInputElement, dateRangeEnd: HTMLInputElement): void;
|
|
52
|
+
onCustomDateChange(event: any): void;
|
|
53
|
+
setDescribedByIds(ids: string[]): void;
|
|
54
|
+
onContainerClick(event: MouseEvent): void;
|
|
55
|
+
writeValue(data: any): void;
|
|
56
|
+
registerOnChange(fn: any): void;
|
|
57
|
+
registerOnTouched(fn: any): void;
|
|
58
|
+
setDisabledState(isDisabled: boolean): void;
|
|
59
|
+
ngOnInit(): void;
|
|
60
|
+
ngOnDestroy(): void;
|
|
20
61
|
}
|
package/ngx-techlify-core.d.ts
CHANGED
|
@@ -4,17 +4,19 @@
|
|
|
4
4
|
export * from './public-api';
|
|
5
5
|
export { ActionPopupComponent as ɵg } from './lib/action-popup/action-popup.component';
|
|
6
6
|
export { ActionPopup as ɵh } from './lib/action-popup/action-popup.model';
|
|
7
|
-
export { AlertService as
|
|
7
|
+
export { AlertService as ɵbw, AuthenticationGuard as ɵci, DataManager as ɵch, ErrorHandlerService as ɵbx, HttpService as ɵcb } from './lib/core';
|
|
8
8
|
export { AlertService as ɵn } from './lib/core/alert.service';
|
|
9
9
|
export { AuthenticationGuard as ɵbg } from './lib/core/authentication.guard';
|
|
10
10
|
export { ConfigService as ɵv } from './lib/core/config.service';
|
|
11
11
|
export { CredentialsService as ɵu } from './lib/core/credentials.service';
|
|
12
12
|
export { DataManager as ɵbv } from './lib/core/dataManager.service';
|
|
13
|
+
export { ErrorHandlerService as ɵce } from './lib/core/error-handler.service';
|
|
13
14
|
export { FormValidatorService as ɵl } from './lib/core/form-validator.service';
|
|
14
15
|
export { HTTP_DYNAMIC_INTERCEPTORS as ɵd, HttpService as ɵe } from './lib/core/http.service';
|
|
15
16
|
export { RouteReusableStrategy as ɵf } from './lib/core/route-reusable-strategy';
|
|
16
17
|
export { ErrorSnackComponent as ɵc, SuccessSnackComponent as ɵb } from './lib/core/snack/snack.component';
|
|
17
18
|
export { SnackModule as ɵa } from './lib/core/snack/snack.module';
|
|
19
|
+
export { StorageService as ɵcf } from './lib/core/storage.service';
|
|
18
20
|
export { TechlifyConfig as ɵw } from './lib/core/techlify-config.model';
|
|
19
21
|
export { DataTableComponent as ɵi } from './lib/data-table/data-table.component';
|
|
20
22
|
export { DocumentViewerComponent as ɵj } from './lib/document-viewer/document-viewer.component';
|
|
@@ -28,6 +30,11 @@ export { EntityFileFormComponent as ɵk } from './lib/entity-files/entity-file-f
|
|
|
28
30
|
export { EntityFileService as ɵm } from './lib/entity-files/entity-file.service';
|
|
29
31
|
export { EntityFilesViewAllComponent as ɵo } from './lib/entity-files/entity-files-view-all.component';
|
|
30
32
|
export { FileDropperComponent as ɵp } from './lib/file-dropper/file-dropper.component';
|
|
33
|
+
export { DataImportComponent as ɵcd } from './lib/import-csv/data-import/data-import.component';
|
|
34
|
+
export { FailedItemsListComponent as ɵbz } from './lib/import-csv/failed-items-list/failed-items-list.component';
|
|
35
|
+
export { FieldMappingComponent as ɵby } from './lib/import-csv/field-mapping/field-mapping.component';
|
|
36
|
+
export { ImportHistoryListComponent as ɵca } from './lib/import-csv/import-history-list/import-history-list.component';
|
|
37
|
+
export { ImportSuccessComponent as ɵcc } from './lib/import-csv/import-success/import-success.component';
|
|
31
38
|
export { LoaderComponent as ɵbd } from './lib/loader/loader.component';
|
|
32
39
|
export { CommentFormComponent as ɵt } from './lib/note/comment-form/comment-form.component';
|
|
33
40
|
export { NoteFormComponent as ɵs } from './lib/note/note-form/note-form.component';
|
|
@@ -35,8 +42,8 @@ export { NoteListComponent as ɵq } from './lib/note/note-list/note-list.compone
|
|
|
35
42
|
export { NoteService as ɵr } from './lib/note/note.service';
|
|
36
43
|
export { MatSelectInfiniteScrollDirective as ɵy } from './lib/searchable-selector/mat-select-infinite-scroll.directive';
|
|
37
44
|
export { SearchableSelectorComponent as ɵx } from './lib/searchable-selector/searchable-selector.component';
|
|
38
|
-
export { OnOffSwitchComponent as
|
|
39
|
-
export { TechlifyFeatureService as
|
|
45
|
+
export { OnOffSwitchComponent as ɵcj } from './lib/techlify-feature/on-off-switch/on-off-switch.component';
|
|
46
|
+
export { TechlifyFeatureService as ɵcg } from './lib/techlify-feature/techlify-feature.service';
|
|
40
47
|
export { TechlifyUpdateFormComponent as ɵbp } from './lib/techlify-update/techlify-update-form/techlify-update-form.component';
|
|
41
48
|
export { TechlifyUpdateFormModule as ɵbo } from './lib/techlify-update/techlify-update-form/techlify-update-form.module';
|
|
42
49
|
export { TechlifyUpdateHistoryRoutingModule as ɵbq } from './lib/techlify-update/techlify-update-history/techlify-update-history-routing.module';
|