ngx-techlify-core 14.8.0 → 14.8.2
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/esm2020/lib/base-model/techlify-listing-component.class.mjs +20 -1
- package/esm2020/lib/forgot-password/forgot-password.component.mjs +3 -3
- package/esm2020/lib/import-csv/field-mapping/field-mapping.component.mjs +3 -3
- package/esm2020/lib/import-csv/import-csv.component.mjs +11 -10
- package/esm2020/lib/password-requirement-check/password-check.service.mjs +2 -2
- package/esm2020/lib/password-requirement-check/password-requirement-check/password-requirement-check.component.mjs +3 -3
- package/fesm2015/ngx-techlify-core.mjs +36 -18
- package/fesm2015/ngx-techlify-core.mjs.map +1 -1
- package/fesm2020/ngx-techlify-core.mjs +36 -18
- package/fesm2020/ngx-techlify-core.mjs.map +1 -1
- package/lib/base-model/techlify-listing-component.class.d.ts +5 -10
- package/lib/import-csv/import-csv.component.d.ts +3 -1
- package/package.json +1 -1
|
@@ -5,12 +5,13 @@ import { MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';
|
|
|
5
5
|
import * as i7 from '@angular/flex-layout/flex';
|
|
6
6
|
import * as i5 from '@angular/material/button';
|
|
7
7
|
import { MatButtonModule } from '@angular/material/button';
|
|
8
|
+
import { debounceTime, catchError, takeUntil, tap, distinctUntilChanged, startWith, switchMap, finalize, map, filter } from 'rxjs/operators';
|
|
9
|
+
import { untilDestroyed, UntilDestroy } from '@ngneat/until-destroy';
|
|
8
10
|
import { __decorate } from 'tslib';
|
|
9
11
|
import * as i11 from '@angular/material/table';
|
|
10
12
|
import { MatTableDataSource, MatTableModule } from '@angular/material/table';
|
|
11
13
|
import * as i10 from '@angular/material/sort';
|
|
12
14
|
import { MatSort, MatSortModule } from '@angular/material/sort';
|
|
13
|
-
import { untilDestroyed, UntilDestroy } from '@ngneat/until-destroy';
|
|
14
15
|
import * as i2 from '@angular/flex-layout/extended';
|
|
15
16
|
import * as i3 from '@angular/common';
|
|
16
17
|
import { DatePipe, CommonModule } from '@angular/common';
|
|
@@ -31,7 +32,6 @@ import { UntypedFormControl, Validators, ReactiveFormsModule, FormsModule, NG_VA
|
|
|
31
32
|
import * as i1$2 from '@angular/common/http';
|
|
32
33
|
import { HttpResponse, HttpClient, HttpClientModule } from '@angular/common/http';
|
|
33
34
|
import { throwError, Observable, Subject, fromEvent, of, from, interval, map as map$1 } from 'rxjs';
|
|
34
|
-
import { catchError, debounceTime, takeUntil, tap, distinctUntilChanged, startWith, switchMap, finalize, map, filter } from 'rxjs/operators';
|
|
35
35
|
import * as i1$1 from '@angular/material/snack-bar';
|
|
36
36
|
import { MAT_SNACK_BAR_DATA, MatSnackBarModule } from '@angular/material/snack-bar';
|
|
37
37
|
import * as i8$4 from '@angular/material/form-field';
|
|
@@ -179,6 +179,15 @@ class TechlifyListingControllerInterface {
|
|
|
179
179
|
this.lastPage = 500;
|
|
180
180
|
this.isWorking = false;
|
|
181
181
|
}
|
|
182
|
+
/**
|
|
183
|
+
* Function that listens for any changes in the form group to apply the filters
|
|
184
|
+
*/
|
|
185
|
+
listenForChanges() {
|
|
186
|
+
this.filterForm.valueChanges.pipe(debounceTime(500), untilDestroyed(this))
|
|
187
|
+
.subscribe(() => {
|
|
188
|
+
this.reload();
|
|
189
|
+
});
|
|
190
|
+
}
|
|
182
191
|
/**
|
|
183
192
|
* Reload all data from page 1
|
|
184
193
|
*/
|
|
@@ -199,6 +208,14 @@ class TechlifyListingControllerInterface {
|
|
|
199
208
|
this.loadData();
|
|
200
209
|
}
|
|
201
210
|
}
|
|
211
|
+
/**
|
|
212
|
+
* Reset the filter.
|
|
213
|
+
*
|
|
214
|
+
* @param field
|
|
215
|
+
*/
|
|
216
|
+
resetFilter(field) {
|
|
217
|
+
this.filterForm.get(field).reset('');
|
|
218
|
+
}
|
|
202
219
|
}
|
|
203
220
|
|
|
204
221
|
/**
|
|
@@ -8177,10 +8194,10 @@ class FieldMappingComponent {
|
|
|
8177
8194
|
}
|
|
8178
8195
|
}
|
|
8179
8196
|
FieldMappingComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: FieldMappingComponent, deps: [{ token: i1$4.UntypedFormBuilder }, { token: FormValidatorService }, { token: i0.ChangeDetectorRef }, { token: i3.Location }], target: i0.ɵɵFactoryTarget.Component });
|
|
8180
|
-
FieldMappingComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: FieldMappingComponent, selector: "app-field-mapping", inputs: { data: "data", config: "config" }, outputs: { onSave: "onSave", onReUpload: "onReUpload" }, ngImport: i0, template: "<div fxLayout=\"column\" class=\"mt-2\">\n <div fxLayout=\"row wrap\" class=\"pb-3\">\n <h5 fxFlex=\"30%\" class=\"primary-color\">Summary</h5>\n <div fxFlex=\"70%\" fxLayoutAlign=\"center center\">\n <h5 class=\"secondary-color\">\n <span class=\"font-weight-bold\">{{data.length}}</span>\n </h5>\n <span class=\"text-muted ml-2\"> Records Found In Uploaded File</span>\n </div>\n </div>\n\n <div>\n <mat-divider></mat-divider>\n </div>\n\n <form [formGroup]=\"importMappingForm\" (ngSubmit)=\"next()\" fxLayout=\"column\" class=\"pt-3\">\n <h5 class=\"primary-color pb-2\">Properties</h5>\n <table style=\"width: 100%;\" class=\"table table-sm table-striped\">\n <tr class=\"table-header-row\">\n <th>Column Headers From File</th>\n <th>Preview Information</th>\n <th>Property</th>\n </tr>\n <ng-container formArrayName=\"fields\">\n <tr *ngFor=\"let field of fieldsArray.controls; let i=index\" [formGroupName]=\"i\">\n <td>{{ field.get('label').value }}</td>\n <td>{{ field.get('value').value }}</td>\n <td>\n <mat-form-field fxFlex=\"100%\" appearance=\"outline\">\n <mat-label>Select Property</mat-label>\n <mat-select placeholder=\"Select Property\" formControlName=\"property\" required\n (selectionChange)=\"updatePropertyType($event, i)\">\n <mat-option *ngFor=\"let property of properties\" [value]=\"property.value\">\n {{property.label}}\n </mat-option>\n </mat-select>\n <mat-error *ngIf=\"isFieldValid('property', fieldsArray.controls[i])\">\n {{getErrorMessage('property', fieldsArray.controls[i])}}\n </mat-error>\n </mat-form-field>\n <button type=\"button\" mat-icon-button (click)=\"removeField(i)\" *ngIf=\"fieldsArray.length > 1\"\n matTooltip=\"Remove column\" matTooltipPosition=\"right\">\n <mat-icon class=\"text-danger\">remove_circle</mat-icon>\n </button>\n </td>\n </tr>\n </ng-container>\n </table>\n\n <div class=\"mt-1\" fxFlex=\"100%\" fxLayoutAlign=\"end\">\n <button mat-button class=\"mt-2 mr-2\" type=\"button\" (click)=\"location.back()\">\n Cancel\n </button>\n <button mat-stroked-button class=\"mt-2 mr-2 primary-color\" type=\"button\" (click)=\"reUpload()\">\n <mat-icon>\n <span class=\"material-icons-outlined\">\n file_upload\n </span>\n </mat-icon>\n Re-upload\n </button>\n <button mat-stroked-button class=\"mt-2 primary-bg text-white\" type=\"submit\">\n Next\n <mat-icon>\n chevron_right\n </mat-icon>\n </button>\n </div>\n </form>\n</div>\n", styles: ["table{width:100%}th,td{padding:1%}.table-header-row{background-color:#e6e4e4;color:#000;font-weight:bolder}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1$4.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i1$4.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "directive", type: i7.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i7.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i7.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "component", type: i5.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i8$4.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i8$4.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8$4.MatLabel, selector: "mat-label" }, { kind: "component", type: i7$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i8$2.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i9$1.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i7$3.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: i5$1.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
|
|
8197
|
+
FieldMappingComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: FieldMappingComponent, selector: "app-field-mapping", inputs: { data: "data", config: "config" }, outputs: { onSave: "onSave", onReUpload: "onReUpload" }, ngImport: i0, template: "<div fxLayout=\"column\" class=\"mt-2\">\n <div fxLayout=\"row wrap\" class=\"pb-3\">\n <h5 fxFlex=\"30%\" class=\"primary-color\">Summary</h5>\n <div fxFlex=\"70%\" fxLayoutAlign=\"center center\">\n <h5 class=\"secondary-color\">\n <span class=\"font-weight-bold\">{{data.length}}</span>\n </h5>\n <span class=\"text-muted ml-2\"> Records Found In Uploaded File</span>\n </div>\n </div>\n\n <div>\n <mat-divider></mat-divider>\n </div>\n\n <form [formGroup]=\"importMappingForm\" (ngSubmit)=\"next()\" fxLayout=\"column\" class=\"pt-3\">\n <h5 class=\"primary-color pb-2\">Properties</h5>\n <table style=\"width: 100%;\" class=\"table table-sm table-striped\">\n <tr class=\"table-header-row\">\n <th>Column Headers From File</th>\n <th>Preview Information</th>\n <th>Property</th>\n </tr>\n <ng-container formArrayName=\"fields\">\n <tr *ngFor=\"let field of fieldsArray.controls; let i = index\" [formGroupName]=\"i\">\n <td>{{ field.get('label').value }}</td>\n <td>{{ field.get('value').value }}</td>\n <td>\n <mat-form-field fxFlex=\"100%\" appearance=\"outline\">\n <mat-label>Select Property</mat-label>\n <mat-select placeholder=\"Select Property\" formControlName=\"property\" required\n (selectionChange)=\"updatePropertyType($event, i)\">\n <mat-option *ngFor=\"let property of properties\" [value]=\"property.value\">\n {{property.label}}\n </mat-option>\n </mat-select>\n <mat-error *ngIf=\"isFieldValid('property', fieldsArray.controls[i])\">\n {{getErrorMessage('property', fieldsArray.controls[i])}}\n </mat-error>\n </mat-form-field>\n <button type=\"button\" mat-icon-button (click)=\"removeField(i)\" *ngIf=\"fieldsArray.length > 1\"\n matTooltip=\"Remove column\" matTooltipPosition=\"right\">\n <mat-icon class=\"text-danger\">remove_circle</mat-icon>\n </button>\n </td>\n </tr>\n </ng-container>\n </table>\n\n <div class=\"mt-1\" fxFlex=\"100%\" fxLayoutAlign=\"end\">\n <button mat-button class=\"mt-2 mr-2\" type=\"button\" (click)=\"location.back()\">\n Cancel\n </button>\n <button mat-stroked-button class=\"mt-2 mr-2 primary-color\" type=\"button\" (click)=\"reUpload()\">\n <mat-icon>\n <span class=\"material-icons-outlined\">\n file_upload\n </span>\n </mat-icon>\n Re-upload\n </button>\n <button mat-stroked-button class=\"mt-2 primary-bg text-white\" type=\"submit\">\n Next\n <mat-icon>\n chevron_right\n </mat-icon>\n </button>\n </div>\n </form>\n</div>\n", styles: ["table{width:100%}th,td{padding:1%}.table-header-row{background-color:#e6e4e4;color:#000;font-weight:bolder}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1$4.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i1$4.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "directive", type: i7.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i7.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i7.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "component", type: i5.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i8$4.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i8$4.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8$4.MatLabel, selector: "mat-label" }, { kind: "component", type: i7$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i8$2.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i9$1.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i7$3.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: i5$1.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
|
|
8181
8198
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: FieldMappingComponent, decorators: [{
|
|
8182
8199
|
type: Component,
|
|
8183
|
-
args: [{ selector: 'app-field-mapping', template: "<div fxLayout=\"column\" class=\"mt-2\">\n <div fxLayout=\"row wrap\" class=\"pb-3\">\n <h5 fxFlex=\"30%\" class=\"primary-color\">Summary</h5>\n <div fxFlex=\"70%\" fxLayoutAlign=\"center center\">\n <h5 class=\"secondary-color\">\n <span class=\"font-weight-bold\">{{data.length}}</span>\n </h5>\n <span class=\"text-muted ml-2\"> Records Found In Uploaded File</span>\n </div>\n </div>\n\n <div>\n <mat-divider></mat-divider>\n </div>\n\n <form [formGroup]=\"importMappingForm\" (ngSubmit)=\"next()\" fxLayout=\"column\" class=\"pt-3\">\n <h5 class=\"primary-color pb-2\">Properties</h5>\n <table style=\"width: 100%;\" class=\"table table-sm table-striped\">\n <tr class=\"table-header-row\">\n <th>Column Headers From File</th>\n <th>Preview Information</th>\n <th>Property</th>\n </tr>\n <ng-container formArrayName=\"fields\">\n <tr *ngFor=\"let field of fieldsArray.controls; let i=index\" [formGroupName]=\"i\">\n <td>{{ field.get('label').value }}</td>\n <td>{{ field.get('value').value }}</td>\n <td>\n <mat-form-field fxFlex=\"100%\" appearance=\"outline\">\n <mat-label>Select Property</mat-label>\n <mat-select placeholder=\"Select Property\" formControlName=\"property\" required\n (selectionChange)=\"updatePropertyType($event, i)\">\n <mat-option *ngFor=\"let property of properties\" [value]=\"property.value\">\n {{property.label}}\n </mat-option>\n </mat-select>\n <mat-error *ngIf=\"isFieldValid('property', fieldsArray.controls[i])\">\n {{getErrorMessage('property', fieldsArray.controls[i])}}\n </mat-error>\n </mat-form-field>\n <button type=\"button\" mat-icon-button (click)=\"removeField(i)\" *ngIf=\"fieldsArray.length > 1\"\n matTooltip=\"Remove column\" matTooltipPosition=\"right\">\n <mat-icon class=\"text-danger\">remove_circle</mat-icon>\n </button>\n </td>\n </tr>\n </ng-container>\n </table>\n\n <div class=\"mt-1\" fxFlex=\"100%\" fxLayoutAlign=\"end\">\n <button mat-button class=\"mt-2 mr-2\" type=\"button\" (click)=\"location.back()\">\n Cancel\n </button>\n <button mat-stroked-button class=\"mt-2 mr-2 primary-color\" type=\"button\" (click)=\"reUpload()\">\n <mat-icon>\n <span class=\"material-icons-outlined\">\n file_upload\n </span>\n </mat-icon>\n Re-upload\n </button>\n <button mat-stroked-button class=\"mt-2 primary-bg text-white\" type=\"submit\">\n Next\n <mat-icon>\n chevron_right\n </mat-icon>\n </button>\n </div>\n </form>\n</div>\n", styles: ["table{width:100%}th,td{padding:1%}.table-header-row{background-color:#e6e4e4;color:#000;font-weight:bolder}\n"] }]
|
|
8200
|
+
args: [{ selector: 'app-field-mapping', template: "<div fxLayout=\"column\" class=\"mt-2\">\n <div fxLayout=\"row wrap\" class=\"pb-3\">\n <h5 fxFlex=\"30%\" class=\"primary-color\">Summary</h5>\n <div fxFlex=\"70%\" fxLayoutAlign=\"center center\">\n <h5 class=\"secondary-color\">\n <span class=\"font-weight-bold\">{{data.length}}</span>\n </h5>\n <span class=\"text-muted ml-2\"> Records Found In Uploaded File</span>\n </div>\n </div>\n\n <div>\n <mat-divider></mat-divider>\n </div>\n\n <form [formGroup]=\"importMappingForm\" (ngSubmit)=\"next()\" fxLayout=\"column\" class=\"pt-3\">\n <h5 class=\"primary-color pb-2\">Properties</h5>\n <table style=\"width: 100%;\" class=\"table table-sm table-striped\">\n <tr class=\"table-header-row\">\n <th>Column Headers From File</th>\n <th>Preview Information</th>\n <th>Property</th>\n </tr>\n <ng-container formArrayName=\"fields\">\n <tr *ngFor=\"let field of fieldsArray.controls; let i = index\" [formGroupName]=\"i\">\n <td>{{ field.get('label').value }}</td>\n <td>{{ field.get('value').value }}</td>\n <td>\n <mat-form-field fxFlex=\"100%\" appearance=\"outline\">\n <mat-label>Select Property</mat-label>\n <mat-select placeholder=\"Select Property\" formControlName=\"property\" required\n (selectionChange)=\"updatePropertyType($event, i)\">\n <mat-option *ngFor=\"let property of properties\" [value]=\"property.value\">\n {{property.label}}\n </mat-option>\n </mat-select>\n <mat-error *ngIf=\"isFieldValid('property', fieldsArray.controls[i])\">\n {{getErrorMessage('property', fieldsArray.controls[i])}}\n </mat-error>\n </mat-form-field>\n <button type=\"button\" mat-icon-button (click)=\"removeField(i)\" *ngIf=\"fieldsArray.length > 1\"\n matTooltip=\"Remove column\" matTooltipPosition=\"right\">\n <mat-icon class=\"text-danger\">remove_circle</mat-icon>\n </button>\n </td>\n </tr>\n </ng-container>\n </table>\n\n <div class=\"mt-1\" fxFlex=\"100%\" fxLayoutAlign=\"end\">\n <button mat-button class=\"mt-2 mr-2\" type=\"button\" (click)=\"location.back()\">\n Cancel\n </button>\n <button mat-stroked-button class=\"mt-2 mr-2 primary-color\" type=\"button\" (click)=\"reUpload()\">\n <mat-icon>\n <span class=\"material-icons-outlined\">\n file_upload\n </span>\n </mat-icon>\n Re-upload\n </button>\n <button mat-stroked-button class=\"mt-2 primary-bg text-white\" type=\"submit\">\n Next\n <mat-icon>\n chevron_right\n </mat-icon>\n </button>\n </div>\n </form>\n</div>\n", styles: ["table{width:100%}th,td{padding:1%}.table-header-row{background-color:#e6e4e4;color:#000;font-weight:bolder}\n"] }]
|
|
8184
8201
|
}], ctorParameters: function () { return [{ type: i1$4.UntypedFormBuilder }, { type: FormValidatorService }, { type: i0.ChangeDetectorRef }, { type: i3.Location }]; }, propDecorators: { data: [{
|
|
8185
8202
|
type: Input
|
|
8186
8203
|
}], config: [{
|
|
@@ -8234,10 +8251,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImpor
|
|
|
8234
8251
|
}] } });
|
|
8235
8252
|
|
|
8236
8253
|
let ImportCsvComponent = class ImportCsvComponent {
|
|
8237
|
-
constructor(alertService, errorHandler, http) {
|
|
8254
|
+
constructor(alertService, errorHandler, http, datePipe) {
|
|
8238
8255
|
this.alertService = alertService;
|
|
8239
8256
|
this.errorHandler = errorHandler;
|
|
8240
8257
|
this.http = http;
|
|
8258
|
+
this.datePipe = datePipe;
|
|
8241
8259
|
this.filesList = [];
|
|
8242
8260
|
this.data = [];
|
|
8243
8261
|
this.isUploaded = false;
|
|
@@ -8342,7 +8360,10 @@ let ImportCsvComponent = class ImportCsvComponent {
|
|
|
8342
8360
|
for (var key in data) {
|
|
8343
8361
|
var field = event.fields.find((field) => field.label == key);
|
|
8344
8362
|
if (field) {
|
|
8345
|
-
if (
|
|
8363
|
+
if (field.propertyType == 'date' && this.isValidDate(new Date(data[field.label]))) {
|
|
8364
|
+
data[field.property] = this.datePipe.transform(new Date(data[field.label]), 'yyyy-MM-dd');
|
|
8365
|
+
}
|
|
8366
|
+
else if (field.propertyType == 'dateTime' && this.isValidDate(new Date(data[field.label]))) {
|
|
8346
8367
|
data[field.property] = new Date(data[field.label]).toISOString();
|
|
8347
8368
|
}
|
|
8348
8369
|
else {
|
|
@@ -8350,9 +8371,6 @@ let ImportCsvComponent = class ImportCsvComponent {
|
|
|
8350
8371
|
}
|
|
8351
8372
|
delete data[key];
|
|
8352
8373
|
}
|
|
8353
|
-
else {
|
|
8354
|
-
delete data[key];
|
|
8355
|
-
}
|
|
8356
8374
|
}
|
|
8357
8375
|
});
|
|
8358
8376
|
this.save(tempFileData);
|
|
@@ -8398,15 +8416,15 @@ let ImportCsvComponent = class ImportCsvComponent {
|
|
|
8398
8416
|
this.currentStep = 1;
|
|
8399
8417
|
}
|
|
8400
8418
|
};
|
|
8401
|
-
ImportCsvComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: ImportCsvComponent, deps: [{ token: AlertService }, { token: ErrorHandlerService }, { token: HttpService }], target: i0.ɵɵFactoryTarget.Component });
|
|
8402
|
-
ImportCsvComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: ImportCsvComponent, selector: "app-import-csv", inputs: { config: "config" }, ngImport: i0, template: "<div fxLayout=\"column wrap\" class=\"p-4\">\n <mat-card fxFlex=\"100%\" fxLayoutAlign=\"center center\" class=\"p-0\">\n <mat-card-content fxFill fxLayout=\"row wrap\" fxLayoutAlign=\"center center\" class=\"primary-color\">\n <h4 fxFlex=\"20%\" class=\"ml-2\">\n Step {{step.step}}: <span class=\"normal-font-weight\">{{step?.title}}</span>\n </h4>\n <h3 fxFlex=\"80%\" fxLayoutAlign=\"center center\" class=\"text-dark\" fxLayoutGap=\"1rem grid\">\n <span>{{config?.title}} Import</span>\n <a *ngIf=\"config?.sampleFile && currentStep == 1\" style=\"color: inherit;\" [download]=\"config?.sampleFile?.name\"\n target=\"_blank\" [href]=\"config?.sampleFile?.path\" matTooltip=\"Download Sample file\" matTooltipPosition=\"below\"\n fxLayoutAlign=\"center center\">\n <button mat-stroked-button class=\"primary-color\">\n <mat-icon>\n download\n </mat-icon>\n Sample File\n </button>\n </a>\n </h3>\n </mat-card-content>\n </mat-card>\n <div fxFlex=\"100%\" class=\"mt-3\">\n <div fxLayout=\"row wrap\" fxLayoutGap=\"1rem grid\" *ngIf=\"currentStep==1 || currentStep == 2 || currentStep == 4\">\n <div fxFlex=\"100%\" fxFlex.gt-sm=\"0 1 calc(70%-1rem)\">\n <mat-card fxFlex=\"100%\">\n <mat-card-content fxLayout=\"column\">\n <div fxFlex=\"100%\">\n <section fxLayout=\"column\" *ngIf=\"config.importType && !this.fileData.length && !this.failedItems.length\">\n <h5 class=\"primary-color pb-3\">File Upload</h5>\n <app-file-dropper fxFill class=\"mb-2 drop-section\" [config]=\"filesConfig\" [fileArray]=\"filesList\"\n (fileChanged)=\"fileChanged($event)\">\n </app-file-dropper>\n <app-import-history-list *ngIf=\"config.importHistory.isEnabled\" [config]=\"config\">\n </app-import-history-list>\n </section>\n <app-field-mapping class=\"w-100\" *ngIf=\"this.fileData.length > 0 && !this.failedItems.length\"\n [data]=\"fileData\" [config]=\"config\" (onSave)=\"mappingProcessed($event)\" (onReUpload)=\"reUpload()\">\n </app-field-mapping>\n <app-failed-items-list class=\"w-100\" *ngIf=\"this.failedItems.length > 0\" [failedItems]=\"failedItems\"\n [selectedFields]=\"selectedFields\" (onReUpload)=\"reUpload()\"></app-failed-items-list>\n </div>\n </mat-card-content>\n </mat-card>\n </div>\n <div fxFlex=\"100%\" fxFlex.gt-sm=\"30%\">\n <mat-card fxFlex=\"100%\">\n <mat-card-content fxLayout=\"column\" fxLayoutAlign=\"start start\">\n <h5 class=\"primary-color pb-3\">Instructions & Requirements</h5>\n <div class=\"text-muted\">\n <p>\n Please use this yyyy
|
|
8419
|
+
ImportCsvComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: ImportCsvComponent, deps: [{ token: AlertService }, { token: ErrorHandlerService }, { token: HttpService }, { token: i3.DatePipe }], target: i0.ɵɵFactoryTarget.Component });
|
|
8420
|
+
ImportCsvComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: ImportCsvComponent, selector: "app-import-csv", inputs: { config: "config" }, ngImport: i0, template: "<div fxLayout=\"column wrap\" class=\"p-4\">\n <mat-card fxFlex=\"100%\" fxLayoutAlign=\"center center\" class=\"p-0\">\n <mat-card-content fxFill fxLayout=\"row wrap\" fxLayoutAlign=\"center center\" class=\"primary-color\">\n <h4 fxFlex=\"20%\" class=\"ml-2\">\n Step {{step.step}}: <span class=\"normal-font-weight\">{{step?.title}}</span>\n </h4>\n <h3 fxFlex=\"80%\" fxLayoutAlign=\"center center\" class=\"text-dark\" fxLayoutGap=\"1rem grid\">\n <span>{{config?.title}} Import</span>\n <a *ngIf=\"config?.sampleFile && currentStep == 1\" style=\"color: inherit;\" [download]=\"config?.sampleFile?.name\"\n target=\"_blank\" [href]=\"config?.sampleFile?.path\" matTooltip=\"Download Sample file\" matTooltipPosition=\"below\"\n fxLayoutAlign=\"center center\">\n <button mat-stroked-button class=\"primary-color\">\n <mat-icon>\n download\n </mat-icon>\n Sample File\n </button>\n </a>\n </h3>\n </mat-card-content>\n </mat-card>\n <div fxFlex=\"100%\" class=\"mt-3\">\n <div fxLayout=\"row wrap\" fxLayoutGap=\"1rem grid\" *ngIf=\"currentStep==1 || currentStep == 2 || currentStep == 4\">\n <div fxFlex=\"100%\" fxFlex.gt-sm=\"0 1 calc(70%-1rem)\">\n <mat-card fxFlex=\"100%\">\n <mat-card-content fxLayout=\"column\">\n <div fxFlex=\"100%\">\n <section fxLayout=\"column\" *ngIf=\"config.importType && !this.fileData.length && !this.failedItems.length\">\n <h5 class=\"primary-color pb-3\">File Upload</h5>\n <app-file-dropper fxFill class=\"mb-2 drop-section\" [config]=\"filesConfig\" [fileArray]=\"filesList\"\n (fileChanged)=\"fileChanged($event)\">\n </app-file-dropper>\n <app-import-history-list *ngIf=\"config.importHistory.isEnabled\" [config]=\"config\">\n </app-import-history-list>\n </section>\n <app-field-mapping class=\"w-100\" *ngIf=\"this.fileData.length > 0 && !this.failedItems.length\"\n [data]=\"fileData\" [config]=\"config\" (onSave)=\"mappingProcessed($event)\" (onReUpload)=\"reUpload()\">\n </app-field-mapping>\n <app-failed-items-list class=\"w-100\" *ngIf=\"this.failedItems.length > 0\" [failedItems]=\"failedItems\"\n [selectedFields]=\"selectedFields\" (onReUpload)=\"reUpload()\"></app-failed-items-list>\n </div>\n </mat-card-content>\n </mat-card>\n </div>\n <div fxFlex=\"100%\" fxFlex.gt-sm=\"30%\">\n <mat-card fxFlex=\"100%\">\n <mat-card-content fxLayout=\"column\" fxLayoutAlign=\"start start\">\n <h5 class=\"primary-color pb-3\">Instructions & Requirements</h5>\n <div class=\"text-muted\">\n <p>\n Please use this yyyy/MM/dd date format for all the date fields. Otherwise your date fields will be\n incorrect or not will be accepted. Ex: 2021/09/27\n </p>\n <ng-container *ngIf=\"config?.customErrorMessages\">\n <p *ngFor=\"let message of config?.customErrorMessages\">\n {{message}}\n </p>\n </ng-container>\n </div>\n </mat-card-content>\n </mat-card>\n </div>\n </div>\n <div fxLayout=\"column wrap\" class=\"p-4\" *ngIf=\"currentStep==3 || currentStep == 5\">\n <app-data-import [step]=\"step\" fxLayoutAlign=\"center center\"></app-data-import>\n </div>\n <div fxLayout=\"column wrap\" class=\"p-4\" *ngIf=\"currentStep == 6\">\n <app-import-success [data]=\"result\" [config]=\"config\" fxLayoutAlign=\"center center\"></app-import-success>\n </div>\n </div>\n</div>\n", styles: [".drop-section{width:500px!important}.mat-card-title{margin:0!important}.clickable-card{width:100%}.normal-font-weight{font-weight:200!important}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i7.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i7.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i7.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "directive", type: i7.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "component", type: i5.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i7$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i10$1.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { kind: "directive", type: i10$1.MatCardContent, selector: "mat-card-content, [mat-card-content], [matCardContent]" }, { kind: "directive", type: i5$1.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: FileDropperComponent, selector: "app-file-dropper", inputs: ["fileArray", "config", "styles"], outputs: ["fileChanged"] }, { kind: "component", type: FieldMappingComponent, selector: "app-field-mapping", inputs: ["data", "config"], outputs: ["onSave", "onReUpload"] }, { kind: "component", type: FailedItemsListComponent, selector: "app-failed-items-list", inputs: ["failedItems", "selectedFields"], outputs: ["onReUpload"] }, { kind: "component", type: ImportHistoryListComponent, selector: "app-import-history-list", inputs: ["config"] }, { kind: "component", type: ImportSuccessComponent, selector: "app-import-success", inputs: ["data", "config"] }, { kind: "component", type: DataImportComponent, selector: "app-data-import", inputs: ["step"] }] });
|
|
8403
8421
|
ImportCsvComponent = __decorate([
|
|
8404
8422
|
UntilDestroy()
|
|
8405
8423
|
], ImportCsvComponent);
|
|
8406
8424
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: ImportCsvComponent, decorators: [{
|
|
8407
8425
|
type: Component,
|
|
8408
|
-
args: [{ selector: 'app-import-csv', template: "<div fxLayout=\"column wrap\" class=\"p-4\">\n <mat-card fxFlex=\"100%\" fxLayoutAlign=\"center center\" class=\"p-0\">\n <mat-card-content fxFill fxLayout=\"row wrap\" fxLayoutAlign=\"center center\" class=\"primary-color\">\n <h4 fxFlex=\"20%\" class=\"ml-2\">\n Step {{step.step}}: <span class=\"normal-font-weight\">{{step?.title}}</span>\n </h4>\n <h3 fxFlex=\"80%\" fxLayoutAlign=\"center center\" class=\"text-dark\" fxLayoutGap=\"1rem grid\">\n <span>{{config?.title}} Import</span>\n <a *ngIf=\"config?.sampleFile && currentStep == 1\" style=\"color: inherit;\" [download]=\"config?.sampleFile?.name\"\n target=\"_blank\" [href]=\"config?.sampleFile?.path\" matTooltip=\"Download Sample file\" matTooltipPosition=\"below\"\n fxLayoutAlign=\"center center\">\n <button mat-stroked-button class=\"primary-color\">\n <mat-icon>\n download\n </mat-icon>\n Sample File\n </button>\n </a>\n </h3>\n </mat-card-content>\n </mat-card>\n <div fxFlex=\"100%\" class=\"mt-3\">\n <div fxLayout=\"row wrap\" fxLayoutGap=\"1rem grid\" *ngIf=\"currentStep==1 || currentStep == 2 || currentStep == 4\">\n <div fxFlex=\"100%\" fxFlex.gt-sm=\"0 1 calc(70%-1rem)\">\n <mat-card fxFlex=\"100%\">\n <mat-card-content fxLayout=\"column\">\n <div fxFlex=\"100%\">\n <section fxLayout=\"column\" *ngIf=\"config.importType && !this.fileData.length && !this.failedItems.length\">\n <h5 class=\"primary-color pb-3\">File Upload</h5>\n <app-file-dropper fxFill class=\"mb-2 drop-section\" [config]=\"filesConfig\" [fileArray]=\"filesList\"\n (fileChanged)=\"fileChanged($event)\">\n </app-file-dropper>\n <app-import-history-list *ngIf=\"config.importHistory.isEnabled\" [config]=\"config\">\n </app-import-history-list>\n </section>\n <app-field-mapping class=\"w-100\" *ngIf=\"this.fileData.length > 0 && !this.failedItems.length\"\n [data]=\"fileData\" [config]=\"config\" (onSave)=\"mappingProcessed($event)\" (onReUpload)=\"reUpload()\">\n </app-field-mapping>\n <app-failed-items-list class=\"w-100\" *ngIf=\"this.failedItems.length > 0\" [failedItems]=\"failedItems\"\n [selectedFields]=\"selectedFields\" (onReUpload)=\"reUpload()\"></app-failed-items-list>\n </div>\n </mat-card-content>\n </mat-card>\n </div>\n <div fxFlex=\"100%\" fxFlex.gt-sm=\"30%\">\n <mat-card fxFlex=\"100%\">\n <mat-card-content fxLayout=\"column\" fxLayoutAlign=\"start start\">\n <h5 class=\"primary-color pb-3\">Instructions & Requirements</h5>\n <div class=\"text-muted\">\n <p>\n Please use this yyyy
|
|
8409
|
-
}], ctorParameters: function () { return [{ type: AlertService }, { type: ErrorHandlerService }, { type: HttpService }]; }, propDecorators: { config: [{
|
|
8426
|
+
args: [{ selector: 'app-import-csv', template: "<div fxLayout=\"column wrap\" class=\"p-4\">\n <mat-card fxFlex=\"100%\" fxLayoutAlign=\"center center\" class=\"p-0\">\n <mat-card-content fxFill fxLayout=\"row wrap\" fxLayoutAlign=\"center center\" class=\"primary-color\">\n <h4 fxFlex=\"20%\" class=\"ml-2\">\n Step {{step.step}}: <span class=\"normal-font-weight\">{{step?.title}}</span>\n </h4>\n <h3 fxFlex=\"80%\" fxLayoutAlign=\"center center\" class=\"text-dark\" fxLayoutGap=\"1rem grid\">\n <span>{{config?.title}} Import</span>\n <a *ngIf=\"config?.sampleFile && currentStep == 1\" style=\"color: inherit;\" [download]=\"config?.sampleFile?.name\"\n target=\"_blank\" [href]=\"config?.sampleFile?.path\" matTooltip=\"Download Sample file\" matTooltipPosition=\"below\"\n fxLayoutAlign=\"center center\">\n <button mat-stroked-button class=\"primary-color\">\n <mat-icon>\n download\n </mat-icon>\n Sample File\n </button>\n </a>\n </h3>\n </mat-card-content>\n </mat-card>\n <div fxFlex=\"100%\" class=\"mt-3\">\n <div fxLayout=\"row wrap\" fxLayoutGap=\"1rem grid\" *ngIf=\"currentStep==1 || currentStep == 2 || currentStep == 4\">\n <div fxFlex=\"100%\" fxFlex.gt-sm=\"0 1 calc(70%-1rem)\">\n <mat-card fxFlex=\"100%\">\n <mat-card-content fxLayout=\"column\">\n <div fxFlex=\"100%\">\n <section fxLayout=\"column\" *ngIf=\"config.importType && !this.fileData.length && !this.failedItems.length\">\n <h5 class=\"primary-color pb-3\">File Upload</h5>\n <app-file-dropper fxFill class=\"mb-2 drop-section\" [config]=\"filesConfig\" [fileArray]=\"filesList\"\n (fileChanged)=\"fileChanged($event)\">\n </app-file-dropper>\n <app-import-history-list *ngIf=\"config.importHistory.isEnabled\" [config]=\"config\">\n </app-import-history-list>\n </section>\n <app-field-mapping class=\"w-100\" *ngIf=\"this.fileData.length > 0 && !this.failedItems.length\"\n [data]=\"fileData\" [config]=\"config\" (onSave)=\"mappingProcessed($event)\" (onReUpload)=\"reUpload()\">\n </app-field-mapping>\n <app-failed-items-list class=\"w-100\" *ngIf=\"this.failedItems.length > 0\" [failedItems]=\"failedItems\"\n [selectedFields]=\"selectedFields\" (onReUpload)=\"reUpload()\"></app-failed-items-list>\n </div>\n </mat-card-content>\n </mat-card>\n </div>\n <div fxFlex=\"100%\" fxFlex.gt-sm=\"30%\">\n <mat-card fxFlex=\"100%\">\n <mat-card-content fxLayout=\"column\" fxLayoutAlign=\"start start\">\n <h5 class=\"primary-color pb-3\">Instructions & Requirements</h5>\n <div class=\"text-muted\">\n <p>\n Please use this yyyy/MM/dd date format for all the date fields. Otherwise your date fields will be\n incorrect or not will be accepted. Ex: 2021/09/27\n </p>\n <ng-container *ngIf=\"config?.customErrorMessages\">\n <p *ngFor=\"let message of config?.customErrorMessages\">\n {{message}}\n </p>\n </ng-container>\n </div>\n </mat-card-content>\n </mat-card>\n </div>\n </div>\n <div fxLayout=\"column wrap\" class=\"p-4\" *ngIf=\"currentStep==3 || currentStep == 5\">\n <app-data-import [step]=\"step\" fxLayoutAlign=\"center center\"></app-data-import>\n </div>\n <div fxLayout=\"column wrap\" class=\"p-4\" *ngIf=\"currentStep == 6\">\n <app-import-success [data]=\"result\" [config]=\"config\" fxLayoutAlign=\"center center\"></app-import-success>\n </div>\n </div>\n</div>\n", styles: [".drop-section{width:500px!important}.mat-card-title{margin:0!important}.clickable-card{width:100%}.normal-font-weight{font-weight:200!important}\n"] }]
|
|
8427
|
+
}], ctorParameters: function () { return [{ type: AlertService }, { type: ErrorHandlerService }, { type: HttpService }, { type: i3.DatePipe }]; }, propDecorators: { config: [{
|
|
8410
8428
|
type: Input
|
|
8411
8429
|
}] } });
|
|
8412
8430
|
|
|
@@ -10037,7 +10055,7 @@ class PasswordCheckService {
|
|
|
10037
10055
|
}
|
|
10038
10056
|
// Check for at least one capital letter
|
|
10039
10057
|
if (isPasswordRequireCapitalLetter) {
|
|
10040
|
-
result.hasCapitalLetter = /[A-Z]/.test(password);
|
|
10058
|
+
result.hasCapitalLetter = /[A-Z]/.test(password) && /[a-z]/.test(password);
|
|
10041
10059
|
}
|
|
10042
10060
|
// Check if all requirements are fulfilled
|
|
10043
10061
|
result.isValid = Object.values(result).every(value => value === true);
|
|
@@ -10113,10 +10131,10 @@ class PasswordRequirementCheckComponent {
|
|
|
10113
10131
|
}
|
|
10114
10132
|
}
|
|
10115
10133
|
PasswordRequirementCheckComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: PasswordRequirementCheckComponent, deps: [{ token: AccessControlConfigService }], target: i0.ɵɵFactoryTarget.Component });
|
|
10116
|
-
PasswordRequirementCheckComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: PasswordRequirementCheckComponent, selector: "techlify-password-requirement-check", inputs: { password: "password" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"alert\"\n style=\"font-size: 12px; padding: 5px;\"\n [ngClass]=\"{ 'alert-success' : result.isValid, 'alert-danger': !result.isValid }\"\n *ngIf=\"showResult\">\n <ul style=\"margin-bottom: 2px; padding-inline-start: 20px;\">\n <li *ngIf=\"accessControlConfiguration?.minPasswordLength > 0\">\n <span [ngClass]=\"{ 'text-success': result.minLength, 'text-danger': !result.minLength }\">\n Minimum Length Requirement: {{ accessControlConfiguration?.minPasswordLength }} Characters\n </span>\n </li>\n <li *ngIf=\"accessControlConfiguration?.isPasswordRequireNumber\">\n <span [ngClass]=\"{ 'text-success': result.hasNumber, 'text-danger': !result.hasNumber }\">\n Your password is required to add at least 1 number\n </span>\n </li>\n <li *ngIf=\"accessControlConfiguration?.isPasswordRequireSymbol\">\n <span [ngClass]=\"{ 'text-success': result.hasSymbol, 'text-danger': !result.hasSymbol }\">\n Your password is required to add at least 1 symbol.\n </span>\n </li>\n <li *ngIf=\"accessControlConfiguration?.isPasswordRequireCapitalLetter\">\n <span [ngClass]=\"{ 'text-success': result.hasCapitalLetter, 'text-danger': !result.hasCapitalLetter }\">\n Your password is required to add at least 1 capital letter\n </span>\n </li>\n </ul>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
10134
|
+
PasswordRequirementCheckComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: PasswordRequirementCheckComponent, selector: "techlify-password-requirement-check", inputs: { password: "password" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"alert\"\n style=\"font-size: 12px; padding: 5px;\"\n [ngClass]=\"{ 'alert-success' : result.isValid, 'alert-danger': !result.isValid }\"\n *ngIf=\"showResult\">\n <ul style=\"margin-bottom: 2px; padding-inline-start: 20px;\">\n <li *ngIf=\"accessControlConfiguration?.minPasswordLength > 0\">\n <span [ngClass]=\"{ 'text-success': result.minLength, 'text-danger': !result.minLength }\">\n Minimum Length Requirement: {{ accessControlConfiguration?.minPasswordLength }} Characters\n </span>\n </li>\n <li *ngIf=\"accessControlConfiguration?.isPasswordRequireNumber\">\n <span [ngClass]=\"{ 'text-success': result.hasNumber, 'text-danger': !result.hasNumber }\">\n Your password is required to add at least 1 number\n </span>\n </li>\n <li *ngIf=\"accessControlConfiguration?.isPasswordRequireSymbol\">\n <span [ngClass]=\"{ 'text-success': result.hasSymbol, 'text-danger': !result.hasSymbol }\">\n Your password is required to add at least 1 symbol.\n </span>\n </li>\n <li *ngIf=\"accessControlConfiguration?.isPasswordRequireCapitalLetter\">\n <span [ngClass]=\"{ 'text-success': result.hasCapitalLetter, 'text-danger': !result.hasCapitalLetter }\">\n Your password is required to add at least 1 capital and small letter\n </span>\n </li>\n </ul>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
10117
10135
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: PasswordRequirementCheckComponent, decorators: [{
|
|
10118
10136
|
type: Component,
|
|
10119
|
-
args: [{ selector: 'techlify-password-requirement-check', template: "<div class=\"alert\"\n style=\"font-size: 12px; padding: 5px;\"\n [ngClass]=\"{ 'alert-success' : result.isValid, 'alert-danger': !result.isValid }\"\n *ngIf=\"showResult\">\n <ul style=\"margin-bottom: 2px; padding-inline-start: 20px;\">\n <li *ngIf=\"accessControlConfiguration?.minPasswordLength > 0\">\n <span [ngClass]=\"{ 'text-success': result.minLength, 'text-danger': !result.minLength }\">\n Minimum Length Requirement: {{ accessControlConfiguration?.minPasswordLength }} Characters\n </span>\n </li>\n <li *ngIf=\"accessControlConfiguration?.isPasswordRequireNumber\">\n <span [ngClass]=\"{ 'text-success': result.hasNumber, 'text-danger': !result.hasNumber }\">\n Your password is required to add at least 1 number\n </span>\n </li>\n <li *ngIf=\"accessControlConfiguration?.isPasswordRequireSymbol\">\n <span [ngClass]=\"{ 'text-success': result.hasSymbol, 'text-danger': !result.hasSymbol }\">\n Your password is required to add at least 1 symbol.\n </span>\n </li>\n <li *ngIf=\"accessControlConfiguration?.isPasswordRequireCapitalLetter\">\n <span [ngClass]=\"{ 'text-success': result.hasCapitalLetter, 'text-danger': !result.hasCapitalLetter }\">\n Your password is required to add at least 1 capital letter\n </span>\n </li>\n </ul>\n</div>\n" }]
|
|
10137
|
+
args: [{ selector: 'techlify-password-requirement-check', template: "<div class=\"alert\"\n style=\"font-size: 12px; padding: 5px;\"\n [ngClass]=\"{ 'alert-success' : result.isValid, 'alert-danger': !result.isValid }\"\n *ngIf=\"showResult\">\n <ul style=\"margin-bottom: 2px; padding-inline-start: 20px;\">\n <li *ngIf=\"accessControlConfiguration?.minPasswordLength > 0\">\n <span [ngClass]=\"{ 'text-success': result.minLength, 'text-danger': !result.minLength }\">\n Minimum Length Requirement: {{ accessControlConfiguration?.minPasswordLength }} Characters\n </span>\n </li>\n <li *ngIf=\"accessControlConfiguration?.isPasswordRequireNumber\">\n <span [ngClass]=\"{ 'text-success': result.hasNumber, 'text-danger': !result.hasNumber }\">\n Your password is required to add at least 1 number\n </span>\n </li>\n <li *ngIf=\"accessControlConfiguration?.isPasswordRequireSymbol\">\n <span [ngClass]=\"{ 'text-success': result.hasSymbol, 'text-danger': !result.hasSymbol }\">\n Your password is required to add at least 1 symbol.\n </span>\n </li>\n <li *ngIf=\"accessControlConfiguration?.isPasswordRequireCapitalLetter\">\n <span [ngClass]=\"{ 'text-success': result.hasCapitalLetter, 'text-danger': !result.hasCapitalLetter }\">\n Your password is required to add at least 1 capital and small letter\n </span>\n </li>\n </ul>\n</div>\n" }]
|
|
10120
10138
|
}], ctorParameters: function () { return [{ type: AccessControlConfigService }]; }, propDecorators: { password: [{
|
|
10121
10139
|
type: Input
|
|
10122
10140
|
}] } });
|
|
@@ -10317,10 +10335,10 @@ class ForgotPasswordComponent {
|
|
|
10317
10335
|
}
|
|
10318
10336
|
}
|
|
10319
10337
|
ForgotPasswordComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: ForgotPasswordComponent, deps: [{ token: HttpService }, { token: AlertService }, { token: i1$5.Router }, { token: CurrentUserService }, { token: ErrorHandlerService }, { token: CredentialsService }, { token: i1$4.UntypedFormBuilder }, { token: FormValidatorService }, { token: UserConfigService }], target: i0.ɵɵFactoryTarget.Component });
|
|
10320
|
-
ForgotPasswordComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: ForgotPasswordComponent, selector: "forgot-password", ngImport: i0, template: "<div class=\"h-100 row align-items-center mx-0\">\n <div class=\"col\">\n <header class=\"branding-block mb-0 mt-4\">\n <div class=\"branding text-center\">\n <a *ngIf=\"userConfig.appLogoUrl\" href=\"{{userConfig.appUrl}}\" target=\"_blank\">\n <img class=\"techlify-logo d-inline-block\" [src]=\"userConfig.appLogoUrl\" />\n </a>\n </div>\n <div class=\"product-info text-center mt-2\">\n <h3 class=\"product-name\">{{ userConfig.appName }}</h3>\n </div>\n </header>\n\n <div id=\"login-form-wrapper\"\n class=\"form-bordered mx-auto form-medium form-bordered form-centered form-horizontal mt-3 white-box\"\n style=\"width:550px\">\n\n <h4 class=\"section-title text-center mt-4\">RESET</h4>\n\n <form [formGroup]=\"forgotPasswordForm\" (ngSubmit)=\"sendOtp()\" class=\"mt-4\">\n\n <div class=\"form-group row\">\n <mat-form-field class=\"offset-2 col-8\">\n <input matInput formControlName=\"email\" placeholder=\"Email\" type=\"email\" autocomplete=\"off\"\n required />\n <mat-error *ngIf=\"isFieldValid('email')\">{{getErrorMessage('email')}}</mat-error>\n </mat-form-field>\n </div>\n\n <div class=\"row mt-4\">\n <div class=\"col-12 text-center\">\n <button mat-button
|
|
10338
|
+
ForgotPasswordComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: ForgotPasswordComponent, selector: "forgot-password", ngImport: i0, template: "<div class=\"h-100 row align-items-center mx-0\">\n <div class=\"col\">\n <header class=\"branding-block mb-0 mt-4\">\n <div class=\"branding text-center\">\n <a *ngIf=\"userConfig.appLogoUrl\" href=\"{{userConfig.appUrl}}\" target=\"_blank\">\n <img class=\"techlify-logo d-inline-block\" [src]=\"userConfig.appLogoUrl\" />\n </a>\n </div>\n <div class=\"product-info text-center mt-2\">\n <h3 class=\"product-name\">{{ userConfig.appName }}</h3>\n </div>\n </header>\n\n <div id=\"login-form-wrapper\"\n class=\"form-bordered mx-auto form-medium form-bordered form-centered form-horizontal mt-3 white-box\"\n style=\"width:550px\">\n\n <h4 class=\"section-title text-center mt-4\">RESET</h4>\n\n <form [formGroup]=\"forgotPasswordForm\" (ngSubmit)=\"sendOtp()\" class=\"mt-4\">\n\n <div class=\"form-group row\">\n <mat-form-field class=\"offset-2 col-8\">\n <input matInput formControlName=\"email\" placeholder=\"Email\" type=\"email\" autocomplete=\"off\"\n required />\n <mat-error *ngIf=\"isFieldValid('email')\">{{getErrorMessage('email')}}</mat-error>\n </mat-form-field>\n </div>\n\n <div class=\"row mt-4\">\n <div class=\"col-12 text-center\">\n <button mat-raised-button color=\"primary\" class=\"w-50\" type=\"submit\"\n [disabled]=\"isWorking\">\n Send OTP\n </button>\n </div>\n </div>\n </form>\n </div>\n\n <div class=\"row mt-3 mr-0 ml-0\" *ngIf=\"userConfig.showSignup\">\n <div class=\"col-12 text-center\">\n <p>New to {{ userConfig.appName }}?</p>\n <button mat-button class=\"btn btn-sm btn-secondary text-white\" style=\"width: 550px;\" type=\"button\"\n [routerLink]=\"['/signup']\">\n Create an account\n </button>\n </div>\n </div>\n </div>\n</div>\n", styles: ["#login-form-wrapper{margin-top:100px}#login-form-wrapper .branding-block{margin-bottom:60px}#login-form-wrapper .techlify-logo{height:40px;padding-right:10px;bottom:10px;position:relative}#login-form-wrapper .company-name{margin-bottom:0}:host{width:100%}.white-box{background-color:#fff;padding:10px}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i5.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i8$4.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i8$4.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i9.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: i1$5.RouterLink, selector: ":not(a):not(area)[routerLink]", inputs: ["queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] });
|
|
10321
10339
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: ForgotPasswordComponent, decorators: [{
|
|
10322
10340
|
type: Component,
|
|
10323
|
-
args: [{ selector: 'forgot-password', template: "<div class=\"h-100 row align-items-center mx-0\">\n <div class=\"col\">\n <header class=\"branding-block mb-0 mt-4\">\n <div class=\"branding text-center\">\n <a *ngIf=\"userConfig.appLogoUrl\" href=\"{{userConfig.appUrl}}\" target=\"_blank\">\n <img class=\"techlify-logo d-inline-block\" [src]=\"userConfig.appLogoUrl\" />\n </a>\n </div>\n <div class=\"product-info text-center mt-2\">\n <h3 class=\"product-name\">{{ userConfig.appName }}</h3>\n </div>\n </header>\n\n <div id=\"login-form-wrapper\"\n class=\"form-bordered mx-auto form-medium form-bordered form-centered form-horizontal mt-3 white-box\"\n style=\"width:550px\">\n\n <h4 class=\"section-title text-center mt-4\">RESET</h4>\n\n <form [formGroup]=\"forgotPasswordForm\" (ngSubmit)=\"sendOtp()\" class=\"mt-4\">\n\n <div class=\"form-group row\">\n <mat-form-field class=\"offset-2 col-8\">\n <input matInput formControlName=\"email\" placeholder=\"Email\" type=\"email\" autocomplete=\"off\"\n required />\n <mat-error *ngIf=\"isFieldValid('email')\">{{getErrorMessage('email')}}</mat-error>\n </mat-form-field>\n </div>\n\n <div class=\"row mt-4\">\n <div class=\"col-12 text-center\">\n <button mat-button
|
|
10341
|
+
args: [{ selector: 'forgot-password', template: "<div class=\"h-100 row align-items-center mx-0\">\n <div class=\"col\">\n <header class=\"branding-block mb-0 mt-4\">\n <div class=\"branding text-center\">\n <a *ngIf=\"userConfig.appLogoUrl\" href=\"{{userConfig.appUrl}}\" target=\"_blank\">\n <img class=\"techlify-logo d-inline-block\" [src]=\"userConfig.appLogoUrl\" />\n </a>\n </div>\n <div class=\"product-info text-center mt-2\">\n <h3 class=\"product-name\">{{ userConfig.appName }}</h3>\n </div>\n </header>\n\n <div id=\"login-form-wrapper\"\n class=\"form-bordered mx-auto form-medium form-bordered form-centered form-horizontal mt-3 white-box\"\n style=\"width:550px\">\n\n <h4 class=\"section-title text-center mt-4\">RESET</h4>\n\n <form [formGroup]=\"forgotPasswordForm\" (ngSubmit)=\"sendOtp()\" class=\"mt-4\">\n\n <div class=\"form-group row\">\n <mat-form-field class=\"offset-2 col-8\">\n <input matInput formControlName=\"email\" placeholder=\"Email\" type=\"email\" autocomplete=\"off\"\n required />\n <mat-error *ngIf=\"isFieldValid('email')\">{{getErrorMessage('email')}}</mat-error>\n </mat-form-field>\n </div>\n\n <div class=\"row mt-4\">\n <div class=\"col-12 text-center\">\n <button mat-raised-button color=\"primary\" class=\"w-50\" type=\"submit\"\n [disabled]=\"isWorking\">\n Send OTP\n </button>\n </div>\n </div>\n </form>\n </div>\n\n <div class=\"row mt-3 mr-0 ml-0\" *ngIf=\"userConfig.showSignup\">\n <div class=\"col-12 text-center\">\n <p>New to {{ userConfig.appName }}?</p>\n <button mat-button class=\"btn btn-sm btn-secondary text-white\" style=\"width: 550px;\" type=\"button\"\n [routerLink]=\"['/signup']\">\n Create an account\n </button>\n </div>\n </div>\n </div>\n</div>\n", styles: ["#login-form-wrapper{margin-top:100px}#login-form-wrapper .branding-block{margin-bottom:60px}#login-form-wrapper .techlify-logo{height:40px;padding-right:10px;bottom:10px;position:relative}#login-form-wrapper .company-name{margin-bottom:0}:host{width:100%}.white-box{background-color:#fff;padding:10px}\n"] }]
|
|
10324
10342
|
}], ctorParameters: function () { return [{ type: HttpService }, { type: AlertService }, { type: i1$5.Router }, { type: CurrentUserService }, { type: ErrorHandlerService }, { type: CredentialsService }, { type: i1$4.UntypedFormBuilder }, { type: FormValidatorService }, { type: UserConfigService }]; } });
|
|
10325
10343
|
|
|
10326
10344
|
const routes$8 = [
|