{ "version": 3, "sources": ["../ui/app/mn.form.service.js"], "sourcesContent": ["/*\nCopyright 2020-Present Couchbase, Inc.\n\nUse of this software is governed by the Business Source License included in\nthe file licenses/BSL-Couchbase.txt. As of the Change Date specified in that\nfile, in accordance with the Business Source License, use of this software will\nbe governed by the Apache License, Version 2.0, included in the file\nlicenses/APL2.txt.\n*/\n\nimport {Injectable} from '@angular/core';\nimport {FormBuilder, FormGroup} from '@angular/forms';\nimport {BehaviorSubject, Subject, NEVER, merge} from 'rxjs';\nimport {map, tap, first, takeUntil, switchMap, mapTo,\n shareReplay, filter, debounceTime, startWith} from 'rxjs/operators';\nimport {singletonGuard} from './mn.core.js';\n\nimport {MnAlerts, $rootScope} from './ajs.upgraded.providers.js';\n\nexport {MnFormService};\n\nclass MnFormService {\n static get annotations() { return [\n new Injectable()\n ]}\n\n static get parameters() { return [\n FormBuilder,\n MnAlerts,\n $rootScope\n // ngb.NgbModal\n ]}\n\n constructor(formBuilder, mnAlerts, $rootScope, modalService) {\n singletonGuard(MnFormService);\n\n this.formBuilder = formBuilder;\n this.mnAlerts = mnAlerts;\n this.modalService = modalService;\n this.$rootScope = $rootScope;\n }\n\n create(component) {\n return new MnForm(this.formBuilder, component, this.mnAlerts, this.$rootScope);\n }\n}\n\nclass MnForm {\n constructor(builder, component, mnAlerts, $rootScope) {\n this.builder = builder;\n this.component = component;\n this.mnAlerts = mnAlerts;\n this.defaultPackPipe = map(this.getFormValue.bind(this));\n this.requestsChain = [];\n this.$rootScope = $rootScope;\n\n }\n\n getFormValue() {\n return this.group.value;\n }\n\n setFormGroup(formDescription, options) {\n this.group = (formDescription instanceof FormGroup) ?\n formDescription : this.builder.group(formDescription, options);\n return this;\n }\n\n setSource(source) {\n var sourcePipe = source.pipe(this.unpackPipe || tap(), first());\n\n this.loadingPipe = sourcePipe\n .pipe(mapTo(false),\n startWith(true));\n\n sourcePipe.subscribe(v => this.group.patchValue(v));\n\n return this;\n }\n\n setSourceShared(source) {\n var sourcePipe = source.pipe(this.unpackPipe || tap(),\n takeUntil(this.component.mnOnDestroy));\n\n sourcePipe.subscribe(v => this.group.patchValue(v));\n\n return this;\n }\n\n getLastRequest() {\n return this.requestsChain[this.requestsChain.length - 1];\n }\n\n getFirstRequest() {\n return this.requestsChain[0];\n }\n\n success(fn) {\n (this.requestsChain.length ? this.getLastRequest().success : this.submitPipe)\n .pipe(takeUntil(this.component.mnOnDestroy))\n .subscribe(fn);\n return this;\n }\n\n error(fn) {\n this.getLastRequest().error\n .pipe(this.unpackErrorPipe || tap(),\n takeUntil(this.component.mnOnDestroy))\n .subscribe(fn);\n return this;\n }\n\n successMessage(message) {\n this.success(() => this.mnAlerts.formatAndSetAlerts(message, \"success\", 2500));\n return this;\n }\n\n errorMessage(message) {\n this.error(() => this.mnAlerts.formatAndSetAlerts(message, \"error\"));\n return this;\n }\n\n disableFields(path) {\n return (value) => {\n this.group.get(path)[value ? \"disable\" : \"enable\"]({emitEvent: false});\n }\n }\n\n showGlobalSpinner() {\n this.trackSubmit();\n this.processing\n .pipe(takeUntil(this.component.mnOnDestroy))\n .subscribe(v => {\n this.$rootScope.mnGlobalSpinnerFlag = v;\n });\n return this;\n }\n\n trackSubmit() {\n var success = this.getLastRequest().success.pipe(mapTo(false));\n var request = this.getFirstRequest().request.pipe(mapTo(true));\n var errors = merge.apply(merge,\n this.requestsChain.map(req =>\n req.error\n .pipe(filter(v => !!v)))).pipe(mapTo(false));\n this.processing =\n merge(request, success, errors)\n .pipe(shareReplay({refCount: true, bufferSize: 1}));\n\n return this;\n }\n\n setPostRequest(postRequest) {\n let lastRequest = this.getLastRequest();\n this.requestsChain.push(postRequest);\n\n if (!lastRequest) {\n this.createSubmitPipe();\n this.submitPipe.subscribe((v) => this.getFirstRequest().post(v));\n } else {\n lastRequest.success\n .pipe(this.getPackPipe(),\n takeUntil(this.component.mnOnDestroy))\n .subscribe((function (postRequestIndex) {\n return (v) => this.requestsChain[postRequestIndex - 1].post(v);\n }.bind(this))(this.requestsChain.length));\n }\n return this;\n }\n\n hasNoPostRequest() {\n this.createSubmitPipe();\n return this;\n }\n\n getPackPipe() {\n return this.packPipe || (this.group ? this.defaultPackPipe : tap())\n }\n\n createSubmitPipe() {\n this.submit = new Subject();\n this.submitPipe =\n this.submit.pipe(this.getPackPipe(),\n takeUntil(this.component.mnOnDestroy))\n }\n\n setReset(reset) {\n this.reset = new Subject();\n this.reset\n .pipe(takeUntil(this.component.mnOnDestroy))\n .subscribe(reset);\n\n return this;\n }\n\n hasNoHandler() {\n this.getLastRequest().success\n .pipe(takeUntil(this.component.mnOnDestroy))\n .subscribe();\n return this;\n }\n\n clearErrors() {\n this.submit\n .pipe(takeUntil(this.component.mnOnDestroy))\n .subscribe(() => this.requestsChain.forEach((req) => req.clearError()));\n return this;\n }\n\n setUnpackErrorPipe(unpackErrorPipe) {\n this.unpackErrorPipe = unpackErrorPipe;\n return this\n }\n\n setUnpackPipe(unpackPipe) {\n this.unpackPipe = unpackPipe;\n return this;\n }\n\n setPackPipe(packPipe) {\n this.packPipe = packPipe;\n return this;\n }\n\n confirmation504(dialog) {\n this.getLastRequest().error\n .pipe(takeUntil(this.component.mnOnDestroy))\n .subscribe((resp) => {\n if (resp && resp.status === 504) {\n this.modalService\n .open(dialog)\n .result\n .then(() => {\n this.submit.next(true);\n }, function () {});\n }\n });\n return this;\n }\n\n setValidation(validationPostRequest, permissionStream, validateOnStream, keepErrors) {\n validationPostRequest.response\n .pipe(takeUntil(this.component.mnOnDestroy))\n .subscribe(function () {\n if (!keepErrors) {\n validationPostRequest.clearError();\n }\n });\n //skip initialization of the form\n (permissionStream || new BehaviorSubject(true)).pipe(\n switchMap((v) => v ? (validateOnStream || this.group.valueChanges) : NEVER),\n debounceTime(500),\n this.getPackPipe(),\n takeUntil(this.component.mnOnDestroy))\n .subscribe((v) => {\n validationPostRequest.post(v);\n });\n return this;\n }\n}\n"], "mappings": "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", "names": [] }