gridjs-vue
Version:
A Vue.js wrapper component for Grid.js
1 lines • 13.1 kB
Source Map (JSON)
{"version":3,"file":"index.js","sources":["../src/gridjs-vue.mjs","../src/index.mjs"],"sourcesContent":["import { Grid } from 'https://unpkg.com/gridjs@5.0.1/dist/gridjs.module.js'\nimport parseStylesheet from 'https://unpkg.com/parse-css-stylesheet/index.js'\nimport { uid } from 'https://unpkg.com/uid/single/index.mjs'\n\nconst waitForSelector = selector => {\n const element = document.querySelector(selector)\n if (element) return element\n\n const mutObserver = new MutationObserver(mutations => {\n for (const mutation of mutations) {\n const nodes = Array.from(mutation.addedNodes)\n for (const node of nodes) {\n if (node.matches && node.matches(selector)) {\n mutObserver.disconnect()\n return node\n }\n }\n }\n })\n\n mutObserver.observe(document.documentElement, { childList: true, subtree: true })\n}\n\nexport default {\n name: 'Grid',\n props: {\n autoWidth: {\n type: Boolean,\n default: true\n },\n classNames: {\n type: Object,\n default: undefined\n },\n cols: {\n type: [Array, Function],\n default: undefined\n },\n from: {\n type: [String, Function],\n default: undefined\n },\n language: {\n type: Object,\n default: undefined\n },\n pagination: {\n type: [Object, Boolean],\n default: false\n },\n rows: {\n type: [Array, Function],\n default: undefined\n },\n search: {\n type: Boolean,\n default: false\n },\n server: {\n type: [Object, Function],\n default: undefined\n },\n sort: {\n type: [Object, Boolean],\n default: false\n },\n styles: {\n type: Object,\n default: undefined\n },\n theme: {\n type: String,\n default: undefined\n },\n width: {\n type: String,\n default: '100%'\n }\n },\n data() {\n return {\n dict: {\n error: {\n columnsUndefined: 'Column headers are undefined',\n rowsUndefined: 'No data to display'\n }\n },\n grid: null,\n uuid: null,\n wrapper: null\n }\n },\n computed: {\n tabularData() {\n if (this.rows) return this.rows\n if (this.from || this.server) return undefined\n return [[this.dict.error.rowsUndefined]]\n },\n options() {\n let options = {\n autoWidth: this.autoWidth,\n columns: this.cols ? this.cols : [this.dict.error.columnsUndefined],\n data: this.tabularData,\n pagination: this.pagination,\n sort: this.sort,\n width: this.width\n }\n\n if (this.classNames) options.className = this.classNames\n if (this.from)\n options.from =\n typeof this.from === 'string'\n ? document.querySelector(this.from)\n : document.createRange().createContextualFragment(this.from())\n if (this.language) options.language = this.language\n if (this.search) options.search = this.search\n if (this.server) options.server = this.server\n if (this.styles) options.style = this.styles\n\n return options\n },\n activeTheme() {\n if (this.theme) return this.theme\n if (this.$gridjs.options.theme) return this.$gridjs.options.theme\n return 'mermaid'\n },\n divId() {\n return `gridjs__${this.uuid}`\n }\n },\n watch: {\n autoWidth() {\n this.update()\n },\n classNames() {\n this.update()\n },\n cols() {\n this.update()\n },\n from() {\n this.update()\n },\n language() {\n this.update()\n },\n pagination() {\n this.update()\n },\n rows() {\n this.update()\n },\n search() {\n this.update()\n },\n server() {\n this.update()\n },\n sort() {\n this.update()\n },\n styles() {\n this.update()\n },\n theme() {\n this.update()\n },\n width() {\n this.update()\n }\n },\n async created() {\n try {\n // give table a unique id\n this.uuid = uid(16)\n\n // get the wrapper\n await waitForSelector(this.divId)\n this.wrapper = document.getElementById(this.divId)\n\n // instantiate grid.js\n if (Object.keys(this.$gridjs.options).length) this.setOptions()\n if (this.wrapper && (this.options.data || this.options.from || this.options.server)) {\n this.grid = new Grid(this.options).render(this.wrapper)\n }\n } catch (error) {\n console.error(error)\n }\n },\n mounted() {\n this.assignTheme()\n },\n destroyed() {\n // unload from memory\n this.grid = undefined\n this.wrapper = undefined\n },\n methods: {\n async assignTheme() {\n try {\n if (this.activeTheme !== 'none') {\n const head = document.getElementsByTagName('head')[0]\n\n let styles = document.createElement('style')\n styles.title = `${this.divId}__theme`\n styles.type = 'text/css'\n head.appendChild(styles)\n\n let theme = await fetch(`https://unpkg.com/gridjs/dist/theme/${this.activeTheme}.css`)\n theme = parseStylesheet(await theme.text())\n\n for (let index in document.styleSheets) {\n if (document.styleSheets[index].title === styles.title) {\n styles = document.styleSheets[index]\n }\n }\n\n for (const index in theme.cssRules) {\n let css = theme.cssRules[index].cssText\n if (css && !/^@/g.test(css)) {\n styles.insertRule(`#${this.divId} ${css}`)\n }\n }\n }\n } catch (error) {\n console.error(error)\n }\n },\n setOptions() {\n try {\n const plugins = this.$gridjs.options.plugins\n if (plugins) {\n plugins.forEach(plugin => {\n this.grid.plugin.add(plugin)\n })\n }\n } catch (error) {\n console.error(error)\n }\n },\n update() {\n try {\n if (this.grid) this.grid.updateConfig(this.options).forceRender()\n } catch (error) {\n console.error(error)\n }\n }\n },\n template: `\n <article :id=\"divId\" :data-uuid=\"uuid\" class=\"gridjs__wrapper\"></article>\n `\n}\n","import { createRef, h, html, PluginPosition } from 'https://unpkg.com/gridjs@5.0.1/dist/gridjs.module.js'\nimport { uid } from 'https://unpkg.com/uid/single/index.mjs'\nimport Grid from './gridjs-vue.mjs'\n\nexport function install(Vue, options = {}) {\n if (install.installed) return\n install.installed = true\n\n const render = (el, usrComponent, props, opts) => {\n if (el && el.current) el = el.current\n\n if (typeof el === 'string' && usrComponent) {\n new Vue({\n render(createElement) {\n return createElement(usrComponent, { props, ...opts }, this.$slots.default)\n },\n components: {\n usrComponent\n }\n }).$mount(el)\n } else {\n console.error('$gridjs.render() requires a target element and a component')\n }\n }\n\n if (!Vue.prototype.$gridjs) {\n Vue.prototype.$gridjs = {\n createRef,\n h,\n html,\n options,\n PluginPosition,\n render,\n uuid: uid(16)\n }\n }\n\n Vue.component('Grid', Grid)\n}\n\nconst plugin = {\n install\n}\n\nlet GlobalVue = null\n\nif (typeof window !== 'undefined') {\n GlobalVue = window.Vue\n} else if (typeof global !== 'undefined') {\n GlobalVue = global.Vue\n}\n\nif (GlobalVue) {\n GlobalVue.use(plugin)\n}\n\nexport { Grid, plugin as GridGlobal }\nexport default Grid\n"],"names":["_await","value","then","direct","Promise","resolve","body","recover","result","e","f","args","i","arguments","length","apply","this","reject","name","props","autoWidth","type","Boolean","default","classNames","Object","undefined","cols","Array","Function","from","String","language","pagination","rows","search","server","sort","styles","theme","width","data","dict","error","columnsUndefined","rowsUndefined","grid","uuid","wrapper","computed","tabularData","options","columns","className","document","querySelector","createRange","createContextualFragment","style","activeTheme","$gridjs","divId","watch","update","created","uid","selector","element","mutObserver","MutationObserver","mutations","mutation","nodes","addedNodes","node","matches","disconnect","observe","documentElement","childList","subtree","waitForSelector","_this","getElementById","keys","setOptions","Grid","render","console","mounted","assignTheme","destroyed","methods","_this2","head","getElementsByTagName","createElement","title","appendChild","fetch","text","parseStylesheet","index","styleSheets","cssRules","css","cssText","test","insertRule","plugins","forEach","plugin","add","updateConfig","forceRender","template","install","Vue","installed","el","usrComponent","opts","current","$slots","components","$mount","prototype","createRef","h","html","PluginPosition","component","GlobalVue","window","global","use"],"mappings":"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"}