@sumaris-net/ngx-components 2.0.2 → 2.0.3
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/public_api.mjs +2 -2
- package/esm2020/src/app/core/home/home.mjs +3 -3
- package/esm2020/src/app/shared/image/gallery/image-gallery.component.mjs +3 -3
- package/esm2020/src/app/shared/material/datetime/material.date.mjs +2 -2
- package/esm2020/src/app/shared/material/datetime/material.datetime.mjs +2 -2
- package/esm2020/src/app/social/job/job.model.mjs +1 -23
- package/esm2020/src/app/social/job/progression/job-progression.icon.mjs +11 -8
- package/esm2020/src/app/social/job/progression/job-progression.list.mjs +3 -3
- package/esm2020/src/app/social/job/progression/job-progression.model.mjs +23 -0
- package/esm2020/src/app/social/job/progression/job-progression.service.mjs +71 -0
- package/esm2020/src/app/social/job/testing/job-progression.testing.mjs +4 -5
- package/esm2020/src/app/social/job/testing/job-progression.testing.service.mjs +2 -2
- package/esm2020/src/app/social/user-event/notification/user-event-notification.list.mjs +2 -2
- package/fesm2015/sumaris-net.ngx-components.mjs +28 -25
- package/fesm2015/sumaris-net.ngx-components.mjs.map +1 -1
- package/fesm2020/sumaris-net.ngx-components.mjs +28 -24
- package/fesm2020/sumaris-net.ngx-components.mjs.map +1 -1
- package/package.json +1 -1
- package/public_api.d.ts +1 -1
- package/src/app/social/job/job.model.d.ts +0 -11
- package/src/app/social/job/progression/job-progression.icon.d.ts +2 -2
- package/src/app/social/job/progression/job-progression.list.d.ts +1 -1
- package/src/app/social/job/progression/job-progression.model.d.ts +11 -0
- package/src/app/social/job/{job.service.d.ts → progression/job-progression.service.d.ts} +5 -5
- package/src/app/social/job/testing/job-progression.testing.d.ts +4 -4
- package/src/app/social/job/testing/job-progression.testing.service.d.ts +2 -2
- package/esm2020/src/app/social/job/job.service.mjs +0 -71
|
@@ -382,12 +382,12 @@ export class MatDateTime {
|
|
|
382
382
|
MatDateTime.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: MatDateTime, deps: [{ token: i1.MomentDateAdapter }, { token: i2.TranslateService }, { token: i3.UntypedFormBuilder }, { token: i0.ChangeDetectorRef }, { token: i3.FormGroupDirective, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
383
383
|
MatDateTime.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.8", type: MatDateTime, selector: "mat-date-time-field", inputs: { formControl: "formControl", formControlName: "formControlName", placeholder: "placeholder", floatLabel: "floatLabel", appearance: "appearance", required: "required", mobile: "mobile", compact: "compact", placeholderChar: "placeholderChar", autofocus: "autofocus", startDate: "startDate", clearable: "clearable", datePickerFilter: "datePickerFilter", readonly: "readonly", tabindex: "tabindex" }, providers: [
|
|
384
384
|
DEFAULT_VALUE_ACCESSOR,
|
|
385
|
-
], viewQueries: [{ propertyName: "datePicker", first: true, predicate: ["datePicker"], descendants: true }, { propertyName: "timePicker", first: true, predicate: ["timePicker"], descendants: true }, { propertyName: "matInputs", predicate: ["matInput"], descendants: true }], ngImport: i0, template: "<!-- readonly -->\n<mat-form-field *ngIf=\"readonly; else writable\"\n [floatLabel]=\"floatLabel\"\n [appearance]=\"appearance\"\n class=\"mat-form-field-disabled\">\n\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <input matInput hidden type=\"text\"\n readonly\n [placeholder]=\"placeholder\"\n [formControl]=\"formControl\">\n <ion-text>{{formControl.value|dateFormat: {pattern: displayPattern} }}</ion-text>\n</mat-form-field>\n\n<!-- writable + time -->\n<ng-template #writable >\n <ion-grid class=\"ion-no-padding mat-form-field-{{appearance}}\">\n <ion-row class=\"ion-no-padding no-wrap\" nowrap>\n\n <!-- day -->\n <ion-col class=\"day ion-no-padding\">\n <mat-form-field [floatLabel]=\"floatLabel\"\n [appearance]=\"appearance\"\n [class.mat-form-field-invalid]=\"formControl.touched && formControl.invalid\"\n >\n\n <mat-label (focusin)=\"mobile && _preventEvent($event)\" *ngIf=\"placeholder\" >{{placeholder}}</mat-label>\n\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <!-- Desktop -->\n <input matInput #matInput autocomplete=\"off\" type=\"text\"\n class=\"mat-input-element\"\n *ngIf=\"!mobile\"\n [formControl]=\"dayControl\"\n [textMask]=\"{mask: dayMask, keepCharPositions: true, placeholderChar: placeholderChar}\"\n [placeholder]=\"'COMMON.DATE_PLACEHOLDER'|translate\"\n (blur)=\"_checkIfTouched()\"\n (keyup.arrowDown)=\"openDatePicker($event, datePicker)\"\n (keyup.escape)=\"_preventEvent($event)\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n [appAutofocus]=\"autofocus\">\n <input type=\"text\" [formControl]=\"formControl\" hidden\n *ngIf=\"!mobile\"\n [matDatepicker]=\"datePicker\"\n [matDatepickerFilter]=\"datePickerFilter\"\n (dateChange)=\"_onDatePickerChange($event)\"\n readonly>\n\n <!-- Mobile -->\n <input #matInput autocomplete=\"off\" type=\"text\"\n class=\"mat-input-element\"\n *ngIf=\"mobile\"\n [formControl]=\"dayControl\"\n (click)=\"_openDatePickerIfMobile($event, datePicker)\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n readonly>\n <!-- The hidden input (need by datepicker) -->\n <input matInput type=\"text\" [formControl]=\"formControl\" hidden\n *ngIf=\"mobile\"\n [matDatepicker]=\"datePicker\"\n [matDatepickerFilter]=\"datePickerFilter\"\n (dateChange)=\"_onDatePickerChange($event)\"\n readonly>\n\n <button type=\"button\" mat-icon-button tabindex=\"-1\" matSuffix\n (click)=\"openDatePicker($event, datePicker)\"\n [disabled]=\"formControl.disabled\">\n <mat-icon>{{mobile?'date_range':'keyboard_arrow_down'}}</mat-icon>\n </button>\n <button matSuffix mat-icon-button tabindex=\"-1\"\n type=\"button\"\n *ngIf=\"clearable\"\n (click)=\"clear()\"\n [hidden]=\"formControl.disabled || !formControl.value\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <!-- The date picker -->\n <mat-datepicker #datePicker\n [touchUi]=\"mobile\"\n [disabled]=\"disabled\"\n [startAt]=\"startDate\">\n <!-- Date picker buttons -->\n <mat-datepicker-actions *ngIf=\"mobile\">\n <ion-button fill=\"clear\" color=\"dark\" matDatepickerCancel>\n <ion-label translate>COMMON.BTN_CANCEL</ion-label>\n </ion-button>\n <ion-button fill=\"solid\" color=\"tertiary\" matDatepickerApply>\n <ion-label>{{hourControl.value||('COMMON.TIME'|translate)}}</ion-label>\n <ion-icon slot=\"end\" name=\"chevron-forward\"></ion-icon>\n </ion-button>\n </mat-datepicker-actions>\n </mat-datepicker>\n\n <!-- cancel button -->\n <ng-template #dateHeader>\n <ion-button fill=\"clear\" color=\"dark\">\n <ion-label translate>COMMON.BTN_CANCEL</ion-label>\n </ion-button>\n </ng-template>\n\n <div class=\"mat-form-field-subscript mat-form-field-subscript-wrapper\" >\n <!-- errors -->\n <ng-container [ngSwitch]=\"formControl.touched && formControl.errors|mapKeys|arrayFirst\">\n <mat-error *ngSwitchCase=\"'required'\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngSwitchCase=\"'validDate'\" translate>ERROR.FIELD_NOT_VALID_DATE_TIME</mat-error>\n <mat-error *ngSwitchCase=\"'dateIsAfter'\">{{'ERROR.FIELD_NOT_VALID_DATE_AFTER' | translate: formControl.errors.dateIsAfter }}</mat-error>\n <mat-error *ngSwitchCase=\"'dateIsBefore'\">{{'ERROR.FIELD_NOT_VALID_DATE_BEFORE' | translate: formControl.errors.dateIsBefore }}</mat-error>\n <mat-error *ngSwitchCase=\"'dateRange'\" translate>ERROR.FIELD_NOT_VALID_DATE_RANGE</mat-error>\n <mat-error *ngSwitchCase=\"'dateMaxDuration'\" translate>ERROR.FIELD_NOT_VALID_DATE_MAX_DURATION</mat-error>\n <mat-error *ngSwitchCase=\"'dateMinDuration'\" translate>ERROR.FIELD_NOT_VALID_DATE_MIN_DURATION</mat-error>\n <mat-error *ngSwitchCase=\"'msg'\">{{(formControl.errors.msg?.key || formControl.errors.msg) | translate: formControl.errors.msg?.params}}</mat-error>\n </ng-container>\n <ng-content select=\"mat-error\"></ng-content>\n\n <!-- mat hint -->\n <div class=\"mat-form-field-hint-wrapper\" [class.cdk-visually-hidden]=\"formControl.invalid\">\n <div class=\"mat-form-field-hint-spacer\"></div>\n <ng-content select=\"mat-hint\"></ng-content>\n </div>\n </div>\n\n </ion-col>\n\n <!-- hour -->\n <ion-col class=\"hour ion-no-padding\">\n <mat-form-field [floatLabel]=\"floatLabel\"\n [appearance]=\"appearance\"\n [class.mat-form-field-invalid]=\"formControl.touched && (hourControl.invalid || formControl.invalid)\">\n <mat-label *ngIf=\"placeholder && floatLabel != 'never'\" translate>COMMON.TIME</mat-label>\n\n <input matInput #matInput type=\"text\" [formControl]=\"hourControl\"\n *ngIf=\"!mobile\"\n class=\"mat-input-element\"\n autocomplete=\"off\"\n min=\"0\" max=\"23\"\n [textMask]=\"{mask: hourMask, keepCharPositions: true, placeholderChar: placeholderChar, guide: true}\"\n [placeholder]=\"'COMMON.TIME_PLACEHOLDER'|translate\"\n [required]=\"required\"\n (keyup.arrowDown)=\"openTimePicker($event)\"\n (keyup.escape)=\"_preventEvent($event)\"\n (blur)=\"_checkIfTouched()\"\n [tabindex]=\"tabindex !== undefined ? tabindex+1 : undefined\">\n\n <input #matInput type=\"text\"\n class=\"mat-input-element\"\n *ngIf=\"mobile\"\n [formControl]=\"hourControl\"\n (click)=\"_openTimePickerIfMobile($event)\"\n readonly>\n\n <!-- Hide the final (hidden) input -->\n <input matInput [formControl]=\"hourControl\"\n hidden\n [ngxTimepicker]=\"timePicker\"\n [format]=\"24\"\n readonly>\n\n <button matSuffix type=\"button\" mat-icon-button\n tabindex=\"-1\"\n *ngIf=\"!compact && !mobile\"\n [disabled]=\"formControl.disabled\"\n (click)=\"openTimePicker($event)\" >\n <mat-icon>keyboard_arrow_down</mat-icon>\n </button>\n <button matSuffix type=\"button\" mat-icon-button\n tabindex=\"-1\"\n *ngIf=\"!compact && mobile\"\n [disabled]=\"formControl.disabled\"\n (click)=\"_openTimePickerIfMobile($event)\">\n <mat-icon>access_time</mat-icon>\n </button>\n\n <ngx-material-timepicker #timePicker [@.disabled]=\"true\"\n (timeSet)=\"onTimePickerChange($event)\"\n [ESC]=\"!mobile\"\n [defaultTime]=\"'00:00'\"\n [cancelBtnTmpl]=\"timePickerCancelButton\"\n [confirmBtnTmpl]=\"timePickerOkButton\"\n [preventOverlayClick]=\"mobile\"\n [enableKeyboardInput]=\"false\"\n [disableAnimation]=\"true\">\n <!-- cancel button -->\n <ng-template #timePickerCancelButton>\n <ion-button fill=\"clear\" color=\"dark\">\n <ion-label translate>COMMON.BTN_CANCEL</ion-label>\n </ion-button>\n </ng-template>\n\n <!-- confirm button -->\n <ng-template #timePickerOkButton>\n <ion-button fill=\"solid\" color=\"tertiary\">\n <ion-label translate>COMMON.BTN_VALIDATE</ion-label>\n </ion-button>\n </ng-template>\n\n </ngx-material-timepicker>\n </mat-form-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n\n</ng-template>\n\n<ng-template #iconDesktop>\n <mat-icon>keyboard_arrow_down</mat-icon>\n</ng-template>\n\n<ng-template #iconDate>\n <mat-icon>date_range</mat-icon>\n</ng-template>\n\n<ng-template #matPrefixTemplate>\n <ng-content select=\"[matPrefix]\"></ng-content>\n</ng-template>\n", styles: [":host{display:inline-block;width:100%;position:relative;--ion-grid-column-padding: 0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}mat-form-field input[readonly]{user-select:none!important}mat-form-field .datetime-md{padding:0!important}ion-row.no-wrap{flex-wrap:nowrap}ion-col.day{min-width:100px}ion-col.day .mat-form-field-subscript-wrapper{overflow:visible;right:-64px;width:calc(100% + 64px)}ion-col.day .mat-form-field-subscript-wrapper .mat-form-field-hint-wrapper{display:flex}ion-col.day .mat-form-field-subscript-wrapper .mat-form-field-hint-wrapper .mat-form-field-hint-spacer{flex:1 0 1em}ion-col.hour{min-width:55px;max-width:65px}ion-col.hour mat-form-field{width:100%}ion-col.hour mat-form-field mat-label,ion-col.hour mat-form-field input[type=text]{text-align:left;min-width:50px}mat-form-field.mat-form-field-disabled ion-col.day{min-width:100px}.mat-form-field-outline ion-col.day{min-width:153px}.mat-form-field-outline ion-col.hour{min-width:100px;max-width:110px}.hour .mat-form-field-label{max-width:40px}.hour mat-form-field.mat-form-field-should-float .mat-form-field-placeholder{max-width:inherit}mat-error{text-align:right;width:100%}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i5.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i5.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i5.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i5.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i5.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i5.IonRow, selector: "ion-row" }, { kind: "component", type: i5.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i6.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "directive", type: i6.MatPrefix, selector: "[matPrefix]" }, { kind: "directive", type: i6.MatSuffix, selector: "[matSuffix]" }, { kind: "directive", type: i7.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: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i9.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: i10.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i10.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i10.MatDatepickerActions, selector: "mat-datepicker-actions, mat-date-range-picker-actions" }, { kind: "directive", type: i10.MatDatepickerCancel, selector: "[matDatepickerCancel], [matDateRangePickerCancel]" }, { kind: "directive", type: i10.MatDatepickerApply, selector: "[matDatepickerApply], [matDateRangePickerApply]" }, { kind: "directive", type: i11.MaskedInputDirective, selector: "[textMask]", inputs: ["textMask"], exportAs: ["textMask"] }, { kind: "component", type: i12.NgxMaterialTimepickerComponent, selector: "ngx-material-timepicker", inputs: ["ESC", "hoursOnly", "ngxMaterialTimepickerTheme", "format", "minutesGap", "cancelBtnTmpl", "editableHintTmpl", "confirmBtnTmpl", "enableKeyboardInput", "preventOverlayClick", "disableAnimation", "appendToInput", "defaultTime", "timepickerClass", "theme", "min", "max"], outputs: ["timeSet", "opened", "closed", "hourSelected", "timeChanged"] }, { kind: "directive", type: i12.TimepickerDirective, selector: "[ngxTimepicker]", inputs: ["format", "value", "min", "max", "ngxTimepicker", "disabled", "disableClick"] }, { kind: "directive", type: i2.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "directive", type: i13.AutofocusDirective, selector: "[autofocus], input[appAutofocus]", inputs: ["appAutofocus", "autofocusDelay"] }, { kind: "pipe", type: i14.DateFormatPipe, name: "dateFormat" }, { kind: "pipe", type: i15.ArrayFirstPipe, name: "arrayFirst" }, { kind: "pipe", type: i16.MapKeysPipe, name: "mapKeys" }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
385
|
+
], viewQueries: [{ propertyName: "datePicker", first: true, predicate: ["datePicker"], descendants: true }, { propertyName: "timePicker", first: true, predicate: ["timePicker"], descendants: true }, { propertyName: "matInputs", predicate: ["matInput"], descendants: true }], ngImport: i0, template: "<!-- readonly -->\n<mat-form-field *ngIf=\"readonly; else writable\"\n [floatLabel]=\"floatLabel\"\n [appearance]=\"appearance\"\n class=\"mat-form-field-disabled\">\n\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <input matInput hidden type=\"text\"\n readonly\n [placeholder]=\"placeholder\"\n [formControl]=\"formControl\">\n <ion-text>{{formControl.value|dateFormat: {pattern: displayPattern} }}</ion-text>\n</mat-form-field>\n\n<!-- writable + time -->\n<ng-template #writable >\n <ion-grid class=\"ion-no-padding mat-form-field-{{appearance}}\">\n <ion-row class=\"ion-no-padding no-wrap\" nowrap>\n\n <!-- day -->\n <ion-col class=\"day ion-no-padding\">\n <mat-form-field [floatLabel]=\"floatLabel\"\n [appearance]=\"appearance\"\n [class.mat-form-field-invalid]=\"formControl.touched && formControl.invalid\"\n >\n\n <mat-label (focusin)=\"mobile && _preventEvent($event)\" *ngIf=\"placeholder\" >{{placeholder}}</mat-label>\n\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <!-- Desktop -->\n <input matInput #matInput autocomplete=\"off\" type=\"text\"\n class=\"mat-input-element\"\n *ngIf=\"!mobile\"\n [formControl]=\"dayControl\"\n [textMask]=\"{mask: dayMask, keepCharPositions: true, placeholderChar: placeholderChar}\"\n [placeholder]=\"'COMMON.DATE_PLACEHOLDER'|translate\"\n (blur)=\"_checkIfTouched()\"\n (keyup.arrowDown)=\"openDatePicker($event, datePicker)\"\n (keyup.escape)=\"_preventEvent($event)\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n [appAutofocus]=\"autofocus\">\n <input type=\"text\" [formControl]=\"formControl\" hidden\n *ngIf=\"!mobile\"\n [matDatepicker]=\"datePicker\"\n [matDatepickerFilter]=\"datePickerFilter\"\n (dateChange)=\"_onDatePickerChange($event)\"\n readonly>\n\n <!-- Mobile -->\n <input #matInput autocomplete=\"off\" type=\"text\"\n class=\"mat-input-element\"\n *ngIf=\"mobile\"\n [formControl]=\"dayControl\"\n (click)=\"_openDatePickerIfMobile($event, datePicker)\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n readonly>\n <!-- The hidden input (need by datepicker) -->\n <input matInput type=\"text\" [formControl]=\"formControl\" hidden\n *ngIf=\"mobile\"\n [matDatepicker]=\"datePicker\"\n [matDatepickerFilter]=\"datePickerFilter\"\n (dateChange)=\"_onDatePickerChange($event)\"\n readonly>\n\n <button type=\"button\" mat-icon-button tabindex=\"-1\" matSuffix\n (click)=\"openDatePicker($event, datePicker)\"\n [disabled]=\"formControl.disabled\">\n <mat-icon>{{mobile?'date_range':'keyboard_arrow_down'}}</mat-icon>\n </button>\n <button matSuffix mat-icon-button tabindex=\"-1\"\n type=\"button\"\n *ngIf=\"clearable\"\n (click)=\"clear()\"\n [hidden]=\"formControl.disabled || !formControl.value\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <!-- The date picker -->\n <mat-datepicker #datePicker\n [touchUi]=\"mobile\"\n [disabled]=\"disabled\"\n [startAt]=\"startDate\">\n <!-- Date picker buttons -->\n <mat-datepicker-actions *ngIf=\"mobile\">\n <ion-button fill=\"clear\" color=\"dark\" matDatepickerCancel>\n <ion-label translate>COMMON.BTN_CANCEL</ion-label>\n </ion-button>\n <ion-button fill=\"solid\" color=\"tertiary\" matDatepickerApply>\n <ion-label>{{hourControl.value||('COMMON.TIME'|translate)}}</ion-label>\n <ion-icon slot=\"end\" name=\"chevron-forward\"></ion-icon>\n </ion-button>\n </mat-datepicker-actions>\n </mat-datepicker>\n\n <!-- cancel button -->\n <ng-template #dateHeader>\n <ion-button fill=\"clear\" color=\"dark\">\n <ion-label translate>COMMON.BTN_CANCEL</ion-label>\n </ion-button>\n </ng-template>\n\n <div class=\"mat-form-field-subscript mat-form-field-subscript-wrapper\" >\n <!-- errors -->\n <ng-container [ngSwitch]=\"formControl.touched && formControl.errors|mapKeys|arrayFirst\">\n <mat-error *ngSwitchCase=\"'required'\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngSwitchCase=\"'validDate'\" translate>ERROR.FIELD_NOT_VALID_DATE_TIME</mat-error>\n <mat-error *ngSwitchCase=\"'dateIsAfter'\">{{'ERROR.FIELD_NOT_VALID_DATE_AFTER' | translate: formControl.errors.dateIsAfter }}</mat-error>\n <mat-error *ngSwitchCase=\"'dateIsBefore'\">{{'ERROR.FIELD_NOT_VALID_DATE_BEFORE' | translate: formControl.errors.dateIsBefore }}</mat-error>\n <mat-error *ngSwitchCase=\"'dateRange'\" translate>ERROR.FIELD_NOT_VALID_DATE_RANGE</mat-error>\n <mat-error *ngSwitchCase=\"'dateMaxDuration'\" translate>ERROR.FIELD_NOT_VALID_DATE_MAX_DURATION</mat-error>\n <mat-error *ngSwitchCase=\"'dateMinDuration'\" translate>ERROR.FIELD_NOT_VALID_DATE_MIN_DURATION</mat-error>\n <mat-error *ngSwitchCase=\"'msg'\">{{(formControl.errors.msg?.key || formControl.errors.msg) | translate: formControl.errors.msg?.params}}</mat-error>\n </ng-container>\n <ng-content select=\"mat-error\"></ng-content>\n\n <!-- mat hint -->\n <div class=\"mat-form-field-hint-wrapper\" [class.cdk-visually-hidden]=\"formControl.invalid\">\n <div class=\"mat-form-field-hint-spacer\"></div>\n <ng-content select=\"mat-hint\"></ng-content>\n </div>\n </div>\n\n </ion-col>\n\n <!-- hour -->\n <ion-col class=\"hour ion-no-padding\">\n <mat-form-field [floatLabel]=\"floatLabel\"\n [appearance]=\"appearance\"\n [class.mat-form-field-invalid]=\"formControl.touched && (hourControl.invalid || formControl.invalid)\">\n <mat-label *ngIf=\"placeholder && floatLabel != 'never'\" translate>COMMON.TIME</mat-label>\n\n <input matInput #matInput type=\"text\" [formControl]=\"hourControl\"\n *ngIf=\"!mobile\"\n class=\"mat-input-element\"\n autocomplete=\"off\"\n min=\"0\" max=\"23\"\n [textMask]=\"{mask: hourMask, keepCharPositions: true, placeholderChar: placeholderChar, guide: true}\"\n [placeholder]=\"'COMMON.TIME_PLACEHOLDER'|translate\"\n [required]=\"required\"\n (keyup.arrowDown)=\"openTimePicker($event)\"\n (keyup.escape)=\"_preventEvent($event)\"\n (blur)=\"_checkIfTouched()\"\n [tabindex]=\"tabindex !== undefined ? tabindex+1 : undefined\">\n\n <input #matInput type=\"text\"\n class=\"mat-input-element\"\n *ngIf=\"mobile\"\n [formControl]=\"hourControl\"\n (click)=\"_openTimePickerIfMobile($event)\"\n readonly>\n\n <!-- Hide the final (hidden) input -->\n <input matInput [formControl]=\"hourControl\"\n hidden\n [ngxTimepicker]=\"timePicker\"\n [format]=\"24\"\n readonly>\n\n <button matSuffix type=\"button\" mat-icon-button\n tabindex=\"-1\"\n *ngIf=\"!compact && !mobile\"\n [disabled]=\"formControl.disabled\"\n (click)=\"openTimePicker($event)\" >\n <mat-icon>keyboard_arrow_down</mat-icon>\n </button>\n <button matSuffix type=\"button\" mat-icon-button\n tabindex=\"-1\"\n *ngIf=\"!compact && mobile\"\n [disabled]=\"formControl.disabled\"\n (click)=\"_openTimePickerIfMobile($event)\">\n <mat-icon>access_time</mat-icon>\n </button>\n\n <ngx-material-timepicker #timePicker [@.disabled]=\"true\"\n (timeSet)=\"onTimePickerChange($event)\"\n [ESC]=\"!mobile\"\n [defaultTime]=\"'00:00'\"\n [cancelBtnTmpl]=\"timePickerCancelButton\"\n [confirmBtnTmpl]=\"timePickerOkButton\"\n [preventOverlayClick]=\"mobile\"\n [enableKeyboardInput]=\"false\"\n [disableAnimation]=\"true\">\n <!-- cancel button -->\n <ng-template #timePickerCancelButton>\n <ion-button fill=\"clear\" color=\"dark\">\n <ion-label translate>COMMON.BTN_CANCEL</ion-label>\n </ion-button>\n </ng-template>\n\n <!-- confirm button -->\n <ng-template #timePickerOkButton>\n <ion-button fill=\"solid\" color=\"tertiary\">\n <ion-label translate>COMMON.BTN_VALIDATE</ion-label>\n </ion-button>\n </ng-template>\n\n </ngx-material-timepicker>\n </mat-form-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n\n</ng-template>\n\n<ng-template #iconDesktop>\n <mat-icon>keyboard_arrow_down</mat-icon>\n</ng-template>\n\n<ng-template #iconDate>\n <mat-icon>date_range</mat-icon>\n</ng-template>\n\n<ng-template #matPrefixTemplate>\n <ng-content select=\"[matPrefix]\"></ng-content>\n</ng-template>\n", styles: [":host{display:inline-block;width:100%;position:relative;--ion-grid-column-padding: 0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}mat-form-field input[readonly]{-webkit-user-select:none!important;user-select:none!important}mat-form-field .datetime-md{padding:0!important}ion-row.no-wrap{flex-wrap:nowrap}ion-col.day{min-width:100px}ion-col.day .mat-form-field-subscript-wrapper{overflow:visible;right:-64px;width:calc(100% + 64px)}ion-col.day .mat-form-field-subscript-wrapper .mat-form-field-hint-wrapper{display:flex}ion-col.day .mat-form-field-subscript-wrapper .mat-form-field-hint-wrapper .mat-form-field-hint-spacer{flex:1 0 1em}ion-col.hour{min-width:55px;max-width:65px}ion-col.hour mat-form-field{width:100%}ion-col.hour mat-form-field mat-label,ion-col.hour mat-form-field input[type=text]{text-align:left;min-width:50px}mat-form-field.mat-form-field-disabled ion-col.day{min-width:100px}.mat-form-field-outline ion-col.day{min-width:153px}.mat-form-field-outline ion-col.hour{min-width:100px;max-width:110px}.hour .mat-form-field-label{max-width:40px}.hour mat-form-field.mat-form-field-should-float .mat-form-field-placeholder{max-width:inherit}mat-error{text-align:right;width:100%}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i5.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i5.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i5.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i5.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i5.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i5.IonRow, selector: "ion-row" }, { kind: "component", type: i5.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i6.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "directive", type: i6.MatPrefix, selector: "[matPrefix]" }, { kind: "directive", type: i6.MatSuffix, selector: "[matSuffix]" }, { kind: "directive", type: i7.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: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i9.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: i10.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i10.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i10.MatDatepickerActions, selector: "mat-datepicker-actions, mat-date-range-picker-actions" }, { kind: "directive", type: i10.MatDatepickerCancel, selector: "[matDatepickerCancel], [matDateRangePickerCancel]" }, { kind: "directive", type: i10.MatDatepickerApply, selector: "[matDatepickerApply], [matDateRangePickerApply]" }, { kind: "directive", type: i11.MaskedInputDirective, selector: "[textMask]", inputs: ["textMask"], exportAs: ["textMask"] }, { kind: "component", type: i12.NgxMaterialTimepickerComponent, selector: "ngx-material-timepicker", inputs: ["ESC", "hoursOnly", "ngxMaterialTimepickerTheme", "format", "minutesGap", "cancelBtnTmpl", "editableHintTmpl", "confirmBtnTmpl", "enableKeyboardInput", "preventOverlayClick", "disableAnimation", "appendToInput", "defaultTime", "timepickerClass", "theme", "min", "max"], outputs: ["timeSet", "opened", "closed", "hourSelected", "timeChanged"] }, { kind: "directive", type: i12.TimepickerDirective, selector: "[ngxTimepicker]", inputs: ["format", "value", "min", "max", "ngxTimepicker", "disabled", "disableClick"] }, { kind: "directive", type: i2.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "directive", type: i13.AutofocusDirective, selector: "[autofocus], input[appAutofocus]", inputs: ["appAutofocus", "autofocusDelay"] }, { kind: "pipe", type: i14.DateFormatPipe, name: "dateFormat" }, { kind: "pipe", type: i15.ArrayFirstPipe, name: "arrayFirst" }, { kind: "pipe", type: i16.MapKeysPipe, name: "mapKeys" }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
386
386
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: MatDateTime, decorators: [{
|
|
387
387
|
type: Component,
|
|
388
388
|
args: [{ selector: 'mat-date-time-field', providers: [
|
|
389
389
|
DEFAULT_VALUE_ACCESSOR,
|
|
390
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<!-- readonly -->\n<mat-form-field *ngIf=\"readonly; else writable\"\n [floatLabel]=\"floatLabel\"\n [appearance]=\"appearance\"\n class=\"mat-form-field-disabled\">\n\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <input matInput hidden type=\"text\"\n readonly\n [placeholder]=\"placeholder\"\n [formControl]=\"formControl\">\n <ion-text>{{formControl.value|dateFormat: {pattern: displayPattern} }}</ion-text>\n</mat-form-field>\n\n<!-- writable + time -->\n<ng-template #writable >\n <ion-grid class=\"ion-no-padding mat-form-field-{{appearance}}\">\n <ion-row class=\"ion-no-padding no-wrap\" nowrap>\n\n <!-- day -->\n <ion-col class=\"day ion-no-padding\">\n <mat-form-field [floatLabel]=\"floatLabel\"\n [appearance]=\"appearance\"\n [class.mat-form-field-invalid]=\"formControl.touched && formControl.invalid\"\n >\n\n <mat-label (focusin)=\"mobile && _preventEvent($event)\" *ngIf=\"placeholder\" >{{placeholder}}</mat-label>\n\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <!-- Desktop -->\n <input matInput #matInput autocomplete=\"off\" type=\"text\"\n class=\"mat-input-element\"\n *ngIf=\"!mobile\"\n [formControl]=\"dayControl\"\n [textMask]=\"{mask: dayMask, keepCharPositions: true, placeholderChar: placeholderChar}\"\n [placeholder]=\"'COMMON.DATE_PLACEHOLDER'|translate\"\n (blur)=\"_checkIfTouched()\"\n (keyup.arrowDown)=\"openDatePicker($event, datePicker)\"\n (keyup.escape)=\"_preventEvent($event)\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n [appAutofocus]=\"autofocus\">\n <input type=\"text\" [formControl]=\"formControl\" hidden\n *ngIf=\"!mobile\"\n [matDatepicker]=\"datePicker\"\n [matDatepickerFilter]=\"datePickerFilter\"\n (dateChange)=\"_onDatePickerChange($event)\"\n readonly>\n\n <!-- Mobile -->\n <input #matInput autocomplete=\"off\" type=\"text\"\n class=\"mat-input-element\"\n *ngIf=\"mobile\"\n [formControl]=\"dayControl\"\n (click)=\"_openDatePickerIfMobile($event, datePicker)\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n readonly>\n <!-- The hidden input (need by datepicker) -->\n <input matInput type=\"text\" [formControl]=\"formControl\" hidden\n *ngIf=\"mobile\"\n [matDatepicker]=\"datePicker\"\n [matDatepickerFilter]=\"datePickerFilter\"\n (dateChange)=\"_onDatePickerChange($event)\"\n readonly>\n\n <button type=\"button\" mat-icon-button tabindex=\"-1\" matSuffix\n (click)=\"openDatePicker($event, datePicker)\"\n [disabled]=\"formControl.disabled\">\n <mat-icon>{{mobile?'date_range':'keyboard_arrow_down'}}</mat-icon>\n </button>\n <button matSuffix mat-icon-button tabindex=\"-1\"\n type=\"button\"\n *ngIf=\"clearable\"\n (click)=\"clear()\"\n [hidden]=\"formControl.disabled || !formControl.value\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <!-- The date picker -->\n <mat-datepicker #datePicker\n [touchUi]=\"mobile\"\n [disabled]=\"disabled\"\n [startAt]=\"startDate\">\n <!-- Date picker buttons -->\n <mat-datepicker-actions *ngIf=\"mobile\">\n <ion-button fill=\"clear\" color=\"dark\" matDatepickerCancel>\n <ion-label translate>COMMON.BTN_CANCEL</ion-label>\n </ion-button>\n <ion-button fill=\"solid\" color=\"tertiary\" matDatepickerApply>\n <ion-label>{{hourControl.value||('COMMON.TIME'|translate)}}</ion-label>\n <ion-icon slot=\"end\" name=\"chevron-forward\"></ion-icon>\n </ion-button>\n </mat-datepicker-actions>\n </mat-datepicker>\n\n <!-- cancel button -->\n <ng-template #dateHeader>\n <ion-button fill=\"clear\" color=\"dark\">\n <ion-label translate>COMMON.BTN_CANCEL</ion-label>\n </ion-button>\n </ng-template>\n\n <div class=\"mat-form-field-subscript mat-form-field-subscript-wrapper\" >\n <!-- errors -->\n <ng-container [ngSwitch]=\"formControl.touched && formControl.errors|mapKeys|arrayFirst\">\n <mat-error *ngSwitchCase=\"'required'\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngSwitchCase=\"'validDate'\" translate>ERROR.FIELD_NOT_VALID_DATE_TIME</mat-error>\n <mat-error *ngSwitchCase=\"'dateIsAfter'\">{{'ERROR.FIELD_NOT_VALID_DATE_AFTER' | translate: formControl.errors.dateIsAfter }}</mat-error>\n <mat-error *ngSwitchCase=\"'dateIsBefore'\">{{'ERROR.FIELD_NOT_VALID_DATE_BEFORE' | translate: formControl.errors.dateIsBefore }}</mat-error>\n <mat-error *ngSwitchCase=\"'dateRange'\" translate>ERROR.FIELD_NOT_VALID_DATE_RANGE</mat-error>\n <mat-error *ngSwitchCase=\"'dateMaxDuration'\" translate>ERROR.FIELD_NOT_VALID_DATE_MAX_DURATION</mat-error>\n <mat-error *ngSwitchCase=\"'dateMinDuration'\" translate>ERROR.FIELD_NOT_VALID_DATE_MIN_DURATION</mat-error>\n <mat-error *ngSwitchCase=\"'msg'\">{{(formControl.errors.msg?.key || formControl.errors.msg) | translate: formControl.errors.msg?.params}}</mat-error>\n </ng-container>\n <ng-content select=\"mat-error\"></ng-content>\n\n <!-- mat hint -->\n <div class=\"mat-form-field-hint-wrapper\" [class.cdk-visually-hidden]=\"formControl.invalid\">\n <div class=\"mat-form-field-hint-spacer\"></div>\n <ng-content select=\"mat-hint\"></ng-content>\n </div>\n </div>\n\n </ion-col>\n\n <!-- hour -->\n <ion-col class=\"hour ion-no-padding\">\n <mat-form-field [floatLabel]=\"floatLabel\"\n [appearance]=\"appearance\"\n [class.mat-form-field-invalid]=\"formControl.touched && (hourControl.invalid || formControl.invalid)\">\n <mat-label *ngIf=\"placeholder && floatLabel != 'never'\" translate>COMMON.TIME</mat-label>\n\n <input matInput #matInput type=\"text\" [formControl]=\"hourControl\"\n *ngIf=\"!mobile\"\n class=\"mat-input-element\"\n autocomplete=\"off\"\n min=\"0\" max=\"23\"\n [textMask]=\"{mask: hourMask, keepCharPositions: true, placeholderChar: placeholderChar, guide: true}\"\n [placeholder]=\"'COMMON.TIME_PLACEHOLDER'|translate\"\n [required]=\"required\"\n (keyup.arrowDown)=\"openTimePicker($event)\"\n (keyup.escape)=\"_preventEvent($event)\"\n (blur)=\"_checkIfTouched()\"\n [tabindex]=\"tabindex !== undefined ? tabindex+1 : undefined\">\n\n <input #matInput type=\"text\"\n class=\"mat-input-element\"\n *ngIf=\"mobile\"\n [formControl]=\"hourControl\"\n (click)=\"_openTimePickerIfMobile($event)\"\n readonly>\n\n <!-- Hide the final (hidden) input -->\n <input matInput [formControl]=\"hourControl\"\n hidden\n [ngxTimepicker]=\"timePicker\"\n [format]=\"24\"\n readonly>\n\n <button matSuffix type=\"button\" mat-icon-button\n tabindex=\"-1\"\n *ngIf=\"!compact && !mobile\"\n [disabled]=\"formControl.disabled\"\n (click)=\"openTimePicker($event)\" >\n <mat-icon>keyboard_arrow_down</mat-icon>\n </button>\n <button matSuffix type=\"button\" mat-icon-button\n tabindex=\"-1\"\n *ngIf=\"!compact && mobile\"\n [disabled]=\"formControl.disabled\"\n (click)=\"_openTimePickerIfMobile($event)\">\n <mat-icon>access_time</mat-icon>\n </button>\n\n <ngx-material-timepicker #timePicker [@.disabled]=\"true\"\n (timeSet)=\"onTimePickerChange($event)\"\n [ESC]=\"!mobile\"\n [defaultTime]=\"'00:00'\"\n [cancelBtnTmpl]=\"timePickerCancelButton\"\n [confirmBtnTmpl]=\"timePickerOkButton\"\n [preventOverlayClick]=\"mobile\"\n [enableKeyboardInput]=\"false\"\n [disableAnimation]=\"true\">\n <!-- cancel button -->\n <ng-template #timePickerCancelButton>\n <ion-button fill=\"clear\" color=\"dark\">\n <ion-label translate>COMMON.BTN_CANCEL</ion-label>\n </ion-button>\n </ng-template>\n\n <!-- confirm button -->\n <ng-template #timePickerOkButton>\n <ion-button fill=\"solid\" color=\"tertiary\">\n <ion-label translate>COMMON.BTN_VALIDATE</ion-label>\n </ion-button>\n </ng-template>\n\n </ngx-material-timepicker>\n </mat-form-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n\n</ng-template>\n\n<ng-template #iconDesktop>\n <mat-icon>keyboard_arrow_down</mat-icon>\n</ng-template>\n\n<ng-template #iconDate>\n <mat-icon>date_range</mat-icon>\n</ng-template>\n\n<ng-template #matPrefixTemplate>\n <ng-content select=\"[matPrefix]\"></ng-content>\n</ng-template>\n", styles: [":host{display:inline-block;width:100%;position:relative;--ion-grid-column-padding: 0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}mat-form-field input[readonly]{user-select:none!important}mat-form-field .datetime-md{padding:0!important}ion-row.no-wrap{flex-wrap:nowrap}ion-col.day{min-width:100px}ion-col.day .mat-form-field-subscript-wrapper{overflow:visible;right:-64px;width:calc(100% + 64px)}ion-col.day .mat-form-field-subscript-wrapper .mat-form-field-hint-wrapper{display:flex}ion-col.day .mat-form-field-subscript-wrapper .mat-form-field-hint-wrapper .mat-form-field-hint-spacer{flex:1 0 1em}ion-col.hour{min-width:55px;max-width:65px}ion-col.hour mat-form-field{width:100%}ion-col.hour mat-form-field mat-label,ion-col.hour mat-form-field input[type=text]{text-align:left;min-width:50px}mat-form-field.mat-form-field-disabled ion-col.day{min-width:100px}.mat-form-field-outline ion-col.day{min-width:153px}.mat-form-field-outline ion-col.hour{min-width:100px;max-width:110px}.hour .mat-form-field-label{max-width:40px}.hour mat-form-field.mat-form-field-should-float .mat-form-field-placeholder{max-width:inherit}mat-error{text-align:right;width:100%}\n"] }]
|
|
390
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<!-- readonly -->\n<mat-form-field *ngIf=\"readonly; else writable\"\n [floatLabel]=\"floatLabel\"\n [appearance]=\"appearance\"\n class=\"mat-form-field-disabled\">\n\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <input matInput hidden type=\"text\"\n readonly\n [placeholder]=\"placeholder\"\n [formControl]=\"formControl\">\n <ion-text>{{formControl.value|dateFormat: {pattern: displayPattern} }}</ion-text>\n</mat-form-field>\n\n<!-- writable + time -->\n<ng-template #writable >\n <ion-grid class=\"ion-no-padding mat-form-field-{{appearance}}\">\n <ion-row class=\"ion-no-padding no-wrap\" nowrap>\n\n <!-- day -->\n <ion-col class=\"day ion-no-padding\">\n <mat-form-field [floatLabel]=\"floatLabel\"\n [appearance]=\"appearance\"\n [class.mat-form-field-invalid]=\"formControl.touched && formControl.invalid\"\n >\n\n <mat-label (focusin)=\"mobile && _preventEvent($event)\" *ngIf=\"placeholder\" >{{placeholder}}</mat-label>\n\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <!-- Desktop -->\n <input matInput #matInput autocomplete=\"off\" type=\"text\"\n class=\"mat-input-element\"\n *ngIf=\"!mobile\"\n [formControl]=\"dayControl\"\n [textMask]=\"{mask: dayMask, keepCharPositions: true, placeholderChar: placeholderChar}\"\n [placeholder]=\"'COMMON.DATE_PLACEHOLDER'|translate\"\n (blur)=\"_checkIfTouched()\"\n (keyup.arrowDown)=\"openDatePicker($event, datePicker)\"\n (keyup.escape)=\"_preventEvent($event)\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n [appAutofocus]=\"autofocus\">\n <input type=\"text\" [formControl]=\"formControl\" hidden\n *ngIf=\"!mobile\"\n [matDatepicker]=\"datePicker\"\n [matDatepickerFilter]=\"datePickerFilter\"\n (dateChange)=\"_onDatePickerChange($event)\"\n readonly>\n\n <!-- Mobile -->\n <input #matInput autocomplete=\"off\" type=\"text\"\n class=\"mat-input-element\"\n *ngIf=\"mobile\"\n [formControl]=\"dayControl\"\n (click)=\"_openDatePickerIfMobile($event, datePicker)\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n readonly>\n <!-- The hidden input (need by datepicker) -->\n <input matInput type=\"text\" [formControl]=\"formControl\" hidden\n *ngIf=\"mobile\"\n [matDatepicker]=\"datePicker\"\n [matDatepickerFilter]=\"datePickerFilter\"\n (dateChange)=\"_onDatePickerChange($event)\"\n readonly>\n\n <button type=\"button\" mat-icon-button tabindex=\"-1\" matSuffix\n (click)=\"openDatePicker($event, datePicker)\"\n [disabled]=\"formControl.disabled\">\n <mat-icon>{{mobile?'date_range':'keyboard_arrow_down'}}</mat-icon>\n </button>\n <button matSuffix mat-icon-button tabindex=\"-1\"\n type=\"button\"\n *ngIf=\"clearable\"\n (click)=\"clear()\"\n [hidden]=\"formControl.disabled || !formControl.value\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <!-- The date picker -->\n <mat-datepicker #datePicker\n [touchUi]=\"mobile\"\n [disabled]=\"disabled\"\n [startAt]=\"startDate\">\n <!-- Date picker buttons -->\n <mat-datepicker-actions *ngIf=\"mobile\">\n <ion-button fill=\"clear\" color=\"dark\" matDatepickerCancel>\n <ion-label translate>COMMON.BTN_CANCEL</ion-label>\n </ion-button>\n <ion-button fill=\"solid\" color=\"tertiary\" matDatepickerApply>\n <ion-label>{{hourControl.value||('COMMON.TIME'|translate)}}</ion-label>\n <ion-icon slot=\"end\" name=\"chevron-forward\"></ion-icon>\n </ion-button>\n </mat-datepicker-actions>\n </mat-datepicker>\n\n <!-- cancel button -->\n <ng-template #dateHeader>\n <ion-button fill=\"clear\" color=\"dark\">\n <ion-label translate>COMMON.BTN_CANCEL</ion-label>\n </ion-button>\n </ng-template>\n\n <div class=\"mat-form-field-subscript mat-form-field-subscript-wrapper\" >\n <!-- errors -->\n <ng-container [ngSwitch]=\"formControl.touched && formControl.errors|mapKeys|arrayFirst\">\n <mat-error *ngSwitchCase=\"'required'\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngSwitchCase=\"'validDate'\" translate>ERROR.FIELD_NOT_VALID_DATE_TIME</mat-error>\n <mat-error *ngSwitchCase=\"'dateIsAfter'\">{{'ERROR.FIELD_NOT_VALID_DATE_AFTER' | translate: formControl.errors.dateIsAfter }}</mat-error>\n <mat-error *ngSwitchCase=\"'dateIsBefore'\">{{'ERROR.FIELD_NOT_VALID_DATE_BEFORE' | translate: formControl.errors.dateIsBefore }}</mat-error>\n <mat-error *ngSwitchCase=\"'dateRange'\" translate>ERROR.FIELD_NOT_VALID_DATE_RANGE</mat-error>\n <mat-error *ngSwitchCase=\"'dateMaxDuration'\" translate>ERROR.FIELD_NOT_VALID_DATE_MAX_DURATION</mat-error>\n <mat-error *ngSwitchCase=\"'dateMinDuration'\" translate>ERROR.FIELD_NOT_VALID_DATE_MIN_DURATION</mat-error>\n <mat-error *ngSwitchCase=\"'msg'\">{{(formControl.errors.msg?.key || formControl.errors.msg) | translate: formControl.errors.msg?.params}}</mat-error>\n </ng-container>\n <ng-content select=\"mat-error\"></ng-content>\n\n <!-- mat hint -->\n <div class=\"mat-form-field-hint-wrapper\" [class.cdk-visually-hidden]=\"formControl.invalid\">\n <div class=\"mat-form-field-hint-spacer\"></div>\n <ng-content select=\"mat-hint\"></ng-content>\n </div>\n </div>\n\n </ion-col>\n\n <!-- hour -->\n <ion-col class=\"hour ion-no-padding\">\n <mat-form-field [floatLabel]=\"floatLabel\"\n [appearance]=\"appearance\"\n [class.mat-form-field-invalid]=\"formControl.touched && (hourControl.invalid || formControl.invalid)\">\n <mat-label *ngIf=\"placeholder && floatLabel != 'never'\" translate>COMMON.TIME</mat-label>\n\n <input matInput #matInput type=\"text\" [formControl]=\"hourControl\"\n *ngIf=\"!mobile\"\n class=\"mat-input-element\"\n autocomplete=\"off\"\n min=\"0\" max=\"23\"\n [textMask]=\"{mask: hourMask, keepCharPositions: true, placeholderChar: placeholderChar, guide: true}\"\n [placeholder]=\"'COMMON.TIME_PLACEHOLDER'|translate\"\n [required]=\"required\"\n (keyup.arrowDown)=\"openTimePicker($event)\"\n (keyup.escape)=\"_preventEvent($event)\"\n (blur)=\"_checkIfTouched()\"\n [tabindex]=\"tabindex !== undefined ? tabindex+1 : undefined\">\n\n <input #matInput type=\"text\"\n class=\"mat-input-element\"\n *ngIf=\"mobile\"\n [formControl]=\"hourControl\"\n (click)=\"_openTimePickerIfMobile($event)\"\n readonly>\n\n <!-- Hide the final (hidden) input -->\n <input matInput [formControl]=\"hourControl\"\n hidden\n [ngxTimepicker]=\"timePicker\"\n [format]=\"24\"\n readonly>\n\n <button matSuffix type=\"button\" mat-icon-button\n tabindex=\"-1\"\n *ngIf=\"!compact && !mobile\"\n [disabled]=\"formControl.disabled\"\n (click)=\"openTimePicker($event)\" >\n <mat-icon>keyboard_arrow_down</mat-icon>\n </button>\n <button matSuffix type=\"button\" mat-icon-button\n tabindex=\"-1\"\n *ngIf=\"!compact && mobile\"\n [disabled]=\"formControl.disabled\"\n (click)=\"_openTimePickerIfMobile($event)\">\n <mat-icon>access_time</mat-icon>\n </button>\n\n <ngx-material-timepicker #timePicker [@.disabled]=\"true\"\n (timeSet)=\"onTimePickerChange($event)\"\n [ESC]=\"!mobile\"\n [defaultTime]=\"'00:00'\"\n [cancelBtnTmpl]=\"timePickerCancelButton\"\n [confirmBtnTmpl]=\"timePickerOkButton\"\n [preventOverlayClick]=\"mobile\"\n [enableKeyboardInput]=\"false\"\n [disableAnimation]=\"true\">\n <!-- cancel button -->\n <ng-template #timePickerCancelButton>\n <ion-button fill=\"clear\" color=\"dark\">\n <ion-label translate>COMMON.BTN_CANCEL</ion-label>\n </ion-button>\n </ng-template>\n\n <!-- confirm button -->\n <ng-template #timePickerOkButton>\n <ion-button fill=\"solid\" color=\"tertiary\">\n <ion-label translate>COMMON.BTN_VALIDATE</ion-label>\n </ion-button>\n </ng-template>\n\n </ngx-material-timepicker>\n </mat-form-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n\n</ng-template>\n\n<ng-template #iconDesktop>\n <mat-icon>keyboard_arrow_down</mat-icon>\n</ng-template>\n\n<ng-template #iconDate>\n <mat-icon>date_range</mat-icon>\n</ng-template>\n\n<ng-template #matPrefixTemplate>\n <ng-content select=\"[matPrefix]\"></ng-content>\n</ng-template>\n", styles: [":host{display:inline-block;width:100%;position:relative;--ion-grid-column-padding: 0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}mat-form-field input[readonly]{-webkit-user-select:none!important;user-select:none!important}mat-form-field .datetime-md{padding:0!important}ion-row.no-wrap{flex-wrap:nowrap}ion-col.day{min-width:100px}ion-col.day .mat-form-field-subscript-wrapper{overflow:visible;right:-64px;width:calc(100% + 64px)}ion-col.day .mat-form-field-subscript-wrapper .mat-form-field-hint-wrapper{display:flex}ion-col.day .mat-form-field-subscript-wrapper .mat-form-field-hint-wrapper .mat-form-field-hint-spacer{flex:1 0 1em}ion-col.hour{min-width:55px;max-width:65px}ion-col.hour mat-form-field{width:100%}ion-col.hour mat-form-field mat-label,ion-col.hour mat-form-field input[type=text]{text-align:left;min-width:50px}mat-form-field.mat-form-field-disabled ion-col.day{min-width:100px}.mat-form-field-outline ion-col.day{min-width:153px}.mat-form-field-outline ion-col.hour{min-width:100px;max-width:110px}.hour .mat-form-field-label{max-width:40px}.hour mat-form-field.mat-form-field-should-float .mat-form-field-placeholder{max-width:inherit}mat-error{text-align:right;width:100%}\n"] }]
|
|
391
391
|
}], ctorParameters: function () { return [{ type: i1.MomentDateAdapter }, { type: i2.TranslateService }, { type: i3.UntypedFormBuilder }, { type: i0.ChangeDetectorRef }, { type: i3.FormGroupDirective, decorators: [{
|
|
392
392
|
type: Optional
|
|
393
393
|
}] }]; }, propDecorators: { formControl: [{
|
|
@@ -1,26 +1,4 @@
|
|
|
1
|
-
var JobProgression_1;
|
|
2
|
-
import { __decorate } from "tslib";
|
|
3
|
-
import { EntityClass } from '../../core/services/model/entity.decorators';
|
|
4
|
-
import { Entity } from '../../core/services/model/entity.model';
|
|
5
1
|
// todo use entity
|
|
6
2
|
export class Job {
|
|
7
3
|
}
|
|
8
|
-
|
|
9
|
-
let JobProgression = JobProgression_1 = class JobProgression extends Entity {
|
|
10
|
-
constructor(id) {
|
|
11
|
-
super(JobProgression_1.TYPENAME);
|
|
12
|
-
this.id = id;
|
|
13
|
-
}
|
|
14
|
-
fromObject(source) {
|
|
15
|
-
super.fromObject(source);
|
|
16
|
-
this.name = source.name;
|
|
17
|
-
this.message = source.message;
|
|
18
|
-
this.current = source.current;
|
|
19
|
-
this.total = source.total;
|
|
20
|
-
}
|
|
21
|
-
};
|
|
22
|
-
JobProgression = JobProgression_1 = __decorate([
|
|
23
|
-
EntityClass({ typename: 'JobProgressionVO' })
|
|
24
|
-
], JobProgression);
|
|
25
|
-
export { JobProgression };
|
|
26
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9iLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zb2NpYWwvam9iL2pvYi5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFlaEUsa0JBQWtCO0FBQ2xCLE1BQU0sT0FBTyxHQUFHO0NBU2Y7QUFFRCxXQUFXO0FBRVgsSUFBYSxjQUFjLHNCQUEzQixNQUFhLGNBQWUsU0FBUSxNQUFzQjtJQVV4RCxZQUFZLEVBQVc7UUFDckIsS0FBSyxDQUFDLGdCQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDZixDQUFDO0lBRUQsVUFBVSxDQUFDLE1BQVc7UUFDcEIsS0FBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDeEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO1FBQzlCLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUM5QixJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDNUIsQ0FBQztDQUNGLENBQUE7QUF0QlksY0FBYztJQUQxQixXQUFXLENBQUMsRUFBQyxRQUFRLEVBQUUsa0JBQWtCLEVBQUMsQ0FBQztHQUMvQixjQUFjLENBc0IxQjtTQXRCWSxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW9tZW50IH0gZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IEVudGl0eUNsYXNzIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9tb2RlbC9lbnRpdHkuZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBFbnRpdHkgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL21vZGVsL2VudGl0eS5tb2RlbCc7XG5cbmV4cG9ydCB0eXBlIEpvYlN0YXR1cyA9ICdQRU5ESU5HJyB8ICdSVU5OSU5HJyB8ICdTVUNDRVNTJyB8ICdFUlJPUicgfCAnRkFJTEVEJyB8ICdXQVJOSU5HJyB8ICdDQU5DRUxMRUQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElKb2Ige1xuICBpZDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbiAgc3RhdHVzOiBKb2JTdGF0dXM7XG4gIHN0YXJ0RGF0ZTogTW9tZW50O1xuICBlbmREYXRlOiBNb21lbnQ7XG4gIGNvbmZpZ3VyYXRpb246IHN0cmluZztcbiAgcmVwb3J0OiBzdHJpbmc7XG59XG5cbi8vIHRvZG8gdXNlIGVudGl0eVxuZXhwb3J0IGNsYXNzIEpvYiBpbXBsZW1lbnRzIElKb2Ige1xuICBpZDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbiAgc3RhdHVzOiBKb2JTdGF0dXM7XG4gIHN0YXJ0RGF0ZTogTW9tZW50O1xuICBlbmREYXRlOiBNb21lbnQ7XG4gIGNvbmZpZ3VyYXRpb246IHN0cmluZztcbiAgcmVwb3J0OiBzdHJpbmc7XG59XG5cbi8vIEBkeW5hbWljXG5ARW50aXR5Q2xhc3Moe3R5cGVuYW1lOiAnSm9iUHJvZ3Jlc3Npb25WTyd9KVxuZXhwb3J0IGNsYXNzIEpvYlByb2dyZXNzaW9uIGV4dGVuZHMgRW50aXR5PEpvYlByb2dyZXNzaW9uPiB7XG5cbiAgc3RhdGljIGZyb21PYmplY3Q6IChzb3VyY2U6IGFueSwgb3B0cz86IGFueSkgPT4gSm9iUHJvZ3Jlc3Npb247XG5cbiAgaWQ6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIGN1cnJlbnQ6IG51bWJlcjtcbiAgdG90YWw6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihpZD86IG51bWJlcikge1xuICAgIHN1cGVyKEpvYlByb2dyZXNzaW9uLlRZUEVOQU1FKTtcbiAgICB0aGlzLmlkID0gaWQ7XG4gIH1cblxuICBmcm9tT2JqZWN0KHNvdXJjZTogYW55KSB7XG4gICAgc3VwZXIuZnJvbU9iamVjdChzb3VyY2UpO1xuICAgIHRoaXMubmFtZSA9IHNvdXJjZS5uYW1lO1xuICAgIHRoaXMubWVzc2FnZSA9IHNvdXJjZS5tZXNzYWdlO1xuICAgIHRoaXMuY3VycmVudCA9IHNvdXJjZS5jdXJyZW50O1xuICAgIHRoaXMudG90YWwgPSBzb3VyY2UudG90YWw7XG4gIH1cbn1cbiJdfQ==
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9iLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zb2NpYWwvam9iL2pvYi5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFpQkEsa0JBQWtCO0FBQ2xCLE1BQU0sT0FBTyxHQUFHO0NBU2YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNb21lbnQgfSBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgRW50aXR5Q2xhc3MgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL21vZGVsL2VudGl0eS5kZWNvcmF0b3JzJztcbmltcG9ydCB7IEVudGl0eSB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvbW9kZWwvZW50aXR5Lm1vZGVsJztcblxuZXhwb3J0IHR5cGUgSm9iU3RhdHVzID0gJ1BFTkRJTkcnIHwgJ1JVTk5JTkcnIHwgJ1NVQ0NFU1MnIHwgJ0VSUk9SJyB8ICdGQUlMRUQnIHwgJ1dBUk5JTkcnIHwgJ0NBTkNFTExFRCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUpvYiB7XG4gIGlkOiBudW1iZXI7XG4gIG5hbWU6IHN0cmluZztcbiAgdHlwZTogc3RyaW5nO1xuICBzdGF0dXM6IEpvYlN0YXR1cztcbiAgc3RhcnREYXRlOiBNb21lbnQ7XG4gIGVuZERhdGU6IE1vbWVudDtcbiAgY29uZmlndXJhdGlvbjogc3RyaW5nO1xuICByZXBvcnQ6IHN0cmluZztcbn1cblxuLy8gdG9kbyB1c2UgZW50aXR5XG5leHBvcnQgY2xhc3MgSm9iIGltcGxlbWVudHMgSUpvYiB7XG4gIGlkOiBudW1iZXI7XG4gIG5hbWU6IHN0cmluZztcbiAgdHlwZTogc3RyaW5nO1xuICBzdGF0dXM6IEpvYlN0YXR1cztcbiAgc3RhcnREYXRlOiBNb21lbnQ7XG4gIGVuZERhdGU6IE1vbWVudDtcbiAgY29uZmlndXJhdGlvbjogc3RyaW5nO1xuICByZXBvcnQ6IHN0cmluZztcbn1cbiJdfQ==
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ChangeDetectionStrategy, Component, EventEmitter, Inject, Input, Optional, Output } from '@angular/core';
|
|
2
|
-
import { APP_JOB_PROGRESSION_SERVICE } from '
|
|
3
|
-
import { JobProgression } from '
|
|
2
|
+
import { APP_JOB_PROGRESSION_SERVICE } from './job-progression.service';
|
|
3
|
+
import { JobProgression } from './job-progression.model';
|
|
4
4
|
import { Subscription } from 'rxjs';
|
|
5
5
|
import { arraySize, isNil, toBoolean, toNumber } from '../../../shared/functions';
|
|
6
6
|
import { filter, map } from 'rxjs/operators';
|
|
@@ -40,10 +40,12 @@ export class JobProgressionIcon {
|
|
|
40
40
|
this.autoHideDelay = toNumber(this.options?.autoHideDelay, 1000);
|
|
41
41
|
this.autoRemove = toBoolean(this.options?.autoRemove, true);
|
|
42
42
|
this.autoRemoveDelay = toNumber(this.options?.autoRemoveDelay, 1000);
|
|
43
|
-
|
|
44
|
-
.
|
|
45
|
-
|
|
46
|
-
|
|
43
|
+
if (this.jobProgressionService) {
|
|
44
|
+
this._subscriptions.add(this.jobProgressionService.watchAll()
|
|
45
|
+
.subscribe(items => {
|
|
46
|
+
(items || []).forEach(item => this.addJob(item.id, item));
|
|
47
|
+
}));
|
|
48
|
+
}
|
|
47
49
|
}
|
|
48
50
|
addJob(id, job) {
|
|
49
51
|
if (isNil(this.jobProgressionService)) {
|
|
@@ -108,7 +110,8 @@ export class JobProgressionIcon {
|
|
|
108
110
|
// If last job
|
|
109
111
|
if (this.autoHide && !this.jobProgressions?.length) {
|
|
110
112
|
setTimeout(async () => {
|
|
111
|
-
this._listPopover
|
|
113
|
+
if (this._listPopover)
|
|
114
|
+
await this._listPopover.dismiss();
|
|
112
115
|
this.visible = false;
|
|
113
116
|
this.markForCheck();
|
|
114
117
|
}, this.autoHideDelay);
|
|
@@ -207,4 +210,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImpor
|
|
|
207
210
|
}], jobFinished: [{
|
|
208
211
|
type: Output
|
|
209
212
|
}] } });
|
|
210
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9iLXByb2dyZXNzaW9uLmljb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NvY2lhbC9qb2IvcHJvZ3Jlc3Npb24vam9iLXByb2dyZXNzaW9uLmljb24udHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NvY2lhbC9qb2IvcHJvZ3Jlc3Npb24vam9iLXByb2dyZXNzaW9uLmljb24uaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQXFCLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBcUIsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUd4SixPQUFPLEVBQTBCLDJCQUEyQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXBDLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNsRixPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdDLE9BQU8sRUFBRSxrQkFBa0IsRUFBNkIsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7O0FBZ0J2RixNQUFNLE9BQU8sa0JBQWtCO0lBd0I3QixZQUM2RCxxQkFBNkMsRUFDOUYsaUJBQW9DLEVBQ3BDLEVBQXFCO1FBRjRCLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBd0I7UUFDOUYsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQXpCeEIsVUFBSyxHQUFHLEtBQUssQ0FBQztRQUNkLGNBQVMsR0FBRyw4QkFBOEIsQ0FBQztRQUcxQyxnQkFBVyxHQUFHLElB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LE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN2QyxJQUFJLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQztJQUNoQyxDQUFDO0lBRVMsWUFBWTtRQUNwQixJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ2QsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLFlBQVksQ0FBQyxDQUFDO1NBQy9DO1FBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNwQyxDQUFDOzsrR0E5TVUsa0JBQWtCLGtCQXlCUCwyQkFBMkI7bUdBekJ0QyxrQkFBa0IsdU1DMUIvQix3ckJBNEJBOzJGREZhLGtCQUFrQjtrQkFOOUIsU0FBUzsrQkFDRSwwQkFBMEIsbUJBR25CLHVCQUF1QixDQUFDLE1BQU07OzBCQTJCNUMsUUFBUTs7MEJBQUksTUFBTTsyQkFBQywyQkFBMkI7NEdBdkJ4QyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDSSxXQUFXO3NCQUFwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE9wdGlvbmFsLCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRoZW1lUGFsZXR0ZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHsgUHJvZ3Jlc3NTcGlubmVyTW9kZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLXNwaW5uZXInO1xuaW1wb3J0IHsgSUpvYlByb2dyZXNzaW9uU2VydmljZSwgQVBQX0pPQl9QUk9HUkVTU0lPTl9TRVJWSUNFIH0gZnJvbSAnLi4vam9iLnNlcnZpY2UnO1xuaW1wb3J0IHsgSm9iUHJvZ3Jlc3Npb24gfSBmcm9tICcuLi9qb2IubW9kZWwnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBPYmplY3RNYXAgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvdHlwZXMnO1xuaW1wb3J0IHsgYXJyYXlTaXplLCBpc05pbCwgdG9Cb29sZWFuLCB0b051bWJlciB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgZmlsdGVyLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBQb3BvdmVyQ29udHJvbGxlciB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IEpvYlByb2dyZXNzaW9uTGlzdCwgSm9iUHJvZ3Jlc3Npb25MaXN0T3B0aW9ucyB9IGZyb20gJy4vam9iLXByb2dyZXNzaW9uLmxpc3QnO1xuaW1wb3J0IHtVc2VyRXZlbnROb3RpZmljYXRpb25JY29ufSBmcm9tICcuLi8uLi91c2VyLWV2ZW50L25vdGlmaWNhdGlvbi91c2VyLWV2ZW50LW5vdGlmaWNhdGlvbi5pY29uJztcblxuZXhwb3J0IGludGVyZmFjZSBKb2JQcm9ncmVzc2lvbk9wdGlvbnMge1xuICBhdXRvSGlkZTogYm9vbGVhbjtcbiAgYXV0b0hpZGVEZWxheTogbnVtYmVyO1xuICBhdXRvUmVtb3ZlOiBib29sZWFuO1xuICBhdXRvUmVtb3ZlRGVsYXk6IG51bWJlcjtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWpvYi1wcm9ncmVzc2lvbi1pY29uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2pvYi1wcm9ncmVzc2lvbi5pY29uLmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9qb2ItcHJvZ3Jlc3Npb24uaWNvbi5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEpvYlByb2dyZXNzaW9uSWNvbiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBASW5wdXQoKSBkZWJ1ZyA9IGZhbHNlO1xuICBASW5wdXQoKSB0aXRsZUkxOG4gPSAnU09DSUFMLkpPQi5QUk9HUkVTU0lPTi5USVRMRSc7XG4gIEBJbnB1dCgpIG9wdGlvbnM6IEpvYlByb2dyZXNzaW9uT3B0aW9ucztcbiAgQElucHV0KCkgYXV0b0hpZGU6IGJvb2xlYW47XG4gIEBPdXRwdXQoKSBqb2JGaW5pc2hlZCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gIHZpc2libGU6IGJvb2xlYW47XG4gIGRpc2FibGVkID0gdHJ1ZTtcbiAgY29sb3I6IFRoZW1lUGFsZXR0ZSA9ICdhY2NlbnQnO1xuICBtb2RlOiBQcm9ncmVzc1NwaW5uZXJNb2RlID0gJ2RldGVybWluYXRlJztcbiAgdmFsdWUgPSAwO1xuICBqb2JQcm9ncmVzc2lvbnM6IEpvYlByb2dyZXNzaW9uW10gPSBbXTtcblxuICBwcm90ZWN0ZWQgYXV0b0hpZGVEZWxheTogbnVtYmVyO1xuICBwcm90ZWN0ZWQgYXV0b1JlbW92ZTogYm9vbGVhbjtcbiAgcHJvdGVjdGVkIGF1dG9SZW1vdmVEZWxheTogbnVtYmVyO1xuXG4gIHByaXZhdGUgX2xpc3RQb3BvdmVyOiBIVE1MSW9uUG9wb3ZlckVsZW1lbnQ7XG4gIHByaXZhdGUgX3N1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByaXZhdGUgX3N1YnNjcmlwdGlvbnNCeUlkOiBPYmplY3RNYXA8U3Vic2NyaXB0aW9uPiA9IHt9O1xuICBwcml2YXRlIF9sb2dQcmVmaXggPSAnW2pvYi1wcm9ncmVzc2lvbl0gJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEFQUF9KT0JfUFJPR1JFU1NJT05fU0VSVklDRSkgcHJvdGVjdGVkIGpvYlByb2dyZXNzaW9uU2VydmljZTogSUpvYlByb2dyZXNzaW9uU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgcG9wb3ZlckNvbnRyb2xsZXI6IFBvcG92ZXJDb250cm9sbGVyLFxuICAgIHByb3RlY3RlZCBjZDogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7XG5cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmIChpc05pbCh0aGlzLmpvYlByb2dyZXNzaW9uU2VydmljZSkpIHtcbiAgICAgIGNvbnNvbGUud2FybihgJHt0aGlzLl9sb2dQcmVmaXh9Tm8gc2VydmljZSBpbmplY3RlZGApO1xuICAgIH1cbiAgICAvLyBwYXJzZSBvcHRpb25zXG4gICAgdGhpcy5hdXRvSGlkZSA9IHRvQm9vbGVhbih0aGlzLmF1dG9IaWRlLCB0aGlzLm9wdGlvbnM/LmF1dG9IaWRlIHx8IGZhbHNlKTtcbiAgICB0aGlzLnZpc2libGUgPSAhdGhpcy5hdXRvSGlkZTtcbiAgICB0aGlzLmF1dG9IaWRlRGVsYXkgPSB0b051bWJlcih0aGlzLm9wdGlvbnM/LmF1dG9IaWRlRGVsYXksIDEwMDApO1xuICAgIHRoaXMuYXV0b1JlbW92ZSA9IHRvQm9vbGVhbih0aGlzLm9wdGlvbnM/LmF1dG9SZW1vdmUsIHRydWUpO1xuICAgIHRoaXMuYXV0b1JlbW92ZURlbGF5ID0gdG9OdW1iZXIodGhpcy5vcHRpb25zPy5hdXRvUmVtb3ZlRGVsYXksIDEwMDApO1xuXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLmpvYlByb2dyZXNzaW9uU2VydmljZS53YXRjaEFsbCgpXG4gICAgICAgIC5zdWJzY3JpYmUoaXRlbXMgPT4ge1xuICAgICAgICAgIChpdGVtcyB8fCBbXSkuZm9yRWFjaChpdGVtID0+IHRoaXMuYWRkSm9iKGl0ZW0uaWQsIGl0ZW0pKTtcbiAgICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgYWRkSm9iKGlkOiBudW1iZXIsIGpvYj86IEpvYlByb2dyZXNzaW9uKSB7XG4gICAgaWYgKGlzTmlsKHRoaXMuam9iUHJvZ3Jlc3Npb25TZXJ2aWNlKSkge1xuICAgICAgY29uc29sZS53YXJuKGAke3RoaXMuX2xvZ1ByZWZpeH1ObyBzZXJ2aWNlIGluamVjdGVkLiBDYW4ndCBhZGQgYSBqb2JgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoISF0aGlzLmdldFByb2dyZXNzaW9uKGlkKSkge1xuICAgICAgY29uc29sZS53YXJuKGAke3RoaXMuX2xvZ1ByZWZpeH1Kb2IgKGlkPSR7aWR9KSBhbHJlYWR5IHByZXNlbnRgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5fbG9nUHJlZml4fUFkZCBqb2IgaWQ9JHtpZH1gKTtcbiAgICB9XG4gICAgLy8gQWRkaW5nIGVtcHR5IGpvYiBwcm9ncmVzc2lvblxuICAgIGxldCBwcm9ncmVzc2lvbiA9IHRoaXMuZ2V0UHJvZ3Jlc3Npb24oaWQpO1xuICAgIGlmICghcHJvZ3Jlc3Npb24pIHtcbiAgICAgIHByb2dyZXNzaW9uID0gam9iIHx8IG5ldyBKb2JQcm9ncmVzc2lvbihpZCk7XG4gICAgICB0aGlzLmpvYlByb2dyZXNzaW9ucy5wdXNoKHByb2dyZXNzaW9uKTtcbiAgICB9XG5cbiAgICB0aGlzLmRpc2FibGVkID0gZmFsc2U7XG5cbiAgICBjb25zdCBzdWIgPSB0aGlzLmpvYlByb2dyZXNzaW9uU2VydmljZS5saXN0ZW5DaGFuZ2VzKGlkKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcihwcm9ncmVzc2lvbiA9PiB7XG4gICAgICAgICAgaWYgKGlkICE9PSBwcm9ncmVzc2lvbi5pZCkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgJHt0aGlzLl9sb2dQcmVmaXh9Sm9iIHByb2dyZXNzaW9uIChpZD0ke3Byb2dyZXNzaW9uLmlkfSkgZG9lc24ndCBtYXRjaCBleHBlY3RlZCBqb2IgKGlkPSR7aWR9KWApO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSksXG4gICAgICAgIG1hcChwcm9ncmVzc2lvbiA9PiB7XG4gICAgICAgICAgLy8gRW5zdXJlIHZpc2libGVcbiAgICAgICAgICB0aGlzLnZpc2libGUgPSB0cnVlO1xuICAgICAgICAgIC8vIEdldCBjdXJyZW50IHByb2dyZXNzaW9uIG9iamVjdFxuICAgICAgICAgIGNvbnN0IGN1cnJlbnRQcm9ncmVzc2lvbiA9IHRoaXMuZ2V0UHJvZ3Jlc3Npb24oaWQpO1xuICAgICAgICAgIGlmICghY3VycmVudFByb2dyZXNzaW9uKSB7XG4gICAgICAgICAgICAvLyBhZGQgaXQgaWYgYWJzZW50XG4gICAgICAgICAgICB0aGlzLmpvYlByb2dyZXNzaW9ucy5wdXNoKHByb2dyZXNzaW9uKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5fbG9nUHJlZml4fVByb2dyZXNzaW9uIGFkZGVkIGlkPSR7aWR9YCwgcHJvZ3Jlc3Npb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyB1cGRhdGUgY3VycmVudFxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihjdXJyZW50UHJvZ3Jlc3Npb24sIHByb2dyZXNzaW9uKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5fbG9nUHJlZml4fVByb2dyZXNzaW9uIHVwZGF0ZWQgaWQ9JHtpZH1gLCBwcm9ncmVzc2lvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBwcm9ncmVzc2lvbjtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUocHJvZ3Jlc3Npb24gPT4ge1xuICAgICAgICAvLyB1cGRhdGUgdmFsdWVcbiAgICAgICAgdGhpcy51cGRhdGVWYWx1ZSgpO1xuXG4gICAgICAgIC8vIGpvYiBmaW5pc2hlZFxuICAgICAgICBpZiAocHJvZ3Jlc3Npb24udG90YWwgPiAwICYmIHByb2dyZXNzaW9uLmN1cnJlbnQgPT0gcHJvZ3Jlc3Npb24udG90YWwpIHtcbiAgICAgICAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9RmluaXNoZWQgam9iIGlkPSR7cHJvZ3Jlc3Npb24uaWR9YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGVtaXQgZXZlbnRcbiAgICAgICAgICB0aGlzLmpvYkZpbmlzaGVkLmVtaXQocHJvZ3Jlc3Npb24uaWQpO1xuICAgICAgICAgIGlmICh0aGlzLmF1dG9SZW1vdmUpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnJlbW92ZUpvYihwcm9ncmVzc2lvbi5pZCk7XG4gICAgICAgICAgICAgIC8vIElmIGxhc3Qgam9iXG4gICAgICAgICAgICAgIGlmICh0aGlzLmF1dG9IaWRlICYmICF0aGlzLmpvYlByb2dyZXNzaW9ucz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9saXN0UG9wb3Zlcj8uZGlzbWlzcygpO1xuICAgICAgICAgICAgICAgICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgICAgIH0sIHRoaXMuYXV0b0hpZGVEZWxheSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHRoaXMuYXV0b1JlbW92ZURlbGF5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uc0J5SWRbaWRdID0gc3ViO1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKHN1Yik7XG4gIH1cblxuICByZW1vdmVKb2IoaWQ6IG51bWJlcikge1xuICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH1SZW1vdmUgam9iIGlkPSR7aWR9YCk7XG4gICAgfVxuICAgIGNvbnN0IHN1YiA9IHRoaXMuX3N1YnNjcmlwdGlvbnNCeUlkW2lkXTtcbiAgICBpZiAoc3ViKSB7XG4gICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnJlbW92ZShzdWIpO1xuICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGNvbnN0IHByb2dyZXNzaW9uID0gdGhpcy5nZXRQcm9ncmVzc2lvbihpZCk7XG4gICAgaWYgKHByb2dyZXNzaW9uKSB7XG4gICAgICB0aGlzLmpvYlByb2dyZXNzaW9ucy5zcGxpY2UodGhpcy5qb2JQcm9ncmVzc2lvbnMuaW5kZXhPZihwcm9ncmVzc2lvbiksIDEpO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVZhbHVlKCk7XG4gIH1cblxuICBnZXRQcm9ncmVzc2lvbihpZDogbnVtYmVyKTogSm9iUHJvZ3Jlc3Npb24gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmpvYlByb2dyZXNzaW9ucy5maW5kKHByb2dyZXNzaW9uID0+IHByb2dyZXNzaW9uLmlkID09PSBpZCk7XG4gIH1cblxuICB1cGRhdGVWYWx1ZSgpIHtcbiAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9VXBkYXRpbmcgdmFsdWVgKTtcbiAgICB9XG4gICAgbGV0IHZhbHVlID0gMDtcbiAgICBjb25zdCBuYlByb2dyZXNzaW9uID0gYXJyYXlTaXplKHRoaXMuam9iUHJvZ3Jlc3Npb25zKTtcbiAgICBsZXQgYWxsSW5kZXRlcm1pbmF0ZSA9IG5iUHJvZ3Jlc3Npb24gPiAwO1xuXG4gICAgdGhpcy5qb2JQcm9ncmVzc2lvbnMuZm9yRWFjaChwcm9ncmVzc2lvbiA9PiB7XG4gICAgICBjb25zdCBpbmRldGVybWluYXRlID0gcHJvZ3Jlc3Npb24udG90YWwgPT09IDA7XG4gICAgICBhbGxJbmRldGVybWluYXRlID0gYWxsSW5kZXRlcm1pbmF0ZSAmJiBpbmRldGVybWluYXRlO1xuICAgICAgaWYgKCFpbmRldGVybWluYXRlKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUgKyBwcm9ncmVzc2lvbi5jdXJyZW50ICogMTAwIC8gcHJvZ3Jlc3Npb24udG90YWw7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnZhbHVlID0gbmJQcm9ncmVzc2lvbiA+IDAgPyB2YWx1ZSAvIG5iUHJvZ3Jlc3Npb24gOiAwO1xuICAgIHRoaXMubW9kZSA9IGFsbEluZGV0ZXJtaW5hdGUgPyAnaW5kZXRlcm1pbmF0ZScgOiAnZGV0ZXJtaW5hdGUnO1xuICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH1TZXR0aW5nIHZhbHVlPSR7dGhpcy52YWx1ZX0sIG1vZGU9JHt0aGlzLm1vZGV9YCk7XG4gICAgfVxuXG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGFzeW5jIHNob3dMaXN0KGV2ZW50OiBFdmVudCkge1xuICAgIHRoaXMuX2xpc3RQb3BvdmVyID0gYXdhaXQgdGhpcy5wb3BvdmVyQ29udHJvbGxlci5jcmVhdGUoe1xuICAgICAgY29tcG9uZW50OiBKb2JQcm9ncmVzc2lvbkxpc3QsXG4gICAgICBjb21wb25lbnRQcm9wczogPEpvYlByb2dyZXNzaW9uTGlzdE9wdGlvbnM+e1xuICAgICAgICB0aXRsZUkxOG46IHRoaXMudGl0bGVJMThuLFxuICAgICAgICBqb2JQcm9ncmVzc2lvbnM6IHRoaXMuam9iUHJvZ3Jlc3Npb25zXG4gICAgICB9LFxuICAgICAgYmFja2Ryb3BEaXNtaXNzOiB0cnVlLFxuICAgICAga2V5Ym9hcmRDbG9zZTogdHJ1ZSxcbiAgICAgIGV2ZW50LFxuICAgICAgdHJhbnNsdWNlbnQ6IHRydWUsXG4gICAgICBjc3NDbGFzczogJ3BvcG92ZXItbGFyZ2UnXG4gICAgfSk7XG4gICAgYXdhaXQgdGhpcy5fbGlzdFBvcG92ZXIucHJlc2VudCgpO1xuICAgIGF3YWl0IHRoaXMuX2xpc3RQb3BvdmVyLm9uRGlkRGlzbWlzcygpO1xuICAgIHRoaXMuX2xpc3RQb3BvdmVyID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJvdGVjdGVkIG1hcmtGb3JDaGVjaygpIHtcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5fbG9nUHJlZml4fURlc3Ryb3lpbmdgKTtcbiAgICB9XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICB9XG59XG4iLCI8YnV0dG9uXG4gICNidXR0b25cbiAgbWF0LWljb24tYnV0dG9uXG4gIFt0aXRsZV09XCJ0aXRsZUkxOG4gfCB0cmFuc2xhdGVcIlxuICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAqbmdJZj1cInZpc2libGVcIlxuICAoY2xpY2spPVwic2hvd0xpc3QoJGV2ZW50KVwiXG4+XG4gIDxtYXQtaWNvblxuICAgIFttYXRCYWRnZV09XCJqb2JQcm9ncmVzc2lvbnM/Lmxlbmd0aFwiXG4gICAgW21hdEJhZGdlSGlkZGVuXT1cIiFqb2JQcm9ncmVzc2lvbnM/Lmxlbmd0aFwiXG4gICAgbWF0QmFkZ2VDb2xvcj1cImFjY2VudFwiXG4gICAgbWF0QmFkZ2VTaXplPVwic21hbGxcIlxuICAgIG1hdEJhZGdlUG9zaXRpb249XCJhYm92ZSBhZnRlclwiXG4gID57eyBkaXNhYmxlZCB8fCBqb2JQcm9ncmVzc2lvbnM/Lmxlbmd0aCA/ICdzY2hlZHVsZScgOiAndGFza19hbHQnIH19XG4gIDwvbWF0LWljb24+XG4gIDxtYXQtc3Bpbm5lclxuICAgICNzcGlubmVyXG4gICAgKm5nSWY9XCJqb2JQcm9ncmVzc2lvbnM/Lmxlbmd0aFwiXG4gICAgY2xhc3M9XCJmbG9hdGluZy1zcGlubmVyXCJcbiAgICBbY29sb3JdPVwiY29sb3JcIlxuICAgIFttb2RlXT1cIm1vZGVcIlxuICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXG4gICAgZGlhbWV0ZXI9XCIzMFwiXG4gICAgc3Ryb2tlV2lkdGg9XCIzXCJcbiAgPjwvbWF0LXNwaW5uZXI+XG48L2J1dHRvbj5cblxuIl19
|
|
213
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9iLXByb2dyZXNzaW9uLmljb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NvY2lhbC9qb2IvcHJvZ3Jlc3Npb24vam9iLXByb2dyZXNzaW9uLmljb24udHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NvY2lhbC9qb2IvcHJvZ3Jlc3Npb24vam9iLXByb2dyZXNzaW9uLmljb24uaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQXFCLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBcUIsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUd4SixPQUFPLEVBQUUsMkJBQTJCLEVBQTBCLE1BQU0sMkJBQTJCLENBQUM7QUFDaEcsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFcEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFN0MsT0FBTyxFQUFFLGtCQUFrQixFQUE2QixNQUFNLHdCQUF3QixDQUFDOzs7Ozs7Ozs7QUFldkYsTUFBTSxPQUFPLGtCQUFrQjtJQXdCN0IsWUFDNkQscUJBQTZDLEVBQzlGLGlCQUFvQyxFQUNwQyxFQUFxQjtRQUY0QiwwQkFBcUIsR0FBckIscUJBQXFCLENBQXdCO1FBQzlGLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUF6QnhCLFVBQUssR0FBRyxLQUFLLENBQUM7UUFDZCxjQUFTLEdBQUcsOEJBQThCLENBQUM7UUFHMUMsZ0JBQVcsR0FBRyxJ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LGVBQWU7U0FDMUIsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2xDLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN2QyxJQUFJLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQztJQUNoQyxDQUFDO0lBRVMsWUFBWTtRQUNwQixJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ2QsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLFlBQVksQ0FBQyxDQUFDO1NBQy9DO1FBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNwQyxDQUFDOzsrR0FoTlUsa0JBQWtCLGtCQXlCUCwyQkFBMkI7bUdBekJ0QyxrQkFBa0IsdU1DekIvQix3ckJBNEJBOzJGREhhLGtCQUFrQjtrQkFOOUIsU0FBUzsrQkFDRSwwQkFBMEIsbUJBR25CLHVCQUF1QixDQUFDLE1BQU07OzBCQTJCNUMsUUFBUTs7MEJBQUksTUFBTTsyQkFBQywyQkFBMkI7NEdBdkJ4QyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDSSxXQUFXO3NCQUFwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE9wdGlvbmFsLCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRoZW1lUGFsZXR0ZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHsgUHJvZ3Jlc3NTcGlubmVyTW9kZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLXNwaW5uZXInO1xuaW1wb3J0IHsgQVBQX0pPQl9QUk9HUkVTU0lPTl9TRVJWSUNFLCBJSm9iUHJvZ3Jlc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi9qb2ItcHJvZ3Jlc3Npb24uc2VydmljZSc7XG5pbXBvcnQgeyBKb2JQcm9ncmVzc2lvbiB9IGZyb20gJy4vam9iLXByb2dyZXNzaW9uLm1vZGVsJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgT2JqZWN0TWFwIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3R5cGVzJztcbmltcG9ydCB7IGFycmF5U2l6ZSwgaXNOaWwsIHRvQm9vbGVhbiwgdG9OdW1iZXIgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7IGZpbHRlciwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgUG9wb3ZlckNvbnRyb2xsZXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBKb2JQcm9ncmVzc2lvbkxpc3QsIEpvYlByb2dyZXNzaW9uTGlzdE9wdGlvbnMgfSBmcm9tICcuL2pvYi1wcm9ncmVzc2lvbi5saXN0JztcblxuZXhwb3J0IGludGVyZmFjZSBKb2JQcm9ncmVzc2lvbk9wdGlvbnMge1xuICBhdXRvSGlkZTogYm9vbGVhbjtcbiAgYXV0b0hpZGVEZWxheTogbnVtYmVyO1xuICBhdXRvUmVtb3ZlOiBib29sZWFuO1xuICBhdXRvUmVtb3ZlRGVsYXk6IG51bWJlcjtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWpvYi1wcm9ncmVzc2lvbi1pY29uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2pvYi1wcm9ncmVzc2lvbi5pY29uLmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9qb2ItcHJvZ3Jlc3Npb24uaWNvbi5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEpvYlByb2dyZXNzaW9uSWNvbiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBASW5wdXQoKSBkZWJ1ZyA9IGZhbHNlO1xuICBASW5wdXQoKSB0aXRsZUkxOG4gPSAnU09DSUFMLkpPQi5QUk9HUkVTU0lPTi5USVRMRSc7XG4gIEBJbnB1dCgpIG9wdGlvbnM6IEpvYlByb2dyZXNzaW9uT3B0aW9ucztcbiAgQElucHV0KCkgYXV0b0hpZGU6IGJvb2xlYW47XG4gIEBPdXRwdXQoKSBqb2JGaW5pc2hlZCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gIHZpc2libGU6IGJvb2xlYW47XG4gIGRpc2FibGVkID0gdHJ1ZTtcbiAgY29sb3I6IFRoZW1lUGFsZXR0ZSA9ICdhY2NlbnQnO1xuICBtb2RlOiBQcm9ncmVzc1NwaW5uZXJNb2RlID0gJ2RldGVybWluYXRlJztcbiAgdmFsdWUgPSAwO1xuICBqb2JQcm9ncmVzc2lvbnM6IEpvYlByb2dyZXNzaW9uW10gPSBbXTtcblxuICBwcm90ZWN0ZWQgYXV0b0hpZGVEZWxheTogbnVtYmVyO1xuICBwcm90ZWN0ZWQgYXV0b1JlbW92ZTogYm9vbGVhbjtcbiAgcHJvdGVjdGVkIGF1dG9SZW1vdmVEZWxheTogbnVtYmVyO1xuXG4gIHByaXZhdGUgX2xpc3RQb3BvdmVyOiBIVE1MSW9uUG9wb3ZlckVsZW1lbnQ7XG4gIHByaXZhdGUgX3N1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByaXZhdGUgX3N1YnNjcmlwdGlvbnNCeUlkOiBPYmplY3RNYXA8U3Vic2NyaXB0aW9uPiA9IHt9O1xuICBwcml2YXRlIF9sb2dQcmVmaXggPSAnW2pvYi1wcm9ncmVzc2lvbl0gJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEFQUF9KT0JfUFJPR1JFU1NJT05fU0VSVklDRSkgcHJvdGVjdGVkIGpvYlByb2dyZXNzaW9uU2VydmljZTogSUpvYlByb2dyZXNzaW9uU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgcG9wb3ZlckNvbnRyb2xsZXI6IFBvcG92ZXJDb250cm9sbGVyLFxuICAgIHByb3RlY3RlZCBjZDogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7XG5cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmIChpc05pbCh0aGlzLmpvYlByb2dyZXNzaW9uU2VydmljZSkpIHtcbiAgICAgIGNvbnNvbGUud2FybihgJHt0aGlzLl9sb2dQcmVmaXh9Tm8gc2VydmljZSBpbmplY3RlZGApO1xuICAgIH1cbiAgICAvLyBwYXJzZSBvcHRpb25zXG4gICAgdGhpcy5hdXRvSGlkZSA9IHRvQm9vbGVhbih0aGlzLmF1dG9IaWRlLCB0aGlzLm9wdGlvbnM/LmF1dG9IaWRlIHx8IGZhbHNlKTtcbiAgICB0aGlzLnZpc2libGUgPSAhdGhpcy5hdXRvSGlkZTtcbiAgICB0aGlzLmF1dG9IaWRlRGVsYXkgPSB0b051bWJlcih0aGlzLm9wdGlvbnM/LmF1dG9IaWRlRGVsYXksIDEwMDApO1xuICAgIHRoaXMuYXV0b1JlbW92ZSA9IHRvQm9vbGVhbih0aGlzLm9wdGlvbnM/LmF1dG9SZW1vdmUsIHRydWUpO1xuICAgIHRoaXMuYXV0b1JlbW92ZURlbGF5ID0gdG9OdW1iZXIodGhpcy5vcHRpb25zPy5hdXRvUmVtb3ZlRGVsYXksIDEwMDApO1xuXG4gICAgaWYgKHRoaXMuam9iUHJvZ3Jlc3Npb25TZXJ2aWNlKSB7XG4gICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgdGhpcy5qb2JQcm9ncmVzc2lvblNlcnZpY2Uud2F0Y2hBbGwoKVxuICAgICAgICAgIC5zdWJzY3JpYmUoaXRlbXMgPT4ge1xuICAgICAgICAgICAgKGl0ZW1zIHx8IFtdKS5mb3JFYWNoKGl0ZW0gPT4gdGhpcy5hZGRKb2IoaXRlbS5pZCwgaXRlbSkpO1xuICAgICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGFkZEpvYihpZDogbnVtYmVyLCBqb2I/OiBKb2JQcm9ncmVzc2lvbikge1xuICAgIGlmIChpc05pbCh0aGlzLmpvYlByb2dyZXNzaW9uU2VydmljZSkpIHtcbiAgICAgIGNvbnNvbGUud2FybihgJHt0aGlzLl9sb2dQcmVmaXh9Tm8gc2VydmljZSBpbmplY3RlZC4gQ2FuJ3QgYWRkIGEgam9iYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCEhdGhpcy5nZXRQcm9ncmVzc2lvbihpZCkpIHtcbiAgICAgIGNvbnNvbGUud2FybihgJHt0aGlzLl9sb2dQcmVmaXh9Sm9iIChpZD0ke2lkfSkgYWxyZWFkeSBwcmVzZW50YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH1BZGQgam9iIGlkPSR7aWR9YCk7XG4gICAgfVxuICAgIC8vIEFkZGluZyBlbXB0eSBqb2IgcHJvZ3Jlc3Npb25cbiAgICBsZXQgcHJvZ3Jlc3Npb24gPSB0aGlzLmdldFByb2dyZXNzaW9uKGlkKTtcbiAgICBpZiAoIXByb2dyZXNzaW9uKSB7XG4gICAgICBwcm9ncmVzc2lvbiA9IGpvYiB8fCBuZXcgSm9iUHJvZ3Jlc3Npb24oaWQpO1xuICAgICAgdGhpcy5qb2JQcm9ncmVzc2lvbnMucHVzaChwcm9ncmVzc2lvbik7XG4gICAgfVxuXG4gICAgdGhpcy5kaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgY29uc3Qgc3ViID0gdGhpcy5qb2JQcm9ncmVzc2lvblNlcnZpY2UubGlzdGVuQ2hhbmdlcyhpZClcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIocHJvZ3Jlc3Npb24gPT4ge1xuICAgICAgICAgIGlmIChpZCAhPT0gcHJvZ3Jlc3Npb24uaWQpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYCR7dGhpcy5fbG9nUHJlZml4fUpvYiBwcm9ncmVzc2lvbiAoaWQ9JHtwcm9ncmVzc2lvbi5pZH0pIGRvZXNuJ3QgbWF0Y2ggZXhwZWN0ZWQgam9iIChpZD0ke2lkfSlgKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pLFxuICAgICAgICBtYXAocHJvZ3Jlc3Npb24gPT4ge1xuICAgICAgICAgIC8vIEVuc3VyZSB2aXNpYmxlXG4gICAgICAgICAgdGhpcy52aXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgICAvLyBHZXQgY3VycmVudCBwcm9ncmVzc2lvbiBvYmplY3RcbiAgICAgICAgICBjb25zdCBjdXJyZW50UHJvZ3Jlc3Npb24gPSB0aGlzLmdldFByb2dyZXNzaW9uKGlkKTtcbiAgICAgICAgICBpZiAoIWN1cnJlbnRQcm9ncmVzc2lvbikge1xuICAgICAgICAgICAgLy8gYWRkIGl0IGlmIGFic2VudFxuICAgICAgICAgICAgdGhpcy5qb2JQcm9ncmVzc2lvbnMucHVzaChwcm9ncmVzc2lvbik7XG4gICAgICAgICAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICAgICAgICBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH1Qcm9ncmVzc2lvbiBhZGRlZCBpZD0ke2lkfWAsIHByb2dyZXNzaW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gdXBkYXRlIGN1cnJlbnRcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oY3VycmVudFByb2dyZXNzaW9uLCBwcm9ncmVzc2lvbik7XG4gICAgICAgICAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICAgICAgICBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH1Qcm9ncmVzc2lvbiB1cGRhdGVkIGlkPSR7aWR9YCwgcHJvZ3Jlc3Npb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcHJvZ3Jlc3Npb247XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKHByb2dyZXNzaW9uID0+IHtcbiAgICAgICAgLy8gdXBkYXRlIHZhbHVlXG4gICAgICAgIHRoaXMudXBkYXRlVmFsdWUoKTtcblxuICAgICAgICAvLyBqb2IgZmluaXNoZWRcbiAgICAgICAgaWYgKHByb2dyZXNzaW9uLnRvdGFsID4gMCAmJiBwcm9ncmVzc2lvbi5jdXJyZW50ID09IHByb2dyZXNzaW9uLnRvdGFsKSB7XG4gICAgICAgICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5fbG9nUHJlZml4fUZpbmlzaGVkIGpvYiBpZD0ke3Byb2dyZXNzaW9uLmlkfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBlbWl0IGV2ZW50XG4gICAgICAgICAgdGhpcy5qb2JGaW5pc2hlZC5lbWl0KHByb2dyZXNzaW9uLmlkKTtcbiAgICAgICAgICBpZiAodGhpcy5hdXRvUmVtb3ZlKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5yZW1vdmVKb2IocHJvZ3Jlc3Npb24uaWQpO1xuICAgICAgICAgICAgICAvLyBJZiBsYXN0IGpvYlxuICAgICAgICAgICAgICBpZiAodGhpcy5hdXRvSGlkZSAmJiAhdGhpcy5qb2JQcm9ncmVzc2lvbnM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2xpc3RQb3BvdmVyKSBhd2FpdCB0aGlzLl9saXN0UG9wb3Zlci5kaXNtaXNzKCk7XG4gICAgICAgICAgICAgICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICAgICAgfSwgdGhpcy5hdXRvSGlkZURlbGF5KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgdGhpcy5hdXRvUmVtb3ZlRGVsYXkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zQnlJZFtpZF0gPSBzdWI7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoc3ViKTtcbiAgfVxuXG4gIHJlbW92ZUpvYihpZDogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5fbG9nUHJlZml4fVJlbW92ZSBqb2IgaWQ9JHtpZH1gKTtcbiAgICB9XG4gICAgY29uc3Qgc3ViID0gdGhpcy5fc3Vic2NyaXB0aW9uc0J5SWRbaWRdO1xuICAgIGlmIChzdWIpIHtcbiAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMucmVtb3ZlKHN1Yik7XG4gICAgICBzdWIudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgY29uc3QgcHJvZ3Jlc3Npb24gPSB0aGlzLmdldFByb2dyZXNzaW9uKGlkKTtcbiAgICBpZiAocHJvZ3Jlc3Npb24pIHtcbiAgICAgIHRoaXMuam9iUHJvZ3Jlc3Npb25zLnNwbGljZSh0aGlzLmpvYlByb2dyZXNzaW9ucy5pbmRleE9mKHByb2dyZXNzaW9uKSwgMSk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlVmFsdWUoKTtcbiAgfVxuXG4gIGdldFByb2dyZXNzaW9uKGlkOiBudW1iZXIpOiBKb2JQcm9ncmVzc2lvbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuam9iUHJvZ3Jlc3Npb25zLmZpbmQocHJvZ3Jlc3Npb24gPT4gcHJvZ3Jlc3Npb24uaWQgPT09IGlkKTtcbiAgfVxuXG4gIHVwZGF0ZVZhbHVlKCkge1xuICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH1VcGRhdGluZyB2YWx1ZWApO1xuICAgIH1cbiAgICBsZXQgdmFsdWUgPSAwO1xuICAgIGNvbnN0IG5iUHJvZ3Jlc3Npb24gPSBhcnJheVNpemUodGhpcy5qb2JQcm9ncmVzc2lvbnMpO1xuICAgIGxldCBhbGxJbmRldGVybWluYXRlID0gbmJQcm9ncmVzc2lvbiA+IDA7XG5cbiAgICB0aGlzLmpvYlByb2dyZXNzaW9ucy5mb3JFYWNoKHByb2dyZXNzaW9uID0+IHtcbiAgICAgIGNvbnN0IGluZGV0ZXJtaW5hdGUgPSBwcm9ncmVzc2lvbi50b3RhbCA9PT0gMDtcbiAgICAgIGFsbEluZGV0ZXJtaW5hdGUgPSBhbGxJbmRldGVybWluYXRlICYmIGluZGV0ZXJtaW5hdGU7XG4gICAgICBpZiAoIWluZGV0ZXJtaW5hdGUpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZSArIHByb2dyZXNzaW9uLmN1cnJlbnQgKiAxMDAgLyBwcm9ncmVzc2lvbi50b3RhbDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMudmFsdWUgPSBuYlByb2dyZXNzaW9uID4gMCA/IHZhbHVlIC8gbmJQcm9ncmVzc2lvbiA6IDA7XG4gICAgdGhpcy5tb2RlID0gYWxsSW5kZXRlcm1pbmF0ZSA/ICdpbmRldGVybWluYXRlJyA6ICdkZXRlcm1pbmF0ZSc7XG4gICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5fbG9nUHJlZml4fVNldHRpbmcgdmFsdWU9JHt0aGlzLnZhbHVlfSwgbW9kZT0ke3RoaXMubW9kZX1gKTtcbiAgICB9XG5cbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgYXN5bmMgc2hvd0xpc3QoZXZlbnQ6IEV2ZW50KSB7XG4gICAgdGhpcy5fbGlzdFBvcG92ZXIgPSBhd2FpdCB0aGlzLnBvcG92ZXJDb250cm9sbGVyLmNyZWF0ZSh7XG4gICAgICBjb21wb25lbnQ6IEpvYlByb2dyZXNzaW9uTGlzdCxcbiAgICAgIGNvbXBvbmVudFByb3BzOiA8Sm9iUHJvZ3Jlc3Npb25MaXN0T3B0aW9ucz57XG4gICAgICAgIHRpdGxlSTE4bjogdGhpcy50aXRsZUkxOG4sXG4gICAgICAgIGpvYlByb2dyZXNzaW9uczogdGhpcy5qb2JQcm9ncmVzc2lvbnNcbiAgICAgIH0sXG4gICAgICBiYWNrZHJvcERpc21pc3M6IHRydWUsXG4gICAgICBrZXlib2FyZENsb3NlOiB0cnVlLFxuICAgICAgZXZlbnQsXG4gICAgICB0cmFuc2x1Y2VudDogdHJ1ZSxcbiAgICAgIGNzc0NsYXNzOiAncG9wb3Zlci1sYXJnZSdcbiAgICB9KTtcbiAgICBhd2FpdCB0aGlzLl9saXN0UG9wb3Zlci5wcmVzZW50KCk7XG4gICAgYXdhaXQgdGhpcy5fbGlzdFBvcG92ZXIub25EaWREaXNtaXNzKCk7XG4gICAgdGhpcy5fbGlzdFBvcG92ZXIgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgbWFya0ZvckNoZWNrKCkge1xuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9RGVzdHJveWluZ2ApO1xuICAgIH1cbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gIH1cbn1cbiIsIjxidXR0b25cbiAgI2J1dHRvblxuICBtYXQtaWNvbi1idXR0b25cbiAgW3RpdGxlXT1cInRpdGxlSTE4biB8IHRyYW5zbGF0ZVwiXG4gIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICpuZ0lmPVwidmlzaWJsZVwiXG4gIChjbGljayk9XCJzaG93TGlzdCgkZXZlbnQpXCJcbj5cbiAgPG1hdC1pY29uXG4gICAgW21hdEJhZGdlXT1cImpvYlByb2dyZXNzaW9ucz8ubGVuZ3RoXCJcbiAgICBbbWF0QmFkZ2VIaWRkZW5dPVwiIWpvYlByb2dyZXNzaW9ucz8ubGVuZ3RoXCJcbiAgICBtYXRCYWRnZUNvbG9yPVwiYWNjZW50XCJcbiAgICBtYXRCYWRnZVNpemU9XCJzbWFsbFwiXG4gICAgbWF0QmFkZ2VQb3NpdGlvbj1cImFib3ZlIGFmdGVyXCJcbiAgPnt7IGRpc2FibGVkIHx8IGpvYlByb2dyZXNzaW9ucz8ubGVuZ3RoID8gJ3NjaGVkdWxlJyA6ICd0YXNrX2FsdCcgfX1cbiAgPC9tYXQtaWNvbj5cbiAgPG1hdC1zcGlubmVyXG4gICAgI3NwaW5uZXJcbiAgICAqbmdJZj1cImpvYlByb2dyZXNzaW9ucz8ubGVuZ3RoXCJcbiAgICBjbGFzcz1cImZsb2F0aW5nLXNwaW5uZXJcIlxuICAgIFtjb2xvcl09XCJjb2xvclwiXG4gICAgW21vZGVdPVwibW9kZVwiXG4gICAgW3ZhbHVlXT1cInZhbHVlXCJcbiAgICBkaWFtZXRlcj1cIjMwXCJcbiAgICBzdHJva2VXaWR0aD1cIjNcIlxuICA+PC9tYXQtc3Bpbm5lcj5cbjwvYnV0dG9uPlxuXG4iXX0=
|
|
@@ -10,13 +10,13 @@ export class JobProgressionList {
|
|
|
10
10
|
}
|
|
11
11
|
}
|
|
12
12
|
JobProgressionList.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: JobProgressionList, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
13
|
-
JobProgressionList.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.8", type: JobProgressionList, selector: "app-job-progression-list", inputs: { titleI18n: "titleI18n", jobProgressions: "jobProgressions" }, ngImport: i0, template: "<ion-list class=\"ion-list-popover\">\n\n <ion-row class=\"ion-list-header column\">\n <ion-col>\n <ion-label>{{titleI18n | translate}}</ion-label>\n </ion-col>\n </ion-row>\n\n <ion-item *ngIf=\"!jobProgressions?.length\">\n {{'SOCIAL.JOB.PROGRESSION.EMPTY' | translate}}\n </ion-item>\n <ion-item *ngFor=\"let jobProgression of jobProgressions\" class=\"ion-item-job-progression\">\n <ion-grid class=\"ion-no-margin\">\n <ion-row class=\"name\">\n <ion-col>\n {{jobProgression.name}}\n </ion-col>\n </ion-row>\n <ion-row class=\"message\">\n <ion-col>\n {{jobProgression.message}}\n </ion-col>\n </ion-row>\n <ion-row class=\"progress-bar\">\n <ion-col>\n <ion-progress-bar\n [value]=\"jobProgression.total > 0 ? jobProgression.current / jobProgression.total : undefined\"\n [type]=\"jobProgression.total > 0 ? 'determinate' : 'indeterminate'\">\n </ion-progress-bar>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-item>\n\n</ion-list>\n", styles: [":host(.popover-viewport){overflow-y:auto;user-select:none}.ion-item-job-progression{font-size:.9em}.ion-item-job-progression .message{font-style:italic}.ion-item-job-progression .progress-bar{margin-top:5px;margin-bottom:5px}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i2.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i2.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i2.IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "component", type: i2.IonProgressBar, selector: "ion-progress-bar", inputs: ["buffer", "color", "mode", "reversed", "type", "value"] }, { kind: "component", type: i2.IonRow, selector: "ion-row" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] });
|
|
13
|
+
JobProgressionList.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.8", type: JobProgressionList, selector: "app-job-progression-list", inputs: { titleI18n: "titleI18n", jobProgressions: "jobProgressions" }, ngImport: i0, template: "<ion-list class=\"ion-list-popover\">\n\n <ion-row class=\"ion-list-header column\">\n <ion-col>\n <ion-label>{{titleI18n | translate}}</ion-label>\n </ion-col>\n </ion-row>\n\n <ion-item *ngIf=\"!jobProgressions?.length\">\n {{'SOCIAL.JOB.PROGRESSION.EMPTY' | translate}}\n </ion-item>\n <ion-item *ngFor=\"let jobProgression of jobProgressions\" class=\"ion-item-job-progression\">\n <ion-grid class=\"ion-no-margin\">\n <ion-row class=\"name\">\n <ion-col>\n {{jobProgression.name}}\n </ion-col>\n </ion-row>\n <ion-row class=\"message\">\n <ion-col>\n {{jobProgression.message}}\n </ion-col>\n </ion-row>\n <ion-row class=\"progress-bar\">\n <ion-col>\n <ion-progress-bar\n [value]=\"jobProgression.total > 0 ? jobProgression.current / jobProgression.total : undefined\"\n [type]=\"jobProgression.total > 0 ? 'determinate' : 'indeterminate'\">\n </ion-progress-bar>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-item>\n\n</ion-list>\n", styles: [":host(.popover-viewport){overflow-y:auto;-webkit-user-select:none;user-select:none}.ion-item-job-progression{font-size:.9em}.ion-item-job-progression .message{font-style:italic}.ion-item-job-progression .progress-bar{margin-top:5px;margin-bottom:5px}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i2.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i2.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i2.IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "component", type: i2.IonProgressBar, selector: "ion-progress-bar", inputs: ["buffer", "color", "mode", "reversed", "type", "value"] }, { kind: "component", type: i2.IonRow, selector: "ion-row" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] });
|
|
14
14
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: JobProgressionList, decorators: [{
|
|
15
15
|
type: Component,
|
|
16
|
-
args: [{ selector: 'app-job-progression-list', template: "<ion-list class=\"ion-list-popover\">\n\n <ion-row class=\"ion-list-header column\">\n <ion-col>\n <ion-label>{{titleI18n | translate}}</ion-label>\n </ion-col>\n </ion-row>\n\n <ion-item *ngIf=\"!jobProgressions?.length\">\n {{'SOCIAL.JOB.PROGRESSION.EMPTY' | translate}}\n </ion-item>\n <ion-item *ngFor=\"let jobProgression of jobProgressions\" class=\"ion-item-job-progression\">\n <ion-grid class=\"ion-no-margin\">\n <ion-row class=\"name\">\n <ion-col>\n {{jobProgression.name}}\n </ion-col>\n </ion-row>\n <ion-row class=\"message\">\n <ion-col>\n {{jobProgression.message}}\n </ion-col>\n </ion-row>\n <ion-row class=\"progress-bar\">\n <ion-col>\n <ion-progress-bar\n [value]=\"jobProgression.total > 0 ? jobProgression.current / jobProgression.total : undefined\"\n [type]=\"jobProgression.total > 0 ? 'determinate' : 'indeterminate'\">\n </ion-progress-bar>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-item>\n\n</ion-list>\n", styles: [":host(.popover-viewport){overflow-y:auto;user-select:none}.ion-item-job-progression{font-size:.9em}.ion-item-job-progression .message{font-style:italic}.ion-item-job-progression .progress-bar{margin-top:5px;margin-bottom:5px}\n"] }]
|
|
16
|
+
args: [{ selector: 'app-job-progression-list', template: "<ion-list class=\"ion-list-popover\">\n\n <ion-row class=\"ion-list-header column\">\n <ion-col>\n <ion-label>{{titleI18n | translate}}</ion-label>\n </ion-col>\n </ion-row>\n\n <ion-item *ngIf=\"!jobProgressions?.length\">\n {{'SOCIAL.JOB.PROGRESSION.EMPTY' | translate}}\n </ion-item>\n <ion-item *ngFor=\"let jobProgression of jobProgressions\" class=\"ion-item-job-progression\">\n <ion-grid class=\"ion-no-margin\">\n <ion-row class=\"name\">\n <ion-col>\n {{jobProgression.name}}\n </ion-col>\n </ion-row>\n <ion-row class=\"message\">\n <ion-col>\n {{jobProgression.message}}\n </ion-col>\n </ion-row>\n <ion-row class=\"progress-bar\">\n <ion-col>\n <ion-progress-bar\n [value]=\"jobProgression.total > 0 ? jobProgression.current / jobProgression.total : undefined\"\n [type]=\"jobProgression.total > 0 ? 'determinate' : 'indeterminate'\">\n </ion-progress-bar>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-item>\n\n</ion-list>\n", styles: [":host(.popover-viewport){overflow-y:auto;-webkit-user-select:none;user-select:none}.ion-item-job-progression{font-size:.9em}.ion-item-job-progression .message{font-style:italic}.ion-item-job-progression .progress-bar{margin-top:5px;margin-bottom:5px}\n"] }]
|
|
17
17
|
}], ctorParameters: function () { return []; }, propDecorators: { titleI18n: [{
|
|
18
18
|
type: Input
|
|
19
19
|
}], jobProgressions: [{
|
|
20
20
|
type: Input
|
|
21
21
|
}] } });
|
|
22
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9iLXByb2dyZXNzaW9uLmxpc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NvY2lhbC9qb2IvcHJvZ3Jlc3Npb24vam9iLXByb2dyZXNzaW9uLmxpc3QudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NvY2lhbC9qb2IvcHJvZ3Jlc3Npb24vam9iLXByb2dyZXNzaW9uLmxpc3QuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFhekQsTUFBTSxPQUFPLGtCQUFrQjtJQUs3QjtJQUNBLENBQUM7SUFFRCxRQUFRO0lBQ1IsQ0FBQzs7K0dBVFUsa0JBQWtCO21HQUFsQixrQkFBa0Isd0lDYi9CLDBrQ0FtQ0E7MkZEdEJhLGtCQUFrQjtrQkFMOUIsU0FBUzsrQkFDRSwwQkFBMEI7MEVBTTNCLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSm9iUHJvZ3Jlc3Npb24gfSBmcm9tICcuL2pvYi1wcm9ncmVzc2lvbi5tb2RlbCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSm9iUHJvZ3Jlc3Npb25MaXN0T3B0aW9ucyB7XG4gIHRpdGxlSTE4bj86IHN0cmluZztcbiAgam9iUHJvZ3Jlc3Npb25zPzogSm9iUHJvZ3Jlc3Npb25bXTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWpvYi1wcm9ncmVzc2lvbi1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2pvYi1wcm9ncmVzc2lvbi5saXN0Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9qb2ItcHJvZ3Jlc3Npb24ubGlzdC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEpvYlByb2dyZXNzaW9uTGlzdCBpbXBsZW1lbnRzIE9uSW5pdCwgSm9iUHJvZ3Jlc3Npb25MaXN0T3B0aW9ucyB7XG5cbiAgQElucHV0KCkgdGl0bGVJMThuOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGpvYlByb2dyZXNzaW9uczogSm9iUHJvZ3Jlc3Npb25bXTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICB9XG5cbn1cbiIsIjxpb24tbGlzdCBjbGFzcz1cImlvbi1saXN0LXBvcG92ZXJcIj5cblxuICA8aW9uLXJvdyBjbGFzcz1cImlvbi1saXN0LWhlYWRlciBjb2x1bW5cIj5cbiAgICA8aW9uLWNvbD5cbiAgICAgIDxpb24tbGFiZWw+e3t0aXRsZUkxOG4gfCB0cmFuc2xhdGV9fTwvaW9uLWxhYmVsPlxuICAgIDwvaW9uLWNvbD5cbiAgPC9pb24tcm93PlxuXG4gIDxpb24taXRlbSAqbmdJZj1cIiFqb2JQcm9ncmVzc2lvbnM/Lmxlbmd0aFwiPlxuICAgIHt7J1NPQ0lBTC5KT0IuUFJPR1JFU1NJT04uRU1QVFknIHwgdHJhbnNsYXRlfX1cbiAgPC9pb24taXRlbT5cbiAgPGlvbi1pdGVtICpuZ0Zvcj1cImxldCBqb2JQcm9ncmVzc2lvbiBvZiBqb2JQcm9ncmVzc2lvbnNcIiBjbGFzcz1cImlvbi1pdGVtLWpvYi1wcm9ncmVzc2lvblwiPlxuICAgIDxpb24tZ3JpZCBjbGFzcz1cImlvbi1uby1tYXJnaW5cIj5cbiAgICAgIDxpb24tcm93IGNsYXNzPVwibmFtZVwiPlxuICAgICAgICA8aW9uLWNvbD5cbiAgICAgICAgICB7e2pvYlByb2dyZXNzaW9uLm5hbWV9fVxuICAgICAgICA8L2lvbi1jb2w+XG4gICAgICA8L2lvbi1yb3c+XG4gICAgICA8aW9uLXJvdyBjbGFzcz1cIm1lc3NhZ2VcIj5cbiAgICAgICAgPGlvbi1jb2w+XG4gICAgICAgICAge3tqb2JQcm9ncmVzc2lvbi5tZXNzYWdlfX1cbiAgICAgICAgPC9pb24tY29sPlxuICAgICAgPC9pb24tcm93PlxuICAgICAgPGlvbi1yb3cgY2xhc3M9XCJwcm9ncmVzcy1iYXJcIj5cbiAgICAgICAgPGlvbi1jb2w+XG4gICAgICAgICAgPGlvbi1wcm9ncmVzcy1iYXJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJqb2JQcm9ncmVzc2lvbi50b3RhbCA+IDAgPyBqb2JQcm9ncmVzc2lvbi5jdXJyZW50IC8gam9iUHJvZ3Jlc3Npb24udG90YWwgOiB1bmRlZmluZWRcIlxuICAgICAgICAgICAgW3R5cGVdPVwiam9iUHJvZ3Jlc3Npb24udG90YWwgPiAwID8gJ2RldGVybWluYXRlJyA6ICdpbmRldGVybWluYXRlJ1wiPlxuICAgICAgICAgIDwvaW9uLXByb2dyZXNzLWJhcj5cbiAgICAgICAgPC9pb24tY29sPlxuICAgICAgPC9pb24tcm93PlxuICAgIDwvaW9uLWdyaWQ+XG4gIDwvaW9uLWl0ZW0+XG5cbjwvaW9uLWxpc3Q+XG4iXX0=
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
var JobProgression_1;
|
|
2
|
+
import { __decorate } from "tslib";
|
|
3
|
+
import { EntityClass } from '../../../core/services/model/entity.decorators';
|
|
4
|
+
import { Entity } from '../../../core/services/model/entity.model';
|
|
5
|
+
// @dynamic
|
|
6
|
+
let JobProgression = JobProgression_1 = class JobProgression extends Entity {
|
|
7
|
+
constructor(id) {
|
|
8
|
+
super(JobProgression_1.TYPENAME);
|
|
9
|
+
this.id = id;
|
|
10
|
+
}
|
|
11
|
+
fromObject(source) {
|
|
12
|
+
super.fromObject(source);
|
|
13
|
+
this.name = source.name;
|
|
14
|
+
this.message = source.message;
|
|
15
|
+
this.current = source.current;
|
|
16
|
+
this.total = source.total;
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
JobProgression = JobProgression_1 = __decorate([
|
|
20
|
+
EntityClass({ typename: 'JobProgressionVO' })
|
|
21
|
+
], JobProgression);
|
|
22
|
+
export { JobProgression };
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9iLXByb2dyZXNzaW9uLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zb2NpYWwvam9iL3Byb2dyZXNzaW9uL2pvYi1wcm9ncmVzc2lvbi5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnREFBZ0QsQ0FBQztBQUMzRSxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sMkNBQTJDLENBQUM7QUFFakUsV0FBVztBQUVYLElBQWEsY0FBYyxzQkFBM0IsTUFBYSxjQUFlLFNBQVEsTUFBc0I7SUFVeEQsWUFBWSxFQUFXO1FBQ3JCLEtBQUssQ0FBQyxnQkFBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2YsQ0FBQztJQUVELFVBQVUsQ0FBQyxNQUFXO1FBQ3BCLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUM5QixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7UUFDOUIsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQzVCLENBQUM7Q0FDRixDQUFBO0FBdEJZLGNBQWM7SUFEMUIsV0FBVyxDQUFDLEVBQUMsUUFBUSxFQUFFLGtCQUFrQixFQUFDLENBQUM7R0FDL0IsY0FBYyxDQXNCMUI7U0F0QlksY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RW50aXR5Q2xhc3N9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZXMvbW9kZWwvZW50aXR5LmRlY29yYXRvcnMnO1xuaW1wb3J0IHtFbnRpdHl9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZXMvbW9kZWwvZW50aXR5Lm1vZGVsJztcblxuLy8gQGR5bmFtaWNcbkBFbnRpdHlDbGFzcyh7dHlwZW5hbWU6ICdKb2JQcm9ncmVzc2lvblZPJ30pXG5leHBvcnQgY2xhc3MgSm9iUHJvZ3Jlc3Npb24gZXh0ZW5kcyBFbnRpdHk8Sm9iUHJvZ3Jlc3Npb24+IHtcblxuICBzdGF0aWMgZnJvbU9iamVjdDogKHNvdXJjZTogYW55LCBvcHRzPzogYW55KSA9PiBKb2JQcm9ncmVzc2lvbjtcblxuICBpZDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgY3VycmVudDogbnVtYmVyO1xuICB0b3RhbDogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKGlkPzogbnVtYmVyKSB7XG4gICAgc3VwZXIoSm9iUHJvZ3Jlc3Npb24uVFlQRU5BTUUpO1xuICAgIHRoaXMuaWQgPSBpZDtcbiAgfVxuXG4gIGZyb21PYmplY3Qoc291cmNlOiBhbnkpIHtcbiAgICBzdXBlci5mcm9tT2JqZWN0KHNvdXJjZSk7XG4gICAgdGhpcy5uYW1lID0gc291cmNlLm5hbWU7XG4gICAgdGhpcy5tZXNzYWdlID0gc291cmNlLm1lc3NhZ2U7XG4gICAgdGhpcy5jdXJyZW50ID0gc291cmNlLmN1cnJlbnQ7XG4gICAgdGhpcy50b3RhbCA9IHNvdXJjZS50b3RhbDtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { Inject, Injectable, InjectionToken, Optional } from '@angular/core';
|
|
2
|
+
import { JobProgression } from './job-progression.model';
|
|
3
|
+
import { BaseGraphqlService } from '../../../core/services/base-graphql-service.class';
|
|
4
|
+
import { ENVIRONMENT } from '../../../../environments/environment.class';
|
|
5
|
+
import { of } from 'rxjs';
|
|
6
|
+
import { gql } from '@apollo/client/core';
|
|
7
|
+
import { isNil, toNumber } from '../../../shared/functions';
|
|
8
|
+
import { map } from 'rxjs/operators';
|
|
9
|
+
import { SocialErrorCodes } from '../../social.errors';
|
|
10
|
+
import * as i0 from "@angular/core";
|
|
11
|
+
import * as i1 from "../../../core/graphql/graphql.service";
|
|
12
|
+
import * as i2 from "../../../../environments/environment.class";
|
|
13
|
+
export const APP_JOB_PROGRESSION_SERVICE = new InjectionToken('JobProgressionService');
|
|
14
|
+
const JobProgressionSubscription = {
|
|
15
|
+
listenChanges: gql `subscription UpdateJobProgression($id: Int!, $interval: Int){
|
|
16
|
+
data: updateJobProgression(id: $id, interval: $interval) {
|
|
17
|
+
id
|
|
18
|
+
name
|
|
19
|
+
message
|
|
20
|
+
current
|
|
21
|
+
total
|
|
22
|
+
}
|
|
23
|
+
}`
|
|
24
|
+
};
|
|
25
|
+
export class JobProgressionService extends BaseGraphqlService {
|
|
26
|
+
constructor(graphql, environment) {
|
|
27
|
+
super(graphql, environment);
|
|
28
|
+
this.graphql = graphql;
|
|
29
|
+
this.environment = environment;
|
|
30
|
+
this._logPrefix = '[job-progression-service] ';
|
|
31
|
+
// For DEV only
|
|
32
|
+
this._debug = environment && !environment.production;
|
|
33
|
+
}
|
|
34
|
+
watchAll(options) {
|
|
35
|
+
return of([]); // TODO
|
|
36
|
+
}
|
|
37
|
+
addJob(id, job) {
|
|
38
|
+
throw new Error('no implemented');
|
|
39
|
+
}
|
|
40
|
+
removeJob(id) {
|
|
41
|
+
throw new Error('no implemented');
|
|
42
|
+
}
|
|
43
|
+
listenChanges(id, options) {
|
|
44
|
+
if (isNil(id))
|
|
45
|
+
throw new Error(`${this._logPrefix}Missing argument 'id'`);
|
|
46
|
+
if (this._debug)
|
|
47
|
+
console.debug(`${this._logPrefix}[WS] Listening changes for job progression {${id}}...`);
|
|
48
|
+
return this.graphql.subscribe({
|
|
49
|
+
query: JobProgressionSubscription.listenChanges,
|
|
50
|
+
fetchPolicy: options?.fetchPolicy,
|
|
51
|
+
variables: { id, interval: toNumber(options?.interval, 10) },
|
|
52
|
+
error: { code: SocialErrorCodes.SUBSCRIBE_JOB_PROGRESSION_ERROR, message: 'SOCIAL.ERROR.SUBSCRIBE_JOB_PROGRESSION_ERROR' }
|
|
53
|
+
}).pipe(map(({ data }) => {
|
|
54
|
+
const progression = data && JobProgression.fromObject(data);
|
|
55
|
+
if (progression && this._debug)
|
|
56
|
+
console.debug(`${this._logPrefix}Job progression ${id} updated on server`, progression);
|
|
57
|
+
return progression;
|
|
58
|
+
}));
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
JobProgressionService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: JobProgressionService, deps: [{ token: i1.GraphqlService }, { token: ENVIRONMENT, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
62
|
+
JobProgressionService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: JobProgressionService });
|
|
63
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: JobProgressionService, decorators: [{
|
|
64
|
+
type: Injectable
|
|
65
|
+
}], ctorParameters: function () { return [{ type: i1.GraphqlService }, { type: i2.Environment, decorators: [{
|
|
66
|
+
type: Optional
|
|
67
|
+
}, {
|
|
68
|
+
type: Inject,
|
|
69
|
+
args: [ENVIRONMENT]
|
|
70
|
+
}] }]; } });
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9iLXByb2dyZXNzaW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NvY2lhbC9qb2IvcHJvZ3Jlc3Npb24vam9iLXByb2dyZXNzaW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sbURBQW1ELENBQUM7QUFFckYsT0FBTyxFQUFjLFdBQVcsRUFBQyxNQUFNLDRDQUE0QyxDQUFDO0FBQ3BGLE9BQU8sRUFBYSxFQUFFLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDcEMsT0FBTyxFQUFjLEdBQUcsRUFBd0IsTUFBTSxxQkFBcUIsQ0FBQztBQUM1RSxPQUFPLEVBQUMsS0FBSyxFQUFFLFFBQVEsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQzFELE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuQyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQzs7OztBQUVyRCxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyxJQUFJLGNBQWMsQ0FBeUIsdUJBQXVCLENBQUMsQ0FBQztBQVcvRyxNQUFNLDBCQUEwQixHQUFHO0lBQ2pDLGFBQWEsRUFBRSxHQUFHLENBQUE7Ozs7Ozs7O0lBUWhCO0NBQ0gsQ0FBQTtBQUdELE1BQU0sT0FBTyxxQkFDWCxTQUFRLGtCQUFrQztJQUcxQyxZQUNZLE9BQXVCLEVBQ1UsV0FBd0I7UUFFbkUsS0FBSyxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztRQUhsQixZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQUNVLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBR25FLElBQUksQ0FBQyxVQUFVLEdBQUcsNEJBQTRCLENBQUM7UUFDL0MsZUFBZTtRQUNmLElBQUksQ0FBQyxNQUFNLEdBQUcsV0FBVyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQztJQUN2RCxDQUFDO0lBRUQsUUFBUSxDQUFDLE9BRVI7UUFDQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU87SUFDeEIsQ0FBQztJQUVELE1BQU0sQ0FBQyxFQUFVLEVBQUUsR0FBb0I7UUFDckMsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxTQUFTLENBQUMsRUFBVTtRQUNsQixNQUFNLElBQUksS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELGFBQWEsQ0FBQyxFQUFVLEVBQUUsT0FHekI7UUFFQyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsdUJBQXVCLENBQUMsQ0FBQztRQUMxRSxJQUFJLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLCtDQUErQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRTFHLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQWdCO1lBQzNDLEtBQUssRUFBRSwwQkFBMEIsQ0FBQyxhQUFhO1lBQy9DLFdBQVcsRUFBRSxPQUFPLEVBQUUsV0FBVztZQUNqQyxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFDO1lBQzNELEtBQUssRUFBRSxFQUFDLElBQUksRUFBRSxnQkFBZ0IsQ0FBQywrQkFBK0IsRUFBRSxPQUFPLEVBQUUsOENBQThDLEVBQUM7U0FDekgsQ0FBQyxDQUFDLElBQUksQ0FDTCxHQUFHLENBQUMsQ0FBQyxFQUFDLElBQUksRUFBQyxFQUFFLEVBQUU7WUFDYixNQUFNLFdBQVcsR0FBRyxJQUFJLElBQUksY0FBYyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM1RCxJQUFJLFdBQVcsSUFBSSxJQUFJLENBQUMsTUFBTTtnQkFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDeEgsT0FBTyxXQUFXLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUVKLENBQUM7O2tIQWpEVSxxQkFBcUIsZ0RBTVYsV0FBVztzSEFOdEIscUJBQXFCOzJGQUFyQixxQkFBcUI7a0JBRGpDLFVBQVU7OzBCQU9OLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiwgT3B0aW9uYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtKb2JQcm9ncmVzc2lvbn0gZnJvbSAnLi9qb2ItcHJvZ3Jlc3Npb24ubW9kZWwnO1xuaW1wb3J0IHtCYXNlR3JhcGhxbFNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZXMvYmFzZS1ncmFwaHFsLXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHtHcmFwaHFsU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9ncmFwaHFsL2dyYXBocWwuc2VydmljZSc7XG5pbXBvcnQge0Vudmlyb25tZW50LCBFTlZJUk9OTUVOVH0gZnJvbSAnLi4vLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LmNsYXNzJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgb2Z9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtGZXRjaFBvbGljeSwgZ3FsLCBXYXRjaFF1ZXJ5RmV0Y2hQb2xpY3l9IGZyb20gJ0BhcG9sbG8vY2xpZW50L2NvcmUnO1xuaW1wb3J0IHtpc05pbCwgdG9OdW1iZXJ9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHttYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7U29jaWFsRXJyb3JDb2Rlc30gZnJvbSAnLi4vLi4vc29jaWFsLmVycm9ycyc7XG5cbmV4cG9ydCBjb25zdCBBUFBfSk9CX1BST0dSRVNTSU9OX1NFUlZJQ0UgPSBuZXcgSW5qZWN0aW9uVG9rZW48SUpvYlByb2dyZXNzaW9uU2VydmljZT4oJ0pvYlByb2dyZXNzaW9uU2VydmljZScpO1xuXG5cbmV4cG9ydCBpbnRlcmZhY2UgSUpvYlByb2dyZXNzaW9uU2VydmljZSB7XG4gIHdhdGNoQWxsKCk6IE9ic2VydmFibGU8Sm9iUHJvZ3Jlc3Npb25bXT47XG4gIGFkZEpvYihpZDogbnVtYmVyLCBqb2I/OiBKb2JQcm9ncmVzc2lvbik7XG4gIHJlbW92ZUpvYihpZDogbnVtYmVyKTtcbiAgbGlzdGVuQ2hhbmdlcyhpZDogbnVtYmVyLCBvcHRpb25zPzogeyBpbnRlcnZhbD86IG51bWJlcjsgZmV0Y2hQb2xpY3k/OiBGZXRjaFBvbGljeSB9KTogT2JzZXJ2YWJsZTxKb2JQcm9ncmVzc2lvbj47XG59XG5cblxuY29uc3QgSm9iUHJvZ3Jlc3Npb25TdWJzY3JpcHRpb24gPSB7XG4gIGxpc3RlbkNoYW5nZXM6IGdxbGBzdWJzY3JpcHRpb24gVXBkYXRlSm9iUHJvZ3Jlc3Npb24oJGlkOiBJbnQhLCAkaW50ZXJ2YWw6IEludCl7XG4gICAgZGF0YTogdXBkYXRlSm9iUHJvZ3Jlc3Npb24oaWQ6ICRpZCwgaW50ZXJ2YWw6ICRpbnRlcnZhbCkge1xuICAgICAgaWRcbiAgICAgIG5hbWVcbiAgICAgIG1lc3NhZ2VcbiAgICAgIGN1cnJlbnRcbiAgICAgIHRvdGFsXG4gICAgfVxuICB9YFxufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgSm9iUHJvZ3Jlc3Npb25TZXJ2aWNlXG4gIGV4dGVuZHMgQmFzZUdyYXBocWxTZXJ2aWNlPEpvYlByb2dyZXNzaW9uPlxuICBpbXBsZW1lbnRzIElKb2JQcm9ncmVzc2lvblNlcnZpY2Uge1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBncmFwaHFsOiBHcmFwaHFsU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEVOVklST05NRU5UKSBwcm90ZWN0ZWQgZW52aXJvbm1lbnQ6IEVudmlyb25tZW50XG4gICkge1xuICAgIHN1cGVyKGdyYXBocWwsIGVudmlyb25tZW50KTtcbiAgICB0aGlzLl9sb2dQcmVmaXggPSAnW2pvYi1wcm9ncmVzc2lvbi1zZXJ2aWNlXSAnO1xuICAgIC8vIEZvciBERVYgb25seVxuICAgIHRoaXMuX2RlYnVnID0gZW52aXJvbm1lbnQgJiYgIWVudmlyb25tZW50LnByb2R1Y3Rpb247XG4gIH1cblxuICB3YXRjaEFsbChvcHRpb25zPzoge1xuICAgIGZldGNoUG9saWN5PzogV2F0Y2hRdWVyeUZldGNoUG9saWN5XG4gIH0pOiBPYnNlcnZhYmxlPEpvYlByb2dyZXNzaW9uW10+IHtcbiAgICByZXR1cm4gb2YoW10pOyAvLyBUT0RPXG4gIH1cblxuICBhZGRKb2IoaWQ6IG51bWJlciwgam9iPzogSm9iUHJvZ3Jlc3Npb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25vIGltcGxlbWVudGVkJyk7XG4gIH1cblxuICByZW1vdmVKb2IoaWQ6IG51bWJlcikge1xuICAgIHRocm93IG5ldyBFcnJvcignbm8gaW1wbGVtZW50ZWQnKTtcbiAgfVxuXG4gIGxpc3RlbkNoYW5nZXMoaWQ6IG51bWJlciwgb3B0aW9ucz86IHtcbiAgICBpbnRlcnZhbD86IG51bWJlcjtcbiAgICBmZXRjaFBvbGljeT86IEZldGNoUG9saWN5XG4gIH0pOiBPYnNlcnZhYmxlPEpvYlByb2dyZXNzaW9uPiB7XG5cbiAgICBpZiAoaXNOaWwoaWQpKSB0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy5fbG9nUHJlZml4fU1pc3NpbmcgYXJndW1lbnQgJ2lkJ2ApO1xuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9W1dTXSBMaXN0ZW5pbmcgY2hhbmdlcyBmb3Igam9iIHByb2dyZXNzaW9uIHske2lkfX0uLi5gKTtcblxuICAgIHJldHVybiB0aGlzLmdyYXBocWwuc3Vic2NyaWJlPHsgZGF0YTogYW55IH0+KHtcbiAgICAgIHF1ZXJ5OiBKb2JQcm9ncmVzc2lvblN1YnNjcmlwdGlvbi5saXN0ZW5DaGFuZ2VzLFxuICAgICAgZmV0Y2hQb2xpY3k6IG9wdGlvbnM/LmZldGNoUG9saWN5LFxuICAgICAgdmFyaWFibGVzOiB7IGlkLCBpbnRlcnZhbDogdG9OdW1iZXIob3B0aW9ucz8uaW50ZXJ2YWwsIDEwKX0sXG4gICAgICBlcnJvcjoge2NvZGU6IFNvY2lhbEVycm9yQ29kZXMuU1VCU0NSSUJFX0pPQl9QUk9HUkVTU0lPTl9FUlJPUiwgbWVzc2FnZTogJ1NPQ0lBTC5FUlJPUi5TVUJTQ1JJQkVfSk9CX1BST0dSRVNTSU9OX0VSUk9SJ31cbiAgICB9KS5waXBlKFxuICAgICAgbWFwKCh7ZGF0YX0pID0+IHtcbiAgICAgICAgY29uc3QgcHJvZ3Jlc3Npb24gPSBkYXRhICYmIEpvYlByb2dyZXNzaW9uLmZyb21PYmplY3QoZGF0YSk7XG4gICAgICAgIGlmIChwcm9ncmVzc2lvbiAmJiB0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9Sm9iIHByb2dyZXNzaW9uICR7aWR9IHVwZGF0ZWQgb24gc2VydmVyYCwgcHJvZ3Jlc3Npb24pO1xuICAgICAgICByZXR1cm4gcHJvZ3Jlc3Npb247XG4gICAgICB9KVxuICAgICk7XG5cbiAgfVxufVxuIl19
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { Component, Inject, ViewChild } from '@angular/core';
|
|
2
|
-
import { JobProgression } from '../job.model';
|
|
3
|
-
import { APP_JOB_PROGRESSION_SERVICE } from '../job.service';
|
|
2
|
+
import { JobProgression } from '../progression/job-progression.model';
|
|
3
|
+
import { APP_JOB_PROGRESSION_SERVICE } from '../progression/job-progression.service';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
import * as i1 from "@ionic/angular";
|
|
6
6
|
import * as i2 from "../progression/job-progression.icon";
|
|
7
|
-
import * as i3 from "../job.service";
|
|
8
7
|
export class JobProgressionTestingPage {
|
|
9
8
|
constructor(jobProgressionService) {
|
|
10
9
|
this.jobProgressionService = jobProgressionService;
|
|
@@ -43,11 +42,11 @@ JobProgressionTestingPage.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.
|
|
|
43
42
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: JobProgressionTestingPage, decorators: [{
|
|
44
43
|
type: Component,
|
|
45
44
|
args: [{ selector: 'job-progression-testing', template: "<ion-toolbar color=\"primary\">\n <ion-title>Job progression</ion-title>\n</ion-toolbar>\n\n<ion-content class=\"ion-padding\">\n\n <app-job-progression-icon #icon [debug]=\"true\" [options]=\"options\" ></app-job-progression-icon>\n\n <p>\n <ion-button (click)=\"incrementJob(10)\">\n +10\n </ion-button>\n <ion-button (click)=\"incrementJob(-10)\">\n -10\n </ion-button>\n </p>\n <p>\n <ion-button (click)=\"addJob()\">Add Job</ion-button>\n </p>\n</ion-content>\n" }]
|
|
46
|
-
}], ctorParameters: function () { return [{ type:
|
|
45
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
47
46
|
type: Inject,
|
|
48
47
|
args: [APP_JOB_PROGRESSION_SERVICE]
|
|
49
48
|
}] }]; }, propDecorators: { jobProgressionIcon: [{
|
|
50
49
|
type: ViewChild,
|
|
51
50
|
args: ['icon']
|
|
52
51
|
}] } });
|
|
53
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9iLXByb2dyZXNzaW9uLnRlc3RpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NvY2lhbC9qb2IvdGVzdGluZy9qb2ItcHJvZ3Jlc3Npb24udGVzdGluZy50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc29jaWFsL2pvYi90ZXN0aW5nL2pvYi1wcm9ncmVzc2lvbi50ZXN0aW5nLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRTNELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQztBQUNwRSxPQUFPLEVBQUMsMkJBQTJCLEVBQWdELE1BQU0sd0NBQXdDLENBQUM7Ozs7QUFNbEksTUFBTSxPQUFPLHlCQUF5QjtJQVVwQyxZQUNpRCxxQkFBNkM7UUFBN0MsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF3QjtRQVA5RixVQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ1YsUUFBRyxHQUFtQixJQUFJLENBQUM7UUFDM0IsWUFBTyxHQUEwQjtZQUMvQixRQUFRLEVBQUUsSUFBSTtTQUNmLENBQUM7SUFJRixDQUFDO0lBRUQsWUFBWSxDQUFDLEtBQWE7UUFDeEIsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUN4QyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxHQUFHLDhGQUE4RixJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sTUFBTSxDQUFBO1FBRXZJLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUU7WUFDckMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2xELElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztZQUNyQixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLGlCQUFpQjtTQUNuQztRQUNELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRUQsTUFBTTtRQUNKLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFTyxTQUFTO1FBQ2YsTUFBTSxHQUFHLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztRQUNqQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUN0QixHQUFHLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztRQUNsQixHQUFHLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztRQUNoQixHQUFHLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztRQUNoQixJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDL0MsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDOztzSEF2Q1UseUJBQXlCLGtCQVcxQiwyQkFBMkI7MEdBWDFCLHlCQUF5QiwyS0NUdEMsbWZBb0JBOzJGRFhhLHlCQUF5QjtrQkFKckMsU0FBUzsrQkFDRSx5QkFBeUI7OzBCQWNoQyxNQUFNOzJCQUFDLDJCQUEyQjs0Q0FUbEIsa0JBQWtCO3NCQUFwQyxTQUFTO3VCQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgSW5qZWN0LCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtKb2JQcm9ncmVzc2lvbkljb24sIEpvYlByb2dyZXNzaW9uT3B0aW9uc30gZnJvbSAnLi4vcHJvZ3Jlc3Npb24vam9iLXByb2dyZXNzaW9uLmljb24nO1xuaW1wb3J0IHtKb2JQcm9ncmVzc2lvbn0gZnJvbSAnLi4vcHJvZ3Jlc3Npb24vam9iLXByb2dyZXNzaW9uLm1vZGVsJztcbmltcG9ydCB7QVBQX0pPQl9QUk9HUkVTU0lPTl9TRVJWSUNFLCBJSm9iUHJvZ3Jlc3Npb25TZXJ2aWNlLCBKb2JQcm9ncmVzc2lvblNlcnZpY2V9IGZyb20gJy4uL3Byb2dyZXNzaW9uL2pvYi1wcm9ncmVzc2lvbi5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnam9iLXByb2dyZXNzaW9uLXRlc3RpbmcnLFxuICB0ZW1wbGF0ZVVybDogJ2pvYi1wcm9ncmVzc2lvbi50ZXN0aW5nLmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEpvYlByb2dyZXNzaW9uVGVzdGluZ1BhZ2Uge1xuXG4gIEBWaWV3Q2hpbGQoJ2ljb24nKSBqb2JQcm9ncmVzc2lvbkljb246IEpvYlByb2dyZXNzaW9uSWNvbjtcblxuICBqb2JJZCA9IDA7XG4gIGpvYjogSm9iUHJvZ3Jlc3Npb24gPSBudWxsO1xuICBvcHRpb25zID0gPEpvYlByb2dyZXNzaW9uT3B0aW9ucz57XG4gICAgYXV0b0hpZGU6IHRydWVcbiAgfTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KEFQUF9KT0JfUFJPR1JFU1NJT05fU0VSVklDRSkgcHJvdGVjdGVkIGpvYlByb2dyZXNzaW9uU2VydmljZTogSUpvYlByb2dyZXNzaW9uU2VydmljZSkge1xuICB9XG5cbiAgaW5jcmVtZW50Sm9iKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLmpvYiA9IHRoaXMuam9iIHx8IHRoaXMuY3JlYXRlSm9iKCk7XG4gICAgdGhpcy5qb2IuY3VycmVudCArPSB2YWx1ZSB8fCAwO1xuICAgIHRoaXMuam9iLm1lc3NhZ2UgPSBgRmFrZSBwcm9ncmVzc2lvbiAodmVyeSBsb25nIG1lc3NhZ2UgdmVyeSBsb25nIG1lc3NhZ2UgdmVyeSBsb25nIG1lc3NhZ2UgdmVyeSBsb25nIG1lc3NhZ2UpICR7dGhpcy5qb2IuY3VycmVudH0vMTAwYFxuXG4gICAgaWYgKHRoaXMuam9iLmN1cnJlbnQgPiB0aGlzLmpvYi50b3RhbCkge1xuICAgICAgdGhpcy5qb2JQcm9ncmVzc2lvblNlcnZpY2UucmVtb3ZlSm9iKHRoaXMuam9iLmlkKTtcbiAgICAgIHRoaXMuam9iLmN1cnJlbnQgPSAwO1xuICAgICAgdGhpcy5qb2IgPSBudWxsOyAvLyBGb3JnZXQgdGhlIGpvYlxuICAgIH1cbiAgICB0aGlzLmpvYlByb2dyZXNzaW9uSWNvbi51cGRhdGVWYWx1ZSgpO1xuICB9XG5cbiAgYWRkSm9iKCkge1xuICAgIHRoaXMuam9iID0gdGhpcy5jcmVhdGVKb2IoKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlSm9iKCk6IEpvYlByb2dyZXNzaW9uIHtcbiAgICBjb25zdCBqb2IgPSBuZXcgSm9iUHJvZ3Jlc3Npb24oKTtcbiAgICBqb2IuaWQgPSArK3RoaXMuam9iSWQ7XG4gICAgam9iLm5hbWUgPSAndGVzdCc7XG4gICAgam9iLmN1cnJlbnQgPSAwO1xuICAgIGpvYi50b3RhbCA9IDEwMDtcbiAgICB0aGlzLmpvYlByb2dyZXNzaW9uU2VydmljZS5hZGRKb2Ioam9iLmlkLCBqb2IpO1xuICAgIHJldHVybiBqb2I7XG4gIH1cbn1cblxuIiwiPGlvbi10b29sYmFyIGNvbG9yPVwicHJpbWFyeVwiPlxuICA8aW9uLXRpdGxlPkpvYiBwcm9ncmVzc2lvbjwvaW9uLXRpdGxlPlxuPC9pb24tdG9vbGJhcj5cblxuPGlvbi1jb250ZW50IGNsYXNzPVwiaW9uLXBhZGRpbmdcIj5cblxuICA8YXBwLWpvYi1wcm9ncmVzc2lvbi1pY29uICNpY29uIFtkZWJ1Z109XCJ0cnVlXCIgW29wdGlvbnNdPVwib3B0aW9uc1wiID48L2FwcC1qb2ItcHJvZ3Jlc3Npb24taWNvbj5cblxuICA8cD5cbiAgICA8aW9uLWJ1dHRvbiAoY2xpY2spPVwiaW5jcmVtZW50Sm9iKDEwKVwiPlxuICAgICAgKzEwXG4gICAgPC9pb24tYnV0dG9uPlxuICAgIDxpb24tYnV0dG9uIChjbGljayk9XCJpbmNyZW1lbnRKb2IoLTEwKVwiPlxuICAgICAgLTEwXG4gICAgPC9pb24tYnV0dG9uPlxuICA8L3A+XG4gIDxwPlxuICAgIDxpb24tYnV0dG9uIChjbGljayk9XCJhZGRKb2IoKVwiPkFkZCBKb2I8L2lvbi1idXR0b24+XG4gIDwvcD5cbjwvaW9uLWNvbnRlbnQ+XG4iXX0=
|