@blaze-cms/plugin-data-ui 0.146.0-node18-core-styles-tooltips.58 → 0.146.0-node18-tooltips.44

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.
Files changed (90) hide show
  1. package/CHANGELOG.md +38 -171
  2. package/lib/components/EntityManager/Entity/EntitiyNavLinks/EntityNavLinks.js +0 -1
  3. package/lib/components/EntityManager/Entity/EntitiyNavLinks/EntityNavLinks.js.map +1 -1
  4. package/lib/components/EntityManager/Entity/Entity.js +5 -5
  5. package/lib/components/EntityManager/Entity/Entity.js.map +1 -1
  6. package/lib/components/EntityManager/Entity/EntityHeader/HeaderPreviewButton/HeaderPreviewButton.js +1 -1
  7. package/lib/components/EntityManager/Entity/EntityHeader/HeaderPreviewButton/HeaderPreviewButton.js.map +1 -1
  8. package/lib/components/EntityManager/Entity/SideBarRelations/helpers/build-dynamic-query.js +0 -1
  9. package/lib/components/EntityManager/Entity/SideBarRelations/helpers/build-dynamic-query.js.map +1 -1
  10. package/lib/components/EntityManager/Entity/SideBarRelations/index.js +5 -5
  11. package/lib/components/EntityManager/Entity/SideBarRelations/index.js.map +1 -1
  12. package/lib/components/EntityManager/Entity/actions-handlers/create/submit.js +1 -1
  13. package/lib/components/EntityManager/Entity/actions-handlers/create/submit.js.map +1 -1
  14. package/lib/components/EntityManager/Entity/actions-handlers/delete/delete.js +1 -1
  15. package/lib/components/EntityManager/Entity/actions-handlers/delete/delete.js.map +1 -1
  16. package/lib/components/EntityManager/Entity/actions-handlers/shared/publish.js +1 -1
  17. package/lib/components/EntityManager/Entity/actions-handlers/shared/publish.js.map +1 -1
  18. package/lib/components/EntityManager/Entity/actions-handlers/update/submit.js +1 -1
  19. package/lib/components/EntityManager/Entity/actions-handlers/update/submit.js.map +1 -1
  20. package/lib/components/EntityManager/EntityManager.js +3 -3
  21. package/lib/components/EntityManager/EntityManager.js.map +1 -1
  22. package/lib/components/EntityManager/utils/entity.js +1 -1
  23. package/lib/components/EntityManager/utils/entity.js.map +1 -1
  24. package/lib/components/EntityManager/utils/entityAvailableActions.js +2 -2
  25. package/lib/components/EntityManager/utils/entityAvailableActions.js.map +1 -1
  26. package/lib/components/InfoBoxes/InfoBoxes.js +0 -1
  27. package/lib/components/InfoBoxes/InfoBoxes.js.map +1 -1
  28. package/lib/components/InfoBoxes/container/InfoBoxContainer.js +1 -1
  29. package/lib/components/InfoBoxes/container/InfoBoxContainer.js.map +1 -1
  30. package/lib/components/InfoBoxes/helpers/build-dynamic-query.js +0 -1
  31. package/lib/components/InfoBoxes/helpers/build-dynamic-query.js.map +1 -1
  32. package/lib/components/ListingTable/ListingTable.js +7 -7
  33. package/lib/components/ListingTable/ListingTable.js.map +1 -1
  34. package/lib/components/ListingTable/ListingTableContent/ListingTableContent.js +1 -1
  35. package/lib/components/ListingTable/ListingTableContent/ListingTableContent.js.map +1 -1
  36. package/lib/components/ListingTable/SearchFilter/SearchContainer.js +496 -121
  37. package/lib/components/ListingTable/SearchFilter/SearchContainer.js.map +1 -1
  38. package/lib/components/ListingTable/SearchFilter/SearchFilter.js +12 -6
  39. package/lib/components/ListingTable/SearchFilter/SearchFilter.js.map +1 -1
  40. package/lib/components/ListingTable/SearchFilter/helpers.js +48 -12
  41. package/lib/components/ListingTable/SearchFilter/helpers.js.map +1 -1
  42. package/lib/components/ListingTable/TableActions/TableActions.js.map +1 -1
  43. package/lib/components/ListingTable/service/index.js +1 -2
  44. package/lib/components/ListingTable/service/index.js.map +1 -1
  45. package/lib/components/Tabs/index.js +1 -1
  46. package/lib/components/Tabs/index.js.map +1 -1
  47. package/lib/index.js +12 -5
  48. package/lib/index.js.map +1 -1
  49. package/lib/utils/add-content-menu-items.js +1 -1
  50. package/lib/utils/add-content-menu-items.js.map +1 -1
  51. package/lib-es/components/EntityManager/Entity/Entity.js.map +1 -1
  52. package/lib-es/components/EntityManager/Entity/EntityHeader/EntityHeader.js.map +1 -1
  53. package/lib-es/components/EntityManager/Entity/EntityHeader/HeaderPreviewButton/HeaderPreviewButton.js.map +1 -1
  54. package/lib-es/components/EntityManager/Entity/SideBarRelations/helpers/build-dynamic-query.js.map +1 -1
  55. package/lib-es/components/EntityManager/Entity/SideBarRelations/hooks/useCustomSidebarData.js.map +1 -1
  56. package/lib-es/components/EntityManager/Entity/SideBarRelations/presentational/CustomSidebarInfo.js.map +1 -1
  57. package/lib-es/components/EntityManager/Entity/actions-handlers/create/submit.js.map +1 -1
  58. package/lib-es/components/EntityManager/Entity/actions-handlers/shared/publish.js.map +1 -1
  59. package/lib-es/components/EntityManager/EntityManager.js.map +1 -1
  60. package/lib-es/components/EntityManager/utils/entity.js.map +1 -1
  61. package/lib-es/components/EntityManager/utils/query.js.map +1 -1
  62. package/lib-es/components/InfoBoxes/InfoBoxTooltip.js.map +1 -1
  63. package/lib-es/components/InfoBoxes/helpers/build-dynamic-query.js.map +1 -1
  64. package/lib-es/components/InfoBoxes/hooks/useData.js.map +1 -1
  65. package/lib-es/components/InfoBoxes/presentational/InfoBox.js.map +1 -1
  66. package/lib-es/components/InfoBoxes/presentational/InfoBoxLabel.js.map +1 -1
  67. package/lib-es/components/ListingTable/ListingTable.js.map +1 -1
  68. package/lib-es/components/ListingTable/ListingTableContent/ListingTableContent.js.map +1 -1
  69. package/lib-es/components/ListingTable/SearchFilter/SearchContainer.js +323 -51
  70. package/lib-es/components/ListingTable/SearchFilter/SearchContainer.js.map +1 -1
  71. package/lib-es/components/ListingTable/SearchFilter/SearchFilter.js +7 -3
  72. package/lib-es/components/ListingTable/SearchFilter/SearchFilter.js.map +1 -1
  73. package/lib-es/components/ListingTable/SearchFilter/helpers.js +39 -8
  74. package/lib-es/components/ListingTable/SearchFilter/helpers.js.map +1 -1
  75. package/lib-es/components/ListingTable/SearchFilter/querys.js.map +1 -1
  76. package/lib-es/components/ListingTable/mappers/populate-rows.js.map +1 -1
  77. package/lib-es/components/ListingTable/service/index.js.map +1 -1
  78. package/lib-es/index.js +3 -2
  79. package/lib-es/index.js.map +1 -1
  80. package/lib-es/utils/add-content-menu-items.js.map +1 -1
  81. package/lib-es/utils/build-create-entity-mutation.js.map +1 -1
  82. package/lib-es/utils/build-delete-entity-mutation.js.map +1 -1
  83. package/lib-es/utils/build-listing-query.js.map +1 -1
  84. package/lib-es/utils/build-update-data-query.js.map +1 -1
  85. package/lib-es/utils/build-update-publish-unpublish-mutation.js.map +1 -1
  86. package/package.json +11 -11
  87. package/src/components/ListingTable/SearchFilter/SearchContainer.js +363 -71
  88. package/src/components/ListingTable/SearchFilter/SearchFilter.js +5 -2
  89. package/src/components/ListingTable/SearchFilter/helpers.js +56 -8
  90. package/src/index.js +2 -0
