{"version":3,"sources":["webpack:///./src/components/AppTable.vue","webpack:///./src/utils/filters.ts","webpack:///./src/components/AppTable.vue?9bfa","webpack:///./src/components/AppTable.vue?1046","webpack:///./src/components/AppTable.vue?98c0"],"names":["render","_vm","this","_c","_self","_setup","_setupProxy","VDataTable","_g","_b","ref","attrs","headers","props","items","scopedSlots","_u","key","fn","_headers","_items","model","value","inlineFilters","callback","$$v","expression","proxy","_l","slots","_","slot","slotData","_t","$attrs","$listeners","staticRenderFns","filterColumn","filter","dataType","undefined","Array","isArray","length","filterText","String","toLowerCase","normalize","replace","isOperation","test","includes","substring","Number","filterDate","map","f","temp","Date","setHours","getTime","max","Math","min","filterSelect","filterBool","Boolean","__name","__props","refs","$refs","$scopedSlots","h","dataTypes","reduce","t","getProp","obj","a","split","i","n","k","filteredItems","imp","Object","entries","every","val","scrollToRow","index","table","dataTable","$el","querySelector","row","rows","scrollIntoView","trigger","deep","debounce","immediate","__sfc","component"],"mappings":"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","file":"js/chunk-2d221b96.7e23354c.js","sourcesContent":["var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c(_setup.VDataTable,_vm._g(_vm._b({ref:\"dataTable\",attrs:{\"headers\":_vm.headers,\"items\":_setup.props.items,\"disable-pagination\":\"\",\"hide-default-footer\":\"\"},scopedSlots:_vm._u([{key:\"thead\",fn:function(){return [_c('table-filters',{attrs:{\"headers\":_setup._headers,\"items\":_setup._items},model:{value:(_setup.inlineFilters),callback:function ($$v) {_setup.inlineFilters=$$v},expression:\"inlineFilters\"}})]},proxy:true},_vm._l((_setup.slots),function(_,slot){return {key:slot,fn:function(slotData){return [_vm._t(slot,null,null,slotData)]}}})],null,true)},'v-data-table',_vm.$attrs,false),_vm.$listeners))\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export function parseDate( value, opciones : Intl.DateTimeFormatOptions ) {\r\n if (!value) return ''\r\n const date = new Date(value)\r\n return date.toLocaleString(['es-ES'], {\r\n month: 'short',\r\n day: '2-digit',\r\n year: 'numeric',\r\n ...opciones\r\n // hour: '2-digit',\r\n // minute: '2-digit',\r\n })\r\n}\r\n\r\ntype ValueType = string | boolean | null | number\r\ntype FilterType = string | ValueType[] | boolean\r\n\r\nexport function filterColumn(value : ValueType, filter : FilterType, dataType = \"text\") : Boolean {\r\n if (\r\n filter === \"\" ||\r\n filter === null ||\r\n filter === undefined ||\r\n (Array.isArray(filter) && filter.length == 0)\r\n )\r\n return true;\r\n if (filter === \"-\") return value === null;\r\n if (value === \"\" || value === null || value === undefined) return false;\r\n\r\n const filterText = (filter : string, value : ValueType) => {\r\n value = String(value)\r\n .toLowerCase()\r\n .normalize(\"NFD\")\r\n .replace(/[\\u0300-\\u036f]/g, \"\");\r\n filter = String(filter)\r\n .toLowerCase()\r\n .normalize(\"NFD\")\r\n .replace(/[\\u0300-\\u036f]/g, \"\");\r\n const isOperation = /=|<|>|!/.test(filter[0]);\r\n if (isOperation) {\r\n switch (filter[0]) {\r\n case \"!\":\r\n return !value.includes(filter.substring(1));\r\n case \"=\":\r\n return value == filter.substring(1);\r\n case \">\":\r\n return Number(value) >= Number(filter.substring(1));\r\n case \"<\":\r\n return Number(value) <= Number(filter.substring(1));\r\n default:\r\n return false;\r\n }\r\n } else {\r\n return value.includes(filter);\r\n }\r\n };\r\n const filterDate = (filter : string[], value : ValueType) => {\r\n filter = filter.map((f) => {\r\n let temp = new Date(f);\r\n temp.setHours(0, 0, 0, 0);\r\n return temp.getTime();\r\n });\r\n value = new Date(value).getTime();\r\n let max = Math.max(...filter);\r\n let min = Math.min(...filter);\r\n return max >= value && value >= min;\r\n };\r\n const filterSelect = (filter : ValueType[], value : ValueType) => {\r\n if (filter.length > 1) return filter.includes(value);\r\n else return filterText(\"=\" + filter[0], value);\r\n };\r\n const filterBool = (filter : boolean, value : ValueType) => filter == Boolean(value);\r\n\r\n switch (dataType) {\r\n case \"select\":\r\n return filterSelect(filter, value);\r\n case \"date\":\r\n return filterDate(filter, value);\r\n case \"bool\":\r\n return filterBool(filter, value);\r\n case \"text\":\r\n default:\r\n return filterText(filter, value);\r\n }\r\n};","import { defineComponent as _defineComponent } from 'vue'\nimport { computedWithControl, watchDebounced } from '@vueuse/core';\r\nimport { ref, computed, getCurrentInstance, watch } from 'vue'\r\nimport { VDataTable } from \"vuetify/lib/components/VDataTable\";\r\nimport { filterColumn } from \"@/utils/filters\";\r\n\r\n\nexport default /*#__PURE__*/_defineComponent({\n __name: 'AppTable',\n props: [\"headers\", \"items\"],\n setup(__props) {\n\nconst props = __props\n\r\n\r\n\r\n// const start = ref(0)\r\n// const itemsPerPage = 40\r\n// const end = ref( itemsPerPage )\r\n\r\n// const display = computed(() => props.items.slice(start.value, end.value))\r\n\r\nconst refs = getCurrentInstance()?.proxy.$refs\r\nconst slots = { ...getCurrentInstance()?.proxy.$scopedSlots, ...getCurrentInstance()?.proxy.$scopedSlots }\r\n\r\nconst inlineFilters = ref({});\r\n\r\nconst _items = computed(() => props.items);\r\nconst _headers = computed(() =>\r\n props.headers.map((h) => ({ dataType: \"text\", ...h }))\r\n);\r\n\r\nconst dataTypes = computed(() =>\r\n _headers.value.reduce((t, h) => {\r\n t[h.key] = h.dataType || \"text\";\r\n return t;\r\n }, {})\r\n);\r\n\r\nfunction getProp(obj: Object, key: string) {\r\n key = key.replace(/\\[(\\w+)\\]/g, '.$1'); // convert indexes to properties\r\n key = key.replace(/^\\./, ''); // strip a leading dot\r\n var a = key.split('.');\r\n for (var i = 0, n = a.length; i < n; ++i) {\r\n var k = a[i];\r\n if (k in obj) {\r\n obj = obj[k];\r\n } else {\r\n return;\r\n }\r\n }\r\n return obj;\r\n}\r\n\r\nconst filteredItems = computedWithControl(\r\n () => { },\r\n () => {\r\n return _items.value.filter((imp) =>\r\n Object.entries(inlineFilters.value).every(([key, val]) => {\r\n return filterColumn(getProp(imp, key), val, dataTypes.value[key]);\r\n })\r\n );\r\n }\r\n);\r\n\r\nwatchDebounced([inlineFilters, _items], filteredItems.trigger, {\r\n deep: true,\r\n debounce: 200,\r\n immediate: true,\r\n});\r\n\r\n\r\nfunction scrollToRow(index) {\r\n const table = refs.dataTable.$el.querySelector(\"table\");\r\n const row = table.rows[index];\r\n if (row) {\r\n row.scrollIntoView(true);\r\n }\r\n}\r\n\r\n// function loadMore(entries, observer, isIntersecting) {\r\n// if (isIntersecting) {\r\n// const indexesLeft = props.items.length - end.value;\r\n// if (indexesLeft < itemsPerPage) {\r\n// // start.value = end.value + indexesLeft - itemsPerPage;\r\n// end.value = props.items.length;\r\n// } else {\r\n// // start.value += itemsPerPage;\r\n// end.value += itemsPerPage;\r\n// }\r\n// // scrollToRow( 23 );\r\n// }\r\n// }\r\n\r\n// function loadLess(entries, observer, isIntersecting) {\r\n// if (isIntersecting) {\r\n// if (start.value < itemsPerPage) {\r\n// start.value = 0;\r\n// end.value = itemsPerPage;\r\n// } else {\r\n// // start.value -= itemsPerPage;\r\n// end.value -= itemsPerPage;\r\n// }\r\n// // scrollToRow( 5 );\r\n// }\r\n// }\r\n\r\n\nreturn { __sfc: true,props, refs, slots, inlineFilters, _items, _headers, dataTypes, getProp, filteredItems, scrollToRow, VDataTable }\n}\n\n})","import mod from \"-!../../node_modules/ts-loader/index.js??ref--15!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./AppTable.vue?vue&type=script&setup=true&lang=ts\"; export default mod; export * from \"-!../../node_modules/ts-loader/index.js??ref--15!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./AppTable.vue?vue&type=script&setup=true&lang=ts\"","import { render, staticRenderFns } from \"./AppTable.vue?vue&type=template&id=72460044\"\nimport script from \"./AppTable.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AppTable.vue?vue&type=script&setup=true&lang=ts\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/cli-service/node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports"],"sourceRoot":""}