{"version":3,"file":"alpine-datatable.js","sources":["../../../node_modules/kind-of/index.js","../../../node_modules/default-compare/index.js","../../../node_modules/get-value/index.js","../../../node_modules/array-sort/index.js","../../../fe-src/js/utils/arrays/filterArray.js","../../../fe-src/js/_alpine-library/_filters/data.js","../../../fe-src/js/_alpine-library/_filters/loadmore.js","../../../fe-src/js/_alpine-library/_filters/pagelist.js","../../../fe-src/js/_alpine-library/_filters/render.js","../../../fe-src/js/_alpine-library/_filters/filters.js","../../../fe-src/js/_alpine-library/_filters/pagination.js","../../../fe-src/js/_alpine-library/_filters/search.js","../../../fe-src/js/_alpine-library/datatable.js","../../../fe-src/js/alpine-components/alpine-datatable.js"],"sourcesContent":["var toString = Object.prototype.toString;\n\n/**\n * Get the native `typeof` a value.\n *\n * @param {*} `val`\n * @return {*} Native javascript type\n */\n\nmodule.exports = function kindOf(val) {\n var type = typeof val;\n\n // primitivies\n if (type === 'undefined') {\n return 'undefined';\n }\n if (val === null) {\n return 'null';\n }\n if (val === true || val === false || val instanceof Boolean) {\n return 'boolean';\n }\n if (type === 'string' || val instanceof String) {\n return 'string';\n }\n if (type === 'number' || val instanceof Number) {\n return 'number';\n }\n\n // functions\n if (type === 'function' || val instanceof Function) {\n if (typeof val.constructor.name !== 'undefined' && val.constructor.name.slice(0, 9) === 'Generator') {\n return 'generatorfunction';\n }\n return 'function';\n }\n\n // array\n if (typeof Array.isArray !== 'undefined' && Array.isArray(val)) {\n return 'array';\n }\n\n // check for instances of RegExp and Date before calling `toString`\n if (val instanceof RegExp) {\n return 'regexp';\n }\n if (val instanceof Date) {\n return 'date';\n }\n\n // other objects\n type = toString.call(val);\n\n if (type === '[object RegExp]') {\n return 'regexp';\n }\n if (type === '[object Date]') {\n return 'date';\n }\n if (type === '[object Arguments]') {\n return 'arguments';\n }\n if (type === '[object Error]') {\n return 'error';\n }\n if (type === '[object Promise]') {\n return 'promise';\n }\n\n // buffer\n if (isBuffer(val)) {\n return 'buffer';\n }\n\n // es6: Map, WeakMap, Set, WeakSet\n if (type === '[object Set]') {\n return 'set';\n }\n if (type === '[object WeakSet]') {\n return 'weakset';\n }\n if (type === '[object Map]') {\n return 'map';\n }\n if (type === '[object WeakMap]') {\n return 'weakmap';\n }\n if (type === '[object Symbol]') {\n return 'symbol';\n }\n \n if (type === '[object Map Iterator]') {\n return 'mapiterator';\n }\n if (type === '[object Set Iterator]') {\n return 'setiterator';\n }\n if (type === '[object String Iterator]') {\n return 'stringiterator';\n }\n if (type === '[object Array Iterator]') {\n return 'arrayiterator';\n }\n \n // typed arrays\n if (type === '[object Int8Array]') {\n return 'int8array';\n }\n if (type === '[object Uint8Array]') {\n return 'uint8array';\n }\n if (type === '[object Uint8ClampedArray]') {\n return 'uint8clampedarray';\n }\n if (type === '[object Int16Array]') {\n return 'int16array';\n }\n if (type === '[object Uint16Array]') {\n return 'uint16array';\n }\n if (type === '[object Int32Array]') {\n return 'int32array';\n }\n if (type === '[object Uint32Array]') {\n return 'uint32array';\n }\n if (type === '[object Float32Array]') {\n return 'float32array';\n }\n if (type === '[object Float64Array]') {\n return 'float64array';\n }\n\n // must be a plain object\n return 'object';\n};\n\n/**\n * If you need to support Safari 5-7 (8-10 yr-old browser),\n * take a look at https://github.com/feross/is-buffer\n */\n\nfunction isBuffer(val) {\n return val.constructor\n && typeof val.constructor.isBuffer === 'function'\n && val.constructor.isBuffer(val);\n}\n","'use strict';\n\nvar typeOf = require('kind-of');\n\n/**\n * Basic sort algorithm that has similar behavior to `Array.prototype.sort`\n * for null and undefined, but also allows sorting by an object property.\n *\n * @param {Mixed} `a` First value to compare.\n * @param {Mixed} `b` Second value to compare.\n * @param {String} `prop` Optional property to use when comparing objects. If specified must be a string.\n * @return {Number} Returns 1 when `a` should come after `b`, -1 when `a` should come before `b`, and 0 when `a` and `b` are equal.\n * @api public\n */\n\nmodule.exports = function defaultCompare(a, b, prop) {\n if (prop != null && typeOf(prop) !== 'string') {\n throw new TypeError('expected \"prop\" to be undefined or a string');\n }\n\n var typeA = typeOf(a);\n var typeB = typeOf(b);\n\n if (prop) {\n if (typeA === 'object') {\n a = a[prop];\n typeA = typeOf(a);\n }\n if (typeB === 'object') {\n b = b[prop];\n typeB = typeOf(b);\n }\n }\n\n if (typeA === 'null') {\n return typeB === 'null' ? 0 : (typeB === 'undefined' ? -1 : 1);\n } else if (typeA === 'undefined') {\n return typeB === 'null' ? 1 : (typeB === 'undefined' ? 0 : 1);\n } else if (typeB === 'null' || typeB === 'undefined') {\n return -1;\n } else {\n return a < b ? -1 : (a > b ? 1 : 0);\n }\n};\n","/*!\n * get-value \n *\n * Copyright (c) 2014-2015, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n\nmodule.exports = function(obj, prop, a, b, c) {\n if (!isObject(obj) || !prop) {\n return obj;\n }\n\n prop = toString(prop);\n\n // allowing for multiple properties to be passed as\n // a string or array, but much faster (3-4x) than doing\n // `[].slice.call(arguments)`\n if (a) prop += '.' + toString(a);\n if (b) prop += '.' + toString(b);\n if (c) prop += '.' + toString(c);\n\n if (prop in obj) {\n return obj[prop];\n }\n\n var segs = prop.split('.');\n var len = segs.length;\n var i = -1;\n\n while (obj && (++i < len)) {\n var key = segs[i];\n while (key[key.length - 1] === '\\\\') {\n key = key.slice(0, -1) + '.' + segs[++i];\n }\n obj = obj[key];\n }\n return obj;\n};\n\nfunction isObject(val) {\n return val !== null && (typeof val === 'object' || typeof val === 'function');\n}\n\nfunction toString(val) {\n if (!val) return '';\n if (Array.isArray(val)) {\n return val.join('.');\n }\n return val;\n}\n","/*!\n * array-sort \n *\n * Copyright (c) 2015-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nvar defaultCompare = require('default-compare');\nvar typeOf = require('kind-of');\nvar get = require('get-value');\n\n/**\n * Sort an array of objects by one or more properties.\n *\n * @param {Array} `arr` The Array to sort.\n * @param {String|Array|Function} `props` One or more object paths or comparison functions.\n * @param {Object} `opts` Pass `{ reverse: true }` to reverse the sort order.\n * @return {Array} Returns a sorted array.\n * @api public\n */\n\nfunction arraySort(arr, props, opts) {\n if (arr == null) {\n return [];\n }\n\n if (!Array.isArray(arr)) {\n throw new TypeError('array-sort expects an array.');\n }\n\n if (arguments.length === 1) {\n return arr.sort();\n }\n\n var args = flatten([].slice.call(arguments, 1));\n\n // if the last argument appears to be a plain object,\n // it's not a valid `compare` arg, so it must be options.\n if (typeOf(args[args.length - 1]) === 'object') {\n opts = args.pop();\n }\n return arr.sort(sortBy(args, opts));\n}\n\n/**\n * Iterate over each comparison property or function until `1` or `-1`\n * is returned.\n *\n * @param {String|Array|Function} `props` One or more object paths or comparison functions.\n * @param {Object} `opts` Pass `{ reverse: true }` to reverse the sort order.\n * @return {Array}\n */\n\nfunction sortBy(props, opts) {\n opts = opts || {};\n\n return function compareFn(a, b) {\n var len = props.length, i = -1;\n var result;\n\n while (++i < len) {\n result = compare(props[i], a, b);\n if (result !== 0) {\n break;\n }\n }\n if (opts.reverse === true) {\n return result * -1;\n }\n return result;\n };\n}\n\n/**\n * Compare `a` to `b`. If an object `prop` is passed, then\n * `a[prop]` is compared to `b[prop]`\n */\n\nfunction compare(prop, a, b) {\n if (typeof prop === 'function') {\n // expose `compare` to custom function\n return prop(a, b, compare.bind(null, null));\n }\n // compare object values\n if (prop && typeof a === 'object' && typeof b === 'object') {\n return compare(null, get(a, prop), get(b, prop));\n }\n return defaultCompare(a, b);\n}\n\n/**\n * Flatten the given array.\n */\n\nfunction flatten(arr) {\n return [].concat.apply([], arr);\n}\n\n/**\n * Expose `arraySort`\n */\n\nmodule.exports = arraySort;\n","import arraySort from \"array-sort\";\r\n// import { str2bool } from '@/utils/stringToBoolean.js';\r\n\r\n/**\r\n * Returns filtered array which matches the value property of objects passed\r\n *\r\n * @param {array} arr Array of objects to be filterd\r\n * @param {array} key which node/key to filter\r\n * @param {array} filterItems Array of objects to filter against\r\n * @returns {array} filtered Array\r\n */\r\n\r\nconst multiCategoryFilter = (arr, key, filterItems) => {\r\n // console.log('array to Filter:', arr);\r\n // console.log('filterItems: ', filterItems);\r\n function checkCategory(itemCategory, filterCategory) {\r\n // console.log('itemCategory: ', itemCategory);\r\n // console.log('filterCategory: ', filterCategory);\r\n // if (itemCategory.toLowerCase() === filterCategory.value.toLowerCase()) {\r\n // console.log('Match');\r\n // }\r\n\r\n if (itemCategory.value.toString() === undefined) {\r\n throw new Error(`${key}.value must be an Present`);\r\n }\r\n\r\n return itemCategory.value.toString().toLowerCase() === filterCategory.value.toString().toLowerCase();\r\n }\r\n\r\n const filtered = arr.filter((item) => {\r\n if (!item[key]) {\r\n throw new Error(`item.${key} must be an Present`);\r\n }\r\n\r\n if (!Array.isArray(item[key])) {\r\n throw new Error(`item.${key} must be an Array`);\r\n }\r\n return item[key].some((category) => filterItems.some((options) => checkCategory(category, options)));\r\n });\r\n\r\n return filtered;\r\n};\r\n\r\n/**\r\n *\r\n * @param {*} arr\r\n * @param {*} itemToRemove // pass the value property of the object to be removed\r\n * @returns // new filtered array\r\n */\r\n\r\nconst removeItemFormArray = (arr, itemToRemove) => {\r\n const filtered = arr.filter(\r\n (item) =>\r\n // console.log(`Removing ${item.value} from ${arr}`);\r\n item.value.toLowerCase() !== itemToRemove.value.toLowerCase()\r\n );\r\n\r\n // console.log('Filtered: ', filtered);\r\n return filtered;\r\n};\r\n\r\nconst cloneArray = (arr) => JSON.parse(JSON.stringify(arr));\r\n\r\nconst sortArray = (array, options) => {\r\n let reverse = false;\r\n\r\n if (options.order === \"desc\") {\r\n reverse = true;\r\n }\r\n // console.log(options);\r\n return arraySort(array, options.key, {\r\n reverse: reverse\r\n });\r\n};\r\n\r\n/**\r\n *\r\n * @param {*} arr - array of items\r\n * @param {*} nodes - array of nodes to check for query\r\n * @param {*} query - query string\r\n * @returns\r\n */\r\nconst searchArray = (arr, nodes, query) => {\r\n const searchQuery = query.toLowerCase();\r\n // console.log(searchQuery);\r\n\r\n /**\r\n *\r\n */\r\n const searchedArray = arr.filter((eachObj) => {\r\n // console.log(\"eachObj\", eachObj);\r\n\r\n const newArray = nodes.some((eachKey) => {\r\n const objValue = eachObj[eachKey];\r\n // console.log(\"objValue\", objValue);\r\n if (objValue === null || objValue === Boolean || objValue === undefined) {\r\n return false;\r\n }\r\n if (objValue.toString().toLowerCase().includes(searchQuery)) {\r\n return true;\r\n }\r\n return false;\r\n });\r\n\r\n return newArray;\r\n });\r\n\r\n // console.log('searchedArray', searchedArray);\r\n\r\n return searchedArray;\r\n};\r\n// ref : https://codeburst.io/javascript-array-distinct-5edc93501dc4\r\nconst uniqueItems = (array, key) => {\r\n const unique = Array.from(new Set(array.map((item) => item[key]))).map((value) =>\r\n // console.log(value);\r\n ({\r\n text: array.find((item) => item.value === value).text,\r\n value: value\r\n })\r\n );\r\n // console.log('unique', unique);\r\n return unique;\r\n};\r\n\r\n/**\r\n *\r\n */\r\n\r\nconst getNodesItems = (arr, node) => {\r\n const allItems = [];\r\n\r\n // console.log('arr', arr);\r\n cloneArray(arr).forEach((item) => {\r\n if (item[node]) {\r\n item[node].forEach((nodeItem) => {\r\n allItems.push(nodeItem);\r\n });\r\n }\r\n });\r\n\r\n // console.log('allItems', allItems);\r\n\r\n let uniqueCategoryValues = uniqueItems(allItems, \"value\");\r\n // console.log('uniqueCategoryValues', uniqueCategoryValues);\r\n uniqueCategoryValues = arraySort(uniqueCategoryValues);\r\n // console.log('uniqueCategoryValues', uniqueCategoryValues);\r\n\r\n const availableUniqueNodes = [];\r\n /** Moving All to front */\r\n if (uniqueCategoryValues.length) {\r\n const itemToFind = \"All\";\r\n\r\n const foundIdx = uniqueCategoryValues.findIndex(\r\n (el) =>\r\n // console.log(el.value.toLowerCase());\r\n // console.log(itemToFind.toLocaleLowerCase());\r\n el.value.toLowerCase() === itemToFind.toLocaleLowerCase()\r\n );\r\n // console.log('foundIdx', foundIdx);\r\n uniqueCategoryValues.splice(foundIdx, 1, uniqueCategoryValues[foundIdx]);\r\n\r\n // console.log('uniqueCategoryValues', uniqueCategoryValues);\r\n\r\n uniqueCategoryValues.forEach((item) => {\r\n const count = allItems.filter((filterItem) => {\r\n if (filterItem.value === item.value) {\r\n return true;\r\n }\r\n return false;\r\n });\r\n\r\n // console.log(count);\r\n // console.log(item);\r\n availableUniqueNodes.push({\r\n text: item.text,\r\n value: item.value,\r\n count: count.length\r\n });\r\n });\r\n }\r\n\r\n // console.log(availableUniqueNodes);\r\n return availableUniqueNodes;\r\n};\r\n\r\nexport { multiCategoryFilter, removeItemFormArray, cloneArray, searchArray, getNodesItems, sortArray };\r\n","/**\r\n * Data\r\n */\r\nimport axios from \"axios\";\r\nimport { cloneArray, getNodesItems, multiCategoryFilter, searchArray, sortArray } from \"../../utils/arrays/filterArray.js\";\r\n\r\n// const axios = require('axios');\r\n\r\nconst fetchRemoteData = async function (url) {\r\n let data = null;\r\n console.log(`Fetching Remote Data from ${url}`);\r\n await axios\r\n .get(url)\r\n .then((response) => {\r\n // handle success\r\n data = response.data;\r\n })\r\n .catch((error) => {\r\n // handle error\r\n console.error(`Something went wrong while fetching data from ${url}`);\r\n });\r\n\r\n return data;\r\n};\r\n\r\nconst fetchLocalData = async function (options) {\r\n const myPromise = new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n resolve(options.data);\r\n }, 300);\r\n });\r\n\r\n return myPromise;\r\n};\r\n\r\nconst convertFilters = (data) => {\r\n if (Array.isArray(data.filters)) {\r\n console.log(\"/*** Converting Passed filters Array into Object ***/\");\r\n\r\n const filterObj = {};\r\n\r\n data.filters.map((item, index) => {\r\n filterObj[item.name] = item;\r\n return false;\r\n });\r\n\r\n // eslint-disable-next-line no-param-reassign\r\n data.filters = filterObj;\r\n }\r\n};\r\n\r\nconst fetchData = async function (options) {\r\n /**\r\n * Update Options & arrays passed\r\n */\r\n const promise = new Promise((resolve, reject) => {\r\n /**\r\n * Setup Data\r\n */\r\n\r\n if (options.remoteURL) {\r\n fetchRemoteData(options.remoteURL).then((data) => {\r\n convertFilters(data);\r\n resolve(data);\r\n });\r\n } else if (options.data) {\r\n console.log(`/*** Fetching Data from Local HTML ***/`);\r\n fetchLocalData(options).then((data) => {\r\n convertFilters(data);\r\n resolve(data);\r\n });\r\n } else {\r\n throw new Error(\"Data source must be defined in options\");\r\n }\r\n });\r\n\r\n return promise;\r\n};\r\n\r\nconst getAvailableFilters = function (fullData) {\r\n const promise = new Promise((resolve, reject) => {\r\n /**\r\n * Setting up passed Filter\r\n */\r\n const avaliableFilters = {};\r\n // console.log(fullData);\r\n\r\n if (fullData.filters) {\r\n /**\r\n * create arrays of filters\r\n */\r\n Object.keys(fullData.filters).forEach((filterItem) => {\r\n console.log(`/*** Creating activeFilters for ${filterItem} ***/`);\r\n // eslint-disable-next-line no-param-reassign\r\n avaliableFilters[filterItem] = fullData.filters[filterItem];\r\n });\r\n resolve(avaliableFilters);\r\n } else {\r\n reject();\r\n console.warn(\"Filters has not been passed in data !\");\r\n }\r\n });\r\n\r\n return promise;\r\n};\r\n\r\n// const updateAvaliableCategoriesBasedOnSearch = () => {\r\n// const items = cloneArray(getNodesItems(searched.items, 'categories'));\r\n// // console.log(items);\r\n// return items;\r\n// };\r\n\r\nconst getSelectedFilters = (fullData) => {\r\n console.log(\"/*** Updating Selected Filters ***/\");\r\n const promise = new Promise((resolve, reject) => {\r\n /**\r\n * Setting up passed Filter\r\n */\r\n const selectedFilters = {};\r\n if (fullData.filters) {\r\n /**\r\n * create arrays of filters\r\n */\r\n\r\n Object.keys(fullData.filters).forEach((filterItem) => {\r\n // eslint-disable-next-line no-param-reassign\r\n if (fullData.filters[filterItem].type === \"singleSelect\") {\r\n selectedFilters[filterItem] = \"All\";\r\n /** Handling Selected State */\r\n if (fullData.filters[filterItem].selected) {\r\n // console.log(fullData.filters[filterItem].selected);\r\n selectedFilters[filterItem] = fullData.filters[filterItem].selected;\r\n }\r\n }\r\n if (fullData.filters[filterItem].type === \"multiSelect\") {\r\n selectedFilters[filterItem] = [\"All\"];\r\n /** Handling Selected State */\r\n if (fullData.filters[filterItem].selected) {\r\n selectedFilters[filterItem] = fullData.filters[filterItem].selected.map((catItem) => catItem);\r\n }\r\n }\r\n });\r\n\r\n resolve(selectedFilters);\r\n } else {\r\n reject();\r\n throw new Error(\"Filters has not been passed in data !\");\r\n }\r\n });\r\n\r\n return promise;\r\n};\r\n\r\nconst getFilteredList = (array, selectedFilters) => {\r\n // // filtered.avaliableFiltered.categories =\r\n // // updateAvaliableCategoriesBasedOnSearch();\r\n\r\n // console.log('array', array);\r\n // console.log('selectedFilters', selectedFilters);\r\n let list = [];\r\n\r\n // console.log('array', array);\r\n\r\n Object.keys(selectedFilters).forEach((filterItem) => {\r\n console.log(`/*** Updating Filterd List ***/ for ${filterItem}`);\r\n // console.log('filterItem:', filterItem);\r\n /**\r\n * check if the value of filter node is string\r\n */\r\n if (typeof selectedFilters[filterItem] === \"string\" || selectedFilters instanceof String) {\r\n // console.log('filterItem', filterItem);\r\n // console.log('selectedFilters[filterItem]', selectedFilters[filterItem]);\r\n\r\n list = multiCategoryFilter(\r\n array, // array\r\n filterItem, // // eg. categories\r\n [\r\n {\r\n value: selectedFilters[filterItem] // String\r\n }\r\n ]\r\n );\r\n // console.log('list', list);\r\n }\r\n /**\r\n * check if the value of filter node is Array\r\n */\r\n if (Array.isArray(selectedFilters[filterItem])) {\r\n // console.log(`selectedFilters[${filterItem}] is an Array`);\r\n\r\n const activeFilters = selectedFilters[filterItem].map((item) => ({\r\n value: item\r\n }));\r\n\r\n list = multiCategoryFilter(\r\n array, // array\r\n filterItem, // eg. categories\r\n activeFilters\r\n );\r\n }\r\n });\r\n\r\n // console.log('selectedFilters', selectedFilters);\r\n // console.log('list', list);\r\n return list;\r\n};\r\n\r\nconst getAvaliableFiltersFromItems = (searchedItems, avaliableFilters) => {\r\n console.log(\"/*** Updating Avaliable Filters List ***/\");\r\n\r\n // console.log(avaliableFilters);\r\n\r\n const filters = { ...avaliableFilters };\r\n // console.log('filters', filters);\r\n if (searchedItems) {\r\n Object.keys(avaliableFilters).forEach((filterItem) => {\r\n // console.log('avaliableFilters[filterItem]', avaliableFilters[filterItem]);\r\n // if (avaliableFilters[filterItem].priority === 'mainFilter') {\r\n\r\n let items = cloneArray(getNodesItems(searchedItems, filterItem));\r\n items = sortArray(items, {\r\n key: \"text\",\r\n order: avaliableFilters[filterItem].order || \"asc\"\r\n });\r\n // moving all to the front\r\n for (let i = 0; i < items.length; i += 1) {\r\n if (items[i].text) {\r\n if (items[i].text.toLowerCase() === \"all\") {\r\n const all = items.splice(i, 1);\r\n items.unshift(all[0]); // push to front\r\n }\r\n }\r\n }\r\n\r\n filters[filterItem].items = items;\r\n // }\r\n });\r\n }\r\n\r\n return filters;\r\n};\r\n\r\nconst getAvaliableFiltersFormSearch = (searchedItems, avaliableFilters) => {\r\n console.log(\"/*** Updating Avaliable Filters List ***/\");\r\n\r\n // console.log(avaliableFilters);\r\n const filters = { ...avaliableFilters };\r\n // console.log('filters', filters);\r\n if (searchedItems) {\r\n Object.keys(avaliableFilters).forEach((filterItem) => {\r\n console.log(\"avaliableFilters[filterItem]\", avaliableFilters[filterItem]);\r\n // avaliableFilters[filterItem].order = undefined;\r\n console.log(avaliableFilters[filterItem].order);\r\n if (avaliableFilters[filterItem].priority === \"mainFilter\") {\r\n let items = cloneArray(getNodesItems(searchedItems, filterItem));\r\n items = sortArray(items, {\r\n key: \"text\",\r\n order: avaliableFilters[filterItem].order || \"asc\"\r\n });\r\n\r\n // moving all to the front\r\n for (let i = 0; i < items.length; i += 1) {\r\n if (items[i].text) {\r\n if (items[i].text.toLowerCase() === \"all\") {\r\n const all = items.splice(i, 1);\r\n items.unshift(all[0]); // push to front\r\n }\r\n }\r\n }\r\n filters[filterItem].items = items;\r\n }\r\n });\r\n }\r\n\r\n return filters;\r\n};\r\n\r\nconst resetAllFilters = (selectedFilters) => {\r\n // console.log('selectedFilters', selectedFilters);\r\n const filters = { ...selectedFilters };\r\n\r\n Object.keys(selectedFilters).forEach((filterItem) => {\r\n if (typeof selectedFilters[filterItem] === \"string\" || selectedFilters instanceof String) {\r\n filters[filterItem] = \"All\";\r\n }\r\n\r\n /**\r\n * check if the value of filter node is Array\r\n */\r\n if (Array.isArray(selectedFilters[filterItem])) {\r\n filters[filterItem] = [\"All\"];\r\n }\r\n });\r\n\r\n return filters;\r\n};\r\n\r\nconst resetSingleFilter = (selectedFilters) => {\r\n // console.log('selectedFilters', selectedFilters);\r\n const filters = { ...selectedFilters };\r\n\r\n Object.keys(selectedFilters).forEach((filterItem) => {\r\n if (typeof selectedFilters[filterItem] === \"string\" || selectedFilters instanceof String) {\r\n filters[filterItem] = \"All\";\r\n }\r\n\r\n /**\r\n * check if the value of filter node is Array\r\n */\r\n if (Array.isArray(selectedFilters[filterItem])) {\r\n filters[filterItem] = [\"All\"];\r\n }\r\n });\r\n\r\n // console.log('Reset Filter', filters);\r\n\r\n return filters;\r\n};\r\n\r\nconst getSearchedList = (fullData, search) => {\r\n // console.log(search);\r\n console.log(\"/*** Getting Searched List ***/\");\r\n let results = [];\r\n results = searchArray(fullData.allItems, search.searchNodes, search.query);\r\n\r\n // console.log(results);\r\n return results;\r\n};\r\n\r\nexport {\r\n fetchData,\r\n getSelectedFilters,\r\n getFilteredList,\r\n getAvaliableFiltersFromItems,\r\n resetAllFilters,\r\n resetSingleFilter,\r\n getSearchedList,\r\n getAvailableFilters,\r\n getAvaliableFiltersFormSearch\r\n};\r\n","/* eslint-disable no-param-reassign */\r\nimport { cloneArray } from \"../../utils/arrays/filterArray.js\";\r\n\r\nconst getItems = function (currentItems, totalItems, pageSize, currentPage, retrunFullSet) {\r\n console.log(\"/*** Updating Paginated List ***/\");\r\n // console.log('currentPage', pageSize);\r\n let items = [];\r\n // console.log('pageSize', pageSize);\r\n const offset = (currentPage - 1) * pageSize;\r\n // console.log('offset', offset);\r\n\r\n const cloneOfFilteredList = cloneArray(totalItems);\r\n // console.log('cloneOfFilteredList', cloneOfFilteredList);\r\n let additionalItems = [];\r\n if (retrunFullSet === true) {\r\n additionalItems = cloneOfFilteredList.slice(0, offset + pageSize);\r\n }\r\n\r\n if (retrunFullSet === false) {\r\n additionalItems = cloneOfFilteredList.slice(offset, offset + pageSize);\r\n }\r\n\r\n // console.log('additional Items', additionalItems);\r\n /**\r\n * Transition Hack\r\n */\r\n\r\n additionalItems.forEach((item) => {\r\n const tempItem = item;\r\n tempItem.show = false;\r\n });\r\n\r\n items = [...currentItems, ...additionalItems];\r\n if (cloneOfFilteredList.length <= pageSize) {\r\n items = cloneOfFilteredList;\r\n }\r\n\r\n // console.log('items', items);\r\n return items;\r\n};\r\n\r\n// currentItems,totalItems,pageSize,currentPage\r\nconst loadMoreItems = function (vm, currentItems, totalItems, pageSize, currentPageId) {\r\n vm.pagination.loadmore.show = false;\r\n vm.pagination.loadmore.isLoading = true;\r\n\r\n if (vm.appIsReady === false) {\r\n vm.pagination.items = getItems(currentItems, totalItems, pageSize, currentPageId, true); // currentItems,totalItems,pageSize,currentPagem retrunFullSet\r\n }\r\n if (vm.appIsReady === true) {\r\n vm.pagination.items = getItems(currentItems, totalItems, pageSize, currentPageId, false); // currentItems,totalItems,pageSize,currentPage, retrunFullSet\r\n }\r\n /**\r\n * Transition Hack\r\n */\r\n vm.$nextTick(() => {\r\n vm.pagination.items.forEach((item) => {\r\n const tempItem = item;\r\n tempItem.show = true;\r\n });\r\n if (vm.filtered.items.length > vm.pagination.items.length) {\r\n vm.pagination.loadmore.show = true;\r\n }\r\n });\r\n\r\n vm.pagination.loadmore.isLoading = false;\r\n};\r\n\r\nconst handleLoadMore = function (vm) {\r\n vm.pagination.currentPage = 1 + vm.pagination.currentPage;\r\n loadMoreItems(vm, vm.pagination.items, vm.filtered.items, vm.pagination.pageSize, vm.pagination.currentPage);\r\n console.log(\"vm.pagination\", vm.pagination);\r\n if (vm.onPageChange) {\r\n vm.onPageChange(vm);\r\n }\r\n};\r\n\r\nconst renderLoadMore = (vm) => {\r\n console.log(\"/*** Rendering More ***/\");\r\n\r\n loadMoreItems(vm, vm.pagination.items, vm.filtered.items, vm.pagination.pageSize, vm.pagination.currentPage);\r\n};\r\n\r\nconst handleChangeOnBreakPoint = (breakpoints, vm, originalPageSize) => {\r\n const updatePageSize = () => {\r\n const currentWidth = window.innerWidth;\r\n console.log(\"currentWidth\", currentWidth);\r\n\r\n /** reset to orginal */\r\n vm.pagination.pageSize = originalPageSize;\r\n\r\n Object.keys(breakpoints).forEach((breakpoint) => {\r\n console.log(\"/*** Calculating Pagesize ***/\");\r\n if (currentWidth >= breakpoint) {\r\n vm.pagination.pageSize = breakpoints[breakpoint].pageSize;\r\n console.log(\"current PageSize\", vm.pagination);\r\n }\r\n });\r\n };\r\n\r\n updatePageSize();\r\n window.addEventListener(\r\n \"resize\",\r\n window.Alpine.debounce(() => {\r\n updatePageSize();\r\n }, 300)\r\n );\r\n};\r\n\r\nconst setupResponsive = (vm) => {\r\n if (vm.pagination.responsive) {\r\n if (vm.pagination.responsive.breakpoints) {\r\n console.log(\"/*** Setting up breakpoints -- loadmore ***/\");\r\n\r\n handleChangeOnBreakPoint(vm.pagination.responsive.breakpoints, vm, vm.pagination.pageSize);\r\n }\r\n }\r\n};\r\n\r\nconst setupLoadMore = (vm) => {\r\n console.log(\"/** Setting up loadmore **/\");\r\n vm.pagination.loadmore = {\r\n show: false,\r\n isLoading: false\r\n };\r\n setupResponsive(vm);\r\n\r\n vm.pagination.handleLoadMore = () => handleLoadMore(vm);\r\n};\r\n\r\nexport { setupLoadMore, renderLoadMore };\r\n","/* eslint-disable no-param-reassign */\r\nimport { cloneArray } from \"../../utils/arrays/filterArray.js\";\r\n\r\nconst getItemsforPage = function (array, pageSize, currentPage) {\r\n console.log(\"/*** Updating Paginated List ***/\");\r\n\r\n let items = [];\r\n // console.log('pageSize', pageSize);\r\n const offset = (currentPage - 1) * pageSize;\r\n // console.log('offset', offset);\r\n\r\n const cloneOfFilteredList = cloneArray(array);\r\n // console.log('cloneOfFilteredList', cloneOfFilteredList);\r\n const additionalItems = cloneOfFilteredList.slice(offset, offset + pageSize);\r\n\r\n /**\r\n * Transition Hack\r\n */\r\n\r\n additionalItems.forEach((item) => {\r\n const tempItem = item;\r\n tempItem.show = false;\r\n });\r\n\r\n items = [...additionalItems];\r\n\r\n // console.log('items', items);\r\n return items;\r\n};\r\n\r\nconst range = (from, to, step = 1) => {\r\n let i = from;\r\n const newRange = [];\r\n\r\n while (i <= to) {\r\n newRange.push(i);\r\n i += step;\r\n }\r\n\r\n return newRange;\r\n};\r\n\r\n// ref : https://www.digitalocean.com/community/tutorials/how-to-build-custom-pagination-with-react\r\nconst getPageListItems = (totalPages, currentPage, pageNeighbours) => {\r\n const LEFT_PAGE = \"LEFT\";\r\n const RIGHT_PAGE = \"RIGHT\";\r\n /**\r\n * totalNumbers: the total page numbers to show on the control\r\n * totalBlocks: totalNumbers + 2 to cover for the left(<) and right(>) controls\r\n */\r\n // console.log('totalPages', totalPages);\r\n // console.log('pageNeighbours', pageNeighbours);\r\n const totalNumbers = pageNeighbours * 2 + 3;\r\n // console.log('totalNumbers', totalNumbers);\r\n const totalBlocks = totalNumbers + 2;\r\n // console.log('totalBlocks', totalBlocks);\r\n // console.log('currentPage', currentPage);\r\n\r\n if (totalPages > totalBlocks) {\r\n const startPage = Math.max(2, currentPage - pageNeighbours);\r\n const endPage = Math.min(totalPages - 1, currentPage + pageNeighbours);\r\n\r\n let pages = range(startPage, endPage);\r\n\r\n /**\r\n * hasLeftSpill: has hidden pages to the left\r\n * hasRightSpill: has hidden pages to the right\r\n * spillOffset: number of hidden pages either to the left or to the right\r\n */\r\n const hasLeftSpill = startPage > 2;\r\n const hasRightSpill = totalPages - endPage > 1;\r\n const spillOffset = totalNumbers - (pages.length + 1);\r\n\r\n switch (true) {\r\n // handle: (1) < {5 6} [7] {8 9} (13)\r\n case hasLeftSpill && !hasRightSpill: {\r\n const extraPages = range(startPage - spillOffset, startPage - 1);\r\n pages = [LEFT_PAGE, ...extraPages, ...pages];\r\n break;\r\n }\r\n\r\n // handle: (1) {2 3} [4] {5 6} > (10)\r\n case !hasLeftSpill && hasRightSpill: {\r\n const extraPages = range(endPage + 1, endPage + spillOffset);\r\n pages = [...pages, ...extraPages, RIGHT_PAGE];\r\n break;\r\n }\r\n\r\n // handle: (1) < {4 5} [6] {7 8} > (10)\r\n case hasLeftSpill && hasRightSpill:\r\n default: {\r\n pages = [LEFT_PAGE, ...pages, RIGHT_PAGE];\r\n break;\r\n }\r\n }\r\n\r\n return [1, ...pages, totalPages];\r\n }\r\n\r\n return range(1, totalPages);\r\n};\r\n\r\nconst handleClickOnPage = (e, vm) => {\r\n if (e === vm.pagination.currentPage) {\r\n return false;\r\n }\r\n vm.pagination.currentPage = e;\r\n vm.pagination.items = getItemsforPage(vm.filtered.items, vm.pagination.pageSize, vm.pagination.currentPage); // totalItems, pageSize, currentPage;\r\n\r\n vm.pagination.pagelist.items = getPageListItems(\r\n Math.ceil(vm.filtered.items.length / vm.pagination.pageSize),\r\n vm.pagination.currentPage,\r\n vm.pagination.pagelist.pageNeighbours\r\n ); // totalPages, currentPage, pageNeighbours\r\n console.log(\"pagelist\", vm.pagination.pagelist.items);\r\n\r\n /**\r\n * Transition Hack\r\n */\r\n vm.$nextTick(() => {\r\n vm.pagination.items.forEach((item) => {\r\n const tempItem = item;\r\n tempItem.show = true;\r\n });\r\n if (vm.onPageChange) {\r\n vm.onPageChange(vm);\r\n }\r\n });\r\n return false;\r\n};\r\n\r\nconst handleMoveRight = (e, vm) => {\r\n vm.pagination.currentPage += 1;\r\n vm.pagination.items = getItemsforPage(vm.filtered.items, vm.pagination.pageSize, vm.pagination.currentPage); // totalItems, pageSize, currentPage;\r\n\r\n vm.pagination.pagelist.items = getPageListItems(Math.ceil(vm.filtered.items.length / vm.pagination.pageSize), vm.pagination.currentPage, 0); // totalPages, currentPage, pageNeighbours\r\n console.log(\"pagelist\", vm.pagination.pagelist.items);\r\n /**\r\n * Transition Hack\r\n */\r\n vm.$nextTick(() => {\r\n vm.pagination.items.forEach((item) => {\r\n const tempItem = item;\r\n tempItem.show = true;\r\n });\r\n if (vm.onPageChange) {\r\n vm.onPageChange(vm);\r\n }\r\n });\r\n};\r\n\r\nconst handleMoveLeft = (e, vm) => {\r\n vm.pagination.currentPage -= 1;\r\n vm.pagination.items = getItemsforPage(vm.filtered.items, vm.pagination.pageSize, vm.pagination.currentPage); // totalItems, pageSize, currentPage;\r\n\r\n vm.pagination.pagelist.items = getPageListItems(\r\n Math.ceil(vm.filtered.items.length / vm.pagination.pageSize),\r\n vm.pagination.currentPage,\r\n vm.pagination.pagelist.pageNeighbours\r\n ); // totalPages, currentPage, pageNeighbours\r\n console.log(\"pagelist\", vm.pagination.pagelist.items);\r\n /**\r\n * Transition Hack\r\n */\r\n vm.$nextTick(() => {\r\n vm.pagination.items.forEach((item) => {\r\n const tempItem = item;\r\n tempItem.show = true;\r\n });\r\n if (vm.onPageChange) {\r\n vm.onPageChange(vm);\r\n }\r\n });\r\n};\r\n\r\nconst renderPageList = (vm) => {\r\n vm.pagination.pagelist.items = getPageListItems(\r\n Math.ceil(vm.filtered.items.length / vm.pagination.pageSize),\r\n vm.pagination.currentPage,\r\n vm.pagination.pagelist.pageNeighbours\r\n ); // totalPages, currentPage, pageNeighbours\r\n\r\n vm.pagination.items = getItemsforPage(vm.filtered.items, vm.pagination.pageSize, vm.pagination.currentPage); // totalItems, pageSize, currentPage;\r\n};\r\n\r\nconst setupPageList = (vm) => {\r\n console.log(\"/*** Setting up PageList ***/\");\r\n vm.pagination.pagelist.show = false;\r\n vm.pagination.pagelist.items = [];\r\n\r\n // console.log('filteredItems', vm.filtered.items);\r\n\r\n vm.pagination.pagelist.show = true;\r\n\r\n vm.pagination.handleClickOnPage = (e) => {\r\n handleClickOnPage(e, vm);\r\n };\r\n\r\n vm.pagination.handleMoveRight = (e) => {\r\n handleMoveRight(e, vm);\r\n };\r\n vm.pagination.handleMoveLeft = (e) => {\r\n handleMoveLeft(e, vm);\r\n };\r\n};\r\n\r\nexport { setupPageList, renderPageList };\r\n","/* eslint-disable no-param-reassign */\r\nimport { getAvaliableFiltersFromItems, getFilteredList, getSearchedList } from \"./data.js\";\r\nimport { renderLoadMore } from \"./loadmore.js\";\r\nimport { renderPageList } from \"./pagelist.js\";\r\n\r\nconst resetPagination = (vm) => {\r\n vm.pagination.items = new Array(0);\r\n vm.pagination.currentPage = 1;\r\n};\r\n\r\nconst splitCategoryFilters = (vm) => {\r\n const mainCategoryFilters = {};\r\n const subCategoryFilters = {};\r\n Object.keys(vm.filtered.avaliableFilters).forEach((cat) => {\r\n if (vm.filtered.avaliableFilters[cat].priority === \"mainFilter\") {\r\n mainCategoryFilters[cat] = vm.filtered.avaliableFilters[cat];\r\n }\r\n\r\n if (vm.filtered.avaliableFilters[cat].priority !== \"mainFilter\") {\r\n subCategoryFilters[cat] = vm.filtered.avaliableFilters[cat];\r\n }\r\n });\r\n\r\n return { mainCategoryFilters, subCategoryFilters };\r\n};\r\n\r\n/**\r\n *\r\n * @param {*} vm - view modal\r\n * @param {*} categoryFilter - filter object to compute available filters for\r\n * @param {*} fromItems - item to compute available filters form\r\n * @returns\r\n */\r\n\r\nconst updateAvailableFilters = (vm, categoryFilter, fromItems) => {\r\n const availableList = getAvaliableFiltersFromItems(fromItems, categoryFilter);\r\n // console.log('availableList', availableList);\r\n\r\n Object.keys(categoryFilter).forEach((categoryItem) => {\r\n // console.log('categoryItem', categoryItem);\r\n vm.filtered.avaliableFilters[categoryItem] = new Array(0);\r\n vm.filtered.avaliableFilters[categoryItem] = availableList[categoryItem];\r\n });\r\n};\r\n\r\nconst computeFilteredList = (vm, array) => {\r\n // update filtered list based on searched List\r\n let tempList = array;\r\n\r\n Object.keys(vm.filtered.selectedFilters).forEach((item) => {\r\n const tempFilter = {};\r\n tempFilter[item] = vm.filtered.selectedFilters[item];\r\n tempList = getFilteredList(tempList, tempFilter);\r\n });\r\n\r\n return tempList;\r\n};\r\n\r\nconst renderItems = (vm, reRenderSubcatgories) => {\r\n if (vm.appIsReady === true) {\r\n resetPagination(vm);\r\n }\r\n\r\n vm.search.items = getSearchedList(vm.fullData, vm.search);\r\n // console.log(' vm.search.items', vm.search.items);\r\n\r\n // slit main & subcategory filter\r\n const { mainCategoryFilters, subCategoryFilters } = splitCategoryFilters(vm);\r\n\r\n updateAvailableFilters(vm, mainCategoryFilters, vm.search.items);\r\n\r\n vm.filtered.items = computeFilteredList(vm, vm.search.items);\r\n\r\n // Don't compute available filters for sub-categories\r\n if (reRenderSubcatgories !== false) {\r\n updateAvailableFilters(vm, subCategoryFilters, vm.filtered.items);\r\n }\r\n\r\n if (vm.pagination.type === \"loadmore\") {\r\n renderLoadMore(vm);\r\n }\r\n\r\n if (vm.pagination.type === \"pagelist\") {\r\n renderPageList(vm);\r\n }\r\n /**\r\n * Transition Hack\r\n */\r\n vm.$nextTick(() => {\r\n vm.pagination.items.forEach((item) => {\r\n const tempItem = item;\r\n tempItem.show = true;\r\n });\r\n });\r\n};\r\n\r\nexport { renderItems };\r\n","/* eslint-disable no-param-reassign */\r\n\r\nimport { resetSingleFilter } from \"./data.js\";\r\nimport { renderItems } from \"./render.js\";\r\n\r\nconst resetSubCategories = (vm) => {\r\n const subCategoryFilters = {};\r\n\r\n const getCategoryFilters = () => {\r\n Object.keys(vm.filtered.avaliableFilters).forEach((cat) => {\r\n // console.log('cat', cat);\r\n if (vm.filtered.avaliableFilters[cat].priority !== \"mainFilter\") {\r\n subCategoryFilters[cat] = vm.filtered.selectedFilters[cat];\r\n }\r\n });\r\n };\r\n getCategoryFilters();\r\n\r\n const updatedSubFilters = resetSingleFilter(subCategoryFilters);\r\n\r\n Object.keys(updatedSubFilters).forEach((cat) => {\r\n vm.filtered.selectedFilters[cat] = updatedSubFilters[cat];\r\n });\r\n};\r\n\r\nconst handleChangeOnSingle = (e, filter, vm) => {\r\n if (filter.priority === \"mainFilter\") {\r\n resetSubCategories(vm);\r\n renderItems(vm);\r\n if (vm.onFilterUpdate) {\r\n vm.onFilterUpdate(vm);\r\n }\r\n }\r\n\r\n if (filter.priority !== \"mainFilter\") {\r\n renderItems(vm, false); // when false is passed\r\n if (vm.onFilterUpdate) {\r\n vm.onFilterUpdate(vm);\r\n }\r\n }\r\n};\r\n\r\nconst handleChangeOnMulti = (e, filter, vm) => {\r\n const selectedValue = e.target.value;\r\n // console.log(selectedValue);\r\n\r\n // if all has been selected\r\n if (selectedValue.toLowerCase() === \"all\" && e.target.checked) {\r\n vm.filtered.selectedFilters[filter.id] = [\"All\"];\r\n }\r\n\r\n // remove all from all the selected filters\r\n if (selectedValue.toLowerCase() !== \"all\" && e.target.checked) {\r\n vm.filtered.selectedFilters[filter.id] = vm.filtered.selectedFilters[filter.id].filter((item) => item.toLowerCase() !== \"all\");\r\n }\r\n\r\n // reset to all if all the filter has been selected\r\n if (vm.filtered.selectedFilters[filter.id].length === vm.filtered.avaliableFilters[filter.id].items.length - 1) {\r\n vm.filtered.selectedFilters[filter.id] = [\"All\"];\r\n }\r\n\r\n // reset to all if no filter has been selected\r\n if (vm.filtered.selectedFilters[filter.id].length === 0) {\r\n vm.filtered.selectedFilters[filter.id] = [\"All\"];\r\n }\r\n\r\n // if updated filter is of type mainFilter\r\n if (filter.type === \"mainFilter\") {\r\n resetSubCategories(vm);\r\n renderItems(vm);\r\n if (vm.onFilterUpdate) {\r\n vm.onFilterUpdate(vm);\r\n }\r\n }\r\n\r\n // if update filter is a subfilter\r\n if (filter.type !== \"mainFilter\") {\r\n renderItems(vm, false);\r\n if (vm.onFilterUpdate) {\r\n vm.onFilterUpdate(vm);\r\n }\r\n }\r\n};\r\n\r\nconst setupFilters = (vm) => {\r\n vm.handleChangeOnSingle = (e, filter) => {\r\n handleChangeOnSingle(e, filter, vm);\r\n };\r\n\r\n vm.handleChangeOnMulti = (e, filter) => {\r\n handleChangeOnMulti(e, filter, vm);\r\n };\r\n};\r\n\r\nexport { setupFilters };\r\n","/* eslint-disable no-param-reassign */\r\n/** *\r\n * Setup Pagination\r\n */\r\n\r\nimport { setupLoadMore } from \"./loadmore.js\";\r\nimport { setupPageList } from \"./pagelist.js\";\r\n\r\nconst setupPagination = (vm) => {\r\n const defaultPagination = {\r\n items: [],\r\n currentPage: 1,\r\n pageSize: 2,\r\n type: \"loadmore\",\r\n responsive: {},\r\n pagelist: {\r\n pageNeighbours: 0\r\n }\r\n };\r\n vm.pagination = defaultPagination;\r\n console.warn(\"Reading pagination:default\", vm.pagination);\r\n\r\n /**\r\n * Check if config for pagination has been passed\r\n */\r\n if (vm.options.pagination) {\r\n vm.pagination.currentPage = vm.options.pagination.currentPage || defaultPagination.currentPage;\r\n vm.pagination.pageSize = vm.options.pagination.pageSize || defaultPagination.pageSize;\r\n vm.pagination.type = vm.options.pagination.type || defaultPagination.type;\r\n\r\n if (vm.options.pagination.pagelist) {\r\n vm.pagination.pagelist.pageNeighbours = vm.options.pagination.pagelist.pageNeighbours || defaultPagination.pagelist.pageNeighbours;\r\n }\r\n\r\n vm.pagination.responsive = vm.options.pagination.responsive || defaultPagination.responsive;\r\n console.warn(\"Reading pagination:config\", vm.pagination);\r\n }\r\n\r\n /**\r\n * Check if config for pagination has been passed in data\r\n */\r\n\r\n if (vm.fullData.pagination) {\r\n vm.pagination.currentPage = vm.fullData.pagination.currentPage || defaultPagination.currentPage;\r\n vm.pagination.pageSize = vm.fullData.pagination.pageSize || defaultPagination.pageSize;\r\n vm.pagination.type = vm.fullData.pagination.type || defaultPagination.type;\r\n\r\n if (vm.fullData.pagination.pagelist) {\r\n vm.pagination.pagelist.pageNeighbours = vm.fullData.pagination.pagelist.pageNeighbours || defaultPagination.pagelist.pageNeighbours;\r\n }\r\n\r\n vm.pagination.responsive = vm.fullData.pagination.responsive || defaultPagination.responsive;\r\n console.warn(\"Reading pagination:data\", vm.pagination);\r\n }\r\n\r\n if (vm.pagination.type === \"loadmore\") {\r\n setupLoadMore(vm);\r\n }\r\n\r\n if (vm.pagination.type === \"pagelist\") {\r\n setupPageList(vm);\r\n }\r\n\r\n // console.log('pagination', vm.pagination);\r\n};\r\n\r\nexport { setupPagination };\r\n","/* eslint-disable no-param-reassign */\r\n\r\nimport { getSearchedList, resetAllFilters } from \"./data.js\";\r\nimport { renderItems } from \"./render.js\";\r\n\r\nconst handleSearch = (e, vm) => {\r\n console.log(`/* Searching for ${vm.search.query}*/`);\r\n vm.filtered.selectedFilters = resetAllFilters(vm.filtered.selectedFilters);\r\n renderItems(vm);\r\n if (vm.onSearchComplete) {\r\n vm.onSearchComplete(vm);\r\n }\r\n};\r\n\r\nconst clearSearch = (e, vm) => {\r\n vm.search.query = \"\";\r\n handleSearch(e, vm);\r\n if (vm.onSearchComplete) {\r\n vm.onSearchComplete(vm);\r\n }\r\n};\r\n\r\nconst initSearch = (vm) => {\r\n vm.search = {\r\n enabled: false,\r\n items: [],\r\n query: \"\",\r\n searchNodes: [\"title\"]\r\n };\r\n console.warn(\"Reading search:default\", vm.search);\r\n\r\n if (vm.options.search) {\r\n vm.search.enabled = vm.options.search.enabled || false;\r\n vm.search.query = vm.options.search.query || \"\";\r\n vm.search.searchNodes = vm.options.search.searchNodes || [\"title\"];\r\n vm.search.items = [];\r\n }\r\n\r\n console.warn(\"Reading search:config\", vm.search);\r\n\r\n if (vm.fullData.search) {\r\n vm.search.enabled = vm.fullData.search.enabled || false;\r\n vm.search.query = vm.fullData.search.query || \"\";\r\n vm.search.searchNodes = vm.fullData.search.searchNodes || [\"title\"];\r\n vm.search.items = [];\r\n }\r\n\r\n console.warn(\"Reading search:data\", vm.search);\r\n if (vm.search.enabled === true) {\r\n vm.search.items = getSearchedList(vm.fullData, vm.search);\r\n // console.log(' vm.search.items', vm.search.items);\r\n }\r\n\r\n if (vm.search.enabled === false) {\r\n vm.search.items = vm.fullData.allItems;\r\n // console.log(' vm.search.items', vm.search.items);\r\n }\r\n};\r\n\r\n/**\r\n * SetupSearch\r\n * 1. fetchData\r\n * 2. setup Avalibale filters based on data\r\n * 3. update selected filters if any\r\n */\r\n\r\nconst setupSearch = (vm) => {\r\n console.log(\"/*** Setting Up Search ***/\");\r\n initSearch(vm);\r\n vm.search.handleSearch = (e) => {\r\n handleSearch(e, vm);\r\n };\r\n vm.search.clearSearch = (e) => {\r\n clearSearch(e, vm);\r\n };\r\n};\r\n\r\nexport { setupSearch };\r\n","/* eslint-disable no-shadow */\r\n/* eslint-disable no-param-reassign */\r\nimport { fetchData, getAvailableFilters, getSelectedFilters } from \"./_filters/data.js\";\r\nimport { setupFilters } from \"./_filters/filters.js\";\r\nimport { setupPagination } from \"./_filters/pagination.js\";\r\nimport { renderItems } from \"./_filters/render.js\";\r\nimport { setupSearch } from \"./_filters/search.js\";\r\n\r\n/**\r\n * TODO\r\n * - passing active filters\r\n */\r\nconst DataTable = function (config, Alpine) {\r\n /** Private */\r\n let vm = null; // this\r\n\r\n /**\r\n * Options\r\n */\r\n let options = {\r\n // pagination: {\r\n // pageSize: 2,\r\n // type: 'loadmore',\r\n // currentPage: 1 // current page\r\n // }\r\n };\r\n options = { ...options, ...config.options };\r\n\r\n // console.log(config.options.pagination);\r\n\r\n if (!config.options.pagination) {\r\n console.warn(\r\n `options.pagination is not present either on config or data !!! - defauting to {\r\n pageSize: 2,\r\n type: 'loadmore'\r\n }`\r\n );\r\n }\r\n\r\n /**\r\n * SetupData\r\n * 1. fetchData\r\n * 2. setup Avalibale filters based on data\r\n * 3. update selected filters if provided\r\n */\r\n\r\n const setupData = function () {\r\n console.log(\"/*** Setting up App ***/\");\r\n vm.fullData = {}; // fullData that will be recevied\r\n vm.filtered = {\r\n avaliableFilters: {}, // all available filters\r\n selectedFilters: {}, // currently selected filters\r\n items: [] // filtered items based on filters selected and fullData\r\n };\r\n\r\n const promise = new Promise((resolve, reject) => {\r\n fetchData(options).then((data) => {\r\n vm.fullData = data;\r\n if (vm.fullData) {\r\n console.log(\"/*** Full Data Ready ***/\");\r\n // console.log(vm.fullData);\r\n }\r\n getAvailableFilters(vm.fullData).then((avaliableFilters) => {\r\n vm.filtered.avaliableFilters = avaliableFilters;\r\n // console.log('avaliableFilters', vm.filtered.avaliableFilters);\r\n getSelectedFilters(vm.fullData).then((selectedFilters) => {\r\n vm.filtered.selectedFilters = selectedFilters;\r\n // console.log('selectedFilters', vm.filtered.avaliableFilters);\r\n resolve();\r\n });\r\n });\r\n });\r\n });\r\n\r\n return promise;\r\n };\r\n\r\n this.init = function () {\r\n vm = this;\r\n vm.options = options;\r\n vm.appIsReady = false;\r\n\r\n setupData().then(() => {\r\n setupSearch(vm);\r\n setupPagination(vm);\r\n setupFilters(vm);\r\n renderItems(vm);\r\n\r\n /**\r\n * Transition Hack\r\n */\r\n vm.$nextTick(() => {\r\n // setTimeout(() => {\r\n vm.pagination.items.forEach((item) => {\r\n const tempItem = item;\r\n tempItem.show = true;\r\n });\r\n // }, 5);\r\n vm.appIsReady = true;\r\n\r\n if (vm.onAppReady) {\r\n vm.onAppReady(vm);\r\n }\r\n });\r\n });\r\n };\r\n\r\n this.getEl = function () {\r\n if (vm) {\r\n return vm.$el;\r\n }\r\n return false;\r\n };\r\n};\r\n\r\nexport default DataTable;\r\n","/* eslint-disable no-param-reassign */\r\n// eslint-disable-next-line import/no-unresolved\r\nimport DataTable from \"../_alpine-library/datatable.js\";\r\n\r\nexport function datatable(config, Alpine) {\r\n const component = new DataTable(config, Alpine);\r\n\r\n return {\r\n ...component,\r\n openTabCarouselModal: false,\r\n onFilterUpdate(vm) {\r\n vm.$nextTick(() => {\r\n const $scroller = vm.$refs.paginatedItems;\r\n $scroller.scrollTo({\r\n top: 0,\r\n left: 0,\r\n behavior: \"smooth\"\r\n });\r\n });\r\n },\r\n openTabCarouselLightBox(e) {\r\n this.openTabCarouselModal = true;\r\n const lightbox = this.$refs.modal;\r\n const videoHolder = lightbox.querySelector(\"iframe\");\r\n const autoPlay = \"?&autoplay=1\";\r\n const button = e.target.closest(\"button\");\r\n if (button) {\r\n const videoHolderSrc = button.getAttribute(\"data-src\");\r\n const addedAttributeSrc = videoHolderSrc + autoPlay;\r\n videoHolder.setAttribute(\"src\", addedAttributeSrc);\r\n } else {\r\n const videoHolderSrc = e.target.getAttribute(\"data-src\");\r\n const addedAttributeSrc = videoHolderSrc + autoPlay;\r\n videoHolder.setAttribute(\"src\", addedAttributeSrc);\r\n }\r\n },\r\n closeTabCarouselLightBox(e) {\r\n const vm = e.target.closest(\".c-modal-tabCarousel\");\r\n const videoHolder = vm.querySelector(\"iframe\");\r\n videoHolder.setAttribute(\"src\", \"\");\r\n this.openTabCarouselModal = false;\r\n }\r\n };\r\n}\r\n"],"names":["toString","kindOf","val","type","isBuffer","typeOf","require$$0","defaultCompare","a","b","prop","typeA","typeB","getValue","obj","c","isObject","segs","len","i","key","require$$1","get","require$$2","arraySort","arr","props","opts","args","flatten","sortBy","result","compare","arraySort_1","multiCategoryFilter","filterItems","checkCategory","itemCategory","filterCategory","item","category","options","cloneArray","sortArray","array","reverse","searchArray","nodes","query","searchQuery","eachObj","eachKey","objValue","uniqueItems","value","getNodesItems","node","allItems","nodeItem","uniqueCategoryValues","availableUniqueNodes","itemToFind","foundIdx","el","count","filterItem","fetchRemoteData","url","data","axios","response","error","fetchLocalData","resolve","reject","convertFilters","filterObj","index","fetchData","getAvailableFilters","fullData","avaliableFilters","getSelectedFilters","selectedFilters","catItem","getFilteredList","list","activeFilters","getAvaliableFiltersFromItems","searchedItems","filters","items","all","resetAllFilters","resetSingleFilter","getSearchedList","search","results","getItems","currentItems","totalItems","pageSize","currentPage","retrunFullSet","offset","cloneOfFilteredList","additionalItems","tempItem","loadMoreItems","vm","currentPageId","handleLoadMore","renderLoadMore","handleChangeOnBreakPoint","breakpoints","originalPageSize","updatePageSize","currentWidth","breakpoint","setupResponsive","setupLoadMore","getItemsforPage","range","from","to","step","newRange","getPageListItems","totalPages","pageNeighbours","LEFT_PAGE","RIGHT_PAGE","totalNumbers","totalBlocks","startPage","endPage","pages","hasLeftSpill","hasRightSpill","spillOffset","extraPages","handleClickOnPage","handleMoveRight","handleMoveLeft","renderPageList","setupPageList","e","resetPagination","splitCategoryFilters","mainCategoryFilters","subCategoryFilters","cat","updateAvailableFilters","categoryFilter","fromItems","availableList","categoryItem","computeFilteredList","tempList","tempFilter","renderItems","reRenderSubcatgories","resetSubCategories","updatedSubFilters","handleChangeOnSingle","filter","handleChangeOnMulti","selectedValue","setupFilters","setupPagination","defaultPagination","handleSearch","clearSearch","initSearch","setupSearch","DataTable","config","Alpine","setupData","datatable","videoHolder","autoPlay","button","addedAttributeSrc"],"mappings":"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","x_google_ignoreList":[0,1,2,3]}