{ "version": 3, "sources": ["../ui/app/mn.keyspace.selector.component.js", "../ui/app/mn.keyspace.selector.service.js"], "sourcesContent": ["/*\nCopyright 2021-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 {Component, ChangeDetectionStrategy} from '@angular/core';\nimport {takeUntil, withLatestFrom} from 'rxjs/operators';\n\nimport {MnLifeCycleHooksToStream} from './mn.core.js';\nimport {MnFormService} from './mn.form.service.js';\nimport template from \"./mn.keyspace.selector.html\";\n\nexport {MnKeyspaceSelectorComponent};\n\nclass MnKeyspaceSelectorComponent extends MnLifeCycleHooksToStream {\n static get annotations() { return [\n new Component({\n selector: \"mn-keyspace-selector\",\n template,\n inputs: [\n \"service\",\n \"defaults\"\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '(click)': '$event.stopPropagation()',\n }\n })\n ]}\n\n static get parameters() { return [\n MnFormService\n ]}\n\n constructor(mnFormService) {\n super();\n this.form = mnFormService.create(this).setFormGroup({}).hasNoPostRequest();\n }\n\n ngOnInit() {\n this.defaults && this.service.setKeyspace(this.defaults);\n\n this.form.submit\n .pipe(withLatestFrom(this.service.stream.step),\n takeUntil(this.mnOnDestroy))\n .subscribe(([item, step]) => {\n this.service.setResultItem(item, step);\n });\n }\n}\n", "/*\n Copyright 2020-Present Couchbase, Inc.\n\n Use of this software is governed by the Business Source License included in\n the file licenses/BSL-Couchbase.txt. As of the Change Date specified in that\n file, in accordance with the Business Source License, use of this software\n will be governed by the Apache License, Version 2.0, included in the file\n licenses/APL2.txt.\n*/\n\nimport {Injectable} from '@angular/core';\nimport {filter, withLatestFrom, pairwise, catchError,\n startWith, switchMap, pluck, takeUntil,\n mapTo, distinctUntilChanged, shareReplay, map} from 'rxjs/operators';\nimport {BehaviorSubject, Subject, NEVER, of, merge, fromEvent} from 'rxjs';\nimport { sortBy, prop } from 'ramda';\n\nimport {MnHelperService} from './mn.helper.service.js';\nimport {MnCollectionsService} from './mn.collections.service.js';\n\nimport {singletonGuard} from './mn.core.js';\n\nexport {MnKeyspaceSelectorService}\n\nclass MnKeyspaceSelectorService {\n static get annotations() { return [\n new Injectable()\n ];}\n\n static get parameters() { return [\n MnHelperService,\n MnCollectionsService\n ];}\n\n constructor(mnHelperService, mnCollectionsService) {\n singletonGuard(MnKeyspaceSelectorService);\n this.mnHelperService = mnHelperService;\n this.mnCollectionsService = mnCollectionsService;\n }\n\n createCollectionSelector(options) {\n var filterKey = options.isRolesMode ? \"value\" : \"name\";\n\n var doFocus = new Subject();\n\n var filters = options.steps.reduce((acc, step) => {\n acc[step] = this.mnHelperService.createFilter(options.component, filterKey);\n return acc;\n }, {});\n\n var onFocus = options.steps.reduce((acc, step) => {\n acc[step] = new Subject();\n return acc;\n }, {});\n\n var result = new BehaviorSubject(\n options.steps.reduce((acc, step) => {\n acc[step] = null;\n return acc;\n }, {}));\n\n var selectionDone =\n result.pipe(filter(v => Object.values(v)\n .filter(v => !!v).length == options.steps.length));\n\n var setStepsValuesToFields = () => {\n let value = result.getValue();\n Object.keys(value).forEach(key => {\n if (value[key]) {\n filters[key].group.get(\"value\").setValue(\n value[key] ? value[key][filterKey] : \"\");\n }\n });\n };\n\n var mapFocusToStep =\n merge.apply(merge,\n options.steps.map(step => onFocus[step].pipe(filter(v => v),\n mapTo(step))));\n var step =\n merge(mapFocusToStep,\n selectionDone.pipe(mapTo(\"ok\")))\n .pipe(shareReplay({refCount: true, bufferSize: 1}));\n\n var outsideClick = step.pipe(switchMap(v => v != \"ok\" ?\n fromEvent(document, 'click') :\n NEVER));\n\n outsideClick\n .pipe(takeUntil(options.component.mnOnDestroy))\n .subscribe(setStepsValuesToFields);\n\n var showHideDropdown =\n merge(outsideClick.pipe(mapTo(\"ok\")),\n step)\n .pipe(map(v => v !== \"ok\"));\n\n let sortByName = sortBy(prop(\"name\"));\n let sortByValue = sortBy(prop(\"value\"));\n\n var list = step\n .pipe(distinctUntilChanged(),\n withLatestFrom(result),\n switchMap(options.isRolesMode ?\n (r) => rolesPayload.call(this, r).pipe(map(sortByValue)) :\n (r) => httpPayload.call(this, r).pipe(map(sortByName))),\n shareReplay({refCount: true, bufferSize: 1}));\n\n\n\n function disableFields(index) {\n options.steps.slice(index).forEach(step => {\n filters[step].group.get(\"value\").disable();\n });\n }\n\n function setFieldsValues(index, child, value) {\n options.steps.slice(index).forEach(step => {\n value[step] = child;\n filters[step].group.get(\"value\").setValue(child ? child.value : \"\");\n });\n }\n\n function getStepList([step, g]) {\n switch (step) {\n case \"bucket\":\n return options.buckets || this.mnCollectionsService.stream.collectionBuckets;\n case \"scope\":\n return g.bucket ?\n this.mnCollectionsService.getManifest(g.bucket.name)\n .pipe(pluck(\"scopes\"),\n catchError(() => of([]))) : of([]);\n case \"collection\":\n return of(g.scope.collections);\n case \"ok\":\n return NEVER;\n }\n }\n\n function httpPayload([step, g]) {\n let rv = getStepList.bind(this)([step, g]);\n\n if (step !== \"ok\") {\n return rv.pipe(filters[step].pipe);\n } else {\n return rv;\n }\n }\n\n function rolesPayload([step, g]) {\n let rv;\n switch (step) {\n case \"bucket\":\n rv = of([{value: \"*\"},\n ...options.buckets]);\n break;\n case \"scope\":\n rv = of([{value: \"*\"},\n ...(g.bucket.children ? g.bucket.children[step + \"_name\"] : [])]);\n break;\n case \"collection\":\n rv = of([{value: \"*\"},\n ...(g.scope.children ? g.scope.children[step + \"_name\"] : [])]);\n break;\n case \"ok\":\n return NEVER;\n }\n return rv.pipe(filters[step].pipe);\n }\n\n function setResultItem(item, step) {\n let value = result.getValue();\n let currentIndex = options.steps.indexOf(step);\n let currentValue = item[filterKey];\n let nextStep = options.steps[currentIndex + 1];\n if (currentValue == \"*\") {\n disableFields(currentIndex + 1);\n setFieldsValues(currentIndex + 1, {value: \"*\"}, value);\n value[step] = item;\n result.next(value);\n } else {\n disableFields(currentIndex + 1);\n setFieldsValues(currentIndex + 1, null, value);\n value[step] = item;\n result.next(value);\n if (nextStep) {\n filters[nextStep].group.get(\"value\").enable();\n doFocus.next(nextStep);\n }\n }\n }\n\n function reset() {\n var next = {};\n disableFields(1);\n setFieldsValues(0, null, next);\n result.next(next);\n }\n\n function setKeyspace(setVals) {\n let next = {};\n\n if (setVals.bucket) {\n next[\"bucket\"] = {name: setVals[\"bucket\"]};\n filters[\"scope\"].group.get(\"value\").enable();\n }\n if (setVals.scope) {\n next[\"scope\"] = {name: setVals[\"scope\"]};\n }\n\n result.next(next);\n setStepsValuesToFields();\n }\n\n\n disableFields(1);\n\n step\n .pipe(startWith(\"\"),\n pairwise(),\n withLatestFrom(result),\n takeUntil(options.component.mnOnDestroy))\n .subscribe(([[prevStep, step], result]) => {\n if (prevStep && prevStep !== \"ok\") {\n let value = result[prevStep] && result[prevStep][filterKey];\n filters[prevStep].group.get(\"value\").setValue(value);\n }\n if (step && step !== \"ok\") {\n filters[step].group.get(\"value\").setValue(\"\");\n }\n });\n\n return {\n setKeyspace: setKeyspace.bind(this),\n reset,\n filters,\n filterKey,\n options,\n setResultItem,\n stream: {\n step,\n list,\n result,\n doFocus,\n onFocus,\n showHideDropdown\n }\n };\n }\n}\n"], "mappings": "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", "names": [] }