@@ -1 +1 @@
1
- {"version":3,"file":"InfoBoxLabel.js","names":["InfoBoxLabel","item","suffix","label","showLabel"],"sources":["../../../../src/components/InfoBoxes/presentational/InfoBoxLabel.js"],"sourcesContent":["const InfoBoxLabel = ({ item, suffix = ' ' }) => {\n const { label, showLabel = true } = item;\n return showLabel ? `${label}:${suffix}` : null;\n};\n\nexport default InfoBoxLabel;\n"],"mappings":"AAAA,MAAMA,YAAY,GAAGA,CAAC;EAAEC,IAAI;EAAEC,MAAM,GAAG;AAAI,CAAC,KAAK;EAC/C,MAAM;IAAEC,KAAK;IAAEC,SAAS,GAAG;EAAK,CAAC,GAAGH,IAAI;EACxC,OAAOG,SAAS,GAAG,GAAGD,KAAK,IAAID,MAAM,EAAE,GAAG,IAAI;AAChD,CAAC;AAED,eAAeF,YAAY","ignoreList":[]}
1
+ {"version":3,"file":"InfoBoxLabel.js","names":["InfoBoxLabel","item","suffix","label","showLabel"],"sources":["../../../../src/components/InfoBoxes/presentational/InfoBoxLabel.js"],"sourcesContent":["const InfoBoxLabel = ({ item, suffix = ' ' }) => {\n const { label, showLabel = true } = item;\n return showLabel ? `${label}:${suffix}` : null;\n};\n\nexport default InfoBoxLabel;\n"],"mappings":"AAAA,MAAMA,YAAY,GAAGA,CAAC;EAAEC,IAAI;EAAEC,MAAM,GAAG;AAAI,CAAC,KAAK;EAC/C,MAAM;IAAEC,KAAK;IAAEC,SAAS,GAAG;EAAK,CAAC,GAAGH,IAAI;EACxC,OAAOG,SAAS,GAAI,GAAED,KAAM,IAAGD,MAAO,EAAC,GAAG,IAAI;AAChD,CAAC;AAED,eAAeF,YAAY","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"ListingTable.js","names":["React","useEffect","useState","Fragment","PropTypes","useApolloClient","withRouter","Link","useLocation","PageHeader","DeleteAction","CardPrompt","useToasts","RenderHook","ListingTableContent","SearchFilter","availableActions","fetchData","populateRows","formatRows","getParsedRowData","getDefaultQueryParams","ListingTable","match","entitySchema","history","tableData","setTableData","modalStatus","setModalStatus","itemToDelete","setItemToDelete","previousSchema","setPreviousSchema","id","totalItems","setTotalItems","queryParamsDefault","queryParams","setQueryParams","listFilters","setListFilters","client","addToast","location","searchParams","URLSearchParams","search","currentPage","Number","get","updatedQueryParams","_objectSpread","offset","limit","doQuery","url","filters","params","listingData","totalRecords","querySettings","populatedTable","toggleModal","rows","handleOnPageChange","pageNumber","_offset","push","document","getElementsByClassName","scrollTo","updateListingFilters","onCloseCardPrompt","item","deleteAction","delete","submit","parsedFormValues","updatedTableData","filter","handleSort","event","property","direction","Object","entries","sortQueryParams","sort","columns","isEnquiry","firstColumn","appliedSort","displayProperties","adminCrudActions","create","createAction","active","_deleteAction","showAddButton","length","createElement","className","onClose","itemName","name","title","displayName","subtitle","to","hookKey","schema","onSort","propTypes","object","isRequired"],"sources":["../../../src/components/ListingTable/ListingTable.js"],"sourcesContent":["import React, { useEffect, useState, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { useApolloClient } from '@apollo/client';\nimport { withRouter, Link, useLocation } from 'react-router-dom';\nimport { PageHeader, DeleteAction, CardPrompt } from '@blaze-cms/admin';\nimport { useToasts } from '@blaze-react/toaster';\nimport { RenderHook } from '@blaze-cms/plugin-render-hooks-ui';\nimport ListingTableContent from './ListingTableContent';\nimport SearchFilter from './SearchFilter/SearchFilter';\nimport availableActions from '../EntityManager/Entity/actions-handlers';\nimport { fetchData } from './service';\nimport { populateRows, formatRows, getParsedRowData } from './mappers/populate-rows';\nimport { getDefaultQueryParams } from '../../utils/get-default-query-params';\n\nconst ListingTable = ({ match, entitySchema, history }) => {\n const [tableData, setTableData] = useState({});\n const [modalStatus, setModalStatus] = useState(false);\n const [itemToDelete, setItemToDelete] = useState({});\n const [previousSchema, setPreviousSchema] = useState({ id: null });\n const [totalItems, setTotalItems] = useState(0);\n const queryParamsDefault = getDefaultQueryParams(entitySchema);\n const [queryParams, setQueryParams] = useState(queryParamsDefault);\n const [listFilters, setListFilters] = useState([]);\n const client = useApolloClient();\n const { addToast } = useToasts();\n const location = useLocation();\n const searchParams = new URLSearchParams(location.search);\n const currentPage = Number(searchParams.get('page')) || 1;\n\n useEffect(\n () => {\n (async () => {\n if (\n entitySchema.id !== previousSchema.id ||\n (previousSchema.id === null && entitySchema.id)\n ) {\n const updatedQueryParams = {\n ...queryParams,\n offset: currentPage * queryParamsDefault.limit - queryParamsDefault.limit\n };\n await doQuery([], updatedQueryParams);\n setPreviousSchema({ id: entitySchema.id });\n }\n })();\n },\n [client, entitySchema, match.url, previousSchema.id, queryParams] // eslint-disable-line react-hooks/exhaustive-deps\n );\n\n const doQuery = async (filters = listFilters, params = queryParamsDefault) => {\n const { listingData, totalRecords } = await fetchData({\n client,\n querySettings: {\n entitySchema,\n queryParams: params\n },\n listFilters: filters\n });\n\n const populatedTable = populateRows({\n toggleModal,\n url: match.url,\n entitySchema,\n rows: listingData\n });\n\n setTableData(populatedTable);\n setTotalItems(totalRecords);\n };\n\n const handleOnPageChange = async ({ pageNumber, offset: _offset }) => {\n const updatedQueryParams = {\n ...queryParams,\n offset: _offset\n };\n\n await doQuery(listFilters, updatedQueryParams);\n\n history.push(`?page=${pageNumber}`);\n document.getElementsByClassName('page')[0].scrollTo(0, 0);\n };\n\n const updateListingFilters = async filters => {\n await doQuery(filters);\n setListFilters(filters);\n };\n\n const onCloseCardPrompt = () => null;\n\n const toggleModal = item => {\n setModalStatus(!!item);\n setItemToDelete(item || {});\n };\n\n const deleteAction = async () => {\n await availableActions.delete.submit(\n {\n entitySchema,\n parsedFormValues: { id: itemToDelete.id },\n client\n },\n addToast\n );\n\n toggleModal();\n\n const updatedTableData = {\n ...tableData,\n rows: tableData.rows.filter(({ id }) => id !== itemToDelete.id)\n };\n\n setTableData(updatedTableData);\n };\n\n const handleSort = async event => {\n const [[property, direction]] = Object.entries(event);\n const sortQueryParams = {\n ...queryParamsDefault,\n sort: [{ property, direction }]\n };\n setQueryParams(sortQueryParams);\n\n const { listingData } = await fetchData({\n client,\n querySettings: {\n entitySchema,\n queryParams: sortQueryParams\n },\n listFilters\n });\n const { columns, isEnquiry } = tableData;\n const [firstColumn] = columns;\n\n setTableData({\n ...tableData,\n appliedSort: { [property]: direction },\n rows: formatRows({\n rows: getParsedRowData(listingData),\n url: match.url,\n toggleModal,\n firstColumn,\n isEnquiry,\n entitySchema\n })\n });\n history.push('?page=1');\n };\n if (!tableData || !tableData.rows) return 'loading';\n\n const {\n displayProperties: {\n adminCrudActions: {\n create: createAction = { active: true },\n delete: _deleteAction = { active: true }\n } = {}\n } = {}\n } = entitySchema;\n\n const showAddButton = !tableData.rows.length && listFilters.length === 0;\n\n return (\n <div className=\"page\">\n {modalStatus && _deleteAction.active && (\n <DeleteAction\n data-testid=\"deleteEntity\"\n onClose={toggleModal}\n deleteAction={deleteAction}\n itemName={itemToDelete.name}\n />\n )}\n <PageHeader title={entitySchema.displayName} subtitle=\"\">\n {createAction.active && !showAddButton && (\n <Link data-testid=\"addEntity\" className=\"button button--small\" to={`${match.url}/create`}>\n Add\n </Link>\n )}\n </PageHeader>\n {showAddButton ? (\n <CardPrompt>\n <Link\n className=\"button button--rounded button--cta\"\n to={`${match.url}/create`}\n data-testid=\"add-button\">\n Add\n </Link>\n </CardPrompt>\n ) : (\n <>\n <RenderHook\n hookKey=\"entity:listing:main:top\"\n schema={entitySchema}\n listFilters={listFilters}\n setListFilters={updateListingFilters}\n />\n <SearchFilter\n schema={entitySchema}\n listFilters={listFilters}\n setListFilters={updateListingFilters}\n />\n <ListingTableContent\n totalItems={totalItems}\n currentPage={currentPage}\n onSort={handleSort}\n handleOnPageChange={handleOnPageChange}\n tableData={tableData}\n onCloseCardPrompt={onCloseCardPrompt}\n schema={entitySchema}\n listFilters={listFilters}\n setListFilters={updateListingFilters}\n />\n </>\n )}\n </div>\n );\n};\nListingTable.propTypes = {\n entitySchema: PropTypes.object.isRequired,\n match: PropTypes.object.isRequired,\n history: PropTypes.object.isRequired\n};\n\nexport default withRouter(ListingTable);\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"ListingTable.js","names":["React","useEffect","useState","Fragment","PropTypes","useApolloClient","withRouter","Link","useLocation","PageHeader","DeleteAction","CardPrompt","useToasts","RenderHook","ListingTableContent","SearchFilter","availableActions","fetchData","populateRows","formatRows","getParsedRowData","getDefaultQueryParams","ListingTable","match","entitySchema","history","tableData","setTableData","modalStatus","setModalStatus","itemToDelete","setItemToDelete","previousSchema","setPreviousSchema","id","totalItems","setTotalItems","queryParamsDefault","queryParams","setQueryParams","listFilters","setListFilters","client","addToast","location","searchParams","URLSearchParams","search","currentPage","Number","get","updatedQueryParams","_objectSpread","offset","limit","doQuery","url","filters","params","listingData","totalRecords","querySettings","populatedTable","toggleModal","rows","handleOnPageChange","pageNumber","_offset","push","document","getElementsByClassName","scrollTo","updateListingFilters","onCloseCardPrompt","item","deleteAction","delete","submit","parsedFormValues","updatedTableData","filter","handleSort","event","property","direction","Object","entries","sortQueryParams","sort","columns","isEnquiry","firstColumn","appliedSort","displayProperties","adminCrudActions","create","createAction","active","_deleteAction","showAddButton","length","createElement","className","onClose","itemName","name","title","displayName","subtitle","to","hookKey","schema","onSort","propTypes","object","isRequired"],"sources":["../../../src/components/ListingTable/ListingTable.js"],"sourcesContent":["import React, { useEffect, useState, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { useApolloClient } from '@apollo/client';\nimport { withRouter, Link, useLocation } from 'react-router-dom';\nimport { PageHeader, DeleteAction, CardPrompt } from '@blaze-cms/admin';\nimport { useToasts } from '@blaze-react/toaster';\nimport { RenderHook } from '@blaze-cms/plugin-render-hooks-ui';\nimport ListingTableContent from './ListingTableContent';\nimport SearchFilter from './SearchFilter/SearchFilter';\nimport availableActions from '../EntityManager/Entity/actions-handlers';\nimport { fetchData } from './service';\nimport { populateRows, formatRows, getParsedRowData } from './mappers/populate-rows';\nimport { getDefaultQueryParams } from '../../utils/get-default-query-params';\n\nconst ListingTable = ({ match, entitySchema, history }) => {\n const [tableData, setTableData] = useState({});\n const [modalStatus, setModalStatus] = useState(false);\n const [itemToDelete, setItemToDelete] = useState({});\n const [previousSchema, setPreviousSchema] = useState({ id: null });\n const [totalItems, setTotalItems] = useState(0);\n const queryParamsDefault = getDefaultQueryParams(entitySchema);\n const [queryParams, setQueryParams] = useState(queryParamsDefault);\n const [listFilters, setListFilters] = useState([]);\n const client = useApolloClient();\n const { addToast } = useToasts();\n const location = useLocation();\n const searchParams = new URLSearchParams(location.search);\n const currentPage = Number(searchParams.get('page')) || 1;\n\n useEffect(\n () => {\n (async () => {\n if (\n entitySchema.id !== previousSchema.id ||\n (previousSchema.id === null && entitySchema.id)\n ) {\n const updatedQueryParams = {\n ...queryParams,\n offset: currentPage * queryParamsDefault.limit - queryParamsDefault.limit\n };\n await doQuery([], updatedQueryParams);\n setPreviousSchema({ id: entitySchema.id });\n }\n })();\n },\n [client, entitySchema, match.url, previousSchema.id, queryParams] // eslint-disable-line react-hooks/exhaustive-deps\n );\n\n const doQuery = async (filters = listFilters, params = queryParamsDefault) => {\n const { listingData, totalRecords } = await fetchData({\n client,\n querySettings: {\n entitySchema,\n queryParams: params\n },\n listFilters: filters\n });\n\n const populatedTable = populateRows({\n toggleModal,\n url: match.url,\n entitySchema,\n rows: listingData\n });\n\n setTableData(populatedTable);\n setTotalItems(totalRecords);\n };\n\n const handleOnPageChange = async ({ pageNumber, offset: _offset }) => {\n const updatedQueryParams = {\n ...queryParams,\n offset: _offset\n };\n\n await doQuery(listFilters, updatedQueryParams);\n\n history.push(`?page=${pageNumber}`);\n document.getElementsByClassName('page')[0].scrollTo(0, 0);\n };\n\n const updateListingFilters = async filters => {\n await doQuery(filters);\n setListFilters(filters);\n };\n\n const onCloseCardPrompt = () => null;\n\n const toggleModal = item => {\n setModalStatus(!!item);\n setItemToDelete(item || {});\n };\n\n const deleteAction = async () => {\n await availableActions.delete.submit(\n {\n entitySchema,\n parsedFormValues: { id: itemToDelete.id },\n client\n },\n addToast\n );\n\n toggleModal();\n\n const updatedTableData = {\n ...tableData,\n rows: tableData.rows.filter(({ id }) => id !== itemToDelete.id)\n };\n\n setTableData(updatedTableData);\n };\n\n const handleSort = async event => {\n const [[property, direction]] = Object.entries(event);\n const sortQueryParams = {\n ...queryParamsDefault,\n sort: [{ property, direction }]\n };\n setQueryParams(sortQueryParams);\n\n const { listingData } = await fetchData({\n client,\n querySettings: {\n entitySchema,\n queryParams: sortQueryParams\n },\n listFilters\n });\n const { columns, isEnquiry } = tableData;\n const [firstColumn] = columns;\n\n setTableData({\n ...tableData,\n appliedSort: { [property]: direction },\n rows: formatRows({\n rows: getParsedRowData(listingData),\n url: match.url,\n toggleModal,\n firstColumn,\n isEnquiry,\n entitySchema\n })\n });\n history.push('?page=1');\n };\n if (!tableData || !tableData.rows) return 'loading';\n\n const {\n displayProperties: {\n adminCrudActions: {\n create: createAction = { active: true },\n delete: _deleteAction = { active: true }\n } = {}\n } = {}\n } = entitySchema;\n\n const showAddButton = !tableData.rows.length && listFilters.length === 0;\n\n return (\n <div className=\"page\">\n {modalStatus && _deleteAction.active && (\n <DeleteAction\n data-testid=\"deleteEntity\"\n onClose={toggleModal}\n deleteAction={deleteAction}\n itemName={itemToDelete.name}\n />\n )}\n <PageHeader title={entitySchema.displayName} subtitle=\"\">\n {createAction.active && !showAddButton && (\n <Link data-testid=\"addEntity\" className=\"button button--small\" to={`${match.url}/create`}>\n Add\n </Link>\n )}\n </PageHeader>\n {showAddButton ? (\n <CardPrompt>\n <Link\n className=\"button button--rounded button--cta\"\n to={`${match.url}/create`}\n data-testid=\"add-button\">\n Add\n </Link>\n </CardPrompt>\n ) : (\n <>\n <RenderHook\n hookKey=\"entity:listing:main:top\"\n schema={entitySchema}\n listFilters={listFilters}\n setListFilters={updateListingFilters}\n />\n <SearchFilter\n schema={entitySchema}\n listFilters={listFilters}\n setListFilters={updateListingFilters}\n />\n <ListingTableContent\n totalItems={totalItems}\n currentPage={currentPage}\n onSort={handleSort}\n handleOnPageChange={handleOnPageChange}\n tableData={tableData}\n onCloseCardPrompt={onCloseCardPrompt}\n schema={entitySchema}\n listFilters={listFilters}\n setListFilters={updateListingFilters}\n />\n </>\n )}\n </div>\n );\n};\nListingTable.propTypes = {\n entitySchema: PropTypes.object.isRequired,\n match: PropTypes.object.isRequired,\n history: PropTypes.object.isRequired\n};\n\nexport default withRouter(ListingTable);\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"ListingTableContent.js","names":["React","useEffect","useRef","Table","Pagination","PropTypes","withRouter","ListingTableContent","tableData","handleSelect","onSort","handleOnPageChange","currentPage","totalItems","ref","displayTable","rows","length","isEnquiry","className","current","tableHeadCells","querySelectorAll","firstRowCells","forEach","element","i","styles","window","getComputedStyle","style","flex","createElement","data","onSelect","visiblePages","onPageChange","propTypes","object","isRequired","match","shape","url","string","func","number","defaultProps"],"sources":["../../../../src/components/ListingTable/ListingTableContent/ListingTableContent.js"],"sourcesContent":["import React, { useEffect, useRef } from 'react';\nimport Table from '@blaze-react/table';\nimport Pagination from '@blaze-react/pagination';\nimport PropTypes from 'prop-types';\nimport { withRouter } from 'react-router-dom';\n\nconst ListingTableContent = ({\n tableData,\n handleSelect,\n onSort,\n handleOnPageChange,\n currentPage,\n totalItems\n}) => {\n const ref = useRef(null);\n const displayTable = tableData && tableData.rows && !!tableData.rows.length;\n const { isEnquiry } = tableData;\n const className = `page__content${isEnquiry ? ' array-table' : ''}`;\n\n useEffect(() => {\n // set table head to match body column widths to handle dynamic content\n if (ref.current && displayTable) {\n const tableHeadCells = ref.current.querySelectorAll('.table-head .table-cell');\n const firstRowCells = ref.current.querySelectorAll(\n '.table-body .table-row:first-child .table-cell'\n );\n\n firstRowCells.forEach((element, i) => {\n const styles = window.getComputedStyle(element);\n\n if (tableHeadCells[i]) {\n tableHeadCells[i].style.flex = styles.flex;\n tableHeadCells[i].style['justify-content'] = styles['justify-content'];\n }\n });\n }\n }, [tableData, displayTable]);\n\n if (displayTable) {\n return (\n <div ref={ref} className={className}>\n <Table\n onSort={onSort}\n data={tableData}\n onSelect={handleSelect}\n data-testid=\"listing-table-content\"\n />\n <Pagination\n visiblePages={10}\n totalItems={totalItems}\n currentPage={currentPage}\n onPageChange={handleOnPageChange}\n />\n </div>\n );\n }\n\n return (\n <span className=\"table-no-results\" data-testid=\"no-results\">\n No results\n </span>\n );\n};\n\nListingTableContent.propTypes = {\n tableData: PropTypes.object.isRequired,\n match: PropTypes.shape({\n url: PropTypes.string\n }).isRequired,\n handleSelect: PropTypes.func,\n onSort: PropTypes.func,\n handleOnPageChange: PropTypes.func,\n currentPage: PropTypes.number.isRequired,\n totalItems: PropTypes.number.isRequired\n};\n\nListingTableContent.defaultProps = {\n handleSelect: () => {},\n onSort: () => {},\n handleOnPageChange: () => {}\n};\n\nexport default withRouter(ListingTableContent);\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"ListingTableContent.js","names":["React","useEffect","useRef","Table","Pagination","PropTypes","withRouter","ListingTableContent","tableData","handleSelect","onSort","handleOnPageChange","currentPage","totalItems","ref","displayTable","rows","length","isEnquiry","className","current","tableHeadCells","querySelectorAll","firstRowCells","forEach","element","i","styles","window","getComputedStyle","style","flex","createElement","data","onSelect","visiblePages","onPageChange","propTypes","object","isRequired","match","shape","url","string","func","number","defaultProps"],"sources":["../../../../src/components/ListingTable/ListingTableContent/ListingTableContent.js"],"sourcesContent":["import React, { useEffect, useRef } from 'react';\nimport Table from '@blaze-react/table';\nimport Pagination from '@blaze-react/pagination';\nimport PropTypes from 'prop-types';\nimport { withRouter } from 'react-router-dom';\n\nconst ListingTableContent = ({\n tableData,\n handleSelect,\n onSort,\n handleOnPageChange,\n currentPage,\n totalItems\n}) => {\n const ref = useRef(null);\n const displayTable = tableData && tableData.rows && !!tableData.rows.length;\n const { isEnquiry } = tableData;\n const className = `page__content${isEnquiry ? ' array-table' : ''}`;\n\n useEffect(() => {\n // set table head to match body column widths to handle dynamic content\n if (ref.current && displayTable) {\n const tableHeadCells = ref.current.querySelectorAll('.table-head .table-cell');\n const firstRowCells = ref.current.querySelectorAll(\n '.table-body .table-row:first-child .table-cell'\n );\n\n firstRowCells.forEach((element, i) => {\n const styles = window.getComputedStyle(element);\n\n if (tableHeadCells[i]) {\n tableHeadCells[i].style.flex = styles.flex;\n tableHeadCells[i].style['justify-content'] = styles['justify-content'];\n }\n });\n }\n }, [tableData, displayTable]);\n\n if (displayTable) {\n return (\n <div ref={ref} className={className}>\n <Table\n onSort={onSort}\n data={tableData}\n onSelect={handleSelect}\n data-testid=\"listing-table-content\"\n />\n <Pagination\n visiblePages={10}\n totalItems={totalItems}\n currentPage={currentPage}\n onPageChange={handleOnPageChange}\n />\n </div>\n );\n }\n\n return (\n <span className=\"table-no-results\" data-testid=\"no-results\">\n No results\n </span>\n );\n};\n\nListingTableContent.propTypes = {\n tableData: PropTypes.object.isRequired,\n match: PropTypes.shape({\n url: PropTypes.string\n }).isRequired,\n handleSelect: PropTypes.func,\n onSort: PropTypes.func,\n handleOnPageChange: PropTypes.func,\n currentPage: PropTypes.number.isRequired,\n totalItems: PropTypes.number.isRequired\n};\n\nListingTableContent.defaultProps = {\n handleSelect: () => {},\n onSort: () => {},\n handleOnPageChange: () => {}\n};\n\nexport default withRouter(ListingTableContent);\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,SAAS,EAAEC,MAAM,QAAQ,OAAO;AAChD,OAAOC,KAAK,MAAM,oBAAoB;AACtC,OAAOC,UAAU,MAAM,yBAAyB;AAChD,OAAOC,SAAS,MAAM,YAAY;AAClC,SAASC,UAAU,QAAQ,kBAAkB;AAE7C,MAAMC,mBAAmB,GAAGA,CAAC;EAC3BC,SAAS;EACTC,YAAY;EACZC,MAAM;EACNC,kBAAkB;EAClBC,WAAW;EACXC;AACF,CAAC,KAAK;EACJ,MAAMC,GAAG,GAAGZ,MAAM,CAAC,IAAI,CAAC;EACxB,MAAMa,YAAY,GAAGP,SAAS,IAAIA,SAAS,CAACQ,IAAI,IAAI,CAAC,CAACR,SAAS,CAACQ,IAAI,CAACC,MAAM;EAC3E,MAAM;IAAEC;EAAU,CAAC,GAAGV,SAAS;EAC/B,MAAMW,SAAS,GAAI,gBAAeD,SAAS,GAAG,cAAc,GAAG,EAAG,EAAC;EAEnEjB,SAAS,CAAC,MAAM;IACd;IACA,IAAIa,GAAG,CAACM,OAAO,IAAIL,YAAY,EAAE;MAC/B,MAAMM,cAAc,GAAGP,GAAG,CAACM,OAAO,CAACE,gBAAgB,CAAC,yBAAyB,CAAC;MAC9E,MAAMC,aAAa,GAAGT,GAAG,CAACM,OAAO,CAACE,gBAAgB,CAChD,gDACF,CAAC;MAEDC,aAAa,CAACC,OAAO,CAAC,CAACC,OAAO,EAAEC,CAAC,KAAK;QACpC,MAAMC,MAAM,GAAGC,MAAM,CAACC,gBAAgB,CAACJ,OAAO,CAAC;QAE/C,IAAIJ,cAAc,CAACK,CAAC,CAAC,EAAE;UACrBL,cAAc,CAACK,CAAC,CAAC,CAACI,KAAK,CAACC,IAAI,GAAGJ,MAAM,CAACI,IAAI;UAC1CV,cAAc,CAACK,CAAC,CAAC,CAACI,KAAK,CAAC,iBAAiB,CAAC,GAAGH,MAAM,CAAC,iBAAiB,CAAC;QACxE;MACF,CAAC,CAAC;IACJ;EACF,CAAC,EAAE,CAACnB,SAAS,EAAEO,YAAY,CAAC,CAAC;EAE7B,IAAIA,YAAY,EAAE;IAChB,oBACEf,KAAA,CAAAgC,aAAA;MAAKlB,GAAG,EAAEA,GAAI;MAACK,SAAS,EAAEA;IAAU,gBAClCnB,KAAA,CAAAgC,aAAA,CAAC7B,KAAK;MACJO,MAAM,EAAEA,MAAO;MACfuB,IAAI,EAAEzB,SAAU;MAChB0B,QAAQ,EAAEzB,YAAa;MACvB,eAAY;IAAuB,CACpC,CAAC,eACFT,KAAA,CAAAgC,aAAA,CAAC5B,UAAU;MACT+B,YAAY,EAAE,EAAG;MACjBtB,UAAU,EAAEA,UAAW;MACvBD,WAAW,EAAEA,WAAY;MACzBwB,YAAY,EAAEzB;IAAmB,CAClC,CACE,CAAC;EAEV;EAEA,oBACEX,KAAA,CAAAgC,aAAA;IAAMb,SAAS,EAAC,kBAAkB;IAAC,eAAY;EAAY,GAAC,YAEtD,CAAC;AAEX,CAAC;AAEDZ,mBAAmB,CAAC8B,SAAS,GAAG;EAC9B7B,SAAS,EAAEH,SAAS,CAACiC,MAAM,CAACC,UAAU;EACtCC,KAAK,EAAEnC,SAAS,CAACoC,KAAK,CAAC;IACrBC,GAAG,EAAErC,SAAS,CAACsC;EACjB,CAAC,CAAC,CAACJ,UAAU;EACb9B,YAAY,EAAEJ,SAAS,CAACuC,IAAI;EAC5BlC,MAAM,EAAEL,SAAS,CAACuC,IAAI;EACtBjC,kBAAkB,EAAEN,SAAS,CAACuC,IAAI;EAClChC,WAAW,EAAEP,SAAS,CAACwC,MAAM,CAACN,UAAU;EACxC1B,UAAU,EAAER,SAAS,CAACwC,MAAM,CAACN;AAC/B,CAAC;AAEDhC,mBAAmB,CAACuC,YAAY,GAAG;EACjCrC,YAAY,EAAEA,CAAA,KAAM,CAAC,CAAC;EACtBC,MAAM,EAAEA,CAAA,KAAM,CAAC,CAAC;EAChBC,kBAAkB,EAAEA,CAAA,KAAM,CAAC;AAC7B,CAAC;AAED,eAAeL,UAAU,CAACC,mBAAmB,CAAC","ignoreList":[]}
@@ -4,25 +4,48 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
4
4
  import React, { useState, useMemo, useEffect, useCallback } from 'react';
5
5
  import PropTypes from 'prop-types';
6
6
  import Select from '@blaze-react/select';
7
+ import MultiSelect from '@blaze-react/multiselect';
8
+ import debounce from 'lodash.debounce';
9
+ import unionBy from 'lodash.unionby';
7
10
  import { useQuery, useApolloClient } from '@apollo/client';
8
- import { getDynamicQuery, getQuery } from '@blaze-cms/admin-ui-utils';
11
+ import { getDynamicQuery, getQuery, fetchFilterByDataFromElastic, fetchAllEntities } from '@blaze-cms/admin-ui-utils';
12
+ import { getStringTypeProps } from '@blaze-cms/utils';
9
13
  import { BsArrowCounterclockwise, BsSearch } from 'react-icons/bs';
10
- import { updateListFilters, buildQueryFields } from './helpers';
14
+ import { updateListFilters, buildQueryFields, getTidyLabel } from './helpers';
11
15
  import { NOOP_QUERY } from './querys';
12
16
  import { ENTER_KEY, DEFAULT_FILTER_OPTION_LABEL } from '../../../constants';
13
17
  const SearchContainer = ({
14
18
  setListFilters,
15
19
  keywordFiltersToUse = [],
16
20
  selectFiltersToDisplay = [],
21
+ multiSelectFiltersToDisplay = [],
17
22
  schema,
18
- index
23
+ index,
24
+ values
19
25
  }) => {
20
- const apolloClient = useApolloClient();
26
+ const client = useApolloClient();
21
27
  const [searchTerm, setSearchTerm] = useState('');
22
28
  const [selectedFilters, setSelectedFilters] = useState({});
23
29
  const [selectOptions, setSelectOptions] = useState([]);
30
+ const [multiSelectOptions, setMultiSelectOptions] = useState([]);
31
+ const [allEntitySchemas, setAllEntitySchemas] = useState([]);
24
32
  const displaySearchFilter = keywordFiltersToUse.length > 0;
25
33
  const displaySelectFilters = selectFiltersToDisplay.length > 0;
34
+ const displayMultiSelectFilters = multiSelectFiltersToDisplay.length > 0;
35
+ const displayAggregations = displaySelectFilters || displayMultiSelectFilters;
36
+ useEffect(() => {
37
+ (async () => {
38
+ try {
39
+ const all = await fetchAllEntities({
40
+ client
41
+ });
42
+ setAllEntitySchemas(all || []);
43
+ } catch (error) {
44
+ setAllEntitySchemas([]);
45
+ }
46
+ })();
47
+ }, [client]);
48
+ const multiSelectPropertySet = useMemo(() => new Set(multiSelectFiltersToDisplay.map(([property]) => property)), [multiSelectFiltersToDisplay]);
26
49
  const {
27
50
  keywordSearchProperties,
28
51
  keywordSearchLabels
@@ -43,19 +66,60 @@ const SearchContainer = ({
43
66
  const {
44
67
  gqlFields,
45
68
  rawQuery
46
- } = useMemo(() => buildQueryFields(selectFiltersToDisplay, schema.id), [selectFiltersToDisplay, schema.id]);
47
- const action = displaySelectFilters ? getDynamicQuery('ADMIN_SEARCH')([schema], gqlFields, false, index) : NOOP_QUERY;
69
+ } = useMemo(() => buildQueryFields([...selectFiltersToDisplay, ...multiSelectFiltersToDisplay], schema.id), [selectFiltersToDisplay, multiSelectFiltersToDisplay, schema.id]);
70
+ const action = displayAggregations ? getDynamicQuery('ADMIN_SEARCH')([schema], gqlFields, false, index) : NOOP_QUERY;
48
71
  const {
49
72
  data
50
73
  } = useQuery(action, {
51
- skip: !displaySelectFilters,
74
+ skip: !displayAggregations,
52
75
  variables: {
53
76
  where: rawQuery,
54
77
  limit: 0
55
78
  },
56
79
  fetchPolicy: 'cache-and-network'
57
80
  });
58
- const filterData = useMemo(() => {
81
+ const buildRelationsIndex = useCallback(schemaObj => {
82
+ const items = [];
83
+ if (schemaObj.properties) {
84
+ Object.entries(schemaObj.properties).forEach(([propName, definition]) => {
85
+ const {
86
+ relation
87
+ } = definition || {};
88
+ if (!relation) return;
89
+ const {
90
+ localField: relationLocalField,
91
+ entityIdentifier
92
+ } = relation;
93
+ const localField = relationLocalField || propName;
94
+ if (localField) items.push({
95
+ localField,
96
+ entityIdentifier
97
+ });
98
+ });
99
+ }
100
+ if (Array.isArray(schemaObj.relations)) {
101
+ schemaObj.relations.forEach(relation => {
102
+ if (!relation.localField) return;
103
+ const {
104
+ localField,
105
+ entityIdentifier
106
+ } = relation;
107
+ items.push({
108
+ localField,
109
+ entityIdentifier
110
+ });
111
+ });
112
+ }
113
+ const byKey = new Map();
114
+ items.forEach(item => {
115
+ const key = `${item.localField}|${item.entityIdentifier || ''}`;
116
+ if (!byKey.has(key)) byKey.set(key, item);
117
+ });
118
+ return Array.from(byKey.values());
119
+ }, []);
120
+ const relationsIndex = useMemo(() => buildRelationsIndex(schema), [schema, buildRelationsIndex]);
121
+ const stringTypeProps = useMemo(() => getStringTypeProps(schema.id, relationsIndex, allEntitySchemas), [schema.id, relationsIndex, allEntitySchemas]);
122
+ const aggregationsData = useMemo(() => {
59
123
  const {
60
124
  searchResults: {
61
125
  rawResults: {
@@ -63,48 +127,61 @@ const SearchContainer = ({
63
127
  } = {}
64
128
  } = {}
65
129
  } = data || {};
66
- const proccessedData = [];
130
+ const processed = [];
67
131
  Object.entries(aggregations).forEach(([key, {
68
132
  buckets
69
133
  }]) => {
70
- proccessedData.push(Array.isArray(buckets) ? [key, buckets.map(b => b.key).filter(Boolean)] : []);
134
+ processed.push(Array.isArray(buckets) ? [key, buckets.map(bucket => bucket.key).filter(Boolean)] : []);
71
135
  });
72
- return proccessedData;
136
+ return processed;
73
137
  }, [data]);
138
+ const findFilterConfig = useCallback(property => {
139
+ var _selectFiltersToDispl, _multiSelectFiltersTo;
140
+ return ((_selectFiltersToDispl = selectFiltersToDisplay.find(([prop]) => prop === property)) === null || _selectFiltersToDispl === void 0 ? void 0 : _selectFiltersToDispl[1]) || ((_multiSelectFiltersTo = multiSelectFiltersToDisplay.find(([prop]) => prop === property)) === null || _multiSelectFiltersTo === void 0 ? void 0 : _multiSelectFiltersTo[1]);
141
+ }, [selectFiltersToDisplay, multiSelectFiltersToDisplay]);
74
142
  useEffect(() => {
75
- if (!filterData.length) {
143
+ if (!aggregationsData.length) {
76
144
  setSelectOptions([]);
145
+ setMultiSelectOptions([]);
77
146
  return;
78
147
  }
79
148
  (async () => {
80
- const results = await Promise.all(filterData.map(async ([property, ids]) => {
149
+ const results = await Promise.all(aggregationsData.map(async ([property, ids]) => {
81
150
  try {
82
- if (!ids || !ids.length) return {};
83
- const [, selectionDetails] = selectFiltersToDisplay.find(([selectProperty]) => selectProperty === property) || [];
84
- if (!selectionDetails) return null;
85
- if (!selectionDetails.relation) {
151
+ if (!ids || !ids.length) return null;
152
+ const config = findFilterConfig(property);
153
+ if (!config) return null;
154
+ const {
155
+ adminListingOptions: {
156
+ tidyLabel
157
+ } = {}
158
+ } = config;
159
+ if (!config.relation) {
160
+ const baseOptions = ids.map(value => [value, getTidyLabel(value, tidyLabel)]);
86
161
  return {
87
- id: property,
88
- label: selectionDetails.label,
89
- options: ids.map(value => [value, value])
162
+ property,
163
+ label: config.label,
164
+ type: multiSelectPropertySet.has(property) ? 'multi' : 'single',
165
+ options: baseOptions,
166
+ selected: values && values[property]
90
167
  };
91
168
  }
92
- const query = getQuery('GET_ENTITY_SCHEMA');
169
+ const schemaQuery = getQuery('GET_ENTITY_SCHEMA');
93
170
  const {
94
171
  data: {
95
172
  getEntitySchemas: [relationSchema]
96
173
  }
97
- } = await apolloClient.query({
98
- query,
174
+ } = await client.query({
175
+ query: schemaQuery,
99
176
  variables: {
100
- identifier: selectionDetails.relation.entityIdentifier
177
+ identifier: config.relation.entityIdentifier
101
178
  }
102
179
  });
103
180
  const {
104
181
  data: {
105
182
  result: selected = []
106
183
  }
107
- } = await apolloClient.query({
184
+ } = await client.query({
108
185
  query: getDynamicQuery('GET_ALL_ENTITIES')(relationSchema),
109
186
  variables: {
110
187
  where: {
@@ -119,45 +196,183 @@ const SearchContainer = ({
119
196
  }
120
197
  })
121
198
  // eslint-disable-next-line no-console
122
- .catch(e => console.error(e));
199
+ .catch(error => console.error(error));
200
+ const baseOptions = selected.map(item => [item.id, getTidyLabel(item.name, tidyLabel)]);
123
201
  return {
124
- id: property,
125
- label: selectionDetails.label,
126
- options: selected.map(item => [item.id, item.name])
202
+ property,
203
+ label: config.label || config.relation.label,
204
+ type: multiSelectPropertySet.has(property) ? 'multi' : 'single',
205
+ options: baseOptions,
206
+ selected: values && values[property]
127
207
  };
128
208
  } catch {
129
209
  return null;
130
210
  }
131
211
  }));
132
- setSelectOptions(results.filter(Boolean));
212
+ const valid = results.filter(Boolean);
213
+ setSelectOptions(valid.filter(option => option.type === 'single').map(({
214
+ property,
215
+ label,
216
+ options,
217
+ selected
218
+ }) => ({
219
+ id: property,
220
+ label,
221
+ options,
222
+ selected
223
+ })));
224
+ setMultiSelectOptions(valid.filter(option => option.type === 'multi').map(({
225
+ property,
226
+ label,
227
+ options,
228
+ selected
229
+ }) => ({
230
+ id: property,
231
+ label,
232
+ items: options.map(([id, name]) => ({
233
+ id,
234
+ name
235
+ })),
236
+ selected
237
+ })));
133
238
  })();
134
- }, [apolloClient, filterData, schema, selectFiltersToDisplay]);
239
+ }, [client, aggregationsData, findFilterConfig, multiSelectPropertySet, values]);
135
240
  const updateFilters = useCallback((term, filters) => updateListFilters(term, filters, setListFilters, keywordSearchProperties), [setListFilters, keywordSearchProperties]);
241
+ const debouncedUpdateFilters = useMemo(() => debounce((term, filters) => updateFilters(term, filters), 300), [updateFilters]);
242
+ useEffect(() => () => debouncedUpdateFilters.cancel(), [debouncedUpdateFilters]);
136
243
  const handleSearch = useCallback(() => updateFilters(searchTerm, selectedFilters), [searchTerm, selectedFilters, updateFilters]);
137
- const handleSearchChange = useCallback(e => setSearchTerm(e.target.value), []);
138
- const handleEnterKey = useCallback(e => {
139
- if (e.key === ENTER_KEY) handleSearch();
244
+ const handleSearchChange = useCallback(({
245
+ target: {
246
+ value
247
+ }
248
+ }) => setSearchTerm(value), []);
249
+ const handleEnterKey = useCallback(({
250
+ key
251
+ }) => {
252
+ if (key === ENTER_KEY) handleSearch();
140
253
  }, [handleSearch]);
141
254
  const handleReset = useCallback(() => {
142
255
  setSearchTerm('');
143
- setSelectedFilters(Object.keys(selectedFilters).reduce((acc, key) => _objectSpread(_objectSpread({}, acc), {}, {
144
- [key]: DEFAULT_FILTER_OPTION_LABEL
145
- }), {}));
256
+ debouncedUpdateFilters.cancel();
257
+ setSelectedFilters(prev => Object.keys(prev).reduce((acc, key) => {
258
+ acc[key] = multiSelectPropertySet.has(key) ? [] : DEFAULT_FILTER_OPTION_LABEL;
259
+ return acc;
260
+ }, {}));
146
261
  updateFilters('', {});
147
- }, [selectedFilters, updateFilters]);
148
- const handleSelect = useCallback((property, event) => {
149
- const {
150
- value
151
- } = event;
262
+ }, [multiSelectPropertySet, updateFilters, debouncedUpdateFilters]);
263
+ const handleSelect = useCallback((property, {
264
+ value
265
+ }) => {
152
266
  const next = _objectSpread(_objectSpread({}, selectedFilters), {}, {
153
267
  [property]: value
154
268
  });
155
269
  setSelectedFilters(next);
156
- updateFilters(searchTerm, next);
157
- }, [searchTerm, selectedFilters, updateFilters]);
270
+ debouncedUpdateFilters(searchTerm, next);
271
+ }, [searchTerm, selectedFilters, debouncedUpdateFilters]);
272
+ const handleMultiSelect = useCallback((property, ids) => {
273
+ const next = _objectSpread(_objectSpread({}, selectedFilters), {}, {
274
+ [property]: ids
275
+ });
276
+ setSelectedFilters(next);
277
+ debouncedUpdateFilters(searchTerm, next);
278
+ }, [searchTerm, selectedFilters, debouncedUpdateFilters]);
279
+ const findRelationByLocalField = useCallback(localField => relationsIndex.find(relation => relation.localField === localField), [relationsIndex]);
280
+ const resolveAggProp = useCallback((property, config) => {
281
+ if (!config.relation) return property;
282
+ if (property.includes('.')) return property;
283
+ const localField = config.relation.localField || property;
284
+ return `${localField}.name`;
285
+ }, []);
286
+ const resolveEntityIdentifier = useCallback((property, config) => {
287
+ if (!config.relation) return undefined;
288
+ if (config.relation.entityIdentifier) return config.relation.entityIdentifier;
289
+ const localField = property.includes('.') ? property.split('.')[0] : config.relation.localField || property;
290
+ return findRelationByLocalField(localField).entityIdentifier;
291
+ }, [findRelationByLocalField]);
292
+ const addEntitySuffixIfNeeded = useCallback((aggProp, entityIdentifier, config) => {
293
+ if (!config.relation || !entityIdentifier) return aggProp;
294
+ return `${aggProp}/${entityIdentifier}`;
295
+ }, []);
296
+ const makeOnSearchChange = useCallback(property => async ({
297
+ event: {
298
+ value
299
+ },
300
+ currentOffset
301
+ }) => {
302
+ try {
303
+ var _config$relation, _aggregations$key, _multiSelectOptions$f;
304
+ if (!value || currentOffset) return [];
305
+ const config = findFilterConfig(property);
306
+ if (!config) return [];
307
+ let aggProp = resolveAggProp(property, config);
308
+ if (config.relation && !config.relation.localField && !property.includes('.')) {
309
+ const matchingRelation = findRelationByLocalField(property);
310
+ if (matchingRelation.localField) aggProp = `${matchingRelation.localField}.name`;
311
+ }
312
+ const entityIdentifier = resolveEntityIdentifier(property, config) || ((_config$relation = config.relation) === null || _config$relation === void 0 ? void 0 : _config$relation.entityIdentifier);
313
+ const filterByEntry = addEntitySuffixIfNeeded(aggProp, entityIdentifier, config);
314
+ const currentValues = {
315
+ entity: schema.id,
316
+ filterByProperty: [filterByEntry]
317
+ };
318
+ const aggregations = await fetchFilterByDataFromElastic(client, currentValues, relationsIndex, stringTypeProps, value);
319
+ const key = aggProp;
320
+ const buckets = (aggregations === null || aggregations === void 0 ? void 0 : (_aggregations$key = aggregations[key]) === null || _aggregations$key === void 0 ? void 0 : _aggregations$key.buckets) || [];
321
+ let items = [];
322
+ if (config.relation) {
323
+ const names = buckets.map(bucket => bucket.key).filter(Boolean);
324
+ if (names.length) {
325
+ const schemaQuery = getQuery('GET_ENTITY_SCHEMA');
326
+ const {
327
+ data: {
328
+ getEntitySchemas: [relationSchema]
329
+ }
330
+ } = await client.query({
331
+ query: schemaQuery,
332
+ variables: {
333
+ identifier: entityIdentifier
334
+ }
335
+ });
336
+ const {
337
+ data: {
338
+ result: selected = []
339
+ }
340
+ } = await client.query({
341
+ query: getDynamicQuery('GET_ALL_ENTITIES')(relationSchema),
342
+ variables: {
343
+ where: {
344
+ name: {
345
+ _in: names
346
+ }
347
+ },
348
+ sort: [{
349
+ property: 'name',
350
+ direction: 'asc'
351
+ }]
352
+ }
353
+ })
354
+ // eslint-disable-next-line no-console
355
+ .catch(error => console.error(error));
356
+ items = selected.map(item => ({
357
+ id: item.id,
358
+ name: item.name
359
+ }));
360
+ }
361
+ } else {
362
+ items = buckets.map(bucket => ({
363
+ id: bucket.key,
364
+ name: bucket.key
365
+ })).filter(option => option.id != null);
366
+ }
367
+ const existingItems = ((_multiSelectOptions$f = multiSelectOptions.find(opt => opt.id === property)) === null || _multiSelectOptions$f === void 0 ? void 0 : _multiSelectOptions$f.items) || [];
368
+ return unionBy(items, existingItems, 'id');
369
+ } catch (error) {
370
+ return [];
371
+ }
372
+ }, [client, schema.id, relationsIndex, stringTypeProps, multiSelectOptions, findFilterConfig, resolveAggProp, resolveEntityIdentifier, addEntitySuffixIfNeeded, findRelationByLocalField]);
158
373
  const placeholderText = `Search ${keywordSearchLabels.join(', ')}`;
159
374
  return /*#__PURE__*/React.createElement("div", {
160
- className: "search-container"
375
+ className: "search-container ms-filter"
161
376
  }, displaySearchFilter && /*#__PURE__*/React.createElement("div", {
162
377
  className: "search-container__search-input-container"
163
378
  }, /*#__PURE__*/React.createElement("input", {
@@ -173,18 +388,73 @@ const SearchContainer = ({
173
388
  }, /*#__PURE__*/React.createElement(BsSearch, null))), displaySelectFilters && selectOptions.map(({
174
389
  id,
175
390
  options,
176
- label
177
- }) => /*#__PURE__*/React.createElement(React.Fragment, null, options && !!options.length && /*#__PURE__*/React.createElement("div", {
178
- className: "search-container__select-wrapper"
391
+ label,
392
+ selected
393
+ }) => options && options.length ? /*#__PURE__*/React.createElement("div", {
394
+ className: "search-container__select-wrapper",
395
+ key: `select-${id}`
179
396
  }, /*#__PURE__*/React.createElement(Select, {
180
397
  label: label,
181
398
  id: id,
182
399
  name: id,
183
- onChange: event => handleSelect(id, event),
400
+ onChange: ({
401
+ value
402
+ }) => handleSelect(id, {
403
+ value
404
+ }),
184
405
  options: options,
185
- value: selectedFilters[id],
406
+ value: selectedFilters[id] !== undefined ? selectedFilters[id] : selected,
186
407
  defaultTextValue: DEFAULT_FILTER_OPTION_LABEL
187
- })))), /*#__PURE__*/React.createElement("div", {
408
+ })) : null), displayMultiSelectFilters && multiSelectOptions.map(({
409
+ id,
410
+ label,
411
+ items
412
+ }) => {
413
+ const selectedIds = selectedFilters[id] ? selectedFilters[id] : [];
414
+ const multiSelectData = {
415
+ filterBy: ['name'],
416
+ identification: 'id',
417
+ keyValue: 'name',
418
+ data: items.map(({
419
+ id: itemId,
420
+ name
421
+ }) => ({
422
+ id: itemId,
423
+ name,
424
+ description: '',
425
+ checked: selectedIds.includes(itemId),
426
+ show: true
427
+ }))
428
+ };
429
+ return /*#__PURE__*/React.createElement("div", {
430
+ className: "search-container__select-wrapper",
431
+ key: `multiselect-${id}`
432
+ }, /*#__PURE__*/React.createElement(MultiSelect, {
433
+ onChange: ({
434
+ value,
435
+ currentOffset
436
+ }) => makeOnSearchChange(id)({
437
+ event: {
438
+ value
439
+ },
440
+ currentOffset
441
+ }),
442
+ name: id,
443
+ label: label,
444
+ data: multiSelectData,
445
+ limit: 10,
446
+ getSelected: ({
447
+ event: {
448
+ target: {
449
+ value
450
+ }
451
+ }
452
+ }) => handleMultiSelect(id, value),
453
+ required: false,
454
+ checkedPreviewCount: 1,
455
+ formatMoreLabel: n => `${n} more`
456
+ }));
457
+ }), /*#__PURE__*/React.createElement("div", {
188
458
  className: "search-container__reset-button"
189
459
  }, /*#__PURE__*/React.createElement("span", {
190
460
  role: "button",
@@ -195,12 +465,14 @@ SearchContainer.propTypes = {
195
465
  setListFilters: PropTypes.func.isRequired,
196
466
  keywordFiltersToUse: PropTypes.array,
197
467
  selectFiltersToDisplay: PropTypes.array,
468
+ multiSelectFiltersToDisplay: PropTypes.array,
198
469
  schema: PropTypes.object.isRequired,
199
470
  index: PropTypes.string
200
471
  };
201
472
  SearchContainer.defaultProps = {
202
473
  keywordFiltersToUse: [],
203
474
  selectFiltersToDisplay: [],
475
+ multiSelectFiltersToDisplay: [],
204
476
  index: 'admin'
205
477
  };
206
478
  export default SearchContainer;