@abcagency/hc-ui-components 1.7.5 → 1.7.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/HireControlMap.js +102 -171
- package/dist/components/HireControlMap.js.map +1 -1
- package/dist/components/modules/accordions/default.js +1 -1
- package/dist/components/modules/buttons/button-group-apply.js +1 -1
- package/dist/components/modules/buttons/default.js +1 -1
- package/dist/components/modules/cards/default.js +1 -1
- package/dist/components/modules/filter/sort.js +1 -1
- package/dist/components/modules/grid.js +1 -1
- package/dist/components/modules/list/header.js +1 -1
- package/dist/components/modules/list/item-expand-card/index.js +1 -1
- package/dist/contexts/mapListContext.js +33 -38
- package/dist/contexts/mapListContext.js.map +1 -1
- package/dist/styles/index.css +1 -1
- package/dist/types/util/algoliaSearchUtil.d.ts +1 -1
- package/dist/util/algoliaSearchUtil.js +118 -51
- package/dist/util/algoliaSearchUtil.js.map +1 -1
- package/dist/util/filterUtil.js +1 -1
- package/dist/util/twMerge.js +1 -1
- package/package.json +2 -1
- package/src/apis/hcApi.ts +9 -2
- package/src/components/HireControlMap.js +31 -64
- package/src/contexts/mapListContext.tsx +34 -37
- package/src/index.js +1 -0
- package/src/util/algoliaSearchUtil.js +19 -3
- package/dist/apis/hcApi.js +0 -91
- package/dist/apis/hcApi.js.map +0 -1
- package/dist/clientToken.js +0 -10
- package/dist/clientToken.js.map +0 -1
- package/dist/components/modules/skeleton/map-skeleton.js +0 -50
- package/dist/components/modules/skeleton/map-skeleton.js.map +0 -1
- package/dist/node_modules/@algolia/client-common/dist/common.js +0 -541
- package/dist/node_modules/@algolia/client-common/dist/common.js.map +0 -1
- package/dist/node_modules/@algolia/requester-browser-xhr/dist/requester.xhr.js +0 -4
- package/dist/node_modules/@algolia/requester-browser-xhr/dist/requester.xhr.js.map +0 -1
- package/dist/node_modules/@algolia/requester-node-http/dist/requester.http.js +0 -82
- package/dist/node_modules/@algolia/requester-node-http/dist/requester.http.js.map +0 -1
- package/dist/node_modules/algoliasearch/dist/lite/builds/browser.js +0 -272
- package/dist/node_modules/algoliasearch/dist/lite/builds/browser.js.map +0 -1
- package/dist/node_modules/algoliasearch/dist/lite/builds/node.js +0 -269
- package/dist/node_modules/algoliasearch/dist/lite/builds/node.js.map +0 -1
- package/dist/node_modules/fuse.js/dist/fuse.js +0 -1779
- package/dist/node_modules/fuse.js/dist/fuse.js.map +0 -1
- package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js +0 -2580
- package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js.map +0 -1
- package/dist/services/configService.js +0 -15
- package/dist/services/configService.js.map +0 -1
- package/dist/services/listingAggregatorService.js +0 -41
- package/dist/services/listingAggregatorService.js.map +0 -1
- package/dist/services/listingEntityService.js +0 -16
- package/dist/services/listingEntityService.js.map +0 -1
- package/dist/services/listingService.js +0 -15
- package/dist/services/listingService.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"algoliaSearchUtil.js","sources":["../../src/util/algoliaSearchUtil.js"],"sourcesContent":["import { liteClient as algoliasearch } from 'algoliasearch/lite';\n\nlet algoliaClient = null;\nlet algoliaIndexName = null;\n\n/**\n * Initialize Algolia search client\n * @param {string} appId - Algolia Application ID\n * @param {string} apiKey - Algolia Search API Key\n * @param {string} indexName - Algolia Index Name\n */\nexport const initializeAlgoliaSearch = (appId, apiKey, indexName) => {\n\tif (!appId || !apiKey || !indexName) {\n\t\tconsole.warn('Algolia search not initialized: missing configuration');\n\t\treturn false;\n\t}\n\n\ttry {\n\t\talgoliaClient = algoliasearch(appId, apiKey);\n\t\talgoliaIndexName = indexName;\n\t\treturn true;\n\t} catch (error) {\n\t\tconsole.error('Failed to initialize Algolia:', error);\n\t\treturn false;\n\t}\n};\n\n/**\n * Check if Algolia is initialized and available\n */\nexport const isAlgoliaAvailable = () => {\n\treturn algoliaClient !== null && algoliaIndexName !== null;\n};\n\n/**\n * Search using Algolia and return matching listing IDs with their order\n * @param {string} query - Search query\n * @returns {Promise<{referenceNumbers: number[], ids: string[], orderMap: Map}>} Object with arrays of IDs and a map for ordering\n */\nexport const searchAlgolia = async (query) => {\n\tif (!isAlgoliaAvailable()) {\n\t\tthrow new Error('Algolia search is not initialized');\n\t}\n\n\ttry {\n\t\tconst { results } = await algoliaClient.search({\n\t\t\trequests: [\n\t\t\t\t{\n\t\t\t\t\tindexName: algoliaIndexName,\n\t\t\t\t\tquery: query,\n\t\t\t\t\thitsPerPage: 1000 // Adjust based on your needs\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\n\t\t// Extract IDs from the results and maintain order\n\t\tconst hits = results[0]?.hits || [];\n\t\tconsole.log('Algolia search returned', hits.length, 'hits');\n\n\t\tconst referenceNumbers = [];\n\t\tconst ids = [];\n\t\tconst orderMap = new Map(); // Map to store the Algolia result order\n\n\t\thits.forEach((hit, index) => {\n\t\t\tif (hit.referenceNumber) {\n\t\t\t\tconst refNum = parseInt(hit.referenceNumber);\n\t\t\t\treferenceNumbers.push(refNum);\n\t\t\t\torderMap.set(`ref-${refNum}`, index);\n\t\t\t}\n\t\t\tif (hit.id) {\n\t\t\t\tids.push(hit.id);\n\t\t\t\torderMap.set(`id-${hit.id}`, index);\n\t\t\t}\n\t\t});\n\n\t\tconsole.log('Extracted', referenceNumbers.length, 'referenceNumbers and', ids.length, 'ids from Algolia');\n\t\treturn { referenceNumbers, ids, orderMap };\n\t} catch (error) {\n\t\tconsole.error('Algolia search failed:', error);\n\t\tthrow error;\n\t}\n};/**\n * Filter listings by Algolia search results and sort by Algolia's result order\n * @param {Array} listings - All listings to filter\n * @param {string} query - Search query\n * @returns {Promise<Array>} Filtered and sorted listings\n */\nexport const filterListingsByAlgoliaSearch = async (listings, query) => {\n\tif (!query || !isAlgoliaAvailable()) {\n\t\treturn listings;\n\t}\n\n\ttry {\n\t\tconst { referenceNumbers, ids, orderMap } = await searchAlgolia(query);\n\n\t\tconsole.log('Filtering', listings.length, 'listings against', referenceNumbers.length, 'referenceNumbers and', ids.length, 'ids');\n\t\tconsole.log('Sample listing referenceNumbers:', listings.slice(0, 5).map(l => l.referenceNumber));\n\t\tconsole.log('Sample listing ids:', listings.slice(0, 5).map(l => l.id));\n\t\tconsole.log('Sample Algolia referenceNumbers:', referenceNumbers.slice(0, 5));\n\t\tconsole.log('Sample Algolia ids:', ids.slice(0, 5));\n\n\t\t// Filter listings by matching referenceNumber OR id\n\t\tconst filtered = listings.filter(listing =>\n\t\t\treferenceNumbers.includes(listing.referenceNumber) || ids.includes(listing.id)\n\t\t);\n\n\t\t// Sort filtered listings by Algolia result order\n\t\tfiltered.sort((a, b) => {\n\t\t\t// Get the Algolia order index for each listing\n\t\t\tconst orderA = orderMap.get(`ref-${a.referenceNumber}`) ?? orderMap.get(`id-${a.id}`) ?? Infinity;\n\t\t\tconst orderB = orderMap.get(`ref-${b.referenceNumber}`) ?? orderMap.get(`id-${b.id}`) ?? Infinity;\n\t\t\treturn orderA - orderB;\n\t\t});\n\n\t\tconsole.log('Filtered result:', filtered.length, 'listings matched and sorted by Algolia order');\n\t\treturn filtered;\n\t} catch (error) {\n\t\tconsole.error('Failed to filter by Algolia search, returning all listings:', error);\n\t\treturn listings;\n\t}\n};\n"],"names":["algoliaClient","algoliaIndexName","initializeAlgoliaSearch","appId","apiKey","indexName","console","warn","algoliasearch","error","isAlgoliaAvailable","searchAlgolia","_ref","_asyncToGenerator","_regeneratorRuntime","mark","_callee","query","_results$","_yield$algoliaClient$","results","hits","referenceNumbers","ids","orderMap","wrap","_callee$","_context","prev","next","Error","search","requests","hitsPerPage","sent","log","length","Map","forEach","hit","index","referenceNumber","refNum","parseInt","push","set","concat","id","abrupt","t0","stop","_x","apply","arguments","filterListingsByAlgoliaSearch","_ref2","_callee2","listings","_yield$searchAlgolia","filtered","_callee2$","_context2","slice","map","l","filter","listing","includes","sort","a","b","_ref3","_orderMap$get","_ref4","_orderMap$get2","orderA","get","Infinity","orderB","_x2","_x3"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"algoliaSearchUtil.js","sources":["../../src/util/algoliaSearchUtil.js"],"sourcesContent":["let algoliaClient = null;\nlet algoliaIndexName = null;\nlet algoliaSearchModule = null;\n\n/**\n * Lazy load algoliasearch to avoid SSR issues\n */\nconst getAlgoliaSearch = async () => {\n\tif (typeof window === 'undefined') return null;\n\tif (!algoliaSearchModule) {\n\t\tconst { liteClient } = await import('algoliasearch/lite');\n\t\talgoliaSearchModule = liteClient;\n\t}\n\treturn algoliaSearchModule;\n};\n\n/**\n * Initialize Algolia search client\n * @param {string} appId - Algolia Application ID\n * @param {string} apiKey - Algolia Search API Key\n * @param {string} indexName - Algolia Index Name\n */\nexport const initializeAlgoliaSearch = async (appId, apiKey, indexName) => {\n\tif (!appId || !apiKey || !indexName) {\n\t\tconsole.warn('Algolia search not initialized: missing configuration');\n\t\treturn false;\n\t}\n\n\ttry {\n\t\tconst algoliasearch = await getAlgoliaSearch();\n\t\tif (!algoliasearch) {\n\t\t\tconsole.warn('Algolia search not available (SSR context)');\n\t\t\treturn false;\n\t\t}\n\t\talgoliaClient = algoliasearch(appId, apiKey);\n\t\talgoliaIndexName = indexName;\n\t\treturn true;\n\t} catch (error) {\n\t\tconsole.error('Failed to initialize Algolia:', error);\n\t\treturn false;\n\t}\n};\n\n/**\n * Check if Algolia is initialized and available\n */\nexport const isAlgoliaAvailable = () => {\n\treturn algoliaClient !== null && algoliaIndexName !== null;\n};\n\n/**\n * Search using Algolia and return matching listing IDs with their order\n * @param {string} query - Search query\n * @returns {Promise<{referenceNumbers: number[], ids: string[], orderMap: Map}>} Object with arrays of IDs and a map for ordering\n */\nexport const searchAlgolia = async (query) => {\n\tif (!isAlgoliaAvailable()) {\n\t\tthrow new Error('Algolia search is not initialized');\n\t}\n\n\ttry {\n\t\tconst { results } = await algoliaClient.search({\n\t\t\trequests: [\n\t\t\t\t{\n\t\t\t\t\tindexName: algoliaIndexName,\n\t\t\t\t\tquery: query,\n\t\t\t\t\thitsPerPage: 1000 // Adjust based on your needs\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\n\t\t// Extract IDs from the results and maintain order\n\t\tconst hits = results[0]?.hits || [];\n\t\tconsole.log('Algolia search returned', hits.length, 'hits');\n\n\t\tconst referenceNumbers = [];\n\t\tconst ids = [];\n\t\tconst orderMap = new Map(); // Map to store the Algolia result order\n\n\t\thits.forEach((hit, index) => {\n\t\t\tif (hit.referenceNumber) {\n\t\t\t\tconst refNum = parseInt(hit.referenceNumber);\n\t\t\t\treferenceNumbers.push(refNum);\n\t\t\t\torderMap.set(`ref-${refNum}`, index);\n\t\t\t}\n\t\t\tif (hit.id) {\n\t\t\t\tids.push(hit.id);\n\t\t\t\torderMap.set(`id-${hit.id}`, index);\n\t\t\t}\n\t\t});\n\n\t\tconsole.log('Extracted', referenceNumbers.length, 'referenceNumbers and', ids.length, 'ids from Algolia');\n\t\treturn { referenceNumbers, ids, orderMap };\n\t} catch (error) {\n\t\tconsole.error('Algolia search failed:', error);\n\t\tthrow error;\n\t}\n};/**\n * Filter listings by Algolia search results and sort by Algolia's result order\n * @param {Array} listings - All listings to filter\n * @param {string} query - Search query\n * @returns {Promise<Array>} Filtered and sorted listings\n */\nexport const filterListingsByAlgoliaSearch = async (listings, query) => {\n\tif (!query || !isAlgoliaAvailable()) {\n\t\treturn listings;\n\t}\n\n\ttry {\n\t\tconst { referenceNumbers, ids, orderMap } = await searchAlgolia(query);\n\n\t\tconsole.log('Filtering', listings.length, 'listings against', referenceNumbers.length, 'referenceNumbers and', ids.length, 'ids');\n\t\tconsole.log('Sample listing referenceNumbers:', listings.slice(0, 5).map(l => l.referenceNumber));\n\t\tconsole.log('Sample listing ids:', listings.slice(0, 5).map(l => l.id));\n\t\tconsole.log('Sample Algolia referenceNumbers:', referenceNumbers.slice(0, 5));\n\t\tconsole.log('Sample Algolia ids:', ids.slice(0, 5));\n\n\t\t// Filter listings by matching referenceNumber OR id\n\t\tconst filtered = listings.filter(listing =>\n\t\t\treferenceNumbers.includes(listing.referenceNumber) || ids.includes(listing.id)\n\t\t);\n\n\t\t// Sort filtered listings by Algolia result order\n\t\tfiltered.sort((a, b) => {\n\t\t\t// Get the Algolia order index for each listing\n\t\t\tconst orderA = orderMap.get(`ref-${a.referenceNumber}`) ?? orderMap.get(`id-${a.id}`) ?? Infinity;\n\t\t\tconst orderB = orderMap.get(`ref-${b.referenceNumber}`) ?? orderMap.get(`id-${b.id}`) ?? Infinity;\n\t\t\treturn orderA - orderB;\n\t\t});\n\n\t\tconsole.log('Filtered result:', filtered.length, 'listings matched and sorted by Algolia order');\n\t\treturn filtered;\n\t} catch (error) {\n\t\tconsole.error('Failed to filter by Algolia search, returning all listings:', error);\n\t\treturn listings;\n\t}\n};\n"],"names":["algoliaClient","algoliaIndexName","algoliaSearchModule","getAlgoliaSearch","_ref","_asyncToGenerator","_regeneratorRuntime","mark","_callee","_yield$import","liteClient","wrap","_callee$","_context","prev","next","window","abrupt","sent","stop","apply","arguments","initializeAlgoliaSearch","_ref2","_callee2","appId","apiKey","indexName","algoliasearch","_callee2$","_context2","console","warn","t0","error","_x","_x2","_x3","isAlgoliaAvailable","searchAlgolia","_ref3","_callee3","query","_results$","_yield$algoliaClient$","results","hits","referenceNumbers","ids","orderMap","_callee3$","_context3","Error","search","requests","hitsPerPage","log","length","Map","forEach","hit","index","referenceNumber","refNum","parseInt","push","set","concat","id","_x4","filterListingsByAlgoliaSearch","_ref4","_callee4","listings","_yield$searchAlgolia","filtered","_callee4$","_context4","slice","map","l","filter","listing","includes","sort","a","b","_ref5","_orderMap$get","_ref6","_orderMap$get2","orderA","get","Infinity","orderB","_x5","_x6"],"mappings":";;AAAA,IAAIA,aAAa,GAAG,IAAI,CAAA;AACxB,IAAIC,gBAAgB,GAAG,IAAI,CAAA;AAC3B,IAAIC,mBAAmB,GAAG,IAAI,CAAA;;AAE9B;AACA;AACA;AACA,IAAMC,gBAAgB,gBAAA,YAAA;EAAA,IAAAC,IAAA,GAAAC,iBAAA,eAAAC,mBAAA,EAAAC,CAAAA,IAAA,CAAG,SAAAC,OAAA,GAAA;IAAA,IAAAC,aAAA,EAAAC,UAAA,CAAA;AAAA,IAAA,OAAAJ,mBAAA,EAAA,CAAAK,IAAA,CAAA,SAAAC,SAAAC,QAAA,EAAA;AAAA,MAAA,OAAA,CAAA,EAAA,QAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;AAAA,QAAA,KAAA,CAAA;UAAA,IACpB,EAAA,OAAOC,MAAM,KAAK,WAAW,CAAA,EAAA;AAAAH,YAAAA,QAAA,CAAAE,IAAA,GAAA,CAAA,CAAA;AAAA,YAAA,MAAA;AAAA,WAAA;AAAA,UAAA,OAAAF,QAAA,CAAAI,MAAA,CAAA,QAAA,EAAS,IAAI,CAAA,CAAA;AAAA,QAAA,KAAA,CAAA;AAAA,UAAA,IACzCf,mBAAmB,EAAA;AAAAW,YAAAA,QAAA,CAAAE,IAAA,GAAA,CAAA,CAAA;AAAA,YAAA,MAAA;AAAA,WAAA;AAAAF,UAAAA,QAAA,CAAAE,IAAA,GAAA,CAAA,CAAA;UAAA,OACM,OAAO,oBAAoB,CAAC,CAAA;AAAA,QAAA,KAAA,CAAA;UAAAN,aAAA,GAAAI,QAAA,CAAAK,IAAA,CAAA;UAAjDR,UAAU,GAAAD,aAAA,CAAVC,UAAU,CAAA;AAClBR,UAAAA,mBAAmB,GAAGQ,UAAU,CAAA;AAAC,QAAA,KAAA,CAAA;AAAA,UAAA,OAAAG,QAAA,CAAAI,MAAA,CAAA,QAAA,EAE3Bf,mBAAmB,CAAA,CAAA;AAAA,QAAA,KAAA,CAAA,CAAA;AAAA,QAAA,KAAA,KAAA;UAAA,OAAAW,QAAA,CAAAM,IAAA,EAAA,CAAA;AAAA,OAAA;AAAA,KAAA,EAAAX,OAAA,CAAA,CAAA;GAC1B,CAAA,CAAA,CAAA;AAAA,EAAA,OAAA,SAPKL,gBAAgBA,GAAA;AAAA,IAAA,OAAAC,IAAA,CAAAgB,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAAA,CAOrB,EAAA,CAAA;;AAED;AACA;AACA;AACA;AACA;AACA;IACaC,uBAAuB,gBAAA,YAAA;AAAA,EAAA,IAAAC,KAAA,GAAAlB,iBAAA,eAAAC,mBAAA,EAAAC,CAAAA,IAAA,CAAG,SAAAiB,QAAOC,CAAAA,KAAK,EAAEC,MAAM,EAAEC,SAAS,EAAA;AAAA,IAAA,IAAAC,aAAA,CAAA;AAAA,IAAA,OAAAtB,mBAAA,EAAA,CAAAK,IAAA,CAAA,SAAAkB,UAAAC,SAAA,EAAA;AAAA,MAAA,OAAA,CAAA,EAAA,QAAAA,SAAA,CAAAhB,IAAA,GAAAgB,SAAA,CAAAf,IAAA;AAAA,QAAA,KAAA,CAAA;AAAA,UAAA,IAAA,EACjE,CAACU,KAAK,IAAI,CAACC,MAAM,IAAI,CAACC,SAAS,CAAA,EAAA;AAAAG,YAAAA,SAAA,CAAAf,IAAA,GAAA,CAAA,CAAA;AAAA,YAAA,MAAA;AAAA,WAAA;AAClCgB,UAAAA,OAAO,CAACC,IAAI,CAAC,uDAAuD,CAAC,CAAA;AAAC,UAAA,OAAAF,SAAA,CAAAb,MAAA,CAAA,QAAA,EAC/D,KAAK,CAAA,CAAA;AAAA,QAAA,KAAA,CAAA;AAAAa,UAAAA,SAAA,CAAAhB,IAAA,GAAA,CAAA,CAAA;AAAAgB,UAAAA,SAAA,CAAAf,IAAA,GAAA,CAAA,CAAA;UAAA,OAIgBZ,gBAAgB,EAAE,CAAA;AAAA,QAAA,KAAA,CAAA;UAAxCyB,aAAa,GAAAE,SAAA,CAAAZ,IAAA,CAAA;AAAA,UAAA,IACdU,aAAa,EAAA;AAAAE,YAAAA,SAAA,CAAAf,IAAA,GAAA,EAAA,CAAA;AAAA,YAAA,MAAA;AAAA,WAAA;AACjBgB,UAAAA,OAAO,CAACC,IAAI,CAAC,4CAA4C,CAAC,CAAA;AAAC,UAAA,OAAAF,SAAA,CAAAb,MAAA,CAAA,QAAA,EACpD,KAAK,CAAA,CAAA;AAAA,QAAA,KAAA,EAAA;AAEbjB,UAAAA,aAAa,GAAG4B,aAAa,CAACH,KAAK,EAAEC,MAAM,CAAC,CAAA;AAC5CzB,UAAAA,gBAAgB,GAAG0B,SAAS,CAAA;AAAC,UAAA,OAAAG,SAAA,CAAAb,MAAA,CAAA,QAAA,EACtB,IAAI,CAAA,CAAA;AAAA,QAAA,KAAA,EAAA;AAAAa,UAAAA,SAAA,CAAAhB,IAAA,GAAA,EAAA,CAAA;UAAAgB,SAAA,CAAAG,EAAA,GAAAH,SAAA,CAAA,OAAA,CAAA,CAAA,CAAA,CAAA,CAAA;UAEXC,OAAO,CAACG,KAAK,CAAC,+BAA+B,EAAAJ,SAAA,CAAAG,EAAO,CAAC,CAAA;AAAC,UAAA,OAAAH,SAAA,CAAAb,MAAA,CAAA,QAAA,EAC/C,KAAK,CAAA,CAAA;AAAA,QAAA,KAAA,EAAA,CAAA;AAAA,QAAA,KAAA,KAAA;UAAA,OAAAa,SAAA,CAAAX,IAAA,EAAA,CAAA;AAAA,OAAA;AAAA,KAAA,EAAAK,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA;GAEb,CAAA,CAAA,CAAA;AAAA,EAAA,OAAA,SAnBYF,uBAAuBA,CAAAa,EAAA,EAAAC,GAAA,EAAAC,GAAA,EAAA;AAAA,IAAA,OAAAd,KAAA,CAAAH,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAAA,CAmBnC,GAAA;;AAED;AACA;AACA;IACaiB,kBAAkB,GAAG,SAArBA,kBAAkBA,GAAS;AACvC,EAAA,OAAOtC,aAAa,KAAK,IAAI,IAAIC,gBAAgB,KAAK,IAAI,CAAA;AAC3D,EAAC;;AAED;AACA;AACA;AACA;AACA;IACasC,aAAa,gBAAA,YAAA;EAAA,IAAAC,KAAA,GAAAnC,iBAAA,eAAAC,mBAAA,GAAAC,IAAA,CAAG,SAAAkC,QAAAA,CAAOC,KAAK,EAAA;AAAA,IAAA,IAAAC,SAAA,EAAAC,qBAAA,EAAAC,OAAA,EAAAC,IAAA,EAAAC,gBAAA,EAAAC,GAAA,EAAAC,QAAA,CAAA;AAAA,IAAA,OAAA3C,mBAAA,EAAA,CAAAK,IAAA,CAAA,SAAAuC,UAAAC,SAAA,EAAA;AAAA,MAAA,OAAA,CAAA,EAAA,QAAAA,SAAA,CAAArC,IAAA,GAAAqC,SAAA,CAAApC,IAAA;AAAA,QAAA,KAAA,CAAA;UAAA,IACnCuB,kBAAkB,EAAE,EAAA;AAAAa,YAAAA,SAAA,CAAApC,IAAA,GAAA,CAAA,CAAA;AAAA,YAAA,MAAA;AAAA,WAAA;AAAA,UAAA,MAClB,IAAIqC,KAAK,CAAC,mCAAmC,CAAC,CAAA;AAAA,QAAA,KAAA,CAAA;AAAAD,UAAAA,SAAA,CAAArC,IAAA,GAAA,CAAA,CAAA;AAAAqC,UAAAA,SAAA,CAAApC,IAAA,GAAA,CAAA,CAAA;UAAA,OAI1Bf,aAAa,CAACqD,MAAM,CAAC;AAC9CC,YAAAA,QAAQ,EAAE,CACT;AACC3B,cAAAA,SAAS,EAAE1B,gBAAgB;AAC3ByC,cAAAA,KAAK,EAAEA,KAAK;cACZa,WAAW,EAAE,IAAI;aACjB,CAAA;AAEH,WAAC,CAAC,CAAA;AAAA,QAAA,KAAA,CAAA;UAAAX,qBAAA,GAAAO,SAAA,CAAAjC,IAAA,CAAA;UARM2B,OAAO,GAAAD,qBAAA,CAAPC,OAAO,CAAA;AAUf;AACMC,UAAAA,IAAI,GAAG,CAAA,CAAAH,SAAA,GAAAE,OAAO,CAAC,CAAC,CAAC,MAAA,IAAA,IAAAF,SAAA,KAAVA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,SAAA,CAAYG,IAAI,KAAI,EAAE,CAAA;UACnCf,OAAO,CAACyB,GAAG,CAAC,yBAAyB,EAAEV,IAAI,CAACW,MAAM,EAAE,MAAM,CAAC,CAAA;AAErDV,UAAAA,gBAAgB,GAAG,EAAE,CAAA;AACrBC,UAAAA,GAAG,GAAG,EAAE,CAAA;AACRC,UAAAA,QAAQ,GAAG,IAAIS,GAAG,EAAE,CAAE;AAE5BZ,UAAAA,IAAI,CAACa,OAAO,CAAC,UAACC,GAAG,EAAEC,KAAK,EAAK;YAC5B,IAAID,GAAG,CAACE,eAAe,EAAE;AACxB,cAAA,IAAMC,MAAM,GAAGC,QAAQ,CAACJ,GAAG,CAACE,eAAe,CAAC,CAAA;AAC5Cf,cAAAA,gBAAgB,CAACkB,IAAI,CAACF,MAAM,CAAC,CAAA;cAC7Bd,QAAQ,CAACiB,GAAG,CAAAC,MAAAA,CAAAA,MAAA,CAAQJ,MAAM,CAAA,EAAIF,KAAK,CAAC,CAAA;AACrC,aAAA;YACA,IAAID,GAAG,CAACQ,EAAE,EAAE;AACXpB,cAAAA,GAAG,CAACiB,IAAI,CAACL,GAAG,CAACQ,EAAE,CAAC,CAAA;cAChBnB,QAAQ,CAACiB,GAAG,CAAA,KAAA,CAAAC,MAAA,CAAOP,GAAG,CAACQ,EAAE,CAAIP,EAAAA,KAAK,CAAC,CAAA;AACpC,aAAA;AACD,WAAC,CAAC,CAAA;AAEF9B,UAAAA,OAAO,CAACyB,GAAG,CAAC,WAAW,EAAET,gBAAgB,CAACU,MAAM,EAAE,sBAAsB,EAAET,GAAG,CAACS,MAAM,EAAE,kBAAkB,CAAC,CAAA;UAAC,OAAAN,SAAA,CAAAlC,MAAA,CACnG,QAAA,EAAA;AAAE8B,YAAAA,gBAAgB,EAAhBA,gBAAgB;AAAEC,YAAAA,GAAG,EAAHA,GAAG;AAAEC,YAAAA,QAAQ,EAARA,QAAAA;WAAU,CAAA,CAAA;AAAA,QAAA,KAAA,EAAA;AAAAE,UAAAA,SAAA,CAAArC,IAAA,GAAA,EAAA,CAAA;UAAAqC,SAAA,CAAAlB,EAAA,GAAAkB,SAAA,CAAA,OAAA,CAAA,CAAA,CAAA,CAAA,CAAA;UAE1CpB,OAAO,CAACG,KAAK,CAAC,wBAAwB,EAAAiB,SAAA,CAAAlB,EAAO,CAAC,CAAA;UAAC,MAAAkB,SAAA,CAAAlB,EAAA,CAAA;AAAA,QAAA,KAAA,EAAA,CAAA;AAAA,QAAA,KAAA,KAAA;UAAA,OAAAkB,SAAA,CAAAhC,IAAA,EAAA,CAAA;AAAA,OAAA;AAAA,KAAA,EAAAsB,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA;GAGhD,CAAA,CAAA,CAAA;EAAA,OA1CYF,SAAAA,aAAaA,CAAA8B,GAAA,EAAA;AAAA,IAAA,OAAA7B,KAAA,CAAApB,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAAA,CAAA,GA0CxB;AACF;AACA;AACA;AACA;AACA;IACaiD,6BAA6B,gBAAA,YAAA;AAAA,EAAA,IAAAC,KAAA,GAAAlE,iBAAA,eAAAC,mBAAA,EAAA,CAAAC,IAAA,CAAG,SAAAiE,QAAAA,CAAOC,QAAQ,EAAE/B,KAAK,EAAA;IAAA,IAAAgC,oBAAA,EAAA3B,gBAAA,EAAAC,GAAA,EAAAC,QAAA,EAAA0B,QAAA,CAAA;AAAA,IAAA,OAAArE,mBAAA,EAAA,CAAAK,IAAA,CAAA,SAAAiE,UAAAC,SAAA,EAAA;AAAA,MAAA,OAAA,CAAA,EAAA,QAAAA,SAAA,CAAA/D,IAAA,GAAA+D,SAAA,CAAA9D,IAAA;AAAA,QAAA,KAAA,CAAA;AAAA,UAAA,IAAA,EAC9D,CAAC2B,KAAK,IAAI,CAACJ,kBAAkB,EAAE,CAAA,EAAA;AAAAuC,YAAAA,SAAA,CAAA9D,IAAA,GAAA,CAAA,CAAA;AAAA,YAAA,MAAA;AAAA,WAAA;AAAA,UAAA,OAAA8D,SAAA,CAAA5D,MAAA,CAAA,QAAA,EAC3BwD,QAAQ,CAAA,CAAA;AAAA,QAAA,KAAA,CAAA;AAAAI,UAAAA,SAAA,CAAA/D,IAAA,GAAA,CAAA,CAAA;AAAA+D,UAAAA,SAAA,CAAA9D,IAAA,GAAA,CAAA,CAAA;UAAA,OAImCwB,aAAa,CAACG,KAAK,CAAC,CAAA;AAAA,QAAA,KAAA,CAAA;UAAAgC,oBAAA,GAAAG,SAAA,CAAA3D,IAAA,CAAA;UAA9D6B,gBAAgB,GAAA2B,oBAAA,CAAhB3B,gBAAgB,CAAA;UAAEC,GAAG,GAAA0B,oBAAA,CAAH1B,GAAG,CAAA;UAAEC,QAAQ,GAAAyB,oBAAA,CAARzB,QAAQ,CAAA;UAEvClB,OAAO,CAACyB,GAAG,CAAC,WAAW,EAAEiB,QAAQ,CAAChB,MAAM,EAAE,kBAAkB,EAAEV,gBAAgB,CAACU,MAAM,EAAE,sBAAsB,EAAET,GAAG,CAACS,MAAM,EAAE,KAAK,CAAC,CAAA;AACjI1B,UAAAA,OAAO,CAACyB,GAAG,CAAC,kCAAkC,EAAEiB,QAAQ,CAACK,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAACC,GAAG,CAAC,UAAAC,CAAC,EAAA;YAAA,OAAIA,CAAC,CAAClB,eAAe,CAAA;AAAA,WAAA,CAAC,CAAC,CAAA;AACjG/B,UAAAA,OAAO,CAACyB,GAAG,CAAC,qBAAqB,EAAEiB,QAAQ,CAACK,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAACC,GAAG,CAAC,UAAAC,CAAC,EAAA;YAAA,OAAIA,CAAC,CAACZ,EAAE,CAAA;AAAA,WAAA,CAAC,CAAC,CAAA;AACvErC,UAAAA,OAAO,CAACyB,GAAG,CAAC,kCAAkC,EAAET,gBAAgB,CAAC+B,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;AAC7E/C,UAAAA,OAAO,CAACyB,GAAG,CAAC,qBAAqB,EAAER,GAAG,CAAC8B,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;;AAEnD;AACMH,UAAAA,QAAQ,GAAGF,QAAQ,CAACQ,MAAM,CAAC,UAAAC,OAAO,EAAA;AAAA,YAAA,OACvCnC,gBAAgB,CAACoC,QAAQ,CAACD,OAAO,CAACpB,eAAe,CAAC,IAAId,GAAG,CAACmC,QAAQ,CAACD,OAAO,CAACd,EAAE,CAAC,CAAA;AAAA,WAC/E,CAAC,CAED;AACAO,UAAAA,QAAQ,CAACS,IAAI,CAAC,UAACC,CAAC,EAAEC,CAAC,EAAK;AAAA,YAAA,IAAAC,KAAA,EAAAC,aAAA,EAAAC,KAAA,EAAAC,cAAA,CAAA;AACvB;AACA,YAAA,IAAMC,MAAM,GAAAJ,CAAAA,KAAA,GAAAC,CAAAA,aAAA,GAAGvC,QAAQ,CAAC2C,GAAG,CAAA,MAAA,CAAAzB,MAAA,CAAQkB,CAAC,CAACvB,eAAe,CAAE,CAAC,MAAA0B,IAAAA,IAAAA,aAAA,KAAAA,KAAAA,CAAAA,GAAAA,aAAA,GAAIvC,QAAQ,CAAC2C,GAAG,CAAA,KAAA,CAAAzB,MAAA,CAAOkB,CAAC,CAACjB,EAAE,CAAE,CAAC,MAAA,IAAA,IAAAmB,KAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAA,GAAIM,QAAQ,CAAA;AACjG,YAAA,IAAMC,MAAM,GAAAL,CAAAA,KAAA,GAAAC,CAAAA,cAAA,GAAGzC,QAAQ,CAAC2C,GAAG,CAAA,MAAA,CAAAzB,MAAA,CAAQmB,CAAC,CAACxB,eAAe,CAAE,CAAC,MAAA4B,IAAAA,IAAAA,cAAA,KAAAA,KAAAA,CAAAA,GAAAA,cAAA,GAAIzC,QAAQ,CAAC2C,GAAG,CAAA,KAAA,CAAAzB,MAAA,CAAOmB,CAAC,CAAClB,EAAE,CAAE,CAAC,MAAA,IAAA,IAAAqB,KAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAA,GAAII,QAAQ,CAAA;YACjG,OAAOF,MAAM,GAAGG,MAAM,CAAA;AACvB,WAAC,CAAC,CAAA;UAEF/D,OAAO,CAACyB,GAAG,CAAC,kBAAkB,EAAEmB,QAAQ,CAAClB,MAAM,EAAE,8CAA8C,CAAC,CAAA;AAAC,UAAA,OAAAoB,SAAA,CAAA5D,MAAA,CAAA,QAAA,EAC1F0D,QAAQ,CAAA,CAAA;AAAA,QAAA,KAAA,EAAA;AAAAE,UAAAA,SAAA,CAAA/D,IAAA,GAAA,EAAA,CAAA;UAAA+D,SAAA,CAAA5C,EAAA,GAAA4C,SAAA,CAAA,OAAA,CAAA,CAAA,CAAA,CAAA,CAAA;UAEf9C,OAAO,CAACG,KAAK,CAAC,6DAA6D,EAAA2C,SAAA,CAAA5C,EAAO,CAAC,CAAA;AAAC,UAAA,OAAA4C,SAAA,CAAA5D,MAAA,CAAA,QAAA,EAC7EwD,QAAQ,CAAA,CAAA;AAAA,QAAA,KAAA,EAAA,CAAA;AAAA,QAAA,KAAA,KAAA;UAAA,OAAAI,SAAA,CAAA1D,IAAA,EAAA,CAAA;AAAA,OAAA;AAAA,KAAA,EAAAqD,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA;GAEhB,CAAA,CAAA,CAAA;AAAA,EAAA,OAAA,SAjCYF,6BAA6BA,CAAAyB,GAAA,EAAAC,GAAA,EAAA;AAAA,IAAA,OAAAzB,KAAA,CAAAnD,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAAA,CAiCzC;;;;"}
|
package/dist/util/filterUtil.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { slicedToArray as _slicedToArray, typeof as _typeof, toConsumableArray as _toConsumableArray, objectSpread2 as _objectSpread2, createForOfIteratorHelper as _createForOfIteratorHelper, asyncToGenerator as _asyncToGenerator, regeneratorRuntime as _regeneratorRuntime, defineProperty as _defineProperty } from '../_virtual/_rollupPluginBabelHelpers.js';
|
|
2
2
|
import { getDistinctItemsByProximity } from './mapUtil.js';
|
|
3
3
|
import { isAlgoliaAvailable, filterListingsByAlgoliaSearch } from './algoliaSearchUtil.js';
|
|
4
|
-
import Fuse from '
|
|
4
|
+
import Fuse from 'fuse.js';
|
|
5
5
|
|
|
6
6
|
var getFilterOptions = function getFilterOptions(listings, filteredListings, field) {
|
|
7
7
|
var excludeZeroCount = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
|
package/dist/util/twMerge.js
CHANGED
package/package.json
CHANGED
package/src/apis/hcApi.ts
CHANGED
|
@@ -13,7 +13,11 @@ const memoryStorage: MemoryStorage = {
|
|
|
13
13
|
|
|
14
14
|
function setStorage(key: keyof MemoryStorage, value: string): void {
|
|
15
15
|
try {
|
|
16
|
-
|
|
16
|
+
if (typeof window !== 'undefined' && window.sessionStorage) {
|
|
17
|
+
sessionStorage.setItem(key, value);
|
|
18
|
+
} else {
|
|
19
|
+
memoryStorage[key] = value;
|
|
20
|
+
}
|
|
17
21
|
} catch (error) {
|
|
18
22
|
memoryStorage[key] = value;
|
|
19
23
|
}
|
|
@@ -21,7 +25,10 @@ function setStorage(key: keyof MemoryStorage, value: string): void {
|
|
|
21
25
|
|
|
22
26
|
function getStorage(key: keyof MemoryStorage): string | null {
|
|
23
27
|
try {
|
|
24
|
-
|
|
28
|
+
if (typeof window !== 'undefined' && window.sessionStorage) {
|
|
29
|
+
return sessionStorage.getItem(key) || memoryStorage[key];
|
|
30
|
+
}
|
|
31
|
+
return memoryStorage[key];
|
|
25
32
|
} catch (error) {
|
|
26
33
|
return memoryStorage[key];
|
|
27
34
|
}
|
|
@@ -12,41 +12,12 @@ import { MapListProvider } from '~/contexts/mapListContext';
|
|
|
12
12
|
import { TrackEventProvider } from '~/contexts/trackEventContext';
|
|
13
13
|
import { ThemeProvider } from '~/contexts/themeContext';
|
|
14
14
|
|
|
15
|
-
import { getMapConfig } from '~/services/configService';
|
|
16
|
-
import { setClientAuthKey } from '~/clientToken.js';
|
|
17
15
|
import { initializeAlgoliaSearch } from '~/util/algoliaSearchUtil';
|
|
18
16
|
|
|
19
17
|
// Libraries for Google Maps
|
|
20
18
|
const LIBRARIES = ['places'];
|
|
21
19
|
|
|
22
|
-
//
|
|
23
|
-
function useSiteConfig(clientToken, siteConfiguration = null) {
|
|
24
|
-
const [siteConfig, setSiteConfig] = useState(siteConfiguration);
|
|
25
|
-
const [isLoading, setIsLoading] = useState(!siteConfiguration); // If config provided, not loading
|
|
26
|
-
const [error, setError] = useState(null);
|
|
27
|
-
|
|
28
|
-
useEffect(() => {
|
|
29
|
-
const fetchSiteConfig = async () => {
|
|
30
|
-
try {
|
|
31
|
-
setClientAuthKey(clientToken);
|
|
32
|
-
const configData = await getMapConfig(clientToken);
|
|
33
|
-
setSiteConfig(configData);
|
|
34
|
-
} catch (err) {
|
|
35
|
-
console.error('Failed to fetch site configuration:', err);
|
|
36
|
-
setError(err);
|
|
37
|
-
} finally {
|
|
38
|
-
setIsLoading(false);
|
|
39
|
-
}
|
|
40
|
-
};
|
|
41
|
-
if(!siteConfig){
|
|
42
|
-
fetchSiteConfig();
|
|
43
|
-
} else {
|
|
44
|
-
setIsLoading(false); // Config already provided
|
|
45
|
-
}
|
|
46
|
-
}, [clientToken, siteConfig]);
|
|
47
|
-
|
|
48
|
-
return { siteConfig, isLoading, error };
|
|
49
|
-
}
|
|
20
|
+
// Since all data is now passed in statically, no need to fetch config
|
|
50
21
|
|
|
51
22
|
// Component to handle all context providers
|
|
52
23
|
const ContextProviders = ({ children, siteConfig, trackEvent, googleMapsApiKey, ...mapListProps }) => { return(
|
|
@@ -169,20 +140,19 @@ export const HireControlMap = ({
|
|
|
169
140
|
}
|
|
170
141
|
}
|
|
171
142
|
}) => {
|
|
172
|
-
//
|
|
173
|
-
const
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
143
|
+
// Initialize Algolia when credentials are provided (client-side only)
|
|
144
|
+
const [algoliaInitialized, setAlgoliaInitialized] = useState(false);
|
|
145
|
+
|
|
146
|
+
useEffect(() => {
|
|
147
|
+
if (algoliaAppId && algoliaApiKey && algoliaIndexName && typeof window !== 'undefined') {
|
|
148
|
+
initializeAlgoliaSearch(algoliaAppId, algoliaApiKey, algoliaIndexName).then(initialized => {
|
|
149
|
+
setAlgoliaInitialized(initialized);
|
|
150
|
+
if (initialized) {
|
|
151
|
+
console.log('Algolia search initialized successfully');
|
|
152
|
+
}
|
|
153
|
+
});
|
|
183
154
|
}
|
|
184
|
-
|
|
185
|
-
});
|
|
155
|
+
}, [algoliaAppId, algoliaApiKey, algoliaIndexName]);
|
|
186
156
|
|
|
187
157
|
// Load Google Maps (non-blocking - map component will handle this)
|
|
188
158
|
const { isLoaded: isMapsLoaded, loadError } = useLoadScript({
|
|
@@ -202,13 +172,10 @@ export const HireControlMap = ({
|
|
|
202
172
|
return <div className="hc-p-4">Error loading Google Maps</div>;
|
|
203
173
|
}
|
|
204
174
|
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
// Render immediately even if config is loading - use defaults or provided siteConfiguration
|
|
210
|
-
if (!siteConfig) {
|
|
211
|
-
return null; // Brief flash, config should load very quickly
|
|
175
|
+
// siteConfiguration is now required - all data passed in statically
|
|
176
|
+
if (!siteConfiguration) {
|
|
177
|
+
console.error('Site configuration is required');
|
|
178
|
+
return <div className="hc-p-4">Site configuration is required</div>;
|
|
212
179
|
}
|
|
213
180
|
|
|
214
181
|
// Prepare props for MapListProvider
|
|
@@ -222,7 +189,7 @@ export const HireControlMap = ({
|
|
|
222
189
|
easyApplyText,
|
|
223
190
|
listings,
|
|
224
191
|
entities,
|
|
225
|
-
siteConfig,
|
|
192
|
+
siteConfig: siteConfiguration,
|
|
226
193
|
getListingEntitiesCallback,
|
|
227
194
|
setFiltersUrl,
|
|
228
195
|
hiddenFilters,
|
|
@@ -241,17 +208,17 @@ export const HireControlMap = ({
|
|
|
241
208
|
};
|
|
242
209
|
|
|
243
210
|
// Calculate effective showMap value
|
|
244
|
-
const effectiveShowMap = hideMap ? false :
|
|
211
|
+
const effectiveShowMap = hideMap ? false : siteConfiguration.showMap;
|
|
245
212
|
|
|
246
213
|
// Prepare marker configuration
|
|
247
214
|
const markerConfigs = {
|
|
248
|
-
fillColor:
|
|
249
|
-
strokeColor:
|
|
250
|
-
selectedFillColor:
|
|
251
|
-
selectedStrokeColor:
|
|
215
|
+
fillColor: siteConfiguration.colors.primary,
|
|
216
|
+
strokeColor: siteConfiguration.colors.primaryDark,
|
|
217
|
+
selectedFillColor: siteConfiguration.colors.secondary,
|
|
218
|
+
selectedStrokeColor: siteConfiguration.colors.secondaryDark,
|
|
252
219
|
placeMarkers: {
|
|
253
|
-
colors:
|
|
254
|
-
size:
|
|
220
|
+
colors: siteConfiguration.pointsOfInterestConfig.placeMarkerColors,
|
|
221
|
+
size: siteConfiguration.pointsOfInterestConfig.placeMarkerSize
|
|
255
222
|
}
|
|
256
223
|
};
|
|
257
224
|
|
|
@@ -259,7 +226,7 @@ export const HireControlMap = ({
|
|
|
259
226
|
// Only Google Maps components will wait for isMapsLoaded
|
|
260
227
|
return (
|
|
261
228
|
<ContextProviders
|
|
262
|
-
siteConfig={
|
|
229
|
+
siteConfig={siteConfiguration}
|
|
263
230
|
trackEvent={trackEvent}
|
|
264
231
|
googleMapsApiKey={googleMapsApiKey || process.env.GOOGLE_MAPS_API_KEY}
|
|
265
232
|
{...mapListProps}
|
|
@@ -279,12 +246,12 @@ export const HireControlMap = ({
|
|
|
279
246
|
)}
|
|
280
247
|
<MapList
|
|
281
248
|
containerStyle={containerStyle}
|
|
282
|
-
mapPosition={
|
|
249
|
+
mapPosition={siteConfiguration.mapPosition}
|
|
283
250
|
showMap={effectiveShowMap}
|
|
284
|
-
fieldsShown={
|
|
285
|
-
specialFeatures={
|
|
286
|
-
fieldNames={
|
|
287
|
-
placeMappings={
|
|
251
|
+
fieldsShown={siteConfiguration.fieldsShown}
|
|
252
|
+
specialFeatures={siteConfiguration.specialFeatures}
|
|
253
|
+
fieldNames={siteConfiguration.fieldNames}
|
|
254
|
+
placeMappings={siteConfiguration.pointsOfInterestConfig.placeMappings ?? {}}
|
|
288
255
|
markerConfigs={markerConfigs}
|
|
289
256
|
/>
|
|
290
257
|
</Grid>
|
|
@@ -4,9 +4,6 @@ import { generateFilterOptions, applyFilters, filterListingsByLocation } from '~
|
|
|
4
4
|
import { getStorageObject, setStorageObject } from '~/util/localStorageUtil';
|
|
5
5
|
import { updateURLWithFilters, filtersFromURL } from '~/util/urlFilterUtil';
|
|
6
6
|
|
|
7
|
-
import { getListingEntities } from "~/services/listingEntityService";
|
|
8
|
-
import fetchListings from '~/services/listingAggregatorService';
|
|
9
|
-
|
|
10
7
|
import { Listing } from '~/types/Listings';
|
|
11
8
|
import { ListingEntity } from '~/types/ListingEntity';
|
|
12
9
|
import { Recruiter } from '~/types/Recruiter';
|
|
@@ -273,12 +270,12 @@ export const MapListProvider: React.FC<MapListProviderProps> = ({
|
|
|
273
270
|
|
|
274
271
|
async function fetchEntities() {
|
|
275
272
|
try {
|
|
276
|
-
|
|
277
|
-
if (getListingEntitiesCallback) {
|
|
278
|
-
|
|
279
|
-
} else {
|
|
280
|
-
fetchedEntities = await getListingEntities(`${commuteLocation.lat}, ${commuteLocation.lng}`);
|
|
273
|
+
// Only fetch if callback is provided
|
|
274
|
+
if (!getListingEntitiesCallback) {
|
|
275
|
+
return;
|
|
281
276
|
}
|
|
277
|
+
|
|
278
|
+
const fetchedEntities = await getListingEntitiesCallback(`${commuteLocation.lat}, ${commuteLocation.lng}`);
|
|
282
279
|
setListingEntities(fetchedEntities);
|
|
283
280
|
// Update travelTime on listings
|
|
284
281
|
const newFilteredListings: Listing[] = [...filteredListings];
|
|
@@ -306,42 +303,42 @@ export const MapListProvider: React.FC<MapListProviderProps> = ({
|
|
|
306
303
|
fetchEntities();
|
|
307
304
|
}, [commuteLocation, allListings, siteConfig.companyId, getListingEntitiesCallback, noEntities]);
|
|
308
305
|
|
|
306
|
+
// Set listings from passed-in data
|
|
309
307
|
useEffect(() => {
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
308
|
+
if (!listings || listings.length === 0) {
|
|
309
|
+
setLoading(false);
|
|
310
|
+
return;
|
|
313
311
|
}
|
|
314
312
|
|
|
313
|
+
setLoading(true);
|
|
314
|
+
|
|
315
315
|
try {
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
entitiesByKey,
|
|
319
|
-
distinctItems
|
|
320
|
-
} = await fetchListings(commuteLocation, entities, listings, getListingEntitiesCallback, noEntities);
|
|
316
|
+
// Apply default filters if provided
|
|
317
|
+
let processedListings = listings;
|
|
321
318
|
if (defaultFilters) {
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
319
|
+
processedListings = listings.filter(listing => {
|
|
320
|
+
if (!listing.fields) return false;
|
|
321
|
+
|
|
322
|
+
return Object.keys(defaultFilters).every(filterKey => {
|
|
323
|
+
const filterValues = defaultFilters[filterKey as keyof typeof defaultFilters];
|
|
324
|
+
const listingValue = listing.fields ? listing.fields[filterKey as keyof typeof listing.fields] : null;
|
|
325
|
+
return filterValues.includes(listingValue);
|
|
326
|
+
});
|
|
329
327
|
});
|
|
330
|
-
});
|
|
331
|
-
setAllListings(filteredListings);
|
|
332
|
-
} else {
|
|
333
|
-
setAllListings(listingsResult);
|
|
334
|
-
}
|
|
335
|
-
console.log('handleFetchListings: Set allListings to', listingsResult.length, 'items');
|
|
336
|
-
setListingEntities(entitiesByKey);
|
|
337
|
-
setMapItems(distinctItems);
|
|
338
|
-
} catch (error) {
|
|
339
|
-
console.log(error);
|
|
340
328
|
}
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
329
|
+
|
|
330
|
+
setAllListings(processedListings);
|
|
331
|
+
console.log('Set allListings to', processedListings.length, 'items');
|
|
332
|
+
|
|
333
|
+
// Map items will be set when entities are processed
|
|
334
|
+
// For now, just set empty object - will be populated when entities arrive
|
|
335
|
+
setMapItems({});
|
|
336
|
+
} catch (error) {
|
|
337
|
+
console.error('Error processing listings:', error);
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
setLoading(false);
|
|
341
|
+
}, [listings, defaultFilters]);
|
|
345
342
|
|
|
346
343
|
useEffect(() => {
|
|
347
344
|
const processListings = async () => {
|
package/src/index.js
CHANGED
|
@@ -1,7 +1,18 @@
|
|
|
1
|
-
import { liteClient as algoliasearch } from 'algoliasearch/lite';
|
|
2
|
-
|
|
3
1
|
let algoliaClient = null;
|
|
4
2
|
let algoliaIndexName = null;
|
|
3
|
+
let algoliaSearchModule = null;
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Lazy load algoliasearch to avoid SSR issues
|
|
7
|
+
*/
|
|
8
|
+
const getAlgoliaSearch = async () => {
|
|
9
|
+
if (typeof window === 'undefined') return null;
|
|
10
|
+
if (!algoliaSearchModule) {
|
|
11
|
+
const { liteClient } = await import('algoliasearch/lite');
|
|
12
|
+
algoliaSearchModule = liteClient;
|
|
13
|
+
}
|
|
14
|
+
return algoliaSearchModule;
|
|
15
|
+
};
|
|
5
16
|
|
|
6
17
|
/**
|
|
7
18
|
* Initialize Algolia search client
|
|
@@ -9,13 +20,18 @@ let algoliaIndexName = null;
|
|
|
9
20
|
* @param {string} apiKey - Algolia Search API Key
|
|
10
21
|
* @param {string} indexName - Algolia Index Name
|
|
11
22
|
*/
|
|
12
|
-
export const initializeAlgoliaSearch = (appId, apiKey, indexName) => {
|
|
23
|
+
export const initializeAlgoliaSearch = async (appId, apiKey, indexName) => {
|
|
13
24
|
if (!appId || !apiKey || !indexName) {
|
|
14
25
|
console.warn('Algolia search not initialized: missing configuration');
|
|
15
26
|
return false;
|
|
16
27
|
}
|
|
17
28
|
|
|
18
29
|
try {
|
|
30
|
+
const algoliasearch = await getAlgoliaSearch();
|
|
31
|
+
if (!algoliasearch) {
|
|
32
|
+
console.warn('Algolia search not available (SSR context)');
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
19
35
|
algoliaClient = algoliasearch(appId, apiKey);
|
|
20
36
|
algoliaIndexName = indexName;
|
|
21
37
|
return true;
|
package/dist/apis/hcApi.js
DELETED
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
import { getClientAuthKey } from '../clientToken.js';
|
|
2
|
-
|
|
3
|
-
const baseURL = "https://qat-api.myhirecontrol.com";
|
|
4
|
-
const memoryStorage = {
|
|
5
|
-
authToken: null,
|
|
6
|
-
tokenExpiration: null
|
|
7
|
-
};
|
|
8
|
-
function setStorage(key, value) {
|
|
9
|
-
try {
|
|
10
|
-
sessionStorage.setItem(key, value);
|
|
11
|
-
}
|
|
12
|
-
catch (error) {
|
|
13
|
-
memoryStorage[key] = value;
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
function getStorage(key) {
|
|
17
|
-
try {
|
|
18
|
-
return sessionStorage.getItem(key) || memoryStorage[key];
|
|
19
|
-
}
|
|
20
|
-
catch (error) {
|
|
21
|
-
return memoryStorage[key];
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
const login = async () => {
|
|
25
|
-
const clientAuthKey = getClientAuthKey();
|
|
26
|
-
try {
|
|
27
|
-
const response = await fetch(`${baseURL}/auth/login`, {
|
|
28
|
-
method: 'POST',
|
|
29
|
-
headers: {
|
|
30
|
-
'Content-Type': 'application/json'
|
|
31
|
-
},
|
|
32
|
-
body: JSON.stringify({
|
|
33
|
-
clientAuthKey: clientAuthKey
|
|
34
|
-
})
|
|
35
|
-
});
|
|
36
|
-
if (!response.ok) {
|
|
37
|
-
throw new Error('Login failed');
|
|
38
|
-
}
|
|
39
|
-
const data = await response.json();
|
|
40
|
-
if (data.token && data.expiration) {
|
|
41
|
-
setStorage('authToken', data.token);
|
|
42
|
-
setStorage('tokenExpiration', data.expiration);
|
|
43
|
-
return { token: data.token, expiration: data.expiration };
|
|
44
|
-
}
|
|
45
|
-
else {
|
|
46
|
-
throw new Error('Invalid login response');
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
catch (error) {
|
|
50
|
-
console.error('Login failed:', error);
|
|
51
|
-
throw error;
|
|
52
|
-
}
|
|
53
|
-
};
|
|
54
|
-
const fetchWithAuth = async (url, options = {}) => {
|
|
55
|
-
let token = getStorage('authToken');
|
|
56
|
-
const expirationDateTime = getStorage('tokenExpiration');
|
|
57
|
-
const currentTime = new Date();
|
|
58
|
-
if (!token || !expirationDateTime || new Date(expirationDateTime) <= currentTime) {
|
|
59
|
-
const authResponse = await login();
|
|
60
|
-
token = authResponse.token;
|
|
61
|
-
}
|
|
62
|
-
const headers = new Headers(options.headers || {});
|
|
63
|
-
headers.append('Authorization', `Bearer ${token}`);
|
|
64
|
-
const finalOptions = {
|
|
65
|
-
...options,
|
|
66
|
-
headers
|
|
67
|
-
};
|
|
68
|
-
const response = await fetch(`${baseURL}${url}`, finalOptions);
|
|
69
|
-
if (!response.ok)
|
|
70
|
-
throw new Error('Network response was not ok.');
|
|
71
|
-
return response;
|
|
72
|
-
};
|
|
73
|
-
var api = {
|
|
74
|
-
get: async (url) => {
|
|
75
|
-
const response = await fetchWithAuth(url);
|
|
76
|
-
return await response.json();
|
|
77
|
-
},
|
|
78
|
-
post: async (url, data) => {
|
|
79
|
-
const response = await fetchWithAuth(url, {
|
|
80
|
-
method: 'POST',
|
|
81
|
-
headers: {
|
|
82
|
-
'Content-Type': 'application/json'
|
|
83
|
-
},
|
|
84
|
-
body: JSON.stringify(data)
|
|
85
|
-
});
|
|
86
|
-
return await response.json();
|
|
87
|
-
}
|
|
88
|
-
};
|
|
89
|
-
|
|
90
|
-
export { api as default };
|
|
91
|
-
//# sourceMappingURL=hcApi.js.map
|
package/dist/apis/hcApi.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hcApi.js","sources":["../../src/apis/hcApi.ts"],"sourcesContent":["import { getClientAuthKey } from '~/clientToken';\nconst baseURL = process.env.HC_API_BASE_URL as string;\n\ninterface MemoryStorage {\n\tauthToken: string | null;\n\ttokenExpiration: string | null;\n}\n\nconst memoryStorage: MemoryStorage = {\n\tauthToken: null,\n\ttokenExpiration: null\n};\n\nfunction setStorage(key: keyof MemoryStorage, value: string): void {\n\ttry {\n\t\tsessionStorage.setItem(key, value);\n\t} catch (error) {\n\t\tmemoryStorage[key] = value;\n\t}\n}\n\nfunction getStorage(key: keyof MemoryStorage): string | null {\n\ttry {\n\t\treturn sessionStorage.getItem(key) || memoryStorage[key];\n\t} catch (error) {\n\t\treturn memoryStorage[key];\n\t}\n}\n\ninterface AuthResponse {\n\ttoken: string;\n\texpiration: string;\n}\n\nconst login = async (): Promise<AuthResponse> => {\n\tconst clientAuthKey = getClientAuthKey();\n\n\ttry {\n\t\tconst response = await fetch(`${baseURL}/auth/login`, {\n\t\t\tmethod: 'POST',\n\t\t\theaders: {\n\t\t\t\t'Content-Type': 'application/json'\n\t\t\t},\n\t\t\tbody: JSON.stringify({\n\t\t\t\tclientAuthKey: clientAuthKey\n\t\t\t})\n\t\t});\n\n\t\tif (!response.ok) {\n\t\t\tthrow new Error('Login failed');\n\t\t}\n\n\t\tconst data = await response.json();\n\n\t\tif (data.token && data.expiration) {\n\t\t\tsetStorage('authToken', data.token);\n\t\t\tsetStorage('tokenExpiration', data.expiration);\n\t\t\treturn { token: data.token, expiration: data.expiration };\n\t\t} else {\n\t\t\tthrow new Error('Invalid login response');\n\t\t}\n\t} catch (error) {\n\t\tconsole.error('Login failed:', error);\n\t\tthrow error;\n\t}\n};\n\nconst fetchWithAuth = async (url: string, options: RequestInit = {}): Promise<Response> => {\n\tlet token = getStorage('authToken');\n\n\tconst expirationDateTime = getStorage('tokenExpiration');\n\tconst currentTime = new Date();\n\n\tif (!token || !expirationDateTime || new Date(expirationDateTime) <= currentTime) {\n\t\tconst authResponse = await login();\n\t\ttoken = authResponse.token;\n\t}\n\n\tconst headers = new Headers(options.headers || {});\n\theaders.append('Authorization', `Bearer ${token}`);\n\n\tconst finalOptions = {\n\t\t...options,\n\t\theaders\n\t};\n\n\tconst response = await fetch(`${baseURL}${url}`, finalOptions);\n\n\tif (!response.ok) throw new Error('Network response was not ok.');\n\n\treturn response;\n};\n\nexport default {\n\tget: async <T>(url: string): Promise<T> => {\n\t\tconst response = await fetchWithAuth(url);\n\t\treturn await response.json() as T;\n\t},\n\tpost: async <T>(url: string, data: any): Promise<T> => {\n\t\tconst response = await fetchWithAuth(url, {\n\t\t\tmethod: 'POST',\n\t\t\theaders: {\n\t\t\t\t'Content-Type': 'application/json'\n\t\t\t},\n\t\t\tbody: JSON.stringify(data)\n\t\t});\n\t\treturn await response.json() as T;\n\t}\n};\n"],"names":[],"mappings":"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"}
|
package/dist/clientToken.js
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
var clientAuthKey = null;
|
|
2
|
-
var setClientAuthKey = function setClientAuthKey(key) {
|
|
3
|
-
clientAuthKey = key;
|
|
4
|
-
};
|
|
5
|
-
var getClientAuthKey = function getClientAuthKey() {
|
|
6
|
-
return clientAuthKey;
|
|
7
|
-
};
|
|
8
|
-
|
|
9
|
-
export { getClientAuthKey, setClientAuthKey };
|
|
10
|
-
//# sourceMappingURL=clientToken.js.map
|
package/dist/clientToken.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"clientToken.js","sources":["../src/clientToken.js"],"sourcesContent":["let clientAuthKey = null;\n\nexport const setClientAuthKey = key => {\n\tclientAuthKey = key;\n};\n\nexport const getClientAuthKey = () => {\n\treturn clientAuthKey;\n};\n"],"names":["clientAuthKey","setClientAuthKey","key","getClientAuthKey"],"mappings":"AAAA,IAAIA,aAAa,GAAG,IAAI,CAAA;IAEXC,gBAAgB,GAAG,SAAnBA,gBAAgBA,CAAGC,GAAG,EAAI;AACtCF,EAAAA,aAAa,GAAGE,GAAG,CAAA;AACpB,EAAC;IAEYC,gBAAgB,GAAG,SAAnBA,gBAAgBA,GAAS;AACrC,EAAA,OAAOH,aAAa,CAAA;AACrB;;;;"}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import Grid from '../grid.js';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Simple skeleton component that renders the basic structure
|
|
6
|
-
* Shows placeholder boxes for filters, list, and map
|
|
7
|
-
*/
|
|
8
|
-
var MapSkeleton = function MapSkeleton(_ref) {
|
|
9
|
-
var _ref$hideFilters = _ref.hideFilters,
|
|
10
|
-
hideFilters = _ref$hideFilters === void 0 ? false : _ref$hideFilters,
|
|
11
|
-
_ref$showMap = _ref.showMap,
|
|
12
|
-
showMap = _ref$showMap === void 0 ? true : _ref$showMap,
|
|
13
|
-
_ref$containerStyle = _ref.containerStyle,
|
|
14
|
-
containerStyle = _ref$containerStyle === void 0 ? {
|
|
15
|
-
height: '100vh'
|
|
16
|
-
} : _ref$containerStyle,
|
|
17
|
-
_ref$mapPosition = _ref.mapPosition,
|
|
18
|
-
mapPosition = _ref$mapPosition === void 0 ? 'right' : _ref$mapPosition;
|
|
19
|
-
var isMapOnTop = mapPosition === 'top';
|
|
20
|
-
return /*#__PURE__*/React.createElement("div", {
|
|
21
|
-
className: "hc-bundle",
|
|
22
|
-
style: containerStyle
|
|
23
|
-
}, /*#__PURE__*/React.createElement(Grid, {
|
|
24
|
-
as: "section",
|
|
25
|
-
id: "job-search-interface",
|
|
26
|
-
columns: hideFilters ? 'hc-grid-cols-1' : 'md:hc-grid-cols-[1fr_2.5fr] lg:hc-grid-cols-[1fr_3.5fr]',
|
|
27
|
-
gap: "hc-gap-0",
|
|
28
|
-
autoRows: false,
|
|
29
|
-
className: 'hc-items-stretch hc-divide-x hc-divide-uiAccent/20'
|
|
30
|
-
}, !hideFilters && /*#__PURE__*/React.createElement(Grid.Item, {
|
|
31
|
-
className: "hc-bg-gray-50 hc-animate-pulse hc-hidden md:hc-block"
|
|
32
|
-
}), /*#__PURE__*/React.createElement(Grid.Item, null, showMap ? /*#__PURE__*/React.createElement("div", {
|
|
33
|
-
className: "hc-h-full hc-flex ".concat(isMapOnTop ? 'hc-flex-col' : 'hc-flex-col md:hc-flex-row')
|
|
34
|
-
}, /*#__PURE__*/React.createElement("div", {
|
|
35
|
-
className: "hc-flex-1 hc-bg-white hc-animate-pulse ".concat(isMapOnTop ? 'hc-order-2' : 'hc-order-2 md:hc-order-1')
|
|
36
|
-
}), /*#__PURE__*/React.createElement("div", {
|
|
37
|
-
className: "hc-flex-1 hc-bg-gray-100 hc-animate-pulse ".concat(isMapOnTop ? 'hc-order-1' : 'hc-order-1 md:hc-order-2'),
|
|
38
|
-
style: {
|
|
39
|
-
minHeight: '300px'
|
|
40
|
-
}
|
|
41
|
-
})) :
|
|
42
|
-
/*#__PURE__*/
|
|
43
|
-
/* Just List Box */
|
|
44
|
-
React.createElement("div", {
|
|
45
|
-
className: "hc-h-full hc-bg-white hc-animate-pulse"
|
|
46
|
-
}))));
|
|
47
|
-
};
|
|
48
|
-
|
|
49
|
-
export { MapSkeleton as default };
|
|
50
|
-
//# sourceMappingURL=map-skeleton.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"map-skeleton.js","sources":["../../../../src/components/modules/skeleton/map-skeleton.js"],"sourcesContent":["import React from 'react';\nimport Grid from '~/components/modules/grid';\n\n/**\n * Simple skeleton component that renders the basic structure\n * Shows placeholder boxes for filters, list, and map\n */\nconst MapSkeleton = ({ \n\thideFilters = false, \n\tshowMap = true, \n\tcontainerStyle = { height: '100vh' },\n\tmapPosition = 'right'\n}) => {\n\tconst isMapOnTop = mapPosition === 'top';\n\t\n\treturn (\n\t\t<div className=\"hc-bundle\" style={containerStyle}>\n\t\t\t<Grid\n\t\t\t\tas='section'\n\t\t\t\tid='job-search-interface'\n\t\t\t\tcolumns={hideFilters ? 'hc-grid-cols-1' : 'md:hc-grid-cols-[1fr_2.5fr] lg:hc-grid-cols-[1fr_3.5fr]'}\n\t\t\t\tgap='hc-gap-0'\n\t\t\t\tautoRows={false}\n\t\t\t\tclassName={'hc-items-stretch hc-divide-x hc-divide-uiAccent/20'}\n\t\t\t>\n\t\t\t\t{/* Filter Column */}\n\t\t\t\t{!hideFilters && (\n\t\t\t\t\t<Grid.Item className='hc-bg-gray-50 hc-animate-pulse hc-hidden md:hc-block' />\n\t\t\t\t)}\n\t\t\t\t\n\t\t\t\t{/* Main Content Area */}\n\t\t\t\t<Grid.Item>\n\t\t\t\t\t{showMap ? (\n\t\t\t\t\t\t<div className={`hc-h-full hc-flex ${isMapOnTop ? 'hc-flex-col' : 'hc-flex-col md:hc-flex-row'}`}>\n\t\t\t\t\t\t\t{/* List Box */}\n\t\t\t\t\t\t\t<div className={`hc-flex-1 hc-bg-white hc-animate-pulse ${isMapOnTop ? 'hc-order-2' : 'hc-order-2 md:hc-order-1'}`} />\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{/* Map Box */}\n\t\t\t\t\t\t\t<div className={`hc-flex-1 hc-bg-gray-100 hc-animate-pulse ${isMapOnTop ? 'hc-order-1' : 'hc-order-1 md:hc-order-2'}`} style={{ minHeight: '300px' }} />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t/* Just List Box */\n\t\t\t\t\t\t<div className=\"hc-h-full hc-bg-white hc-animate-pulse\" />\n\t\t\t\t\t)}\n\t\t\t\t</Grid.Item>\n\t\t\t</Grid>\n\t\t</div>\n\t);\n};\n\nexport default MapSkeleton;\n"],"names":["MapSkeleton","_ref","_ref$hideFilters","hideFilters","_ref$showMap","showMap","_ref$containerStyle","containerStyle","height","_ref$mapPosition","mapPosition","isMapOnTop","React","createElement","className","style","Grid","as","id","columns","gap","autoRows","Item","concat","minHeight"],"mappings":";;;AAGA;AACA;AACA;AACA;AACA,IAAMA,WAAW,GAAG,SAAdA,WAAWA,CAAAC,IAAA,EAKX;AAAA,EAAA,IAAAC,gBAAA,GAAAD,IAAA,CAJLE,WAAW;AAAXA,IAAAA,WAAW,GAAAD,gBAAA,KAAG,KAAA,CAAA,GAAA,KAAK,GAAAA,gBAAA;IAAAE,YAAA,GAAAH,IAAA,CACnBI,OAAO;AAAPA,IAAAA,OAAO,GAAAD,YAAA,KAAG,KAAA,CAAA,GAAA,IAAI,GAAAA,YAAA;IAAAE,mBAAA,GAAAL,IAAA,CACdM,cAAc;IAAdA,cAAc,GAAAD,mBAAA,KAAG,KAAA,CAAA,GAAA;AAAEE,MAAAA,MAAM,EAAE,OAAA;AAAQ,KAAC,GAAAF,mBAAA;IAAAG,gBAAA,GAAAR,IAAA,CACpCS,WAAW;AAAXA,IAAAA,WAAW,GAAAD,gBAAA,KAAG,KAAA,CAAA,GAAA,OAAO,GAAAA,gBAAA,CAAA;AAErB,EAAA,IAAME,UAAU,GAAGD,WAAW,KAAK,KAAK,CAAA;EAExC,oBACCE,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,WAAW;AAACC,IAAAA,KAAK,EAAER,cAAAA;AAAe,GAAA,eAChDK,KAAA,CAAAC,aAAA,CAACG,IAAI,EAAA;AACJC,IAAAA,EAAE,EAAC,SAAS;AACZC,IAAAA,EAAE,EAAC,sBAAsB;AACzBC,IAAAA,OAAO,EAAEhB,WAAW,GAAG,gBAAgB,GAAG,yDAA0D;AACpGiB,IAAAA,GAAG,EAAC,UAAU;AACdC,IAAAA,QAAQ,EAAE,KAAM;AAChBP,IAAAA,SAAS,EAAE,oDAAA;GAGV,EAAA,CAACX,WAAW,iBACZS,KAAA,CAAAC,aAAA,CAACG,IAAI,CAACM,IAAI,EAAA;AAACR,IAAAA,SAAS,EAAC,sDAAA;AAAsD,GAAE,CAC7E,eAGDF,KAAA,CAAAC,aAAA,CAACG,IAAI,CAACM,IAAI,EACRjB,IAAAA,EAAAA,OAAO,gBACPO,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,uBAAAS,MAAA,CAAuBZ,UAAU,GAAG,aAAa,GAAG,4BAA4B,CAAA;GAE7FC,eAAAA,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,4CAAAS,MAAA,CAA4CZ,UAAU,GAAG,YAAY,GAAG,0BAA0B,CAAA;AAAG,GAAE,CAAC,eAGtHC,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;IAAKC,SAAS,EAAA,4CAAA,CAAAS,MAAA,CAA+CZ,UAAU,GAAG,YAAY,GAAG,0BAA0B,CAAG;AAACI,IAAAA,KAAK,EAAE;AAAES,MAAAA,SAAS,EAAE,OAAA;AAAQ,KAAA;AAAE,GAAE,CACnJ,CAAC;AAAA;AAEN;AACAZ,EAAAA,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,wCAAA;GAA0C,CAEhD,CACN,CACF,CAAC,CAAA;AAER;;;;"}
|