public/js/atk-vue-tree-item-selector.min.js.map
{"version":3,"file":"js/atk-vue-tree-item-selector.min.js","mappings":"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","sources":["webpack://atk/./src/vue-components/tree-item-selector/tree-item-selector.component.js"],"sourcesContent":["import $ from 'external/jquery';\n\nexport default {\n name: 'AtkTreeItemSelector',\n template: `\n <div class=\"item\" :style=\"itemMargin\">\n <i :class=\"toggleIcon\" v-show=\"!isRoot\" @click=\"onToggleShow\" />\n <i :class=\"getIcon\" v-show=\"!isRoot\" @click=\"onToggleSelect\" />\n <div class=\"content\">\n <div :style=\"itemCursor\" @click=\"onToggleSelect\">{{title}}</div>\n <div v-if=\"isParent\" class=\"list\" v-show=\"open || isRoot\">\n <AtkTreeItemSelector\n v-for=\"item in item.nodes\" :key=\"item.id\"\n :item=\"item\"\n :values=\"values\"\n ></AtkTreeItemSelector>\n </div>\n </div>\n </div>`,\n props: { item: Object, values: Array },\n inject: ['getRootData'],\n data: function () {\n return {\n open: false,\n isRoot: this.item.id === 'atk-root',\n isInitialized: false,\n id: this.item.id,\n nodes: this.item.nodes,\n icons: {\n single: {\n on: 'circle',\n off: 'circle outline',\n indeterminate: 'dot circle outline',\n },\n multiple: {\n on: 'check square outline',\n off: 'square outline',\n indeterminate: 'minus square outline',\n },\n },\n };\n },\n created: function () {\n this.getInitData();\n },\n mounted: function () {},\n computed: {\n itemMargin: function () {\n return {\n marginLeft: this.item.nodes && this.item.nodes.length > 0\n ? (this.open ? '-13px' : '-10px')\n : null,\n };\n },\n itemCursor: function () {\n return {\n cursor: this.isParent && this.getRootData().options.mode === 'single' ? 'default' : 'pointer',\n };\n },\n title: function () {\n return this.item.name;\n },\n isParent: function () {\n return this.nodes && this.nodes.length > 0;\n },\n toggleIcon: function () {\n return this.isParent\n ? (this.open ? 'caret down' : 'caret right') + ' icon'\n : null;\n },\n state: function () {\n let state = 'off';\n if (this.isParent) {\n state = this.hasAllFill(this.nodes)\n ? 'on'\n : (this.hasSomeFill(this.nodes) ? 'indeterminate' : 'off');\n } else if (this.isSelected(this.id)) {\n state = 'on';\n }\n\n return state;\n },\n getIcon: function () {\n return this.icons[this.getRootData().options.mode][this.state] + ' icon';\n },\n },\n methods: {\n isSelected: function (id) {\n return this.values.includes(id);\n },\n /**\n * Get input initial data.\n */\n getInitData: function () {\n // check if input containing data is set and initialized\n if (!this.getRootData().item.isInitialized) {\n this.getRootData().values = this.getValues();\n this.getRootData().item.isInitialized = true;\n }\n },\n getValues: function () {\n const initValues = JSON.parse(this.getInputElement().value);\n let values = [];\n if (Array.isArray(initValues)) {\n values = initValues;\n } else {\n values.push(initValues);\n }\n\n return values;\n },\n /**\n * Check if all children nodes are on.\n *\n * @returns {boolean}\n */\n hasAllFill: function (nodes) {\n let state = true;\n for (const node of nodes) {\n // check children first;\n if (node.nodes && node.nodes.length > 0) {\n if (!this.hasAllFill(node.nodes)) {\n state = false;\n\n break;\n }\n } else if (!this.values.includes(node.id)) {\n state = false;\n\n break;\n }\n }\n\n return state;\n },\n /**\n * Check if some children nodes are on.\n *\n * @returns {boolean}\n */\n hasSomeFill: function (nodes) {\n let state = false;\n for (const node of nodes) {\n // check children first;\n if (node.nodes && node.nodes.length > 0) {\n if (this.hasSomeFill(node.nodes)) {\n state = true;\n\n break;\n }\n }\n if (this.values.includes(node.id)) {\n state = true;\n\n break;\n }\n }\n\n return state;\n },\n /**\n * Fire when arrow are click in order to show or hide children.\n */\n onToggleShow: function () {\n if (this.isParent) {\n this.open = !this.open;\n }\n },\n /**\n * Fire when checkbox is click.\n */\n onToggleSelect: function () {\n const { options } = this.getRootData();\n switch (options.mode) {\n case 'single': {\n this.handleSingleSelect();\n\n break;\n }\n case 'multiple': {\n this.handleMultipleSelect();\n\n break;\n }\n }\n },\n /**\n * Merge array and remove duplicate.\n *\n * @returns {*[]}\n */\n mergeArrays: function (...arrays) {\n let jointArray = [];\n for (const array of arrays) {\n jointArray = [...jointArray, ...array];\n }\n\n return [...new Set(jointArray)];\n },\n /**\n * Get all ID from all children node.\n *\n * @returns {Array.<string>}\n */\n collectAllChildren: function (nodes, ids = []) {\n for (const node of nodes) {\n if (node.nodes && node.nodes.length > 0) {\n ids = [...ids, ...this.collectAllChildren(node.nodes, ids)];\n } else {\n ids.push(node.id);\n }\n }\n\n return ids;\n },\n remove: function (values, value) {\n return values.filter((val) => val !== value);\n },\n /**\n * Handle a selection when in single mode.\n */\n handleSingleSelect: function () {\n if (this.state === 'off' && !this.isParent) {\n this.getRootData().values = [this.item.id];\n this.setInput(this.item.id);\n if (this.getRootData().options.url) {\n this.postValue();\n }\n }\n if (this.isParent) {\n this.open = !this.open;\n }\n },\n /**\n * Handle a selection when in multiple mode.\n */\n handleMultipleSelect: function () {\n let values;\n if (this.isParent) {\n // collect all children value\n const childValues = this.collectAllChildren(this.nodes);\n if (this.state === 'off' || this.state === 'indeterminate') {\n values = this.mergeArrays(this.values, childValues);\n } else {\n let temp = this.values;\n for (const value of childValues) {\n temp = this.remove(temp, value);\n }\n values = temp;\n }\n } else if (this.state === 'on') {\n values = this.remove(this.values, this.item.id);\n } else if (this.state === 'off') {\n values = this.values;\n values.push(this.item.id);\n }\n\n this.getRootData().values = [...values];\n this.setInput(JSON.stringify(values));\n\n if (this.getRootData().options.url) {\n this.postValue();\n }\n },\n /**\n * Set input field with current mapped model value.\n */\n setInput: function (value) {\n this.getInputElement().value = value;\n },\n /**\n * Get input element set for this Item Selector.\n *\n * @returns {HTMLElement}\n */\n getInputElement: function () {\n return document.getElementsByName(this.getRootData().field)[0];\n },\n /**\n * Send data using callback URL.\n */\n postValue: function () {\n $(this.$el).parents('.' + this.getRootData().options.loader).api({\n on: 'now',\n url: this.getRootData().options.url,\n method: 'POST',\n data: { data: JSON.stringify(this.getRootData().values) },\n });\n },\n },\n};\n"],"names":["name","template","props","item","Object","values","Array","inject","data","open","isRoot","this","id","isInitialized","nodes","icons","single","on","off","indeterminate","multiple","created","getInitData","mounted","computed","itemMargin","marginLeft","length","itemCursor","cursor","isParent","getRootData","options","mode","title","toggleIcon","state","hasAllFill","hasSomeFill","isSelected","getIcon","methods","includes","getValues","initValues","JSON","parse","getInputElement","value","isArray","push","node","onToggleShow","onToggleSelect","handleSingleSelect","handleMultipleSelect","mergeArrays","jointArray","_len","arguments","arrays","_key","array","Set","collectAllChildren","ids","undefined","remove","filter","val","setInput","url","postValue","childValues","temp","stringify","document","getElementsByName","field","$","$el","parents","loader","api","method"],"sourceRoot":""}