@firestitch/form 9.7.6 → 12.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app/components/form-dialog-actions/form-dialog-actions.component.d.ts +21 -18
- package/app/consts/error-messages.const.d.ts +19 -19
- package/app/directives/form/form.directive.d.ts +105 -102
- package/app/directives/form-dialog-close.directive.d.ts +12 -9
- package/app/directives/submit-button.directive.d.ts +31 -28
- package/app/directives/validators/compare.directive.d.ts +15 -12
- package/app/directives/validators/control.directive.d.ts +48 -45
- package/app/directives/validators/daterange.directive.d.ts +13 -10
- package/app/directives/validators/email.directive.d.ts +13 -10
- package/app/directives/validators/emails.directive.d.ts +13 -10
- package/app/directives/validators/function.directive.d.ts +14 -11
- package/app/directives/validators/greater.directive.d.ts +13 -10
- package/app/directives/validators/integer.directive.d.ts +13 -10
- package/app/directives/validators/lesser.directive.d.ts +13 -10
- package/app/directives/validators/max.directive.d.ts +13 -10
- package/app/directives/validators/maxlength.directive.d.ts +13 -10
- package/app/directives/validators/min.directive.d.ts +13 -10
- package/app/directives/validators/minlength.directive.d.ts +13 -10
- package/app/directives/validators/numeric.directive.d.ts +13 -10
- package/app/directives/validators/pattern.directive.d.ts +13 -10
- package/app/directives/validators/phone.directive.d.ts +13 -10
- package/app/directives/validators/required.directive.d.ts +16 -13
- package/app/directives/validators/url.directive.d.ts +14 -11
- package/app/directives/validators/validate.directive.d.ts +14 -11
- package/app/enums/confirm-result.d.ts +7 -7
- package/app/enums/form-status.d.ts +9 -9
- package/app/fs-form.module.d.ts +35 -4
- package/app/guards/form-deactivate.guard.d.ts +12 -9
- package/app/helpers/confirm-result-continue.d.ts +1 -1
- package/app/helpers/confirm-unsaved.d.ts +5 -5
- package/app/helpers/get-form-errors.d.ts +2 -2
- package/app/helpers/index.d.ts +2 -2
- package/app/helpers/is-enabled.d.ts +1 -1
- package/app/interfaces/async-validator.d.ts +14 -14
- package/app/interfaces/confirm-config.d.ts +7 -7
- package/app/interfaces/confirm-tab-group.d.ts +10 -10
- package/app/interfaces/form-deactivate.d.ts +4 -4
- package/app/interfaces/index.d.ts +4 -4
- package/app/interfaces/submit-event.d.ts +5 -5
- package/app/interfaces/submitted-event.d.ts +6 -6
- package/app/interfaces/validator.d.ts +13 -13
- package/app/providers/validate-messages.provider.d.ts +25 -25
- package/app/services/fsform.service.d.ts +10 -7
- package/app/validators/validators.d.ts +12 -12
- package/bundles/firestitch-form.umd.js +2672 -2546
- package/bundles/firestitch-form.umd.js.map +1 -1
- package/esm2015/app/components/form-dialog-actions/form-dialog-actions.component.js +86 -93
- package/esm2015/app/consts/error-messages.const.js +20 -20
- package/esm2015/app/directives/form/form.directive.js +619 -668
- package/esm2015/app/directives/form-dialog-close.directive.js +31 -33
- package/esm2015/app/directives/submit-button.directive.js +131 -138
- package/esm2015/app/directives/validators/compare.directive.js +49 -49
- package/esm2015/app/directives/validators/control.directive.js +257 -273
- package/esm2015/app/directives/validators/daterange.directive.js +41 -41
- package/esm2015/app/directives/validators/email.directive.js +41 -41
- package/esm2015/app/directives/validators/emails.directive.js +41 -41
- package/esm2015/app/directives/validators/function.directive.js +31 -31
- package/esm2015/app/directives/validators/greater.directive.js +40 -40
- package/esm2015/app/directives/validators/integer.directive.js +41 -41
- package/esm2015/app/directives/validators/lesser.directive.js +40 -40
- package/esm2015/app/directives/validators/max.directive.js +36 -36
- package/esm2015/app/directives/validators/maxlength.directive.js +35 -35
- package/esm2015/app/directives/validators/min.directive.js +36 -36
- package/esm2015/app/directives/validators/minlength.directive.js +35 -35
- package/esm2015/app/directives/validators/numeric.directive.js +41 -41
- package/esm2015/app/directives/validators/pattern.directive.js +35 -35
- package/esm2015/app/directives/validators/phone.directive.js +41 -41
- package/esm2015/app/directives/validators/required.directive.js +71 -73
- package/esm2015/app/directives/validators/url.directive.js +47 -49
- package/esm2015/app/directives/validators/validate.directive.js +33 -31
- package/esm2015/app/enums/confirm-result.js +9 -9
- package/esm2015/app/enums/form-status.js +11 -11
- package/esm2015/app/fs-form.module.js +165 -106
- package/esm2015/app/guards/form-deactivate.guard.js +40 -44
- package/esm2015/app/helpers/confirm-result-continue.js +5 -5
- package/esm2015/app/helpers/confirm-unsaved.js +70 -70
- package/esm2015/app/helpers/get-form-errors.js +25 -25
- package/esm2015/app/helpers/index.js +3 -3
- package/esm2015/app/helpers/is-enabled.js +4 -4
- package/esm2015/app/interfaces/async-validator.js +2 -1
- package/esm2015/app/interfaces/confirm-config.js +2 -1
- package/esm2015/app/interfaces/confirm-tab-group.js +2 -1
- package/esm2015/app/interfaces/form-deactivate.js +2 -1
- package/esm2015/app/interfaces/index.js +5 -1
- package/esm2015/app/interfaces/submit-event.js +2 -1
- package/esm2015/app/interfaces/submitted-event.js +2 -1
- package/esm2015/app/interfaces/validator.js +2 -1
- package/esm2015/app/providers/validate-messages.provider.js +11 -11
- package/esm2015/app/services/fsform.service.js +25 -26
- package/esm2015/app/validators/validators.js +97 -97
- package/esm2015/firestitch-form.js +5 -27
- package/esm2015/public_api.js +35 -14
- package/fesm2015/firestitch-form.js +2100 -2110
- package/fesm2015/firestitch-form.js.map +1 -1
- package/firestitch-form.d.ts +5 -26
- package/package.json +7 -8
- package/public_api.d.ts +33 -12
- package/styles.scss +4 -4
- package/bundles/firestitch-form.umd.min.js +0 -16
- package/bundles/firestitch-form.umd.min.js.map +0 -1
- package/esm5/app/components/form-dialog-actions/form-dialog-actions.component.js +0 -96
- package/esm5/app/consts/error-messages.const.js +0 -20
- package/esm5/app/directives/form/form.directive.js +0 -709
- package/esm5/app/directives/form-dialog-close.directive.js +0 -34
- package/esm5/app/directives/submit-button.directive.js +0 -144
- package/esm5/app/directives/validators/compare.directive.js +0 -60
- package/esm5/app/directives/validators/control.directive.js +0 -279
- package/esm5/app/directives/validators/daterange.directive.js +0 -50
- package/esm5/app/directives/validators/email.directive.js +0 -50
- package/esm5/app/directives/validators/emails.directive.js +0 -50
- package/esm5/app/directives/validators/function.directive.js +0 -36
- package/esm5/app/directives/validators/greater.directive.js +0 -49
- package/esm5/app/directives/validators/integer.directive.js +0 -50
- package/esm5/app/directives/validators/lesser.directive.js +0 -49
- package/esm5/app/directives/validators/max.directive.js +0 -45
- package/esm5/app/directives/validators/maxlength.directive.js +0 -44
- package/esm5/app/directives/validators/min.directive.js +0 -45
- package/esm5/app/directives/validators/minlength.directive.js +0 -44
- package/esm5/app/directives/validators/numeric.directive.js +0 -50
- package/esm5/app/directives/validators/pattern.directive.js +0 -44
- package/esm5/app/directives/validators/phone.directive.js +0 -50
- package/esm5/app/directives/validators/required.directive.js +0 -88
- package/esm5/app/directives/validators/url.directive.js +0 -56
- package/esm5/app/directives/validators/validate.directive.js +0 -36
- package/esm5/app/enums/confirm-result.js +0 -9
- package/esm5/app/enums/form-status.js +0 -11
- package/esm5/app/fs-form.module.js +0 -110
- package/esm5/app/guards/form-deactivate.guard.js +0 -45
- package/esm5/app/helpers/confirm-result-continue.js +0 -5
- package/esm5/app/helpers/confirm-unsaved.js +0 -70
- package/esm5/app/helpers/get-form-errors.js +0 -28
- package/esm5/app/helpers/index.js +0 -3
- package/esm5/app/helpers/is-enabled.js +0 -4
- package/esm5/app/interfaces/async-validator.js +0 -1
- package/esm5/app/interfaces/confirm-config.js +0 -1
- package/esm5/app/interfaces/confirm-tab-group.js +0 -1
- package/esm5/app/interfaces/form-deactivate.js +0 -1
- package/esm5/app/interfaces/index.js +0 -1
- package/esm5/app/interfaces/submit-event.js +0 -1
- package/esm5/app/interfaces/submitted-event.js +0 -1
- package/esm5/app/interfaces/validator.js +0 -1
- package/esm5/app/providers/validate-messages.provider.js +0 -12
- package/esm5/app/services/fsform.service.js +0 -27
- package/esm5/app/validators/validators.js +0 -102
- package/esm5/firestitch-form.js +0 -27
- package/esm5/public_api.js +0 -14
- package/fesm5/firestitch-form.js +0 -2399
- package/fesm5/firestitch-form.js.map +0 -1
- package/firestitch-form.metadata.json +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../node_modules/tslib/tslib.es6.js","ng://@firestitch/form/app/enums/confirm-result.ts","ng://@firestitch/form/app/helpers/confirm-unsaved.ts","ng://@firestitch/form/app/enums/form-status.ts","ng://@firestitch/form/app/directives/form-dialog-close.directive.ts","ng://@firestitch/form/app/services/fsform.service.ts","ng://@firestitch/form/app/helpers/confirm-result-continue.ts","ng://@firestitch/form/app/directives/form/form.directive.ts","ng://@firestitch/form/app/helpers/get-form-errors.ts","ng://@firestitch/form/app/consts/error-messages.const.ts","ng://@firestitch/form/app/providers/validate-messages.provider.ts","ng://@firestitch/form/app/directives/validators/control.directive.ts","ng://@firestitch/form/app/helpers/is-enabled.ts","ng://@firestitch/form/app/directives/validators/required.directive.ts","ng://@firestitch/form/app/validators/validators.ts","ng://@firestitch/form/app/directives/validators/min.directive.ts","ng://@firestitch/form/app/directives/validators/max.directive.ts","ng://@firestitch/form/app/directives/validators/minlength.directive.ts","ng://@firestitch/form/app/directives/validators/maxlength.directive.ts","ng://@firestitch/form/app/directives/validators/email.directive.ts","ng://@firestitch/form/app/directives/validators/emails.directive.ts","ng://@firestitch/form/app/directives/validators/phone.directive.ts","ng://@firestitch/form/app/directives/validators/compare.directive.ts","ng://@firestitch/form/app/directives/validators/integer.directive.ts","ng://@firestitch/form/app/directives/validators/numeric.directive.ts","ng://@firestitch/form/app/directives/validators/pattern.directive.ts","ng://@firestitch/form/app/directives/validators/function.directive.ts","ng://@firestitch/form/app/directives/validators/greater.directive.ts","ng://@firestitch/form/app/directives/validators/daterange.directive.ts","ng://@firestitch/form/app/directives/validators/lesser.directive.ts","ng://@firestitch/form/app/directives/validators/url.directive.ts","ng://@firestitch/form/app/directives/submit-button.directive.ts","ng://@firestitch/form/app/directives/validators/validate.directive.ts","ng://@firestitch/form/app/components/form-dialog-actions/form-dialog-actions.component.ts","ng://@firestitch/form/app/fs-form.module.ts","ng://@firestitch/form/app/guards/form-deactivate.guard.ts"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__extends","__","this","constructor","prototype","create","ConfirmResult","__assign","assign","t","s","i","n","arguments","length","call","apply","__decorate","decorators","target","key","desc","c","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","__param","paramIndex","decorator","__metadata","metadataKey","metadataValue","metadata","__read","o","m","Symbol","iterator","e","ar","next","done","push","value","error","__spread","concat","confirmUnsaved","form","prompt","Observable","observer","confirm","ngForm","dirty","Pristine","complete","title","message","saveLabel","discardLabel","cancelLabel","template","dialogConfig","width","buttons","label","color","cancel","subscribe","Discard","reset","submitted","pipe","first","Save","invalid","Invalid","control","markAsPristine","ngSubmit","emit","Review","FormStatus","FsFormDialogCloseDirective","clicked$","Subject","registered","type","click","ngOnDestroy","HostBinding","HostListener","Directive","selector","FsForm","_eventBus","broadcast","data","on","asObservable","filter","event","map","Injectable","providedIn","confirmResultContinue","result","FsFormDirective","_form","_element","_message","_prompt","_ngZone","_dialogRef","_drawerRef","wrapperSelector","messageSelector","hintSelector","labelSelector","autocomplete","shortcuts","confirmDialog","confirmDrawer","confirmBrowser","confirmTabs","dirtySubmitButton","successDelay","errorDelay","submitEvent","EventEmitter","valid","reseted","cleared","fsformClass","_tabGroups","QueryList","_submitButtons","_dialogBackdropEscape","_snapshot","_status$","BehaviorSubject","Valid","_destroy$","getValue","Submitting","Completing","submitter","_submitter","_submitEvent","submittedEvent","response","submit","of","isObservable","mode","MessageMode","Toast","el","nativeElement","querySelector","scrollIntoView","behavior","block","throwError","_activeSubmitButton","name","ngOnInit","_registerConfirmDialogBackdropEscape","_listenHotKeys","_listenWindowClose","_listenSubmit","_registerAutocomplete","ngOnChanges","changes","_updateDirtySubmitButtons","ngAfterContentInit","_registerConfirm","_registerConfirmDialogClose","_registerConfirmDrawerClose","_registerConfirmTabs","_registerDrawerClose","_registerDirtySubmitButton","createSnapshot","_this","resetForm","keys","controls","forEach","clear","markAsDirty","triggerSubmit","triggerConfirm","submitting","take","mergeMap","enable","disable","button","addSubmitButton","submitButton","toArray","removeSubmitButton","submitButton_","tap","preventDefault","includes","_markControlsAsTouchedAndUpdateValidity","_broadcastSubmittingEvents","switchMap","_waitUntilStatusPending","_setupActiveSubmitButton","status","_formInvalidState$","_formValidState$","catchError","source$","_handleError","_completeSubmit","takeUntil","fromEvent","window","returnValue","runOutsideAngular","document","code","dialog_1","getElementById","id","paths","composedPath","item","run","_formClose","ctrlKey","metaKey","_elementInForm","activeElement","close","_registerDialogClose","directive","_getActiveButton","activeButton","find","active","isSameNode","parentElement","success","_resetButtons","Submitted","Success","Error","resetDelay","delay","valueChanges","existing_1","indexOf","closeStart$","subscriber","iif","defer","tabGroup","registerConfirmTabGroup","registerConfirmTabGroups","tabGroups","confirmTabGroup","_originalHandleClick","_handleClick","_handlClick$","tab","tabHeader","idx","observers","selectedIndex","formDialogClose","disableClose","backdropClick","_registerControl","registerControl","bind","setAttribute","guid","getAttribute","dirtySubmit","values","markAsTouched","updateValueAndValidity","process","statusChanges","startWith","state","console","log","group","errors","getFormErrors","_a","FormGroup","entries","_b","childErrors","groupEnd","NgForm","Inject","args","ElementRef","FsMessage","FsPrompt","NgZone","MatDialogRef","Optional","DrawerRef","Input","MatTabGroup","Output","ContentChildren","descendants","ERROR_MESSAGES","required","email","emails","phone","numeric","integer","min","max","minlength","maxlength","compare","pattern","dateRange","url","urlProtocol","greater","lesser","VALIDATE_MESSAGES","InjectionToken","VALIDATE_MESSAGE_PROVIDER","provide","useFactory","messageProviderFactory","FsControlDirective","elementRef","renderer2","injector","_validateMessages","ngControl","formDirective","appendMessageClass","appendLabelClass","appendErrorClass","appendHintClass","_control","messages","_setupValidators","statusChangesSubscribe","render","getMessageSelector","getHintWrapperSelector","getWrapperSelector","getlabelSelector","getWrapperElement","wrapper","getWrapper","renderer","getError","messageWrapper","warn","labelWrapper","addClass","hint","setStyle","errorWrapper","remove","classList","add","createElement","errorText","createText","appendChild","node","count","parentNode","parseErrorMessage","replace","controlRef","validate","validators","validator","setValidators","validateAsync","asyncValidators","asyncValidator","setAsyncValidators","Renderer2","Injector","Self","NgControl","providers","isEnabled","FsFormRequiredDirective","_super","Validators","removeClass","FsValidators","split","some","part","isEmpty","isNumeric","String","protocolRequired","RegExp","match","isObject","start","end","isValid","func","formFunction","stream$","err","Promise","from","validationError","FsFormMinDirective","parseFloat","fsFormMin","FsFormMaxDirective","fsFormMax","FsFormMinLengthDirective","minLength","fsFormMinLength","FsFormMaxLengthDirective","maxLength","fsFormMaxLength","FsFormEmailDirective","fsFormEmail","FsFormEmailsDirective","fsFormEmails","FsFormPhoneDirective","fsFormPhone","FsFormCompareDirective","fsFormCompare","ngAfterViewInit","addEventListener","removeEventListener","FsFormIntegerDirective","fsFormInteger","FsFormNumericDirective","fsFormNumeric","FsFormPatternDirective","fsFormPattern","FsFormFunctionDirective","fsFormFunction","fsFormFunctionData","FsFormGreaterDirective","fsFormGreater","isNaN","actual","FsFormDateRangeDirective","fsFormDateRange","FsFormLesserDirective","fsFormLesser","FsFormUrlDirective","fsFormUrlProtocol","fsFormUrl","FsSubmitButtonDirective","_matButton","_elementRef","_cdRef","transitionStyle","element","setTimeout","disabled","markForCheck","disableRipple","setClass","cls","svg","_getSvg","_resetClass","_disableShadowAnimation","append","querySelectorAll","DOMParser","parseFromString","firstChild","MatButton","Host","ChangeDetectorRef","FsFormValidateDirective","validateFn","validateFnData","FsFormDialogActionsComponent","save","closeClick","confirmResult","Component","changeDetection","ChangeDetectionStrategy","OnPush","FsFormModule","forRoot","ngModule","FsFormModule_1","NgModule","imports","CommonModule","FormsModule","MatButtonModule","MatDialogModule","declarations","exports","ErrorStateMatcher","useClass","ShowOnDirtyErrorStateMatcher","FormDeactivateGuard","canDeactivate","getForm"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","export enum ConfirmResult {\n Save = 'save',\n Discard = 'discard',\n Review = 'review',\n Invalid = 'invalid',\n Pristine = 'pristine',\n}\n","import { FsPrompt } from '@firestitch/prompt';\n\nimport { Observable } from 'rxjs';\nimport { first } from 'rxjs/operators';\n\nimport { FsFormDirective } from '../directives/form/form.directive';\nimport { ConfirmResult } from '../enums/confirm-result';\n\n\nexport function confirmUnsaved(form: FsFormDirective, prompt: FsPrompt): Observable<ConfirmResult> {\n return new Observable(observer => {\n\n if (!form.confirm || !form.ngForm.dirty) {\n observer.next(ConfirmResult.Pristine);\n observer.complete();\n return;\n }\n\n let title = 'You Have Unsaved Changes';\n let message = 'What would you like to do with your changes?';\n let saveLabel = 'Save & Continue';\n let discardLabel = 'Discard Changes & Continue';\n let cancelLabel = 'Review Changes';\n\n if (typeof form.confirm === 'object') {\n title = form.confirm.title || title;\n message = form.confirm.message || message;\n saveLabel = form.confirm.saveLabel || saveLabel;\n discardLabel = form.confirm.discardLabel || discardLabel;\n cancelLabel = form.confirm.cancelLabel || cancelLabel;\n }\n\n prompt.confirm({\n title: title,\n template: message,\n dialogConfig: { width: 'auto' },\n buttons: [\n {\n label: saveLabel,\n color: 'primary',\n value: 'save'\n },\n {\n label: discardLabel,\n value: 'discard'\n },\n {\n label: cancelLabel,\n cancel: true\n }\n ]\n }).subscribe((value) => {\n\n if (value === 'discard') {\n observer.next(ConfirmResult.Discard);\n observer.complete();\n form.reset();\n }\n\n if (value === 'save') {\n\n form.submitted\n .pipe(\n first()\n )\n .subscribe(() => {\n observer.next(ConfirmResult.Save);\n observer.complete();\n });\n\n form.invalid\n .pipe(\n first()\n )\n .subscribe(() => {\n observer.next(ConfirmResult.Invalid);\n observer.complete();\n });\n\n form.ngForm.control.markAsPristine();\n form.ngForm.ngSubmit.emit();\n }\n\n }, (error: any) => {\n observer.next(ConfirmResult.Review);\n observer.complete();\n });\n });\n}\n","export enum FormStatus {\n Valid = 'valid',\n Invalid = 'invalid',\n Submitting = 'submitting',\n Submitted = 'submitted',\n Error = 'error',\n Success = 'success',\n Completing = 'completing',\n}\n","import { Directive, HostListener, OnDestroy, HostBinding } from '@angular/core';\nimport { Subject } from 'rxjs';\n\n\n@Directive({\n selector: '[fsFormDialogClose],[fs-form-dialog-close]'\n})\nexport class FsFormDialogCloseDirective implements OnDestroy {\n\n public clicked$ = new Subject();\n public registered = false;\n\n @HostBinding('attr.type') type = 'button';\n\n @HostListener('click', ['$event.target'])\n public click() {\n this.clicked$.next();\n }\n\n public ngOnDestroy() {\n this.clicked$.complete();\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { Subject, Observable } from 'rxjs';\nimport { filter, map } from 'rxjs/operators';\n\ninterface BroadcastEvent {\n key: any;\n data?: any;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FsForm {\n private _eventBus: Subject<BroadcastEvent>;\n\n constructor() {\n this._eventBus = new Subject<BroadcastEvent>();\n }\n\n broadcast(key: any, data?: any) {\n this._eventBus.next({key, data});\n }\n\n on<T>(key: any): Observable<T> {\n return this._eventBus.asObservable()\n .pipe(\n filter(event => event.key === key),\n map(event => <T>event.data)\n );\n }\n}\n","import { ConfirmResult } from '../enums/confirm-result';\n\nexport function confirmResultContinue(result) {\n return result === ConfirmResult.Discard || result === ConfirmResult.Save || result === ConfirmResult.Pristine;\n}\n","import {\n AfterContentInit,\n ContentChildren,\n Directive,\n ElementRef,\n EventEmitter,\n HostBinding,\n Inject,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n QueryList,\n SimpleChanges,\n} from '@angular/core';\nimport { AbstractControl, NgForm } from '@angular/forms';\n\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { MatTab, MatTabGroup, MatTabHeader } from '@angular/material/tabs';\n\nimport { FsMessage, MessageMode } from '@firestitch/message';\nimport { FsPrompt } from '@firestitch/prompt';\nimport { guid } from '@firestitch/common';\nimport { DrawerRef } from '@firestitch/drawer';\n\nimport {\n BehaviorSubject,\n defer,\n fromEvent,\n iif,\n isObservable,\n Observable,\n of,\n Subject,\n throwError\n} from 'rxjs';\nimport {\n catchError,\n delay,\n filter,\n first,\n map,\n mergeMap,\n startWith,\n switchMap,\n take,\n takeUntil,\n tap\n} from 'rxjs/operators';\n\nimport { confirmUnsaved } from '../../helpers/confirm-unsaved';\nimport { FsFormDialogCloseDirective } from '../form-dialog-close.directive';\nimport { FsSubmitButtonDirective } from '../submit-button.directive';\nimport { ConfirmConfig, SubmittedEvent, ConfirmTabGroup } from './../../interfaces';\nimport { ConfirmResult } from './../../enums/confirm-result';\nimport { FsForm } from '../../services/fsform.service';\nimport { SubmitEvent } from './../../interfaces/submit-event';\nimport { FormStatus } from './../../enums/form-status';\nimport { confirmResultContinue } from '../../helpers/confirm-result-continue';\nimport { getFormErrors } from '../../helpers/get-form-errors';\n\n\n@Directive({\n selector: '[fsForm]',\n})\nexport class FsFormDirective implements OnInit, OnDestroy, AfterContentInit, OnChanges {\n\n @Input()\n public wrapperSelector = '.fs-form-wrapper,.mat-form-field';\n\n @Input()\n public messageSelector = '.fs-form-message,.mat-form-field-subscript-wrapper';\n\n @Input()\n public hintSelector = '.fs-form-hint,.mat-form-field-hint-wrapper';\n\n @Input()\n public labelSelector = '.fs-form-label,.mat-form-field-label';\n\n @Input()\n public autocomplete = false;\n\n @Input()\n public shortcuts = true; // Ctrl + s\n\n @Input()\n public confirm: ConfirmConfig | boolean = true;\n\n @Input()\n public confirmDialog = true;\n\n @Input()\n public confirmDrawer = true;\n\n @Input()\n public confirmBrowser = true;\n\n @Input()\n public confirmTabs = true;\n\n @Input()\n public dirtySubmitButton = true;\n\n @Input()\n public submit: (event: SubmitEvent) => Observable<any>;\n\n @Input()\n public successDelay = 0;\n\n @Input()\n public errorDelay = 1000;\n\n @Input()\n public tabGroup: MatTabGroup;\n\n @Output('fsForm')\n public submitEvent: EventEmitter<SubmitEvent> = new EventEmitter();\n\n @Output()\n public invalid: EventEmitter<SubmitEvent> = new EventEmitter();\n\n @Output()\n public valid: EventEmitter<SubmitEvent> = new EventEmitter();\n\n @Output()\n public submitted: EventEmitter<SubmitEvent> = new EventEmitter();\n\n @Output()\n public reseted: EventEmitter<SubmitEvent> = new EventEmitter();\n\n @Output()\n public cleared: EventEmitter<SubmitEvent> = new EventEmitter();\n\n @HostBinding('class.fs-form')\n public fsformClass = true;\n\n @ContentChildren(FsFormDialogCloseDirective, { descendants: true })\n public formDialogClose: QueryList<FsFormDialogCloseDirective>;\n\n @ContentChildren(MatTabGroup, { descendants: true })\n private _tabGroups: QueryList<MatTabGroup> = new QueryList();\n\n private _submitButtons: QueryList<FsSubmitButtonDirective> = new QueryList();\n private _registerControl;\n private _activeSubmitButton: FsSubmitButtonDirective;\n private _dialogBackdropEscape = false;\n private _snapshot: { [key: string]: unknown } = {};\n private _status$ = new BehaviorSubject(FormStatus.Valid);\n private _destroy$ = new Subject();\n\n constructor(\n @Inject(NgForm)\n public ngForm: NgForm,\n private _form: FsForm,\n private _element: ElementRef,\n private _message: FsMessage,\n private _prompt: FsPrompt,\n private _ngZone: NgZone,\n\n @Optional() @Inject(MatDialogRef)\n private _dialogRef: MatDialogRef<any>,\n\n @Optional() @Inject(DrawerRef)\n private _drawerRef: DrawerRef<any>,\n ) {}\n\n public get submitting(): boolean {\n return this._status$.getValue() === FormStatus.Submitting;\n }\n\n public get completing(): boolean {\n return this._status$.getValue() === FormStatus.Completing;\n }\n\n private get _submitEvent(): SubmitEvent {\n return {\n ngForm: this.ngForm,\n submitter: this._submitter,\n };\n }\n\n private get _formValidState$(): Observable<SubmittedEvent> {\n this._form.broadcast('valid', this._submitEvent);\n this.submitEvent.emit(this._submitEvent);\n this.valid.emit(this._submitEvent);\n\n const submittedEvent: SubmittedEvent = {\n ngForm: this.ngForm,\n submitter: this._submitter,\n response: null\n };\n\n if (!this.submit) {\n return of(submittedEvent);\n }\n\n const result = this.submit(this._submitEvent);\n\n if (!isObservable(result)) {\n return of(submittedEvent);\n }\n\n return result\n .pipe(\n map((response) => {\n submittedEvent.response = response;\n\n return submittedEvent;\n })\n );\n }\n\n private get _formInvalidState$(): Observable<never> {\n this._form.broadcast('invalid', this._submitEvent);\n\n if (this.invalid) {\n this.invalid.emit(this._submitEvent);\n }\n\n const message = 'Changes not saved. Please review errors highlighted in red.';\n this._message.error(message, { mode: MessageMode.Toast });\n\n const el = this._element.nativeElement.querySelector('.ng-invalid');\n\n if (el) {\n el.scrollIntoView({ behavior: 'smooth', block: 'center' });\n }\n\n return throwError('Form validation error');\n }\n\n private get _submitter(): string {\n return this._activeSubmitButton\n ? this._activeSubmitButton.name\n : null;\n }\n\n public ngOnInit() {\n this._registerConfirmDialogBackdropEscape();\n this._listenHotKeys();\n this._listenWindowClose();\n this._listenSubmit();\n\n if (!this.autocomplete) {\n this._registerAutocomplete();\n }\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.confirm) {\n this._updateDirtySubmitButtons();\n }\n }\n\n public ngAfterContentInit(): void {\n this._registerConfirm();\n this._registerConfirmDialogClose();\n this._registerConfirmDrawerClose();\n this._registerConfirmTabs();\n this._registerDrawerClose();\n this._registerDirtySubmitButton();\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next();\n this._destroy$.complete();\n }\n\n public createSnapshot(): void {\n this._snapshot = this.ngForm.value;\n }\n\n public reset(): void {\n this.ngForm.resetForm();\n\n Object.keys(this.ngForm.controls)\n .forEach((name: string) => {\n const control = this.ngForm.controls[name];\n control.reset(this._snapshot[name]);\n });\n \n this.reseted.emit();\n }\n\n public clear(): void {\n this.ngForm.resetForm();\n this.cleared.emit();\n }\n\n public dirty(): void {\n this.ngForm.form.markAsDirty();\n this._updateDirtySubmitButtons();\n }\n\n public triggerSubmit(): void {\n this.ngForm.ngSubmit.next();\n }\n\n public triggerConfirm(): Observable<ConfirmResult> {\n const submitted = this.submitting ? this.submitted.asObservable() : of({});\n\n return submitted\n .pipe(\n take(1),\n mergeMap(() => confirmUnsaved(this, this._prompt)),\n );\n }\n\n public enable(): void {\n this.ngForm.control.enable();\n\n this._updateDirtySubmitButtons();\n }\n\n public disable(): void {\n this.ngForm.control.disable();\n\n this._submitButtons.forEach((button) => {\n button.disable();\n });\n }\n\n public addSubmitButton(submitButton: FsSubmitButtonDirective): void {\n this._submitButtons.reset(\n [\n ...this._submitButtons.toArray(),\n submitButton,\n ]);\n }\n\n public removeSubmitButton(submitButton: FsSubmitButtonDirective): void {\n this._submitButtons.reset(\n [\n ...this._submitButtons.toArray()\n .filter((submitButton_) => (submitButton !== submitButton_)),\n ]);\n }\n\n private _listenSubmit(): void {\n this.ngForm\n .ngSubmit\n .pipe(\n tap((event) => {\n event?.preventDefault();\n }),\n filter(() => {\n return [ FormStatus.Valid, FormStatus.Invalid ]\n .includes(this._status$.getValue());\n }),\n tap(() => this._markControlsAsTouchedAndUpdateValidity()),\n tap(() => this._broadcastSubmittingEvents()),\n switchMap(() => this._waitUntilStatusPending()),\n tap(() => this._setupActiveSubmitButton()),\n mergeMap(() => {\n return this.ngForm.status === 'INVALID'\n ? this._formInvalidState$\n : this._formValidState$;\n }),\n catchError((e, source$) => {\n this._handleError(e);\n\n return source$;\n }),\n tap((submittedEvent: SubmittedEvent) => {\n this._completeSubmit(true, submittedEvent);\n }),\n takeUntil(this._destroy$)\n )\n .subscribe(() => {});\n }\n\n private _listenWindowClose(): void {\n fromEvent(window, 'beforeunload')\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe((event: Event) => {\n if (this.confirm && this.confirmBrowser && this.ngForm.dirty) {\n event.returnValue = false;\n }\n });\n }\n\n private _listenHotKeys(): void {\n this._ngZone.runOutsideAngular(() => {\n fromEvent(document, 'keydown')\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe((event: KeyboardEvent) => {\n if (this._dialogBackdropEscape && event.code === 'Escape') {\n const dialog = document.getElementById(this._dialogRef.id);\n const paths = event.composedPath();\n\n if (paths) {\n paths.forEach(item => {\n if (dialog === item) {\n this._ngZone.run(() => {\n this._formClose();\n });\n }\n });\n }\n }\n\n if ((event.ctrlKey || event.metaKey) && event.code === 'KeyS') {\n event.preventDefault();\n\n if (this.shortcuts) {\n if (this._elementInForm(document.activeElement)) {\n this.ngForm.ngSubmit.next();\n }\n }\n }\n });\n });\n }\n\n private _formClose(): void {\n if (this.confirm && this.confirmDialog) {\n this.triggerConfirm()\n .pipe(\n filter((result) => confirmResultContinue(result)),\n switchMap((result) => {\n return result === ConfirmResult.Pristine || result === ConfirmResult.Discard\n ? of(null)\n : this.submitted.asObservable();\n }),\n takeUntil(this._destroy$),\n )\n .subscribe((result: SubmittedEvent) => {\n this._dialogRef.close(result?.response);\n });\n } else {\n this._dialogRef.close(null);\n }\n }\n\n private _registerDialogClose(directive: FsFormDialogCloseDirective): void {\n if (!directive.registered) {\n directive.registered = true;\n\n directive.clicked$\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this._formClose();\n });\n }\n }\n\n private _getActiveButton(): FsSubmitButtonDirective {\n const activeButton = this._submitButtons.find(button => {\n return button.active;\n });\n\n return activeButton ? activeButton : this._submitButtons.first;\n }\n\n private _elementInForm(el: Element): boolean {\n\n if (el.isSameNode(this._element.nativeElement)) {\n return true;\n } else if (el.parentElement) {\n return this._elementInForm(el.parentElement);\n }\n\n return false;\n }\n\n private _completeSubmit(success, submitEvent: SubmittedEvent): void {\n if (success) {\n this.ngForm.control.markAsPristine();\n this.createSnapshot(); \n this.submitted.emit(submitEvent); \n } else {\n this._resetButtons();\n }\n\n if (this._activeSubmitButton) {\n if (success) {\n this._activeSubmitButton.success();\n } else {\n this._activeSubmitButton.error();\n } \n }\n\n this._status$.next(FormStatus.Submitted);\n\n if (success) {\n this._status$.next(FormStatus.Success);\n } else {\n this._status$.next(FormStatus.Error);\n }\n\n this._status$.next(FormStatus.Completing);\n\n const resetDelay = success ? this.successDelay : this.errorDelay;\n\n of(true)\n .pipe(\n delay(resetDelay),\n first(),\n takeUntil(this._destroy$),\n ).subscribe(() => {\n if (this.ngForm.form.status === 'VALID') {\n this._status$.next(FormStatus.Valid);\n } else {\n this._status$.next(FormStatus.Invalid);\n }\n\n this._resetButtons();\n this._updateDirtySubmitButtons();\n });\n }\n\n private _resetButtons(): void {\n this._submitButtons.forEach((button) => {\n button.reset();\n });\n }\n\n private _registerConfirm(): void {\n this.ngForm.form.valueChanges\n .pipe(\n takeUntil(this._destroy$)\n )\n .subscribe((changes) => {\n if (this.confirm) {\n const existing = Object.keys(this._snapshot);\n\n Object.keys(changes)\n .forEach((name: string) => {\n if (existing.indexOf(name) === -1) {\n this._snapshot[name] = changes[name];\n }\n });\n }\n });\n }\n\n private _registerDrawerClose(): void {\n if (this._drawerRef) {\n this._drawerRef.closeStart$\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe((subscriber) => {\n if (this.submitting) {\n this._status$\n .pipe(\n filter((status) => status === FormStatus.Success || status === FormStatus.Error),\n takeUntil(this._destroy$),\n )\n .subscribe((status) => {\n if (status === FormStatus.Success) {\n subscriber.next();\n subscriber.complete();\n } else {\n subscriber.error();\n }\n });\n } else {\n subscriber.next();\n subscriber.complete();\n }\n });\n }\n }\n\n private _registerConfirmDrawerClose(): void {\n if (this._drawerRef) {\n this._drawerRef.closeStart$\n .pipe(\n switchMap((subscriber) => {\n return iif(\n () => this.confirm && this.confirmDrawer,\n this.triggerConfirm()\n .pipe(\n map((result) => confirmResultContinue(result)),\n tap((result) => {\n if (result) {\n subscriber.next();\n subscriber.complete();\n } else {\n subscriber.error();\n }\n })\n ),\n defer(() => {\n subscriber.next();\n subscriber.complete();\n }),\n )\n }),\n takeUntil(this._destroy$),\n )\n .subscribe();\n }\n }\n\n private _registerConfirmTabs(): void {\n if(this.tabGroup) {\n this.registerConfirmTabGroup(this.tabGroup);\n }\n\n this.registerConfirmTabGroups(this._tabGroups.toArray());\n\n this._tabGroups.changes\n .pipe(\n takeUntil(this._destroy$)\n )\n .subscribe(() => {\n this.registerConfirmTabGroups(this._tabGroups.toArray());\n });\n }\n\n public registerConfirmTabGroups(tabGroups: MatTabGroup[]): void {\n tabGroups.forEach((tabGroup: MatTabGroup) => {\n this.registerConfirmTabGroup(tabGroup);\n });\n }\n\n public registerConfirmTabGroup(tabGroup: MatTabGroup): void {\n const confirmTabGroup = tabGroup as ConfirmTabGroup;\n if (!confirmTabGroup._originalHandleClick) {\n confirmTabGroup._originalHandleClick = tabGroup._handleClick;\n confirmTabGroup._handlClick$ = new Subject<{ tab: MatTab; tabHeader: MatTabHeader; idx: number }>();\n confirmTabGroup._handleClick = (tab: MatTab, tabHeader: MatTabHeader, idx: number) => {\n if(confirmTabGroup._handlClick$.observers.length) {\n confirmTabGroup._handlClick$.next({ tab, tabHeader, idx});\n } else {\n confirmTabGroup._originalHandleClick(tab, tabHeader, idx);\n }\n }\n }\n\n confirmTabGroup._handlClick$\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe((event) => {\n if (!this.submitting) {\n if (this.confirm && this.confirmTabs) {\n this.triggerConfirm()\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe((result) => {\n if (confirmResultContinue(result)) {\n confirmTabGroup.selectedIndex = event.idx;\n }\n });\n } else {\n confirmTabGroup._originalHandleClick(event.tab, event.tabHeader, event.idx);\n }\n }\n });\n }\n\n private _registerConfirmDialogClose(): void {\n if (this._dialogRef) {\n this.formDialogClose.forEach(item => {\n this._registerDialogClose(item);\n });\n\n this.formDialogClose.changes\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe((e) => {\n e.forEach(item => {\n this._registerDialogClose(item);\n });\n });\n }\n }\n\n private _registerConfirmDialogBackdropEscape(): void {\n this._dialogBackdropEscape = this._dialogRef && this._dialogRef.disableClose !== true;\n\n if (this._dialogRef && !this._dialogRef.disableClose) {\n this._dialogRef.disableClose = true;\n this._dialogRef.backdropClick()\n .pipe(\n takeUntil(this._destroy$)\n )\n .subscribe(() => {\n this._formClose();\n });\n\n this._destroy$\n .subscribe(() => {\n this._dialogRef.disableClose = false;\n });\n }\n }\n\n private _registerAutocomplete(): void {\n this._registerControl = this.ngForm.form.registerControl.bind(this.ngForm.form);\n\n this.ngForm.form.registerControl = (name: string, control: AbstractControl) => {\n\n const el: Element = this._element.nativeElement.querySelector(`input[name='${name}']`);\n\n if (el) {\n el.setAttribute('name', name + '_' + guid());\n\n if (!el.getAttribute('autocomplete')) {\n el.setAttribute('autocomplete', 'none');\n }\n }\n\n return this._registerControl(name, control);\n }\n }\n\n private _registerDirtySubmitButton(): void {\n\n if (!this.ngForm) {\n return;\n }\n\n this.ngForm.form.valueChanges\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this._updateDirtySubmitButtons();\n });\n\n this._submitButtons.changes\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this._updateDirtySubmitButtons();\n });\n }\n\n private _updateDirtySubmitButtons(): void {\n this._submitButtons\n .forEach((submitButton: FsSubmitButtonDirective) => {\n if (!this.confirm || !this.dirtySubmitButton || this.ngForm.dirty || !submitButton.dirtySubmit) {\n submitButton.enable();\n } else {\n submitButton.disable();\n }\n });\n }\n\n private _broadcastSubmittingEvents(): void {\n this._status$.next(FormStatus.Submitting);\n this._form.broadcast('submit', this.ngForm);\n }\n\n private _markControlsAsTouchedAndUpdateValidity(): void {\n Object.values(this.ngForm.controls)\n .forEach(control => {\n control.markAsDirty();\n control.markAsTouched();\n control.updateValueAndValidity();\n });\n }\n\n private _setupActiveSubmitButton(): void {\n this._activeSubmitButton = this._getActiveButton();\n this._resetButtons();\n\n if (this._activeSubmitButton) {\n this._activeSubmitButton.process();\n }\n }\n\n private _waitUntilStatusPending(): Observable<string> {\n return this.ngForm.statusChanges\n .pipe(\n startWith(this.ngForm.status),\n first((state) => state !== 'PENDING'),\n );\n }\n\n private _handleError(e: SubmittedEvent) {\n console.log('%c Form Submit ', 'color: white; background-color: #D33F49', 'Error occured');\n\n console.group('Error Details:');\n console.log('Message: ', e);\n console.log('FormRef: ', this);\n\n if (this.ngForm.invalid) {\n const errors = getFormErrors(this.ngForm.control, null);\n console.log('Validation Errors: ', errors);\n }\n\n console.groupEnd();\n\n this._completeSubmit(false, null);\n }\n\n}\n","import { AbstractControl, FormGroup, ValidationErrors } from '@angular/forms';\n\n\nexport function getFormErrors(control: AbstractControl, key: string): ValidationErrors | null {\n let errors: ValidationErrors | null = null;\n\n if (control.invalid && control.errors) {\n errors = {\n [key]: { ...control.errors },\n }\n }\n\n if (control instanceof FormGroup) {\n Object.entries(control.controls)\n .forEach(([name, childControl]) => {\n const childErrors = getFormErrors(childControl, name);\n\n if (childErrors) {\n if (!errors) {\n errors = { ...childErrors };\n } else {\n Object.assign(errors, childErrors);\n }\n }\n });\n }\n\n return errors;\n}\n","export const ERROR_MESSAGES = {\n required: 'This field is required',\n email: 'This is not a valid email address',\n emails: 'Input valid email addresses, comma separated',\n phone: 'Invalid phone number',\n numeric: 'Value should be numeric',\n integer: 'Value should be an integer',\n min: 'Value should not be less than $(1)',\n max: 'Value should not be greater than $(1)',\n minlength: 'Should not be shorter than $(1) characters',\n maxlength: 'Should not be longer than $(1) characters',\n compare: 'Inputs do not match',\n pattern: 'Value should match pattern $(1)',\n dateRange: 'Invalid date range',\n url: 'This is not a valid url',\n urlProtocol: 'Invalid URL. Proper http protocol is required. eg. https://google.com',\n greater: 'Value must be greater than $(1)',\n lesser: 'Value must be less than $(1)',\n};\n","import { InjectionToken } from '@angular/core';\nimport { ERROR_MESSAGES } from '../consts/error-messages.const';\n\nexport const VALIDATE_MESSAGES = new InjectionToken<Record<string, string>>(\n 'fs.form.validate-messages',\n);\n\nexport const VALIDATE_MESSAGE_PROVIDER = {\n provide: VALIDATE_MESSAGES,\n useFactory: messageProviderFactory,\n};\n\nexport function messageProviderFactory() {\n return { ...ERROR_MESSAGES };\n}\n\n","import {\n Input,\n ElementRef,\n Renderer2,\n Directive,\n Injector,\n Optional,\n Inject,\n Self,\n OnInit,\n OnDestroy,\n AfterContentInit,\n} from '@angular/core';\nimport { NgControl, AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { Observable, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { values, keys } from 'lodash-es';\n\nimport { FsFormDirective } from '../form/form.directive';\nimport {\n VALIDATE_MESSAGE_PROVIDER,\n VALIDATE_MESSAGES\n} from '../../providers/validate-messages.provider';\n\n\nexport interface FsControlDirective {\n validate?(control: AbstractControl): ValidationErrors | null;\n validateAsync?(control: AbstractControl): Promise<ValidationErrors | null> | Observable<ValidationErrors | null>;\n}\n\n\n@Directive({\n selector: '[fsFormControl]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n})\nexport class FsControlDirective implements OnInit, AfterContentInit, OnDestroy {\n\n @Input() wrapperSelector: string | false;\n @Input() messageSelector: string | false;\n @Input() hintSelector: string | false;\n @Input() labelSelector: string | false;\n @Input() appendMessageClass = 'fs-form-message';\n @Input() appendLabelClass = 'fs-form-label';\n @Input() appendErrorClass = 'fs-form-error';\n @Input() appendHintClass = 'fs-form-hint';\n\n @Input()\n public set validateMessages(messages: Record<string, string>) {\n this._validateMessages = {\n ...this._validateMessages,\n ...messages,\n };\n }\n\n public errors = [];\n\n // protected _validateMessages = { ...ERROR_MESSAGES };\n protected _destroy$ = new Subject();\n protected _control: AbstractControl;\n\n constructor(\n protected elementRef: ElementRef,\n protected renderer2: Renderer2,\n protected injector: Injector,\n @Self() @Inject(VALIDATE_MESSAGES) protected _validateMessages,\n @Optional() protected ngControl: NgControl,\n @Optional() @Inject(FsFormDirective) private formDirective: FsFormDirective,\n ) {\n\n if (ngControl) {\n this._control = ngControl.control;\n } else {\n console.error('The element does not have a valid ngModel', this.elementRef.nativeElement);\n }\n }\n\n ngOnInit() {\n this._setupValidators();\n }\n\n ngOnDestroy() {\n this._destroy$.next();\n this._destroy$.complete();\n }\n\n ngAfterContentInit() {\n if (this._control) {\n\n /*\n Ensure that statusChanges has one subscription per control. Multiple can happen\n when multiple fsForm validation directives are applied to the same element\n */\n if (!(<any>this._control).statusChangesSubscribe) {\n\n this._control.statusChanges\n .pipe(\n takeUntil(this._destroy$)\n )\n .subscribe(this.render.bind(this));\n\n (<any>this._control).statusChangesSubscribe = true;\n }\n }\n }\n\n protected getMessageSelector(): string {\n\n if (this.messageSelector === false) {\n return '';\n }\n\n if (this.messageSelector) {\n return this.messageSelector;\n\n } else if (this.formDirective && this.formDirective.messageSelector) {\n return this.formDirective.messageSelector;\n }\n }\n\n protected getHintWrapperSelector(): string {\n\n if (this.hintSelector === false) {\n return '';\n }\n\n if (this.hintSelector) {\n return this.hintSelector;\n\n } else if (this.formDirective && this.formDirective.hintSelector) {\n return this.formDirective.hintSelector;\n }\n }\n\n protected getWrapperSelector(): string {\n\n if (this.wrapperSelector === false) {\n return '';\n }\n\n if (this.wrapperSelector) {\n return this.wrapperSelector;\n\n } else if (this.formDirective && this.formDirective.wrapperSelector) {\n return this.formDirective.wrapperSelector;\n }\n }\n\n protected getlabelSelector(): string {\n\n if (this.labelSelector === false) {\n return '';\n }\n\n if (this.labelSelector) {\n return this.labelSelector;\n\n } else if (this.formDirective && this.formDirective.labelSelector) {\n return this.formDirective.labelSelector;\n }\n }\n\n protected getWrapperElement() {\n\n const wrapper = this.getWrapper(this.elementRef.nativeElement);\n\n if (wrapper) {\n return wrapper;\n }\n\n return this.elementRef.nativeElement;\n }\n\n /*\n <mat-form-field class=\"mat-form-field\"> <-- Field Wrapper Class. Look for parents from the native element with the matching wrapperSelector. If not found defaults to native element.\n <input>\n <div class=\"fs-form-message\"> <-- Message Selector. Look for the element with class .fs-form-message or messageSelector\n <div class=\"fs-form-message\"></div>\n <div class=\"fs-form-hint\"></div> <-- Hint Selector. Look for the element with class .fs-form-hint or hintSelector\n </div>\n </mat-form-field>\n */\n\n protected render() {\n if (this.ngControl) {\n\n const renderer = this.renderer2;\n const wrapper = this.getWrapperElement();\n const error = this.ngControl.dirty ? this.getError(this.ngControl) : null;\n\n if (!this.getMessageSelector()) {\n return;\n }\n\n const messageWrapper = wrapper.querySelector(this.getMessageSelector());\n\n if (!messageWrapper) {\n return console.warn('Failed to locate ' + this.getMessageSelector(), this.elementRef.nativeElement);\n }\n\n if (this.getlabelSelector()) {\n const labelWrapper = wrapper.querySelector(this.getlabelSelector());\n\n if (labelWrapper) {\n if (this.appendLabelClass) {\n this.renderer2.addClass(labelWrapper, this.appendLabelClass);\n }\n }\n }\n\n if (this.appendMessageClass) {\n renderer.addClass(messageWrapper, this.appendMessageClass);\n }\n\n if (this.getHintWrapperSelector()) {\n const hint = messageWrapper.querySelector(this.getHintWrapperSelector());\n\n if (hint) {\n renderer.setStyle(hint, 'display', error ? 'none' : 'block');\n\n if (this.appendHintClass) {\n renderer.addClass(hint, this.appendHintClass);\n }\n }\n }\n\n let errorWrapper = wrapper.querySelector('.fs-form-error-target');\n if (errorWrapper) {\n errorWrapper.remove();\n }\n\n wrapper.classList.remove('ng-invalid');\n\n const shouldErrorBeRendered = this.ngControl.invalid\n && (this.ngControl.dirty || this.formDirective.ngForm?.submitted);\n\n if (!shouldErrorBeRendered || !error) {\n return;\n }\n\n wrapper.classList.add('ng-invalid');\n\n errorWrapper = renderer.createElement('div');\n renderer.addClass(errorWrapper, 'fs-form-error-target');\n renderer.addClass(errorWrapper, this.appendErrorClass);\n renderer.addClass(errorWrapper, this.appendErrorClass + '-' + error.name);\n\n const errorText = renderer.createText(error.message);\n\n renderer.appendChild(errorWrapper, errorText);\n messageWrapper.appendChild(errorWrapper);\n }\n }\n\n protected getWrapper(node, count = 0) {\n\n if (!node || count > 10) {\n return null;\n }\n\n if (node.parentNode && node.parentNode.querySelector(this.getWrapperSelector())) {\n return node;\n }\n\n return this.getWrapper(node.parentNode, ++count);\n }\n\n protected parseErrorMessage(message, args): string {\n values(args)\n .forEach((name) => {\n message = message.replace(/\\$\\(\\d\\)/, name);\n });\n\n return message;\n }\n\n protected getError(controlRef): { name: string, message: string } {\n\n const name = keys(controlRef.control.errors)[0];\n\n if (!name) {\n return null;\n }\n\n let message = controlRef.control.errors[name];\n\n if (this._validateMessages[name]) {\n message = this.parseErrorMessage(this._validateMessages[name], message);\n }\n\n return { name: name, message: message };\n }\n\n private _setupValidators(): void {\n const control = this._control;\n\n if (this.validate) {\n const validators = control.validator\n ? [ control.validator, this.validate.bind(this)]\n : this.validate.bind(this);\n\n control.setValidators(validators);\n }\n\n if (this.validateAsync) {\n const asyncValidators = control.asyncValidator\n ? [ control.asyncValidator, this.validateAsync.bind(this)]\n : this.validateAsync.bind(this);\n\n control.setAsyncValidators(asyncValidators);\n }\n\n control.updateValueAndValidity();\n }\n\n}\n","export function isEnabled(value: any): boolean {\n return value !== 'false' && (value || value === '');\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors, Validators } from '@angular/forms';\n\nimport { FsControlDirective } from './control.directive';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { isEnabled } from '../../helpers/is-enabled';\nimport { FsValidator } from '../../interfaces/validator';\n\n\n@Directive({\n selector: '[fsFormRequired],[ngModel][required]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n})\nexport class FsFormRequiredDirective extends FsControlDirective implements OnChanges, FsValidator {\n public required = false;\n\n @Input('fsFormRequired')\n public set setFsFormRequired(value) {\n this.required = isEnabled(value);\n }\n\n @Input('required')\n public set setRequired(value) {\n this.required = isEnabled(value);\n }\n\n @Input('fsFormRequiredMessage')\n public set validationMessage(value: string) {\n this._validateMessages.required = value;\n }\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n if (this.required) {\n return Validators.required(this._control);\n } else {\n return null;\n }\n }\n\n protected render() {\n\n const wrapper = this.getWrapperElement();\n\n if (wrapper && this.getlabelSelector()) {\n const labelWrapper = wrapper.querySelector(this.getlabelSelector());\n\n // Adding class fs-form-label-requried adds the * to the label\n if (labelWrapper) {\n if (this.required) {\n this.renderer2.addClass(labelWrapper, 'fs-form-label-required');\n } else {\n this.renderer2.removeClass(labelWrapper, 'fs-form-label-required');\n }\n }\n }\n\n super.render();\n }\n}\n","import { AbstractControl, ValidationErrors } from '@angular/forms';\nimport { email, isEmpty, isNumeric, phone, url } from '@firestitch/common';\nimport { isValid } from 'date-fns';\nimport { isObject } from 'lodash-es';\nimport { catchError, map, take } from 'rxjs/operators';\nimport { from, isObservable, Observable, of, throwError } from 'rxjs';\n\nexport class FsValidators {\n\n static email(control: AbstractControl): ValidationErrors | null {\n if (!control.value || email(control.value)) {\n return null;\n }\n\n return { email: true };\n }\n\n static emails(control: AbstractControl): ValidationErrors | null {\n const model = control.value || '';\n\n const hasInvalidEmails = model\n .split(',')\n .some((part) => !email(part));\n\n return hasInvalidEmails ? { email: true } : null;\n }\n\n static numeric(control: AbstractControl): ValidationErrors | null {\n if (isEmpty(control.value) || isNumeric(control.value)) {\n return null;\n } else {\n return { numeric: true }\n }\n }\n\n static integer(control: AbstractControl): ValidationErrors | null {\n if (!control.value || String(control.value) === '' || (control.value % 1 === 0)) {\n return null;\n } else {\n return { integer: true }\n }\n }\n\n static phone(control: AbstractControl): ValidationErrors | null {\n if (!control.value || phone(control.value)) {\n return null;\n }\n\n return { phone: true };\n }\n\n static url(control: AbstractControl, protocolRequired = false): ValidationErrors | null {\n if (!control.value) {\n return null;\n }\n\n if (!url(control.value)) {\n return { url: true };\n }\n\n if (protocolRequired) {\n const pattern = new RegExp(/^http(s)?:\\/\\//gm);\n\n if (!String(control.value).match(pattern)) {\n return { urlProtocol: true };\n }\n }\n\n return null;\n }\n\n static dateRange(control: AbstractControl): ValidationErrors | null {\n if (!control.value) {\n return null;\n }\n\n if (isObject(control.value)) {\n\n const start = control.value.start;\n const end = control.value.end;\n\n if ((!start && !end) || (isValid(start) && isValid(end))) {\n return null;\n }\n }\n\n return { dateRange: true };\n }\n\n static func(control: AbstractControl, formFunction, data: any) {\n let result: unknown;\n let stream$: Observable<unknown>\n\n try {\n result = formFunction(control, data);\n } catch (err) {\n err = err instanceof Error ? err.message : err;\n\n stream$ = throwError(err);\n }\n\n if (!stream$) {\n if (result instanceof Promise) {\n stream$ = from(result)\n } else if (isObservable(result)) {\n stream$ = result;\n } else {\n stream$ = of(null);\n }\n }\n\n return stream$\n .pipe(\n map(() => null),\n catchError((err) => {\n return of({ validationError: err });\n }),\n take(1),\n );\n }\n\n // static compare(a, b): ValidatorFn {\n // return (control: AbstractControl): ValidationErrors | null => {\n // if (a === b) {\n // return null;\n // } else {\n // return { compare: true };\n // }\n // }\n // }\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors, Validators } from '@angular/forms';\n\nimport { FsControlDirective } from './control.directive';\nimport { FsValidators } from '../../validators/validators';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\n\n\n@Directive({\n selector: '[fsFormMin]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n})\nexport class FsFormMinDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormMin;\n\n @Input('fsFormMinMessage')\n public set validationMessage(value: string) {\n this._validateMessages.min = value;\n }\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n return FsValidators.numeric(this._control) || Validators.min(parseFloat(this.fsFormMin))(this._control);\n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors, Validators } from '@angular/forms';\nimport { FsControlDirective } from './control.directive';\nimport { FsValidators } from '../../validators/validators';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\n\n\n@Directive({\n selector: '[fsFormMax]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n})\nexport class FsFormMaxDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormMax: number;\n\n @Input('fsFormMaxMessage')\n public set validationMessage(value: string) {\n this._validateMessages.max = value;\n }\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n return FsValidators.numeric(this._control) || Validators.max(this.fsFormMax)(this._control);\n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors, Validators } from '@angular/forms';\n\nimport { FsControlDirective } from './control.directive';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\n\n\n@Directive({\n selector: '[fsFormMinLength]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n})\nexport class FsFormMinLengthDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormMinLength: number;\n\n @Input('fsFormMinLengthMessage')\n public set validationMessage(value: string) {\n this._validateMessages.minlength = value;\n }\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n return Validators.minLength(this.fsFormMinLength)(this._control);\n }\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors, Validators } from '@angular/forms';\n\nimport { FsControlDirective } from './control.directive';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\n\n\n@Directive({\n selector: '[fsFormMaxLength]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n})\nexport class FsFormMaxLengthDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormMaxLength: number;\n\n @Input('fsFormMaxLengthMessage')\n public set validationMessage(value: string) {\n this._validateMessages.maxlength = value;\n }\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n return Validators.maxLength(this.fsFormMaxLength)(this._control);\n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { FsControlDirective } from './control.directive';\nimport { FsValidators } from '../../validators/validators';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\nimport { isEnabled } from '../../helpers/is-enabled';\n\n\n@Directive({\n selector: '[fsFormEmail]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n})\nexport class FsFormEmailDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormEmail;\n\n @Input('fsFormEmailMessage')\n public set validationMessage(value: string) {\n this._validateMessages.email = value;\n }\n\n public ngOnChanges() {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n if (isEnabled(this.fsFormEmail)) {\n return FsValidators.email(this._control);\n } else {\n return null;\n }\n }\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { FsControlDirective } from './control.directive';\nimport { FsValidators } from '../../validators/validators';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\nimport { isEnabled } from '../../helpers/is-enabled';\n\n\n@Directive({\n selector: '[fsFormEmails]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n})\nexport class FsFormEmailsDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormEmails;\n\n @Input('fsFormEmailsMessage')\n public set validationMessage(value: string) {\n this._validateMessages.emails = value;\n }\n\n public ngOnChanges() {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n if (isEnabled(this.fsFormEmails)) {\n return FsValidators.emails(this._control);\n } else {\n return null;\n }\n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { FsControlDirective } from './control.directive';\nimport { FsValidators } from '../../validators/validators';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\nimport { isEnabled } from '../../helpers/is-enabled';\n\n\n@Directive({\n selector: '[fsFormPhone]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n})\nexport class FsFormPhoneDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormPhone;\n\n @Input('fsFormPhoneMessage')\n public set validationMessage(value: string) {\n this._validateMessages.phone = value;\n }\n\n public ngOnChanges() {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n if (isEnabled(this.fsFormPhone)) {\n return FsValidators.phone(this._control);\n } else {\n return null;\n }\n }\n\n}\n","import { Directive, Input, OnDestroy, AfterViewInit, OnChanges } from '@angular/core';\nimport { FsControlDirective } from './control.directive';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\nimport { FsValidator } from '../../interfaces/validator';\n\n\n@Directive({\n selector: '[fsFormCompare]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER,\n ],\n})\nexport class FsFormCompareDirective extends FsControlDirective\n implements OnChanges, AfterViewInit, OnDestroy, FsValidator {\n\n @Input()\n public fsFormCompare;\n\n @Input('fsFormCompareMessage')\n public set validationMessage(value: string) {\n this._validateMessages.compare = value;\n }\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n if (this.fsFormCompare.value === this.elementRef.nativeElement.value) {\n return null;\n } else {\n return { compare: true };\n }\n }\n\n public ngAfterViewInit() {\n this.fsFormCompare.addEventListener('keyup', () => {\n this._control.updateValueAndValidity();\n }, false);\n }\n\n public ngOnDestroy() {\n this.fsFormCompare.removeEventListener('keyup', () => {\n this._control.updateValueAndValidity();\n }, false);\n }\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { FsControlDirective } from './control.directive';\nimport { FsValidators } from '../../validators/validators';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\nimport { isEnabled } from '../../helpers/is-enabled';\n\n\n@Directive({\n selector: '[fsFormInteger]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n})\nexport class FsFormIntegerDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormInteger;\n\n @Input('fsFormIntegerMessage')\n public set validationMessage(value: string) {\n this._validateMessages.integer = value;\n }\n\n public ngOnChanges() {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n if (isEnabled(this.fsFormInteger)) {\n return FsValidators.integer(this._control);\n } else {\n return null;\n }\n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { FsControlDirective } from './control.directive';\nimport { FsValidators } from '../../validators/validators';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\nimport { isEnabled } from '../../helpers/is-enabled';\n\n\n@Directive({\n selector: '[fsFormNumeric]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n})\nexport class FsFormNumericDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormNumeric;\n\n @Input('fsFormNumericMessage')\n public set validationMessage(value: string) {\n this._validateMessages.numeric = value;\n }\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n if (isEnabled(this.fsFormNumeric)) {\n return FsValidators.numeric(this._control);\n } else {\n return null;\n }\n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors, Validators } from '@angular/forms';\nimport { FsControlDirective } from './control.directive';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\n\n\n@Directive({\n selector: '[fsFormPattern]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n})\nexport class FsFormPatternDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormPattern: RegExp;\n\n @Input('fsFormPatternMessage')\n public set validationMessage(value: string) {\n this._validateMessages.pattern = value;\n }\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n return Validators.pattern(this.fsFormPattern)(this._control);\n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { Observable } from 'rxjs';\n\nimport { FsControlDirective } from './control.directive';\nimport { FsValidators } from '../../validators/validators';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsAsyncValidator } from '../../interfaces/async-validator';\n\n\n@Directive({\n selector: '[fsFormFunction]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n})\nexport class FsFormFunctionDirective extends FsControlDirective implements OnChanges, FsAsyncValidator {\n\n @Input()\n public fsFormFunction;\n\n @Input()\n public fsFormFunctionData;\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validateAsync(control: AbstractControl): Promise<ValidationErrors | null> | Observable<ValidationErrors | null> {\n return FsValidators.func(this._control, this.fsFormFunction, this.fsFormFunctionData);\n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { FsControlDirective } from './control.directive';\nimport { FsValidators } from '../../validators/validators';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\n\n\n@Directive({\n selector: '[fsFormGreater]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n})\nexport class FsFormGreaterDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormGreater;\n\n @Input('fsFormGreaterMessage')\n public set validationMessage(value: string) {\n this._validateMessages.greater = value;\n }\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n const greater = parseFloat(this.fsFormGreater);\n const value = parseFloat(this._control.value);\n\n if (!isNaN(greater) && !isNaN(value) && value <= greater) {\n return { greater: { greater, actual: value } };\n }\n\n return FsValidators.numeric(this._control);\n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { FsControlDirective } from './control.directive';\nimport { FsValidators } from '../../validators/validators';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\nimport { isEnabled } from '../../helpers/is-enabled';\n\n\n@Directive({\n selector: '[fsFormDateRange]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n})\nexport class FsFormDateRangeDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormDateRange;\n\n @Input('fsFormDateRangeMessage')\n public set validationMessage(value: string) {\n this._validateMessages.dateRange = value;\n }\n\n public ngOnChanges() {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n if (isEnabled(this.fsFormDateRange)) {\n return FsValidators.dateRange(this._control);\n } else {\n return null;\n }\n }\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { FsControlDirective } from './control.directive';\nimport { FsValidators } from '../../validators/validators';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\n\n\n@Directive({\n selector: '[fsFormLesser]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n})\nexport class FsFormLesserDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormLesser;\n\n @Input('fsFormLesserMessage')\n public set validationMessage(value: string) {\n this._validateMessages.lesser = value;\n }\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n const lesser = parseFloat(this.fsFormLesser);\n const value = parseFloat(this._control.value);\n\n if (!isNaN(lesser) && !isNaN(value) && value >= lesser) {\n return { lesser: { lesser, actual: value } };\n }\n\n return FsValidators.numeric(this._control);\n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { FsControlDirective } from './control.directive';\nimport { FsValidators } from '../../validators/validators';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\nimport { isEnabled } from '../../helpers/is-enabled';\n\n\n@Directive({\n selector: '[fsFormUrl]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n})\nexport class FsFormUrlDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormUrl;\n\n @Input()\n public fsFormUrlProtocol = false;\n\n @Input('fsFormUrlMessage')\n public set validationMessage(value: string) {\n this._validateMessages.url = value;\n }\n\n public ngOnChanges() {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n if (isEnabled(this.fsFormUrl)) {\n return FsValidators.url(this._control, this.fsFormUrlProtocol);\n } else {\n return null;\n }\n }\n\n}\n","import { Directive, OnInit, Host, ElementRef, HostBinding, Optional, Input, OnDestroy, ChangeDetectorRef } from '@angular/core';\n\nimport { MatButton } from '@angular/material/button';\nimport { FsFormDirective } from '../directives/form/form.directive';\n\nimport { fromEvent, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\n\n@Directive({\n selector: 'button[type=\"submit\"]',\n})\nexport class FsSubmitButtonDirective implements OnInit, OnDestroy {\n\n @Input()\n public name;\n\n @Input()\n public dirtySubmit = true;\n\n @HostBinding('style.transition')\n public transitionStyle = null;\n\n public active = false;\n\n private _destroy$ = new Subject();\n\n constructor(\n @Optional() @Host() private _matButton: MatButton,\n @Optional() private _form: FsFormDirective,\n private _elementRef: ElementRef,\n private _cdRef: ChangeDetectorRef,\n ) {}\n\n public ngOnInit() {\n if (this._form) {\n this._form.addSubmitButton(this); \n\n fromEvent(this.element, 'click')\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this.active = true;\n });\n\n if (this.dirtySubmit) {\n if (this._form.dirtySubmitButton) {\n if(!this._form.ngForm.dirty) {\n this.disable();\n }\n }\n } \n\n this.transitionStyle = 'none';\n setTimeout(() => {\n this.transitionStyle = null;\n }, 500);\n }\n }\n\n public disable() {\n if (this._matButton) {\n this._matButton.disabled = true;\n this._cdRef.markForCheck();\n }\n }\n\n public enable() {\n if (this._matButton) {\n this._matButton.disabled = false;\n this._matButton.disableRipple = true;\n this._cdRef.markForCheck();\n }\n }\n\n public process() {\n this.setClass('process');\n this._matButton.disableRipple = true;\n }\n\n public success() {\n this.setClass('success');\n this._matButton.disableRipple = false;\n }\n\n public error() {\n this.setClass('error');\n this._matButton.disableRipple = false;\n }\n\n public setClass(cls) {\n const svg = this._getSvg(cls);\n this._resetClass();\n this._disableShadowAnimation();\n this.element.classList.add(`submit-${cls}`);\n this.element.append(svg);\n }\n\n public get element() {\n return this._elementRef.nativeElement;\n }\n\n public reset() {\n this.active = false;\n this.enable();\n this.element.querySelectorAll('.svg-icon')\n .forEach((el) => {\n el.remove();\n });\n this._matButton.disableRipple = false;\n this._resetClass();\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next();\n this._destroy$.complete();\n this._form.removeSubmitButton(this);\n }\n\n private _disableShadowAnimation() {\n // .mat-elevation-z2 removes the click shadow animation\n //this.element.classList.add('mat-elevation-z2');\n }\n\n private _resetClass() {\n this.element.classList.remove('submit-success', 'submit-error', 'submit-process', 'mat-elevation-z2');\n }\n\n private _getSvg(type) {\n if (type === 'success') {\n return new DOMParser().parseFromString(`<svg class=\"svg-icon svg-icon-success\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" version=\"1.1\" x=\"0px\" y=\"0px\" viewBox=\"0 0 38 38\" style=\"enable-background:new 0 0 38 38;\" xml:space=\"preserve\" width=\"38px\" height=\"38px\">\n <g>\n <g class=\"check\">\n <g>\n <path d=\"M29.6,11.9c-0.5-0.5-1.3-0.5-1.8,0L16.3,23.4l-6.1-6.1c-0.5-0.5-1.3-0.5-1.8,0s-0.5,1.3,0,1.8l7,7c0.3,0.3,0.6,0.4,0.9,0.4s0.7-0.1,0.9-0.4l12.4-12.4C30.1,13.2,30.1,12.4,29.6,11.9z\"/>\n </g>\n </g>\n </g>\n </svg>`, 'text/xml').firstChild;\n }\n\n if (type === 'process') {\n return new DOMParser().parseFromString(`<svg class=\"svg-icon svg-icon-process\" width=\"38\" height=\"38\" viewBox=\"0 0 38 38\" xmlns=\"http://www.w3.org/2000/svg\">\n <g fill=\"none\" fill-rule=\"evenodd\">\n <g transform=\"translate(1 1)\" stroke-width=\"2\"><circle stroke-opacity=\".5\" cx=\"18\" cy=\"18\" r=\"18\"/>\n <path d=\"M36 18c0-9.94-8.06-18-18-18\"><animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 18 18\" to=\"360 18 18\" dur=\".7s\" repeatCount=\"indefinite\"/></path>\n </g>\n </g>\n </svg>`, 'text/xml').firstChild;\n }\n\n if (type === 'error') {\n return new DOMParser().parseFromString(`<svg class=\"svg-icon svg-icon-error\" xmlns=\"http://www.w3.org/2000/svg\" width=\"38px\" height=\"38px\" viewBox=\"0 0 16 16\"><g><path d=\"M8 1c3.9 0 7 3.1 7 7s-3.1 7-7 7-7-3.1-7-7 3.1-7 7-7zM8 0c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8v0z\" data-original=\"#444444\" data-old_color=\"#444444\"/><path d=\"M12.2 10.8l-2.8-2.8 2.8-2.8-1.4-1.4-2.8 2.8-2.8-2.8-1.4 1.4 2.8 2.8-2.8 2.8 1.4 1.4 2.8-2.8 2.8 2.8z\"/></g> </svg>`, 'text/xml').firstChild;\n }\n }\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { Observable } from 'rxjs';\n\nimport { FsControlDirective } from './control.directive';\nimport { FsValidators } from '../../validators/validators';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsAsyncValidator } from '../../interfaces/async-validator';\n\n\n@Directive({\n selector: '[validate]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n})\nexport class FsFormValidateDirective extends FsControlDirective implements OnChanges, FsAsyncValidator {\n @Input('validate')\n public validateFn;\n\n @Input('validateData')\n public validateFnData;\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validateAsync(control: AbstractControl): Promise<ValidationErrors | null> | Observable<ValidationErrors | null> {\n return FsValidators.func(this._control, this.validateFn, this.validateFnData);\n }\n\n}\n","import { Component, OnInit, ChangeDetectionStrategy, Input, Optional, ChangeDetectorRef, OnDestroy } from '@angular/core';\r\n\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\n\r\nimport { Subject } from 'rxjs';\r\nimport { delay, filter, takeUntil } from 'rxjs/operators';\r\n\r\nimport { FsFormDirective } from '../../directives/form/form.directive';\r\nimport { ConfirmResult } from '../../enums/confirm-result';\r\n\r\n\r\n@Component({\r\n selector: 'fs-form-dialog-actions',\r\n templateUrl: './form-dialog-actions.component.html',\r\n styleUrls: ['./form-dialog-actions.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class FsFormDialogActionsComponent implements OnInit, OnDestroy {\r\n\r\n @Input() public save = true;\r\n @Input() public create = false;\r\n @Input() public close = false;\r\n @Input() public name: string;\r\n\r\n public dirty = false;\r\n\r\n private _destroy$ = new Subject<void>();\r\n \r\n constructor(\r\n @Optional() private _form: FsFormDirective,\r\n @Optional() private _dialogRef: MatDialogRef<any>,\r\n private _cdRef: ChangeDetectorRef, \r\n ) {}\r\n\r\n public ngOnInit(): void {\r\n if(this._form) {\r\n this._form.ngForm.valueChanges\r\n .pipe( \r\n filter(() => (!this.dirty)),\r\n takeUntil(this._destroy$),\r\n )\r\n .subscribe(() => {\r\n this.dirty = this._form.ngForm.dirty;\r\n this._cdRef.markForCheck();\r\n });\r\n\r\n this._form.submitted\r\n .pipe(\r\n delay(50),\r\n takeUntil(this._destroy$),\r\n )\r\n .subscribe(() => {\r\n this.dirty = false;\r\n this._cdRef.markForCheck();\r\n });\r\n\r\n this._form.reseted\r\n .pipe(\r\n takeUntil(this._destroy$),\r\n )\r\n .subscribe(() => {\r\n this.dirty = false;\r\n this._cdRef.markForCheck();\r\n });\r\n }\r\n }\r\n \r\n public closeClick(): void {\r\n if(this._form) {\r\n this._form.triggerConfirm()\r\n .pipe(\r\n filter((confirmResult: ConfirmResult) => (confirmResult !== ConfirmResult.Review)),\r\n takeUntil(this._destroy$),\r\n )\r\n .subscribe(() => {\r\n this._dialogRef.close(null);\r\n });\r\n } else {\r\n this._dialogRef.close(null);\r\n }\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this._destroy$.next();\r\n this._destroy$.complete();\r\n }\r\n}\r\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\n\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { ErrorStateMatcher, ShowOnDirtyErrorStateMatcher } from '@angular/material/core';\n\nimport { FsFormDirective } from './directives/form/form.directive';\nimport { FsControlDirective } from './directives/validators/control.directive';\nimport { FsFormRequiredDirective } from './directives/validators/required.directive';\nimport { FsFormMinDirective } from './directives/validators/min.directive';\nimport { FsFormMaxDirective } from './directives/validators/max.directive';\nimport { FsFormMinLengthDirective } from './directives/validators/minlength.directive';\nimport { FsFormMaxLengthDirective } from './directives/validators/maxlength.directive';\nimport { FsFormEmailDirective } from './directives/validators/email.directive';\nimport { FsFormEmailsDirective } from './directives/validators/emails.directive';\nimport { FsFormPhoneDirective } from './directives/validators/phone.directive';\nimport { FsFormCompareDirective } from './directives/validators/compare.directive';\nimport { FsFormIntegerDirective } from './directives/validators/integer.directive';\nimport { FsFormNumericDirective } from './directives/validators/numeric.directive';\nimport { FsFormPatternDirective } from './directives/validators/pattern.directive';\nimport { FsFormFunctionDirective } from './directives/validators/function.directive';\nimport { FsFormGreaterDirective } from './directives/validators/greater.directive';\nimport { FsFormDateRangeDirective } from './directives/validators/daterange.directive';\nimport { FsFormLesserDirective } from './directives/validators/lesser.directive';\nimport { FsFormUrlDirective } from './directives/validators/url.directive';\nimport { FsFormDialogCloseDirective } from './directives/form-dialog-close.directive';\nimport { FsSubmitButtonDirective } from './directives/submit-button.directive';\nimport { FsFormValidateDirective } from './directives/validators/validate.directive';\nimport { FsFormDialogActionsComponent } from './components/form-dialog-actions/form-dialog-actions.component';\n\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n\n MatButtonModule,\n MatDialogModule,\n ],\n declarations: [\n FsFormDirective,\n FsControlDirective,\n FsFormRequiredDirective,\n FsFormMinDirective,\n FsFormMaxDirective,\n FsFormMinLengthDirective,\n FsFormMaxLengthDirective,\n FsFormEmailDirective,\n FsFormEmailsDirective,\n FsFormPhoneDirective,\n FsFormCompareDirective,\n FsFormIntegerDirective,\n FsFormNumericDirective,\n FsFormPatternDirective,\n FsFormFunctionDirective,\n FsFormDateRangeDirective,\n FsFormGreaterDirective,\n FsFormLesserDirective,\n FsFormUrlDirective,\n FsFormDialogCloseDirective,\n FsSubmitButtonDirective,\n FsFormValidateDirective,\n FsFormDialogActionsComponent,\n ],\n exports: [\n FsFormDirective,\n FsControlDirective,\n FsFormRequiredDirective,\n FsFormMinDirective,\n FsFormMaxDirective,\n FsFormMinLengthDirective,\n FsFormMaxLengthDirective,\n FsFormEmailDirective,\n FsFormEmailsDirective,\n FsFormPhoneDirective,\n FsFormCompareDirective,\n FsFormIntegerDirective,\n FsFormNumericDirective,\n FsFormPatternDirective,\n FsFormFunctionDirective,\n FsFormDateRangeDirective,\n FsFormGreaterDirective,\n FsFormLesserDirective,\n FsFormUrlDirective,\n FsFormDialogCloseDirective,\n FsSubmitButtonDirective,\n FsFormValidateDirective,\n FsFormDialogActionsComponent,\n ],\n providers: [\n {\n provide: ErrorStateMatcher,\n useClass: ShowOnDirtyErrorStateMatcher,\n },\n ],\n})\nexport class FsFormModule {\n static forRoot(): ModuleWithProviders<FsFormModule> {\n return {\n ngModule: FsFormModule,\n };\n }\n}\n","import { Injectable } from '@angular/core';\nimport { CanDeactivate } from '@angular/router';\nimport { FsPrompt } from '@firestitch/prompt';\nimport { Observable, of } from 'rxjs';\nimport { FsFormDirective } from '../directives/form/form.directive';\nimport { FormDeactivate } from '../interfaces/form-deactivate';\nimport { confirmUnsaved } from '../helpers/confirm-unsaved';\nimport { map } from 'rxjs/operators';\nimport { confirmResultContinue } from '../helpers';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FormDeactivateGuard implements CanDeactivate<any> {\n\n constructor(private _prompt: FsPrompt) {}\n\n canDeactivate(directive: FormDeactivate): Observable<boolean> {\n\n if (!('getForm' in directive)) {\n const error = `Directive ${(<any>directive).constructor.name} does not property implement interface FormDeactivate`;\n console.error(error);\n return of(true);\n }\n\n const form: FsFormDirective = directive.getForm();\n\n if (!(form instanceof FsFormDirective)) {\n const error = `Directive ${directive.constructor.name}.getForm() does not return a valid FsFormDirective`;\n console.error(error);\n return of(true);\n }\n\n return confirmUnsaved(form, this._prompt)\n .pipe(\n map((result) => {\n return confirmResultContinue(result);\n }),\n );\n }\n}\n"]}
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
import { __decorate, __metadata, __param } from "tslib";
|
|
2
|
-
import { Component, OnInit, ChangeDetectionStrategy, Input, Optional, ChangeDetectorRef, OnDestroy } from '@angular/core';
|
|
3
|
-
import { MatDialogRef } from '@angular/material/dialog';
|
|
4
|
-
import { Subject } from 'rxjs';
|
|
5
|
-
import { delay, filter, takeUntil } from 'rxjs/operators';
|
|
6
|
-
import { FsFormDirective } from '../../directives/form/form.directive';
|
|
7
|
-
import { ConfirmResult } from '../../enums/confirm-result';
|
|
8
|
-
var FsFormDialogActionsComponent = /** @class */ (function () {
|
|
9
|
-
function FsFormDialogActionsComponent(_form, _dialogRef, _cdRef) {
|
|
10
|
-
this._form = _form;
|
|
11
|
-
this._dialogRef = _dialogRef;
|
|
12
|
-
this._cdRef = _cdRef;
|
|
13
|
-
this.save = true;
|
|
14
|
-
this.create = false;
|
|
15
|
-
this.close = false;
|
|
16
|
-
this.dirty = false;
|
|
17
|
-
this._destroy$ = new Subject();
|
|
18
|
-
}
|
|
19
|
-
FsFormDialogActionsComponent.prototype.ngOnInit = function () {
|
|
20
|
-
var _this = this;
|
|
21
|
-
if (this._form) {
|
|
22
|
-
this._form.ngForm.valueChanges
|
|
23
|
-
.pipe(filter(function () { return (!_this.dirty); }), takeUntil(this._destroy$))
|
|
24
|
-
.subscribe(function () {
|
|
25
|
-
_this.dirty = _this._form.ngForm.dirty;
|
|
26
|
-
_this._cdRef.markForCheck();
|
|
27
|
-
});
|
|
28
|
-
this._form.submitted
|
|
29
|
-
.pipe(delay(50), takeUntil(this._destroy$))
|
|
30
|
-
.subscribe(function () {
|
|
31
|
-
_this.dirty = false;
|
|
32
|
-
_this._cdRef.markForCheck();
|
|
33
|
-
});
|
|
34
|
-
this._form.reseted
|
|
35
|
-
.pipe(takeUntil(this._destroy$))
|
|
36
|
-
.subscribe(function () {
|
|
37
|
-
_this.dirty = false;
|
|
38
|
-
_this._cdRef.markForCheck();
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
};
|
|
42
|
-
FsFormDialogActionsComponent.prototype.closeClick = function () {
|
|
43
|
-
var _this = this;
|
|
44
|
-
if (this._form) {
|
|
45
|
-
this._form.triggerConfirm()
|
|
46
|
-
.pipe(filter(function (confirmResult) { return (confirmResult !== ConfirmResult.Review); }), takeUntil(this._destroy$))
|
|
47
|
-
.subscribe(function () {
|
|
48
|
-
_this._dialogRef.close(null);
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
else {
|
|
52
|
-
this._dialogRef.close(null);
|
|
53
|
-
}
|
|
54
|
-
};
|
|
55
|
-
FsFormDialogActionsComponent.prototype.ngOnDestroy = function () {
|
|
56
|
-
this._destroy$.next();
|
|
57
|
-
this._destroy$.complete();
|
|
58
|
-
};
|
|
59
|
-
FsFormDialogActionsComponent.ctorParameters = function () { return [
|
|
60
|
-
{ type: FsFormDirective, decorators: [{ type: Optional }] },
|
|
61
|
-
{ type: MatDialogRef, decorators: [{ type: Optional }] },
|
|
62
|
-
{ type: ChangeDetectorRef }
|
|
63
|
-
]; };
|
|
64
|
-
__decorate([
|
|
65
|
-
Input(),
|
|
66
|
-
__metadata("design:type", Object)
|
|
67
|
-
], FsFormDialogActionsComponent.prototype, "save", void 0);
|
|
68
|
-
__decorate([
|
|
69
|
-
Input(),
|
|
70
|
-
__metadata("design:type", Object)
|
|
71
|
-
], FsFormDialogActionsComponent.prototype, "create", void 0);
|
|
72
|
-
__decorate([
|
|
73
|
-
Input(),
|
|
74
|
-
__metadata("design:type", Object)
|
|
75
|
-
], FsFormDialogActionsComponent.prototype, "close", void 0);
|
|
76
|
-
__decorate([
|
|
77
|
-
Input(),
|
|
78
|
-
__metadata("design:type", String)
|
|
79
|
-
], FsFormDialogActionsComponent.prototype, "name", void 0);
|
|
80
|
-
FsFormDialogActionsComponent = __decorate([
|
|
81
|
-
Component({
|
|
82
|
-
selector: 'fs-form-dialog-actions',
|
|
83
|
-
template: "<div class=\"buttons\">\r\n <ng-container *ngIf=\"save\">\r\n <button \r\n mat-button \r\n type=\"submit\"\r\n color=\"primary\" \r\n [name]=\"name\">\r\n {{create ? 'Create' : 'Save'}}\r\n </button>\r\n <button \r\n mat-button \r\n type=\"button\"\r\n [disabled]=\"close && !dirty && !create\"\r\n [matDialogClose]=\"null\">\r\n Cancel\r\n </button>\r\n </ng-container>\r\n\r\n <ng-content></ng-content>\r\n <div class=\"close\" *ngIf=\"close\">\r\n <button \r\n mat-button \r\n type=\"button\"\r\n [color]=\"dirty ? 'basic' : 'primary'\"\r\n (click)=\"closeClick()\">\r\n Close\r\n </button>\r\n </div>\r\n</div>",
|
|
84
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
85
|
-
styles: [".buttons{display:flex;flex-grow:1;align-items:center}.buttons .close{display:flex;flex-grow:1;justify-content:flex-end}:host{display:flex;flex-grow:1}@media only screen and (max-width:599px){.buttons{flex-direction:column}}"]
|
|
86
|
-
}),
|
|
87
|
-
__param(0, Optional()),
|
|
88
|
-
__param(1, Optional()),
|
|
89
|
-
__metadata("design:paramtypes", [FsFormDirective,
|
|
90
|
-
MatDialogRef,
|
|
91
|
-
ChangeDetectorRef])
|
|
92
|
-
], FsFormDialogActionsComponent);
|
|
93
|
-
return FsFormDialogActionsComponent;
|
|
94
|
-
}());
|
|
95
|
-
export { FsFormDialogActionsComponent };
|
|
96
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1kaWFsb2ctYWN0aW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AZmlyZXN0aXRjaC9mb3JtLyIsInNvdXJjZXMiOlsiYXBwL2NvbXBvbmVudHMvZm9ybS1kaWFsb2ctYWN0aW9ucy9mb3JtLWRpYWxvZy1hY3Rpb25zLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsdUJBQXVCLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFMUgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXhELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQVMzRDtJQVdFLHNDQUNzQixLQUFzQixFQUN0QixVQUE2QixFQUN6QyxNQUF5QjtRQUZiLFVBQUssR0FBTCxLQUFLLENBQWlCO1FBQ3RCLGVBQVUsR0FBVixVQUFVLENBQW1CO1FBQ3pDLFdBQU0sR0FBTixNQUFNLENBQW1CO1FBWm5CLFNBQUksR0FBRyxJQUFJLENBQUM7UUFDWixXQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ2YsVUFBSyxHQUFHLEtBQUssQ0FBQztRQUd2QixVQUFLLEdBQUcsS0FBSyxDQUFDO1FBRWIsY0FBUyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFNckMsQ0FBQztJQUVHLCtDQUFRLEdBQWY7UUFBQSxpQkErQkM7UUE5QkMsSUFBRyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ2IsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsWUFBWTtpQkFDN0IsSUFBSSxDQUNILE1BQU0sQ0FBQyxjQUFNLE9BQUEsQ0FBQyxDQUFDLEtBQUksQ0FBQyxLQUFLLENBQUMsRUFBYixDQUFhLENBQUMsRUFDM0IsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FDMUI7aUJBQ0EsU0FBUyxDQUFDO2dCQUNULEtBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO2dCQUNyQyxLQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQzdCLENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTO2lCQUNuQixJQUFJLENBQ0gsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUNULFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQzFCO2lCQUNBLFNBQVMsQ0FBQztnQkFDVCxLQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztnQkFDbkIsS0FBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUM3QixDQUFDLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTztpQkFDakIsSUFBSSxDQUNILFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQzFCO2lCQUNBLFNBQVMsQ0FBQztnQkFDVCxLQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztnQkFDbkIsS0FBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUM3QixDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVNLGlEQUFVLEdBQWpCO1FBQUEsaUJBYUM7UUFaQyxJQUFHLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDYixJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRTtpQkFDMUIsSUFBSSxDQUNILE1BQU0sQ0FBQyxVQUFDLGFBQTRCLElBQUssT0FBQSxDQUFDLGFBQWEsS0FBSyxhQUFhLENBQUMsTUFBTSxDQUFDLEVBQXhDLENBQXdDLENBQUMsRUFDbEYsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FDMUI7aUJBQ0EsU0FBUyxDQUFDO2dCQUNULEtBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzlCLENBQUMsQ0FBQyxDQUFDO1NBQ0o7YUFBTTtZQUNMLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzdCO0lBQ0gsQ0FBQztJQUVNLGtEQUFXLEdBQWxCO1FBQ0UsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzVCLENBQUM7O2dCQXhENEIsZUFBZSx1QkFBekMsUUFBUTtnQkFDdUIsWUFBWSx1QkFBM0MsUUFBUTtnQkFDTyxpQkFBaUI7O0lBWjFCO1FBQVIsS0FBSyxFQUFFOzs4REFBb0I7SUFDbkI7UUFBUixLQUFLLEVBQUU7O2dFQUF1QjtJQUN0QjtRQUFSLEtBQUssRUFBRTs7K0RBQXNCO0lBQ3JCO1FBQVIsS0FBSyxFQUFFOzs4REFBcUI7SUFMbEIsNEJBQTRCO1FBTnhDLFNBQVMsQ0FBQztZQUNULFFBQVEsRUFBRSx3QkFBd0I7WUFDbEMsNHVCQUFtRDtZQUVuRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTs7U0FDaEQsQ0FBQztRQWFHLFdBQUEsUUFBUSxFQUFFLENBQUE7UUFDVixXQUFBLFFBQVEsRUFBRSxDQUFBO3lDQURnQixlQUFlO1lBQ1YsWUFBWTtZQUM1QixpQkFBaUI7T0FkeEIsNEJBQTRCLENBcUV4QztJQUFELG1DQUFDO0NBQUEsQUFyRUQsSUFxRUM7U0FyRVksNEJBQTRCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBJbnB1dCwgT3B0aW9uYWwsIENoYW5nZURldGVjdG9yUmVmLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcblxyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlbGF5LCBmaWx0ZXIsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmltcG9ydCB7IEZzRm9ybURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvZm9ybS9mb3JtLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IENvbmZpcm1SZXN1bHQgfSBmcm9tICcuLi8uLi9lbnVtcy9jb25maXJtLXJlc3VsdCc7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdmcy1mb3JtLWRpYWxvZy1hY3Rpb25zJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZm9ybS1kaWFsb2ctYWN0aW9ucy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZm9ybS1kaWFsb2ctYWN0aW9ucy5jb21wb25lbnQuc2NzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRnNGb3JtRGlhbG9nQWN0aW9uc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgQElucHV0KCkgcHVibGljIHNhdmUgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBjcmVhdGUgPSBmYWxzZTtcclxuICBASW5wdXQoKSBwdWJsaWMgY2xvc2UgPSBmYWxzZTtcclxuICBASW5wdXQoKSBwdWJsaWMgbmFtZTogc3RyaW5nO1xyXG5cclxuICBwdWJsaWMgZGlydHkgPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBfZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIFxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfZm9ybTogRnNGb3JtRGlyZWN0aXZlLFxyXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8YW55PixcclxuICAgIHByaXZhdGUgX2NkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZiwgICBcclxuICApIHt9XHJcblxyXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGlmKHRoaXMuX2Zvcm0pIHtcclxuICAgICAgdGhpcy5fZm9ybS5uZ0Zvcm0udmFsdWVDaGFuZ2VzXHJcbiAgICAgIC5waXBlKCAgXHJcbiAgICAgICAgZmlsdGVyKCgpID0+ICghdGhpcy5kaXJ0eSkpLFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5kaXJ0eSA9IHRoaXMuX2Zvcm0ubmdGb3JtLmRpcnR5O1xyXG4gICAgICAgIHRoaXMuX2NkUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuX2Zvcm0uc3VibWl0dGVkXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIGRlbGF5KDUwKSxcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLl9mb3JtLnJlc2V0ZWRcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuICBcclxuICBwdWJsaWMgY2xvc2VDbGljaygpOiB2b2lkIHtcclxuICAgIGlmKHRoaXMuX2Zvcm0pIHtcclxuICAgICAgdGhpcy5fZm9ybS50cmlnZ2VyQ29uZmlybSgpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIGZpbHRlcigoY29uZmlybVJlc3VsdDogQ29uZmlybVJlc3VsdCkgPT4gKGNvbmZpcm1SZXN1bHQgIT09IENvbmZpcm1SZXN1bHQuUmV2aWV3KSksXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLl9kaWFsb2dSZWYuY2xvc2UobnVsbCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fZGlhbG9nUmVmLmNsb3NlKG51bGwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5fZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
export var ERROR_MESSAGES = {
|
|
2
|
-
required: 'This field is required',
|
|
3
|
-
email: 'This is not a valid email address',
|
|
4
|
-
emails: 'Input valid email addresses, comma separated',
|
|
5
|
-
phone: 'Invalid phone number',
|
|
6
|
-
numeric: 'Value should be numeric',
|
|
7
|
-
integer: 'Value should be an integer',
|
|
8
|
-
min: 'Value should not be less than $(1)',
|
|
9
|
-
max: 'Value should not be greater than $(1)',
|
|
10
|
-
minlength: 'Should not be shorter than $(1) characters',
|
|
11
|
-
maxlength: 'Should not be longer than $(1) characters',
|
|
12
|
-
compare: 'Inputs do not match',
|
|
13
|
-
pattern: 'Value should match pattern $(1)',
|
|
14
|
-
dateRange: 'Invalid date range',
|
|
15
|
-
url: 'This is not a valid url',
|
|
16
|
-
urlProtocol: 'Invalid URL. Proper http protocol is required. eg. https://google.com',
|
|
17
|
-
greater: 'Value must be greater than $(1)',
|
|
18
|
-
lesser: 'Value must be less than $(1)',
|
|
19
|
-
};
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3ItbWVzc2FnZXMuY29uc3QuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AZmlyZXN0aXRjaC9mb3JtLyIsInNvdXJjZXMiOlsiYXBwL2NvbnN0cy9lcnJvci1tZXNzYWdlcy5jb25zdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsSUFBTSxjQUFjLEdBQUc7SUFDNUIsUUFBUSxFQUFFLHdCQUF3QjtJQUNsQyxLQUFLLEVBQUUsbUNBQW1DO0lBQzFDLE1BQU0sRUFBRSw4Q0FBOEM7SUFDdEQsS0FBSyxFQUFFLHNCQUFzQjtJQUM3QixPQUFPLEVBQUUseUJBQXlCO0lBQ2xDLE9BQU8sRUFBRSw0QkFBNEI7SUFDckMsR0FBRyxFQUFFLG9DQUFvQztJQUN6QyxHQUFHLEVBQUUsdUNBQXVDO0lBQzVDLFNBQVMsRUFBRSw0Q0FBNEM7SUFDdkQsU0FBUyxFQUFFLDJDQUEyQztJQUN0RCxPQUFPLEVBQUUscUJBQXFCO0lBQzlCLE9BQU8sRUFBRSxpQ0FBaUM7SUFDMUMsU0FBUyxFQUFFLG9CQUFvQjtJQUMvQixHQUFHLEVBQUUseUJBQXlCO0lBQzlCLFdBQVcsRUFBRSx1RUFBdUU7SUFDcEYsT0FBTyxFQUFFLGlDQUFpQztJQUMxQyxNQUFNLEVBQUUsOEJBQThCO0NBQ3ZDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgRVJST1JfTUVTU0FHRVMgPSB7XG4gIHJlcXVpcmVkOiAnVGhpcyBmaWVsZCBpcyByZXF1aXJlZCcsXG4gIGVtYWlsOiAnVGhpcyBpcyBub3QgYSB2YWxpZCBlbWFpbCBhZGRyZXNzJyxcbiAgZW1haWxzOiAnSW5wdXQgdmFsaWQgZW1haWwgYWRkcmVzc2VzLCBjb21tYSBzZXBhcmF0ZWQnLFxuICBwaG9uZTogJ0ludmFsaWQgcGhvbmUgbnVtYmVyJyxcbiAgbnVtZXJpYzogJ1ZhbHVlIHNob3VsZCBiZSBudW1lcmljJyxcbiAgaW50ZWdlcjogJ1ZhbHVlIHNob3VsZCBiZSBhbiBpbnRlZ2VyJyxcbiAgbWluOiAnVmFsdWUgc2hvdWxkIG5vdCBiZSBsZXNzIHRoYW4gJCgxKScsXG4gIG1heDogJ1ZhbHVlIHNob3VsZCBub3QgYmUgZ3JlYXRlciB0aGFuICQoMSknLFxuICBtaW5sZW5ndGg6ICdTaG91bGQgbm90IGJlIHNob3J0ZXIgdGhhbiAkKDEpIGNoYXJhY3RlcnMnLFxuICBtYXhsZW5ndGg6ICdTaG91bGQgbm90IGJlIGxvbmdlciB0aGFuICQoMSkgY2hhcmFjdGVycycsXG4gIGNvbXBhcmU6ICdJbnB1dHMgZG8gbm90IG1hdGNoJyxcbiAgcGF0dGVybjogJ1ZhbHVlIHNob3VsZCBtYXRjaCBwYXR0ZXJuICQoMSknLFxuICBkYXRlUmFuZ2U6ICdJbnZhbGlkIGRhdGUgcmFuZ2UnLFxuICB1cmw6ICdUaGlzIGlzIG5vdCBhIHZhbGlkIHVybCcsXG4gIHVybFByb3RvY29sOiAnSW52YWxpZCBVUkwuIFByb3BlciBodHRwIHByb3RvY29sIGlzIHJlcXVpcmVkLiBlZy4gaHR0cHM6Ly9nb29nbGUuY29tJyxcbiAgZ3JlYXRlcjogJ1ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICQoMSknLFxuICBsZXNzZXI6ICdWYWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAkKDEpJyxcbn07XG4iXX0=
|