{"version":3,"sources":["version.js","components/dataView.js","components/dataDetail.js","components/dataIterator.js"],"names":["dmx","versions","Component","initialData","data","page","pages","items","sort","on","dir","has","first","prev","next","last","attributes","type","Array","Object","default","filter","String","Number","pagesize","sorton","sortdir","enum","methods","select","this","_updatePage","prop","props","toLowerCase","init","_data","_items","_updateData","_updateFilter","_updateItems","destroy","_filterEffect","performUpdate","updatedProps","effect","parse","repeatItems","map","item","clone","$value","$index","$key","slice","DataScope","rev","a","b","localeCompare","set","length","size","Math","max","ceil","offset","key","value","_updateSelection","isArray","entries","reset","find","requestAnimationFrame","$node","querySelectorAll","forEach","form","index","loop","Boolean","_select","random","floor","console","warn","name","parseInt"],"mappings":"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","file":"dmxDataTraversal.js","sourcesContent":["dmx.versions['dmxDataTraversal'] = '2.0.2';","dmx.Component('data-view', {\r\n\r\n initialData: {\r\n data: [],\r\n page: 1,\r\n pages: 1,\r\n items: 0,\r\n sort: { on: '', dir: 'asc' },\r\n has: { first: false, prev: false, next: false, last: false },\r\n },\r\n\r\n attributes: {\r\n data: {\r\n type: [Array, Object],\r\n default: null,\r\n },\r\n\r\n filter: {\r\n type: String,\r\n default: '',\r\n },\r\n\r\n page: {\r\n type: Number,\r\n default: 1,\r\n },\r\n\r\n pagesize: {\r\n type: Number,\r\n default: 0,\r\n },\r\n\r\n sorton: {\r\n type: String,\r\n default: '',\r\n },\r\n\r\n sortdir: {\r\n type: String,\r\n default: 'asc',\r\n enum: ['asc', 'desc'],\r\n },\r\n },\r\n\r\n methods: {\r\n select (page) {\r\n this._updatePage(+page);\r\n },\r\n\r\n first () {\r\n this._updatePage(1);\r\n },\r\n\r\n prev () {\r\n this._updatePage(this.data.page - 1);\r\n },\r\n\r\n next () {\r\n this._updatePage(this.data.page + 1);\r\n },\r\n\r\n last () {\r\n this._updatePage(this.data.pages);\r\n },\r\n\r\n sort (prop, dir) {\r\n this.props.sorton = prop;\r\n this.props.sortdir = (dir && dir.toLowerCase() == 'desc' ? 'desc' : 'asc');\r\n },\r\n },\r\n\r\n init () {\r\n this._data = [];\r\n this._items = [];\r\n\r\n if (this.props.data) {\r\n this._updateData();\r\n }\r\n\r\n if (this.props.filter) {\r\n this._updateFilter();\r\n } else {\r\n this._updateItems();\r\n }\r\n },\r\n\r\n destroy () {\r\n if (this._filterEffect) {\r\n this._filterEffect();\r\n delete this._filterEffect;\r\n }\r\n },\r\n\r\n performUpdate (updatedProps) {\r\n if (updatedProps.has('filter')) {\r\n this._updateFilter();\r\n } else if (updatedProps.has('data')) {\r\n this._updateData();\r\n this._updateFilter();\r\n } else if (updatedProps.has('sorton') || updatedProps.has('sortdir')) {\r\n this._updateFilter();\r\n } else if (updatedProps.has('page')) {\r\n this._updatePage(this.props.page);\r\n } else if (updatedProps.has('pagesize')) {\r\n this._updatePage(this.data.page);\r\n }\r\n },\r\n\r\n _updateFilter () {\r\n this.destroy();\r\n\r\n if (this.props.filter) {\r\n this._filterEffect = dmx.effect(() => {\r\n dmx.parse(this.props.filter, this);\r\n this._updateItems();\r\n });\r\n } else {\r\n this._updateItems();\r\n }\r\n },\r\n\r\n _updateData () {\r\n this._data = dmx.repeatItems(this.props.data).map(item => {\r\n item = dmx.clone(item);\r\n delete item.$value;\r\n delete item.$index;\r\n delete item.$key;\r\n return item;\r\n });\r\n },\r\n\r\n _updateItems () {\r\n this._items = this._data.slice(0);\r\n\r\n if (this.props.filter) {\r\n this._items = this._items.filter(item => dmx.parse(this.props.filter, dmx.DataScope(item, this)));\r\n }\r\n\r\n if (this.props.sorton) {\r\n const on = this.props.sorton;\r\n const dir = this.props.sortdir;\r\n const rev = dir === 'desc';\r\n\r\n this._items.sort((a, b) => {\r\n if (rev) {\r\n if (typeof a[on] == 'string' && typeof b[on] == 'string') return b[on].localeCompare(a[on]);\r\n return a[on] > b[on] ? -1 : a[on] < b[on] ? 1 : 0;\r\n } else {\r\n if (typeof a[on] == 'string' && typeof b[on] == 'string') return a[on].localeCompare(b[on]);\r\n return a[on] < b[on] ? -1 : a[on] > b[on] ? 1 : 0;\r\n }\r\n });\r\n\r\n this.set('sort', { on, dir });\r\n }\r\n\r\n const size = this.props.pagesize;\r\n const items = this._items.length;\r\n\r\n this.set({\r\n //pages: size ? Math.max(1, Math.ceil(items / size)) : 1,\r\n items: items,\r\n });\r\n\r\n this._updatePage(this.data.page);\r\n },\r\n\r\n _updatePage (page) {\r\n const size = this.props.pagesize;\r\n const pages = size ? Math.max(1, Math.ceil(this._items.length / size)) : 1;\r\n\r\n page = page < 1 ? 1 : page > pages ? pages : page;\r\n\r\n const offset = (page - 1) * size;\r\n\r\n this.set({\r\n page: page,\r\n pages: pages,\r\n data: size ? this._items.slice(offset, offset + size) : this._items,\r\n has: {\r\n first: page > 1,\r\n prev: page > 1,\r\n next: page < pages,\r\n last: page < pages,\r\n },\r\n });\r\n },\r\n\r\n});\r\n","dmx.Component('data-detail', {\r\n\r\n initialData: {\r\n data: [],\r\n },\r\n\r\n attributes: {\r\n data: {\r\n type: Array,\r\n default: null,\r\n },\r\n\r\n key: {\r\n type: String,\r\n default: null,\r\n },\r\n\r\n value: {\r\n type: [String, Number],\r\n default: null,\r\n },\r\n },\r\n\r\n methods: {\r\n select (value) {\r\n this.props.value = value;\r\n this._updateSelection();\r\n },\r\n },\r\n\r\n init () {\r\n this._updateData();\r\n },\r\n\r\n performUpdate (updatedProps) {\r\n if (updatedProps.has('data')) {\r\n this._updateData();\r\n } else if (updatedProps.has('value')) {\r\n this._updateSelection(true);\r\n }\r\n },\r\n\r\n _updateData () {\r\n this._data = [];\r\n\r\n if (this.props.data && typeof this.props.data == 'object') {\r\n if (Array.isArray(this.props.data)) {\r\n this._data = this.props.data.map(item => typeof item == 'object' ? item : { $value: item });\r\n } else {\r\n this._data = Object.entries(this.props.data).map(([$key, $value]) => ({ $key, $value }));\r\n }\r\n }\r\n\r\n this._updateSelection();\r\n },\r\n\r\n _updateSelection (reset) {\r\n this.set('data', this._data.find(item => item[this.props.key] === this.props.value) || null);\r\n\r\n if (reset) {\r\n requestAnimationFrame(() => {\r\n this.$node.querySelectorAll('form').forEach(form => form.reset());\r\n });\r\n }\r\n },\r\n\r\n});\r\n","dmx.Component('data-iterator', {\r\n\r\n initialData: {\r\n index: -1,\r\n value: null,\r\n has: { first: false, prev: false, next: false, last: false },\r\n },\r\n\r\n attributes: {\r\n data: {\r\n type: Array,\r\n default: null,\r\n },\r\n\r\n index: {\r\n type: Number,\r\n default: 0\r\n },\r\n\r\n loop: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n },\r\n\r\n methods: {\r\n first () {\r\n if (this._data.length) {\r\n this._select(0);\r\n }\r\n },\r\n\r\n prev () {\r\n if (this._data.length) {\r\n this._select(this.data.index - 1);\r\n }\r\n },\r\n\r\n next () {\r\n if (this._data.length) {\r\n this._select(this.data.index + 1);\r\n }\r\n },\r\n\r\n last () {\r\n if (this._data.length) {\r\n this._select(this._data.length - 1);\r\n }\r\n },\r\n\r\n random () {\r\n if (this._data.length) {\r\n this._select(Math.floor(this._data.length * Math.random()));\r\n }\r\n },\r\n\r\n select (index) {\r\n if (this._data.length) {\r\n this._select(index);\r\n }\r\n },\r\n },\r\n\r\n init () {\r\n this._updateData();\r\n },\r\n\r\n performUpdate (updatedProps) {\r\n if (updatedProps.has('data')) {\r\n this._updateData();\r\n } else if (updatedProps.has('index')) {\r\n this._select(this.props.index);\r\n }\r\n },\r\n\r\n _updateData () {\r\n this._data = [];\r\n \r\n if (this.props.data) {\r\n if (Array.isArray(this.props.data)) {\r\n this._data = this.props.data;\r\n } else {\r\n console.warn(`Iterator ${this.name} expects an array as data but got ${typeof this.props.data}`);\r\n }\r\n\r\n this._select(this.props.index);\r\n }\r\n },\r\n\r\n _select (index) {\r\n index = parseInt(index, 10);\r\n\r\n if (this._data.length) {\r\n const last = this._data.length - 1;\r\n \r\n if (index < 0) index = this.props.loop ? last : 0;\r\n if (index > last) index = this.props.loop ? 0 : last;\r\n \r\n this.set({\r\n index: index,\r\n value: this._data[index],\r\n has: {\r\n first: index > 0,\r\n prev: index > 0,\r\n next: index < last,\r\n last: index < last,\r\n },\r\n });\r\n } else {\r\n this.set({\r\n index: -1,\r\n value: null,\r\n has: { first: false, prev: false, next: false, last: false },\r\n });\r\n }\r\n },\r\n\r\n});\r\n"]}