public/js/atk-vue-tree-item-selector.min.js.map

Summary

Maintainability
Test Coverage
{"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":""}