@blaze-cms/plugin-data-ui 0.131.0-project-admin-customisations.0 → 0.131.0-project-admin-customisations.2

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 (32) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/lib/components/EntityManager/Entity/Entity.js +1 -1
  3. package/lib/components/EntityManager/Entity/Entity.js.map +1 -1
  4. package/lib/components/ListingTable/ListingTable.js +95 -48
  5. package/lib/components/ListingTable/ListingTable.js.map +1 -1
  6. package/lib/components/ListingTable/ListingTableContent/ListingTableContent.js +0 -7
  7. package/lib/components/ListingTable/ListingTableContent/ListingTableContent.js.map +1 -1
  8. package/lib/components/ListingTable/service/index.js +73 -11
  9. package/lib/components/ListingTable/service/index.js.map +1 -1
  10. package/lib/utils/build-listing-query.js +11 -2
  11. package/lib/utils/build-listing-query.js.map +1 -1
  12. package/lib/utils/get-default-query-params.js +3 -4
  13. package/lib/utils/get-default-query-params.js.map +1 -1
  14. package/lib-es/components/EntityManager/Entity/Entity.js +1 -1
  15. package/lib-es/components/EntityManager/Entity/Entity.js.map +1 -1
  16. package/lib-es/components/ListingTable/ListingTable.js +30 -20
  17. package/lib-es/components/ListingTable/ListingTable.js.map +1 -1
  18. package/lib-es/components/ListingTable/ListingTableContent/ListingTableContent.js +0 -5
  19. package/lib-es/components/ListingTable/ListingTableContent/ListingTableContent.js.map +1 -1
  20. package/lib-es/components/ListingTable/service/index.js +65 -7
  21. package/lib-es/components/ListingTable/service/index.js.map +1 -1
  22. package/lib-es/utils/build-listing-query.js +10 -1
  23. package/lib-es/utils/build-listing-query.js.map +1 -1
  24. package/lib-es/utils/get-default-query-params.js +1 -3
  25. package/lib-es/utils/get-default-query-params.js.map +1 -1
  26. package/package.json +5 -5
  27. package/src/components/EntityManager/Entity/Entity.js +1 -1
  28. package/src/components/ListingTable/ListingTable.js +37 -19
  29. package/src/components/ListingTable/ListingTableContent/ListingTableContent.js +0 -5
  30. package/src/components/ListingTable/service/index.js +42 -5
  31. package/src/utils/build-listing-query.js +11 -1
  32. package/src/utils/get-default-query-params.js +1 -1
@@ -27,10 +27,9 @@ const ListingTable = ({
27
27
  });
28
28
  const [scrollToIndex, setScrollToIndex] = useState(0);
29
29
  const [verifiedRanges, setVerifiedRanges] = useState([]);
30
- const queryParamsDefault = getDefaultQueryParams({
31
- schema: entitySchema
32
- });
30
+ const queryParamsDefault = getDefaultQueryParams(entitySchema);
33
31
  const [queryParams, setQueryParams] = useState(queryParamsDefault);
32
+ const [listFilters, setListFilters] = useState([]);
34
33
  const client = useApolloClient();
35
34
  const {
36
35
  addToast
@@ -38,20 +37,7 @@ const ListingTable = ({
38
37
  useEffect(() => {
39
38
  (async () => {
40
39
  if (entitySchema.id !== previousSchema.id || previousSchema.id === null && entitySchema.id) {
41
- const data = await fetchData({
42
- client,
43
- querySettings: {
44
- entitySchema,
45
- queryParams: queryParamsDefault
46
- }
47
- });
48
- const populatedTable = populateRows({
49
- toggleModal,
50
- url: match.url,
51
- entitySchema,
52
- rows: data
53
- });
54
- setTableData(populatedTable);
40
+ await doQuery();
55
41
  setPreviousSchema({
56
42
  id: entitySchema.id
57
43
  });
@@ -60,6 +46,27 @@ const ListingTable = ({
60
46
  }, [client, entitySchema, match.url, previousSchema.id, queryParams] // eslint-disable-line react-hooks/exhaustive-deps
61
47
  );
62
48
 
49
+ const doQuery = async (filters = listFilters) => {
50
+ const data = await fetchData({
51
+ client,
52
+ querySettings: {
53
+ entitySchema,
54
+ queryParams: queryParamsDefault
55
+ },
56
+ listFilters: filters
57
+ });
58
+ const populatedTable = populateRows({
59
+ toggleModal,
60
+ url: match.url,
61
+ entitySchema,
62
+ rows: data
63
+ });
64
+ setTableData(populatedTable);
65
+ };
66
+ const updateListingFilters = async filters => {
67
+ await doQuery(filters);
68
+ setListFilters(filters);
69
+ };
63
70
  const onCloseCardPrompt = () => null;
64
71
  const toggleModal = item => {
65
72
  setModalStatus(!!item);
@@ -97,7 +104,8 @@ const ListingTable = ({
97
104
  querySettings: {
98
105
  entitySchema,
99
106
  queryParams: sortQueryParams
100
- }
107
+ },
108
+ listFilters
101
109
  });
102
110
  const {
103
111
  columns,
@@ -132,7 +140,8 @@ const ListingTable = ({
132
140
  querySettings: {
133
141
  entitySchema,
134
142
  queryParams: updatedQueryParams
135
- }
143
+ },
144
+ listFilters
136
145
  });
137
146
  const updatedRows = [...tableData.rows, ...formatRows({
138
147
  rows: getParsedRowData(data),
@@ -171,7 +180,8 @@ const ListingTable = ({
171
180
  isMoreMenu: true
172
181
  }))))), /*#__PURE__*/React.createElement(RenderHook, {
173
182
  hookKey: "entity:listing:main:top",
174
- schema: entitySchema
183
+ schema: entitySchema,
184
+ setListFilters: updateListingFilters
175
185
  }), /*#__PURE__*/React.createElement(ListingTableContent, {
176
186
  overScanBuffer: OVER_SCAN_BUFFER,
177
187
  onSort: handleSort,
@@ -1 +1 @@
1
- {"version":3,"file":"ListingTable.js","names":["useApolloClient","React","useEffect","useState","Fragment","PropTypes","withRouter","Link","More","PageHeader","DeleteAction","useToasts","RenderHook","ListingTableContent","availableActions","fetchData","populateRows","formatRows","getParsedRowData","getDefaultQueryParams","OVER_SCAN_BUFFER","ListingTable","match","entitySchema","tableData","setTableData","modalStatus","setModalStatus","itemToDelete","setItemToDelete","previousSchema","setPreviousSchema","id","scrollToIndex","setScrollToIndex","verifiedRanges","setVerifiedRanges","queryParamsDefault","schema","queryParams","setQueryParams","client","addToast","data","querySettings","populatedTable","toggleModal","url","rows","onCloseCardPrompt","item","deleteAction","delete","submit","parsedFormValues","updatedTableData","_objectSpread","filter","handleSort","event","property","direction","Object","entries","sortQueryParams","sort","columns","isEnquiry","firstColumn","appliedSort","handleRenderedItems","params","startIndex","rowsLength","length","loadIndex","Math","floor","includes","updatedQueryParams","offset","updatedRows","showAddButton","createElement","className","onClose","itemName","name","title","displayName","subtitle","to","Actions","Avatar","isMoreMenu","Content","hookKey","overScanBuffer","onSort","onRenderItems","propTypes","object","isRequired"],"sources":["../../../src/components/ListingTable/ListingTable.js"],"sourcesContent":["import { useApolloClient } from '@apollo/client';\nimport React, { useEffect, useState, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { withRouter, Link } from 'react-router-dom';\nimport More from '@blaze-react/more';\nimport { PageHeader, DeleteAction } from '@blaze-cms/admin';\nimport { useToasts } from '@blaze-react/toaster';\nimport { RenderHook } from '@blaze-cms/plugin-render-hooks-ui';\nimport ListingTableContent from './ListingTableContent';\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 OVER_SCAN_BUFFER = 10;\n\nconst ListingTable = ({ match, entitySchema }) => {\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 [scrollToIndex, setScrollToIndex] = useState(0);\n const [verifiedRanges, setVerifiedRanges] = useState([]);\n const queryParamsDefault = getDefaultQueryParams({ schema: entitySchema });\n const [queryParams, setQueryParams] = useState(queryParamsDefault);\n const client = useApolloClient();\n const { addToast } = useToasts();\n\n useEffect(\n () => {\n (async () => {\n if (\n entitySchema.id !== previousSchema.id ||\n (previousSchema.id === null && entitySchema.id)\n ) {\n const data = await fetchData({\n client,\n querySettings: {\n entitySchema,\n queryParams: queryParamsDefault\n }\n });\n const populatedTable = populateRows({\n toggleModal,\n url: match.url,\n entitySchema,\n rows: data\n });\n\n setTableData(populatedTable);\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 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 setScrollToIndex(0);\n setVerifiedRanges([]);\n setQueryParams(sortQueryParams);\n\n const data = await fetchData({\n client,\n querySettings: {\n entitySchema,\n queryParams: sortQueryParams\n }\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(data),\n url: match.url,\n toggleModal,\n firstColumn,\n isEnquiry\n })\n });\n };\n\n const handleRenderedItems = async params => {\n const { startIndex } = params;\n const rowsLength = tableData.rows.length;\n const loadIndex = Math.floor(rowsLength / 3) - OVER_SCAN_BUFFER;\n if (loadIndex > 0 && loadIndex < startIndex && !verifiedRanges.includes(loadIndex)) {\n const updatedQueryParams = {\n ...queryParams,\n offset: rowsLength\n };\n const data = await fetchData({\n client,\n querySettings: {\n entitySchema,\n queryParams: updatedQueryParams\n }\n });\n const updatedRows = [\n ...tableData.rows,\n ...formatRows({\n rows: getParsedRowData(data),\n url: match.url,\n toggleModal,\n isEnquiry: tableData.isEnquiry\n })\n ];\n\n setVerifiedRanges([...verifiedRanges, loadIndex]);\n setQueryParams(updatedQueryParams);\n setTableData({\n ...tableData,\n rows: updatedRows\n });\n setScrollToIndex(startIndex + OVER_SCAN_BUFFER);\n }\n };\n\n if (!tableData || !tableData.rows) return 'loading';\n const showAddButton = !!tableData.rows.length && !tableData.isEnquiry;\n\n return (\n <div className=\"page\">\n {modalStatus && (\n <DeleteAction\n onClose={toggleModal}\n deleteAction={deleteAction}\n itemName={itemToDelete.name}\n />\n )}\n <PageHeader title={entitySchema.displayName} subtitle=\"\">\n {showAddButton && (\n <Fragment>\n <Link\n data-testid=\"addEntity\"\n className=\"button button--small\"\n to={`${match.url}/create`}>\n Add\n </Link>\n <PageHeader.Actions>\n <More>\n <More.Avatar isMoreMenu>\n <span className=\"material-icons\">more_vert</span>\n </More.Avatar>\n <More.Content isMoreMenu />\n </More>\n </PageHeader.Actions>\n </Fragment>\n )}\n </PageHeader>\n <RenderHook hookKey=\"entity:listing:main:top\" schema={entitySchema} />\n <ListingTableContent\n overScanBuffer={OVER_SCAN_BUFFER}\n onSort={handleSort}\n onRenderItems={handleRenderedItems}\n tableData={tableData}\n onCloseCardPrompt={onCloseCardPrompt}\n scrollToIndex={scrollToIndex}\n />\n </div>\n );\n};\nListingTable.propTypes = {\n entitySchema: PropTypes.object.isRequired,\n match: PropTypes.object.isRequired\n};\n\nexport default withRouter(ListingTable);\n"],"mappings":"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"}
1
+ {"version":3,"file":"ListingTable.js","names":["useApolloClient","React","useEffect","useState","Fragment","PropTypes","withRouter","Link","More","PageHeader","DeleteAction","useToasts","RenderHook","ListingTableContent","availableActions","fetchData","populateRows","formatRows","getParsedRowData","getDefaultQueryParams","OVER_SCAN_BUFFER","ListingTable","match","entitySchema","tableData","setTableData","modalStatus","setModalStatus","itemToDelete","setItemToDelete","previousSchema","setPreviousSchema","id","scrollToIndex","setScrollToIndex","verifiedRanges","setVerifiedRanges","queryParamsDefault","queryParams","setQueryParams","listFilters","setListFilters","client","addToast","doQuery","url","filters","data","querySettings","populatedTable","toggleModal","rows","updateListingFilters","onCloseCardPrompt","item","deleteAction","delete","submit","parsedFormValues","updatedTableData","_objectSpread","filter","handleSort","event","property","direction","Object","entries","sortQueryParams","sort","columns","isEnquiry","firstColumn","appliedSort","handleRenderedItems","params","startIndex","rowsLength","length","loadIndex","Math","floor","includes","updatedQueryParams","offset","updatedRows","showAddButton","createElement","className","onClose","itemName","name","title","displayName","subtitle","to","Actions","Avatar","isMoreMenu","Content","hookKey","schema","overScanBuffer","onSort","onRenderItems","propTypes","object","isRequired"],"sources":["../../../src/components/ListingTable/ListingTable.js"],"sourcesContent":["import { useApolloClient } from '@apollo/client';\nimport React, { useEffect, useState, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { withRouter, Link } from 'react-router-dom';\nimport More from '@blaze-react/more';\nimport { PageHeader, DeleteAction } from '@blaze-cms/admin';\nimport { useToasts } from '@blaze-react/toaster';\nimport { RenderHook } from '@blaze-cms/plugin-render-hooks-ui';\nimport ListingTableContent from './ListingTableContent';\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 OVER_SCAN_BUFFER = 10;\n\nconst ListingTable = ({ match, entitySchema }) => {\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 [scrollToIndex, setScrollToIndex] = useState(0);\n const [verifiedRanges, setVerifiedRanges] = useState([]);\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\n useEffect(\n () => {\n (async () => {\n if (\n entitySchema.id !== previousSchema.id ||\n (previousSchema.id === null && entitySchema.id)\n ) {\n await doQuery();\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) => {\n const data = await fetchData({\n client,\n querySettings: {\n entitySchema,\n queryParams: queryParamsDefault\n },\n listFilters: filters\n });\n\n const populatedTable = populateRows({\n toggleModal,\n url: match.url,\n entitySchema,\n rows: data\n });\n\n setTableData(populatedTable);\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 setScrollToIndex(0);\n setVerifiedRanges([]);\n setQueryParams(sortQueryParams);\n\n const data = 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(data),\n url: match.url,\n toggleModal,\n firstColumn,\n isEnquiry\n })\n });\n };\n\n const handleRenderedItems = async params => {\n const { startIndex } = params;\n const rowsLength = tableData.rows.length;\n const loadIndex = Math.floor(rowsLength / 3) - OVER_SCAN_BUFFER;\n if (loadIndex > 0 && loadIndex < startIndex && !verifiedRanges.includes(loadIndex)) {\n const updatedQueryParams = {\n ...queryParams,\n offset: rowsLength\n };\n const data = await fetchData({\n client,\n querySettings: {\n entitySchema,\n queryParams: updatedQueryParams\n },\n listFilters\n });\n const updatedRows = [\n ...tableData.rows,\n ...formatRows({\n rows: getParsedRowData(data),\n url: match.url,\n toggleModal,\n isEnquiry: tableData.isEnquiry\n })\n ];\n\n setVerifiedRanges([...verifiedRanges, loadIndex]);\n setQueryParams(updatedQueryParams);\n setTableData({\n ...tableData,\n rows: updatedRows\n });\n setScrollToIndex(startIndex + OVER_SCAN_BUFFER);\n }\n };\n\n if (!tableData || !tableData.rows) return 'loading';\n const showAddButton = !!tableData.rows.length && !tableData.isEnquiry;\n\n return (\n <div className=\"page\">\n {modalStatus && (\n <DeleteAction\n onClose={toggleModal}\n deleteAction={deleteAction}\n itemName={itemToDelete.name}\n />\n )}\n <PageHeader title={entitySchema.displayName} subtitle=\"\">\n {showAddButton && (\n <Fragment>\n <Link\n data-testid=\"addEntity\"\n className=\"button button--small\"\n to={`${match.url}/create`}>\n Add\n </Link>\n <PageHeader.Actions>\n <More>\n <More.Avatar isMoreMenu>\n <span className=\"material-icons\">more_vert</span>\n </More.Avatar>\n <More.Content isMoreMenu />\n </More>\n </PageHeader.Actions>\n </Fragment>\n )}\n </PageHeader>\n <RenderHook\n hookKey=\"entity:listing:main:top\"\n schema={entitySchema}\n setListFilters={updateListingFilters}\n />\n <ListingTableContent\n overScanBuffer={OVER_SCAN_BUFFER}\n onSort={handleSort}\n onRenderItems={handleRenderedItems}\n tableData={tableData}\n onCloseCardPrompt={onCloseCardPrompt}\n scrollToIndex={scrollToIndex}\n />\n </div>\n );\n};\nListingTable.propTypes = {\n entitySchema: PropTypes.object.isRequired,\n match: PropTypes.object.isRequired\n};\n\nexport default withRouter(ListingTable);\n"],"mappings":"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"}
@@ -5,9 +5,6 @@ import { withRouter } from 'react-router-dom';
5
5
  const ListingTableContent = ({
6
6
  tableData,
7
7
  handleSelect,
8
- onCloseCardPrompt,
9
- selectedMenuItem,
10
- match,
11
8
  onSort,
12
9
  onClickRow,
13
10
  overScanBuffer,
@@ -35,8 +32,6 @@ const ListingTableContent = ({
35
32
  };
36
33
  ListingTableContent.propTypes = {
37
34
  tableData: PropTypes.object.isRequired,
38
- onCloseCardPrompt: PropTypes.func.isRequired,
39
- selectedMenuItem: PropTypes.object,
40
35
  match: PropTypes.shape({
41
36
  url: PropTypes.string
42
37
  }).isRequired,
@@ -1 +1 @@
1
- {"version":3,"file":"ListingTableContent.js","names":["React","Table","PropTypes","withRouter","ListingTableContent","tableData","handleSelect","onCloseCardPrompt","selectedMenuItem","match","onSort","onClickRow","overScanBuffer","onRenderItems","scrollToIndex","displayTable","rows","length","isEnquiry","className","createElement","Fragment","data","checkboxes","onSelect","propTypes","object","isRequired","func","shape","url","string","number","defaultProps"],"sources":["../../../../src/components/ListingTable/ListingTableContent/ListingTableContent.js"],"sourcesContent":["import React from 'react';\nimport Table from '@blaze-react/table';\nimport PropTypes from 'prop-types';\nimport { withRouter } from 'react-router-dom';\n\nconst ListingTableContent = ({\n tableData,\n handleSelect,\n onCloseCardPrompt,\n selectedMenuItem,\n match,\n onSort,\n onClickRow,\n overScanBuffer,\n onRenderItems,\n scrollToIndex\n}) => {\n const displayTable = tableData && tableData.rows && !!tableData.rows.length;\n const { isEnquiry } = tableData;\n const className = `page__content${isEnquiry ? ' array-table' : ''}`;\n\n return (\n <>\n {displayTable && (\n <>\n <div className={className}>\n <Table\n scrollToIndex={scrollToIndex}\n onSort={onSort}\n onClickRow={onClickRow}\n overScanBuffer={overScanBuffer}\n onRenderItems={onRenderItems}\n data={tableData}\n checkboxes={!isEnquiry}\n onSelect={handleSelect}\n data-testid=\"listing-table-content\"\n />\n </div>\n </>\n )}\n </>\n );\n};\n\nListingTableContent.propTypes = {\n tableData: PropTypes.object.isRequired,\n onCloseCardPrompt: PropTypes.func.isRequired,\n selectedMenuItem: PropTypes.object,\n match: PropTypes.shape({\n url: PropTypes.string\n }).isRequired,\n handleSelect: PropTypes.func,\n onSort: PropTypes.func,\n onClickRow: PropTypes.func,\n overScanBuffer: PropTypes.number,\n scrollToIndex: PropTypes.number,\n onRenderItems: PropTypes.func\n};\n\nListingTableContent.defaultProps = {\n handleSelect: () => {},\n onSort: () => {},\n onClickRow: () => {},\n overScanBuffer: 0,\n scrollToIndex: 0,\n onRenderItems: () => {},\n selectedMenuItem: null\n};\n\nexport default withRouter(ListingTableContent);\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,KAAK,MAAM,oBAAoB;AACtC,OAAOC,SAAS,MAAM,YAAY;AAClC,SAASC,UAAU,QAAQ,kBAAkB;AAE7C,MAAMC,mBAAmB,GAAGA,CAAC;EAC3BC,SAAS;EACTC,YAAY;EACZC,iBAAiB;EACjBC,gBAAgB;EAChBC,KAAK;EACLC,MAAM;EACNC,UAAU;EACVC,cAAc;EACdC,aAAa;EACbC;AACF,CAAC,KAAK;EACJ,MAAMC,YAAY,GAAGV,SAAS,IAAIA,SAAS,CAACW,IAAI,IAAI,CAAC,CAACX,SAAS,CAACW,IAAI,CAACC,MAAM;EAC3E,MAAM;IAAEC;EAAU,CAAC,GAAGb,SAAS;EAC/B,MAAMc,SAAS,GAAI,gBAAeD,SAAS,GAAG,cAAc,GAAG,EAAG,EAAC;EAEnE,oBACElB,KAAA,CAAAoB,aAAA,CAAApB,KAAA,CAAAqB,QAAA,QACGN,YAAY,iBACXf,KAAA,CAAAoB,aAAA,CAAApB,KAAA,CAAAqB,QAAA,qBACErB,KAAA,CAAAoB,aAAA;IAAKD,SAAS,EAAEA;EAAU,gBACxBnB,KAAA,CAAAoB,aAAA,CAACnB,KAAK;IACJa,aAAa,EAAEA,aAAc;IAC7BJ,MAAM,EAAEA,MAAO;IACfC,UAAU,EAAEA,UAAW;IACvBC,cAAc,EAAEA,cAAe;IAC/BC,aAAa,EAAEA,aAAc;IAC7BS,IAAI,EAAEjB,SAAU;IAChBkB,UAAU,EAAE,CAACL,SAAU;IACvBM,QAAQ,EAAElB,YAAa;IACvB,eAAY;EAAuB,CACpC,CACE,CACL,CAEJ,CAAC;AAEP,CAAC;AAEDF,mBAAmB,CAACqB,SAAS,GAAG;EAC9BpB,SAAS,EAAEH,SAAS,CAACwB,MAAM,CAACC,UAAU;EACtCpB,iBAAiB,EAAEL,SAAS,CAAC0B,IAAI,CAACD,UAAU;EAC5CnB,gBAAgB,EAAEN,SAAS,CAACwB,MAAM;EAClCjB,KAAK,EAAEP,SAAS,CAAC2B,KAAK,CAAC;IACrBC,GAAG,EAAE5B,SAAS,CAAC6B;EACjB,CAAC,CAAC,CAACJ,UAAU;EACbrB,YAAY,EAAEJ,SAAS,CAAC0B,IAAI;EAC5BlB,MAAM,EAAER,SAAS,CAAC0B,IAAI;EACtBjB,UAAU,EAAET,SAAS,CAAC0B,IAAI;EAC1BhB,cAAc,EAAEV,SAAS,CAAC8B,MAAM;EAChClB,aAAa,EAAEZ,SAAS,CAAC8B,MAAM;EAC/BnB,aAAa,EAAEX,SAAS,CAAC0B;AAC3B,CAAC;AAEDxB,mBAAmB,CAAC6B,YAAY,GAAG;EACjC3B,YAAY,EAAEA,CAAA,KAAM,CAAC,CAAC;EACtBI,MAAM,EAAEA,CAAA,KAAM,CAAC,CAAC;EAChBC,UAAU,EAAEA,CAAA,KAAM,CAAC,CAAC;EACpBC,cAAc,EAAE,CAAC;EACjBE,aAAa,EAAE,CAAC;EAChBD,aAAa,EAAEA,CAAA,KAAM,CAAC,CAAC;EACvBL,gBAAgB,EAAE;AACpB,CAAC;AAED,eAAeL,UAAU,CAACC,mBAAmB,CAAC"}
1
+ {"version":3,"file":"ListingTableContent.js","names":["React","Table","PropTypes","withRouter","ListingTableContent","tableData","handleSelect","onSort","onClickRow","overScanBuffer","onRenderItems","scrollToIndex","displayTable","rows","length","isEnquiry","className","createElement","Fragment","data","checkboxes","onSelect","propTypes","object","isRequired","match","shape","url","string","func","number","defaultProps","selectedMenuItem"],"sources":["../../../../src/components/ListingTable/ListingTableContent/ListingTableContent.js"],"sourcesContent":["import React from 'react';\nimport Table from '@blaze-react/table';\nimport PropTypes from 'prop-types';\nimport { withRouter } from 'react-router-dom';\n\nconst ListingTableContent = ({\n tableData,\n handleSelect,\n onSort,\n onClickRow,\n overScanBuffer,\n onRenderItems,\n scrollToIndex\n}) => {\n const displayTable = tableData && tableData.rows && !!tableData.rows.length;\n const { isEnquiry } = tableData;\n const className = `page__content${isEnquiry ? ' array-table' : ''}`;\n\n return (\n <>\n {displayTable && (\n <>\n <div className={className}>\n <Table\n scrollToIndex={scrollToIndex}\n onSort={onSort}\n onClickRow={onClickRow}\n overScanBuffer={overScanBuffer}\n onRenderItems={onRenderItems}\n data={tableData}\n checkboxes={!isEnquiry}\n onSelect={handleSelect}\n data-testid=\"listing-table-content\"\n />\n </div>\n </>\n )}\n </>\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 onClickRow: PropTypes.func,\n overScanBuffer: PropTypes.number,\n scrollToIndex: PropTypes.number,\n onRenderItems: PropTypes.func\n};\n\nListingTableContent.defaultProps = {\n handleSelect: () => {},\n onSort: () => {},\n onClickRow: () => {},\n overScanBuffer: 0,\n scrollToIndex: 0,\n onRenderItems: () => {},\n selectedMenuItem: null\n};\n\nexport default withRouter(ListingTableContent);\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,KAAK,MAAM,oBAAoB;AACtC,OAAOC,SAAS,MAAM,YAAY;AAClC,SAASC,UAAU,QAAQ,kBAAkB;AAE7C,MAAMC,mBAAmB,GAAGA,CAAC;EAC3BC,SAAS;EACTC,YAAY;EACZC,MAAM;EACNC,UAAU;EACVC,cAAc;EACdC,aAAa;EACbC;AACF,CAAC,KAAK;EACJ,MAAMC,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;EAEnE,oBACEf,KAAA,CAAAiB,aAAA,CAAAjB,KAAA,CAAAkB,QAAA,QACGN,YAAY,iBACXZ,KAAA,CAAAiB,aAAA,CAAAjB,KAAA,CAAAkB,QAAA,qBACElB,KAAA,CAAAiB,aAAA;IAAKD,SAAS,EAAEA;EAAU,gBACxBhB,KAAA,CAAAiB,aAAA,CAAChB,KAAK;IACJU,aAAa,EAAEA,aAAc;IAC7BJ,MAAM,EAAEA,MAAO;IACfC,UAAU,EAAEA,UAAW;IACvBC,cAAc,EAAEA,cAAe;IAC/BC,aAAa,EAAEA,aAAc;IAC7BS,IAAI,EAAEd,SAAU;IAChBe,UAAU,EAAE,CAACL,SAAU;IACvBM,QAAQ,EAAEf,YAAa;IACvB,eAAY;EAAuB,CACpC,CACE,CACL,CAEJ,CAAC;AAEP,CAAC;AAEDF,mBAAmB,CAACkB,SAAS,GAAG;EAC9BjB,SAAS,EAAEH,SAAS,CAACqB,MAAM,CAACC,UAAU;EACtCC,KAAK,EAAEvB,SAAS,CAACwB,KAAK,CAAC;IACrBC,GAAG,EAAEzB,SAAS,CAAC0B;EACjB,CAAC,CAAC,CAACJ,UAAU;EACblB,YAAY,EAAEJ,SAAS,CAAC2B,IAAI;EAC5BtB,MAAM,EAAEL,SAAS,CAAC2B,IAAI;EACtBrB,UAAU,EAAEN,SAAS,CAAC2B,IAAI;EAC1BpB,cAAc,EAAEP,SAAS,CAAC4B,MAAM;EAChCnB,aAAa,EAAET,SAAS,CAAC4B,MAAM;EAC/BpB,aAAa,EAAER,SAAS,CAAC2B;AAC3B,CAAC;AAEDzB,mBAAmB,CAAC2B,YAAY,GAAG;EACjCzB,YAAY,EAAEA,CAAA,KAAM,CAAC,CAAC;EACtBC,MAAM,EAAEA,CAAA,KAAM,CAAC,CAAC;EAChBC,UAAU,EAAEA,CAAA,KAAM,CAAC,CAAC;EACpBC,cAAc,EAAE,CAAC;EACjBE,aAAa,EAAE,CAAC;EAChBD,aAAa,EAAEA,CAAA,KAAM,CAAC,CAAC;EACvBsB,gBAAgB,EAAE;AACpB,CAAC;AAED,eAAe7B,UAAU,CAACC,mBAAmB,CAAC"}
@@ -1,22 +1,80 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
3
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
1
4
  import buildListingQuery from '../../../utils/build-listing-query';
5
+ function buildVariables({
6
+ entitySchema,
7
+ isSearchQuery,
8
+ listFilters = [],
9
+ queryParams = {}
10
+ }) {
11
+ const {
12
+ identifier
13
+ } = entitySchema;
14
+ const {
15
+ sort,
16
+ offset,
17
+ limit,
18
+ where
19
+ } = queryParams;
20
+ const [{
21
+ property,
22
+ direction
23
+ }] = sort;
24
+ const parsedOffset = `${property}:${direction}`;
25
+ if (!isSearchQuery) return _objectSpread(_objectSpread({}, queryParams), {}, {
26
+ where: !Array.isArray(listFilters) ? listFilters : where
27
+ });
28
+ const rawQuery = {
29
+ bool: {
30
+ must: listFilters || [],
31
+ filter: [{
32
+ term: {
33
+ entityIdentifier: identifier
34
+ }
35
+ }]
36
+ }
37
+ };
38
+ return {
39
+ limit,
40
+ offset,
41
+ sort: parsedOffset,
42
+ where: JSON.stringify(rawQuery)
43
+ };
44
+ }
2
45
  const fetchData = async ({
3
46
  client,
4
47
  querySettings: {
5
48
  entitySchema,
6
49
  queryParams
7
- }
50
+ },
51
+ listFilters
8
52
  }) => {
9
- const query = buildListingQuery(entitySchema);
10
53
  const {
11
- data: {
12
- listingData
13
- }
54
+ displayProperties: {
55
+ adminListings: {
56
+ dataSource: {
57
+ source
58
+ } = {}
59
+ } = {}
60
+ } = {}
61
+ } = entitySchema;
62
+ const isSearchQuery = source === 'search';
63
+ const query = buildListingQuery(entitySchema, isSearchQuery);
64
+ const variables = buildVariables({
65
+ entitySchema,
66
+ listFilters,
67
+ queryParams,
68
+ isSearchQuery
69
+ });
70
+ const {
71
+ data = {}
14
72
  } = await client.query({
15
73
  query,
16
- variables: queryParams,
74
+ variables,
17
75
  fetchPolicy: 'network-only'
18
76
  });
19
- return listingData;
77
+ return data.searchResults ? data.searchResults.results : data.listingData;
20
78
  };
21
79
  export { fetchData };
22
80
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["buildListingQuery","fetchData","client","querySettings","entitySchema","queryParams","query","data","listingData","variables","fetchPolicy"],"sources":["../../../../src/components/ListingTable/service/index.js"],"sourcesContent":["import buildListingQuery from '../../../utils/build-listing-query';\n\nconst fetchData = async ({ client, querySettings: { entitySchema, queryParams } }) => {\n const query = buildListingQuery(entitySchema);\n const {\n data: { listingData }\n } = await client.query({ query, variables: queryParams, fetchPolicy: 'network-only' });\n\n return listingData;\n};\n\nexport { fetchData };\n"],"mappings":"AAAA,OAAOA,iBAAiB,MAAM,oCAAoC;AAElE,MAAMC,SAAS,GAAG,MAAAA,CAAO;EAAEC,MAAM;EAAEC,aAAa,EAAE;IAAEC,YAAY;IAAEC;EAAY;AAAE,CAAC,KAAK;EACpF,MAAMC,KAAK,GAAGN,iBAAiB,CAACI,YAAY,CAAC;EAC7C,MAAM;IACJG,IAAI,EAAE;MAAEC;IAAY;EACtB,CAAC,GAAG,MAAMN,MAAM,CAACI,KAAK,CAAC;IAAEA,KAAK;IAAEG,SAAS,EAAEJ,WAAW;IAAEK,WAAW,EAAE;EAAe,CAAC,CAAC;EAEtF,OAAOF,WAAW;AACpB,CAAC;AAED,SAASP,SAAS"}
1
+ {"version":3,"file":"index.js","names":["buildListingQuery","buildVariables","entitySchema","isSearchQuery","listFilters","queryParams","identifier","sort","offset","limit","where","property","direction","parsedOffset","_objectSpread","Array","isArray","rawQuery","bool","must","filter","term","entityIdentifier","JSON","stringify","fetchData","client","querySettings","displayProperties","adminListings","dataSource","source","query","variables","data","fetchPolicy","searchResults","results","listingData"],"sources":["../../../../src/components/ListingTable/service/index.js"],"sourcesContent":["import buildListingQuery from '../../../utils/build-listing-query';\n\nfunction buildVariables({ entitySchema, isSearchQuery, listFilters = [], queryParams = {} }) {\n const { identifier } = entitySchema;\n const { sort, offset, limit, where } = queryParams;\n const [{ property, direction }] = sort;\n const parsedOffset = `${property}:${direction}`;\n\n if (!isSearchQuery)\n return {\n ...queryParams,\n where: !Array.isArray(listFilters) ? listFilters : where\n };\n\n const rawQuery = {\n bool: {\n must: listFilters || [],\n filter: [\n {\n term: {\n entityIdentifier: identifier\n }\n }\n ]\n }\n };\n\n return {\n limit,\n offset,\n sort: parsedOffset,\n where: JSON.stringify(rawQuery)\n };\n}\n\nconst fetchData = async ({ client, querySettings: { entitySchema, queryParams }, listFilters }) => {\n const {\n displayProperties: { adminListings: { dataSource: { source } = {} } = {} } = {}\n } = entitySchema;\n\n const isSearchQuery = source === 'search';\n const query = buildListingQuery(entitySchema, isSearchQuery);\n const variables = buildVariables({ entitySchema, listFilters, queryParams, isSearchQuery });\n const { data = {} } = await client.query({ query, variables, fetchPolicy: 'network-only' });\n\n return data.searchResults ? data.searchResults.results : data.listingData;\n};\n\nexport { fetchData };\n"],"mappings":";;;AAAA,OAAOA,iBAAiB,MAAM,oCAAoC;AAElE,SAASC,cAAcA,CAAC;EAAEC,YAAY;EAAEC,aAAa;EAAEC,WAAW,GAAG,EAAE;EAAEC,WAAW,GAAG,CAAC;AAAE,CAAC,EAAE;EAC3F,MAAM;IAAEC;EAAW,CAAC,GAAGJ,YAAY;EACnC,MAAM;IAAEK,IAAI;IAAEC,MAAM;IAAEC,KAAK;IAAEC;EAAM,CAAC,GAAGL,WAAW;EAClD,MAAM,CAAC;IAAEM,QAAQ;IAAEC;EAAU,CAAC,CAAC,GAAGL,IAAI;EACtC,MAAMM,YAAY,GAAI,GAAEF,QAAS,IAAGC,SAAU,EAAC;EAE/C,IAAI,CAACT,aAAa,EAChB,OAAAW,aAAA,CAAAA,aAAA,KACKT,WAAW;IACdK,KAAK,EAAE,CAACK,KAAK,CAACC,OAAO,CAACZ,WAAW,CAAC,GAAGA,WAAW,GAAGM;EAAK;EAG5D,MAAMO,QAAQ,GAAG;IACfC,IAAI,EAAE;MACJC,IAAI,EAAEf,WAAW,IAAI,EAAE;MACvBgB,MAAM,EAAE,CACN;QACEC,IAAI,EAAE;UACJC,gBAAgB,EAAEhB;QACpB;MACF,CAAC;IAEL;EACF,CAAC;EAED,OAAO;IACLG,KAAK;IACLD,MAAM;IACND,IAAI,EAAEM,YAAY;IAClBH,KAAK,EAAEa,IAAI,CAACC,SAAS,CAACP,QAAQ;EAChC,CAAC;AACH;AAEA,MAAMQ,SAAS,GAAG,MAAAA,CAAO;EAAEC,MAAM;EAAEC,aAAa,EAAE;IAAEzB,YAAY;IAAEG;EAAY,CAAC;EAAED;AAAY,CAAC,KAAK;EACjG,MAAM;IACJwB,iBAAiB,EAAE;MAAEC,aAAa,EAAE;QAAEC,UAAU,EAAE;UAAEC;QAAO,CAAC,GAAG,CAAC;MAAE,CAAC,GAAG,CAAC;IAAE,CAAC,GAAG,CAAC;EAChF,CAAC,GAAG7B,YAAY;EAEhB,MAAMC,aAAa,GAAG4B,MAAM,KAAK,QAAQ;EACzC,MAAMC,KAAK,GAAGhC,iBAAiB,CAACE,YAAY,EAAEC,aAAa,CAAC;EAC5D,MAAM8B,SAAS,GAAGhC,cAAc,CAAC;IAAEC,YAAY;IAAEE,WAAW;IAAEC,WAAW;IAAEF;EAAc,CAAC,CAAC;EAC3F,MAAM;IAAE+B,IAAI,GAAG,CAAC;EAAE,CAAC,GAAG,MAAMR,MAAM,CAACM,KAAK,CAAC;IAAEA,KAAK;IAAEC,SAAS;IAAEE,WAAW,EAAE;EAAe,CAAC,CAAC;EAE3F,OAAOD,IAAI,CAACE,aAAa,GAAGF,IAAI,CAACE,aAAa,CAACC,OAAO,GAAGH,IAAI,CAACI,WAAW;AAC3E,CAAC;AAED,SAASb,SAAS"}
@@ -1,9 +1,18 @@
1
1
  import { gql } from '@apollo/client';
2
2
  import { BlazeError } from '@blaze-cms/core-errors';
3
- function buildListingQuery(entitySchema) {
3
+ import { getDynamicQuery } from '@blaze-cms/admin-ui-utils';
4
+ const buildAdminSearchQuery = entitySchema => {
5
+ const {
6
+ listingProperties = []
7
+ } = entitySchema || {};
8
+ const parsedProperties = `id, ${listingProperties.join(' ') || 'id name'}`;
9
+ return getDynamicQuery('ADMIN_SEARCH')([entitySchema], parsedProperties, true);
10
+ };
11
+ function buildListingQuery(entitySchema, isSearchQuery) {
4
12
  if (!entitySchema.actions || !entitySchema.actions.getAll || !entitySchema.listingProperties) {
5
13
  throw new BlazeError('Listing query requires getAll action and listingProperties from entity schema');
6
14
  }
15
+ if (isSearchQuery) return buildAdminSearchQuery(entitySchema);
7
16
  const sortType = entitySchema.actions.getAll[0].toUpperCase() + entitySchema.actions.getAll.substr(1);
8
17
  return gql`
9
18
  query ${entitySchema.actions.getAll}($where: JSON, $limit: Int, $offset:Int, $sort: [${sortType}SortItem]) {
@@ -1 +1 @@
1
- {"version":3,"file":"build-listing-query.js","names":["gql","BlazeError","buildListingQuery","entitySchema","actions","getAll","listingProperties","sortType","toUpperCase","substr","join"],"sources":["../../src/utils/build-listing-query.js"],"sourcesContent":["import { gql } from '@apollo/client';\nimport { BlazeError } from '@blaze-cms/core-errors';\n\nfunction buildListingQuery(entitySchema) {\n if (!entitySchema.actions || !entitySchema.actions.getAll || !entitySchema.listingProperties) {\n throw new BlazeError(\n 'Listing query requires getAll action and listingProperties from entity schema'\n );\n }\n\n const sortType =\n entitySchema.actions.getAll[0].toUpperCase() + entitySchema.actions.getAll.substr(1);\n\n return gql`\n query ${\n entitySchema.actions.getAll\n }($where: JSON, $limit: Int, $offset:Int, $sort: [${sortType}SortItem]) {\n listingData: ${\n entitySchema.actions.getAll\n }(where: $where, limit: $limit, offset:$offset, sort:$sort){\n id,\n ${entitySchema.listingProperties.join(',\\n')}\n }\n }\n `;\n}\n\nexport default buildListingQuery;\n"],"mappings":"AAAA,SAASA,GAAG,QAAQ,gBAAgB;AACpC,SAASC,UAAU,QAAQ,wBAAwB;AAEnD,SAASC,iBAAiBA,CAACC,YAAY,EAAE;EACvC,IAAI,CAACA,YAAY,CAACC,OAAO,IAAI,CAACD,YAAY,CAACC,OAAO,CAACC,MAAM,IAAI,CAACF,YAAY,CAACG,iBAAiB,EAAE;IAC5F,MAAM,IAAIL,UAAU,CAClB,+EACF,CAAC;EACH;EAEA,MAAMM,QAAQ,GACZJ,YAAY,CAACC,OAAO,CAACC,MAAM,CAAC,CAAC,CAAC,CAACG,WAAW,CAAC,CAAC,GAAGL,YAAY,CAACC,OAAO,CAACC,MAAM,CAACI,MAAM,CAAC,CAAC,CAAC;EAEtF,OAAOT,GAAI;AACb,YACMG,YAAY,CAACC,OAAO,CAACC,MACtB,oDAAmDE,QAAS;AACjE,qBACQJ,YAAY,CAACC,OAAO,CAACC,MACtB;AACP;AACA,UAAUF,YAAY,CAACG,iBAAiB,CAACI,IAAI,CAAC,KAAK,CAAE;AACrD;AACA;AACA,GAAG;AACH;AAEA,eAAeR,iBAAiB"}
1
+ {"version":3,"file":"build-listing-query.js","names":["gql","BlazeError","getDynamicQuery","buildAdminSearchQuery","entitySchema","listingProperties","parsedProperties","join","buildListingQuery","isSearchQuery","actions","getAll","sortType","toUpperCase","substr"],"sources":["../../src/utils/build-listing-query.js"],"sourcesContent":["import { gql } from '@apollo/client';\nimport { BlazeError } from '@blaze-cms/core-errors';\nimport { getDynamicQuery } from '@blaze-cms/admin-ui-utils';\n\nconst buildAdminSearchQuery = entitySchema => {\n const { listingProperties = [] } = entitySchema || {};\n const parsedProperties = `id, ${listingProperties.join(' ') || 'id name'}`;\n\n return getDynamicQuery('ADMIN_SEARCH')([entitySchema], parsedProperties, true);\n};\n\nfunction buildListingQuery(entitySchema, isSearchQuery) {\n if (!entitySchema.actions || !entitySchema.actions.getAll || !entitySchema.listingProperties) {\n throw new BlazeError(\n 'Listing query requires getAll action and listingProperties from entity schema'\n );\n }\n\n if (isSearchQuery) return buildAdminSearchQuery(entitySchema);\n\n const sortType =\n entitySchema.actions.getAll[0].toUpperCase() + entitySchema.actions.getAll.substr(1);\n\n return gql`\n query ${\n entitySchema.actions.getAll\n }($where: JSON, $limit: Int, $offset:Int, $sort: [${sortType}SortItem]) {\n listingData: ${\n entitySchema.actions.getAll\n }(where: $where, limit: $limit, offset:$offset, sort:$sort){\n id,\n ${entitySchema.listingProperties.join(',\\n')}\n }\n }\n `;\n}\n\nexport default buildListingQuery;\n"],"mappings":"AAAA,SAASA,GAAG,QAAQ,gBAAgB;AACpC,SAASC,UAAU,QAAQ,wBAAwB;AACnD,SAASC,eAAe,QAAQ,2BAA2B;AAE3D,MAAMC,qBAAqB,GAAGC,YAAY,IAAI;EAC5C,MAAM;IAAEC,iBAAiB,GAAG;EAAG,CAAC,GAAGD,YAAY,IAAI,CAAC,CAAC;EACrD,MAAME,gBAAgB,GAAI,OAAMD,iBAAiB,CAACE,IAAI,CAAC,GAAG,CAAC,IAAI,SAAU,EAAC;EAE1E,OAAOL,eAAe,CAAC,cAAc,CAAC,CAAC,CAACE,YAAY,CAAC,EAAEE,gBAAgB,EAAE,IAAI,CAAC;AAChF,CAAC;AAED,SAASE,iBAAiBA,CAACJ,YAAY,EAAEK,aAAa,EAAE;EACtD,IAAI,CAACL,YAAY,CAACM,OAAO,IAAI,CAACN,YAAY,CAACM,OAAO,CAACC,MAAM,IAAI,CAACP,YAAY,CAACC,iBAAiB,EAAE;IAC5F,MAAM,IAAIJ,UAAU,CAClB,+EACF,CAAC;EACH;EAEA,IAAIQ,aAAa,EAAE,OAAON,qBAAqB,CAACC,YAAY,CAAC;EAE7D,MAAMQ,QAAQ,GACZR,YAAY,CAACM,OAAO,CAACC,MAAM,CAAC,CAAC,CAAC,CAACE,WAAW,CAAC,CAAC,GAAGT,YAAY,CAACM,OAAO,CAACC,MAAM,CAACG,MAAM,CAAC,CAAC,CAAC;EAEtF,OAAOd,GAAI;AACb,YACMI,YAAY,CAACM,OAAO,CAACC,MACtB,oDAAmDC,QAAS;AACjE,qBACQR,YAAY,CAACM,OAAO,CAACC,MACtB;AACP;AACA,UAAUP,YAAY,CAACC,iBAAiB,CAACE,IAAI,CAAC,KAAK,CAAE;AACrD;AACA;AACA,GAAG;AACH;AAEA,eAAeC,iBAAiB"}
@@ -1,6 +1,4 @@
1
- const getDefaultQueryParams = ({
2
- schema
3
- }) => {
1
+ const getDefaultQueryParams = schema => {
4
2
  const updated = schema.properties && schema.properties.updated;
5
3
  const {
6
4
  adminDefaultListingFilter: where
@@ -1 +1 @@
1
- {"version":3,"file":"get-default-query-params.js","names":["getDefaultQueryParams","schema","updated","properties","adminDefaultListingFilter","where","displayProperties","limit","offset","sort","property","direction"],"sources":["../../src/utils/get-default-query-params.js"],"sourcesContent":["const getDefaultQueryParams = ({ schema }) => {\n const updated = schema.properties && schema.properties.updated;\n const { adminDefaultListingFilter: where } = schema.displayProperties || {};\n\n return {\n where,\n limit: 40,\n offset: 0,\n sort: updated\n ? [\n {\n property: 'updated',\n direction: 'desc'\n }\n ]\n : []\n };\n};\n\nexport { getDefaultQueryParams };\n"],"mappings":"AAAA,MAAMA,qBAAqB,GAAGA,CAAC;EAAEC;AAAO,CAAC,KAAK;EAC5C,MAAMC,OAAO,GAAGD,MAAM,CAACE,UAAU,IAAIF,MAAM,CAACE,UAAU,CAACD,OAAO;EAC9D,MAAM;IAAEE,yBAAyB,EAAEC;EAAM,CAAC,GAAGJ,MAAM,CAACK,iBAAiB,IAAI,CAAC,CAAC;EAE3E,OAAO;IACLD,KAAK;IACLE,KAAK,EAAE,EAAE;IACTC,MAAM,EAAE,CAAC;IACTC,IAAI,EAAEP,OAAO,GACT,CACE;MACEQ,QAAQ,EAAE,SAAS;MACnBC,SAAS,EAAE;IACb,CAAC,CACF,GACD;EACN,CAAC;AACH,CAAC;AAED,SAASX,qBAAqB"}
1
+ {"version":3,"file":"get-default-query-params.js","names":["getDefaultQueryParams","schema","updated","properties","adminDefaultListingFilter","where","displayProperties","limit","offset","sort","property","direction"],"sources":["../../src/utils/get-default-query-params.js"],"sourcesContent":["const getDefaultQueryParams = schema => {\n const updated = schema.properties && schema.properties.updated;\n const { adminDefaultListingFilter: where } = schema.displayProperties || {};\n\n return {\n where,\n limit: 40,\n offset: 0,\n sort: updated\n ? [\n {\n property: 'updated',\n direction: 'desc'\n }\n ]\n : []\n };\n};\n\nexport { getDefaultQueryParams };\n"],"mappings":"AAAA,MAAMA,qBAAqB,GAAGC,MAAM,IAAI;EACtC,MAAMC,OAAO,GAAGD,MAAM,CAACE,UAAU,IAAIF,MAAM,CAACE,UAAU,CAACD,OAAO;EAC9D,MAAM;IAAEE,yBAAyB,EAAEC;EAAM,CAAC,GAAGJ,MAAM,CAACK,iBAAiB,IAAI,CAAC,CAAC;EAE3E,OAAO;IACLD,KAAK;IACLE,KAAK,EAAE,EAAE;IACTC,MAAM,EAAE,CAAC;IACTC,IAAI,EAAEP,OAAO,GACT,CACE;MACEQ,QAAQ,EAAE,SAAS;MACnBC,SAAS,EAAE;IACb,CAAC,CACF,GACD;EACN,CAAC;AACH,CAAC;AAED,SAASX,qBAAqB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blaze-cms/plugin-data-ui",
3
- "version": "0.131.0-project-admin-customisations.0",
3
+ "version": "0.131.0-project-admin-customisations.2",
4
4
  "description": "Blaze plugin data ui",
5
5
  "main": "lib/index.js",
6
6
  "module": "lib-es/index.js",
@@ -27,11 +27,11 @@
27
27
  },
28
28
  "license": "GPL-3.0",
29
29
  "dependencies": {
30
- "@blaze-cms/admin-ui-utils": "0.131.0-project-admin-customisations.0",
30
+ "@blaze-cms/admin-ui-utils": "0.131.0-project-admin-customisations.2",
31
31
  "@blaze-cms/core-errors": "0.131.0-project-admin-customisations.0",
32
32
  "@blaze-cms/plugin-render-hooks-ui": "0.131.0-project-admin-customisations.0",
33
- "@blaze-cms/react-form-builder": "0.131.0-project-admin-customisations.0",
34
- "@blaze-cms/react-page-builder": "0.131.0-project-admin-customisations.0",
33
+ "@blaze-cms/react-form-builder": "0.131.0-project-admin-customisations.2",
34
+ "@blaze-cms/react-page-builder": "0.131.0-project-admin-customisations.2",
35
35
  "@blaze-cms/setup-ui": "0.131.0-project-admin-customisations.0",
36
36
  "@blaze-cms/versioning-ui": "0.131.0-project-admin-customisations.0",
37
37
  "@blaze-react/button": "0.5.19",
@@ -66,5 +66,5 @@
66
66
  "lib/*",
67
67
  "lib-es/*"
68
68
  ],
69
- "gitHead": "409049b62066b81019273ca9ab431439659776ef"
69
+ "gitHead": "afa5f3dedb77eefe1ca4d1e043a8c88d4771e982"
70
70
  }
@@ -475,7 +475,7 @@ const Entity = ({
475
475
  </div>
476
476
  </div>
477
477
 
478
- <div className="column column--one-third page-sidebar">
478
+ <div className="column column--one-third page-sidebar page-sidebar--relations">
479
479
  {showSideBarRelations && (
480
480
  <SideBarRelations
481
481
  entity={entity}
@@ -21,8 +21,9 @@ const ListingTable = ({ match, entitySchema }) => {
21
21
  const [previousSchema, setPreviousSchema] = useState({ id: null });
22
22
  const [scrollToIndex, setScrollToIndex] = useState(0);
23
23
  const [verifiedRanges, setVerifiedRanges] = useState([]);
24
- const queryParamsDefault = getDefaultQueryParams({ schema: entitySchema });
24
+ const queryParamsDefault = getDefaultQueryParams(entitySchema);
25
25
  const [queryParams, setQueryParams] = useState(queryParamsDefault);
26
+ const [listFilters, setListFilters] = useState([]);
26
27
  const client = useApolloClient();
27
28
  const { addToast } = useToasts();
28
29
 
@@ -33,21 +34,7 @@ const ListingTable = ({ match, entitySchema }) => {
33
34
  entitySchema.id !== previousSchema.id ||
34
35
  (previousSchema.id === null && entitySchema.id)
35
36
  ) {
36
- const data = await fetchData({
37
- client,
38
- querySettings: {
39
- entitySchema,
40
- queryParams: queryParamsDefault
41
- }
42
- });
43
- const populatedTable = populateRows({
44
- toggleModal,
45
- url: match.url,
46
- entitySchema,
47
- rows: data
48
- });
49
-
50
- setTableData(populatedTable);
37
+ await doQuery();
51
38
  setPreviousSchema({ id: entitySchema.id });
52
39
  }
53
40
  })();
@@ -55,6 +42,31 @@ const ListingTable = ({ match, entitySchema }) => {
55
42
  [client, entitySchema, match.url, previousSchema.id, queryParams] // eslint-disable-line react-hooks/exhaustive-deps
56
43
  );
57
44
 
45
+ const doQuery = async (filters = listFilters) => {
46
+ const data = await fetchData({
47
+ client,
48
+ querySettings: {
49
+ entitySchema,
50
+ queryParams: queryParamsDefault
51
+ },
52
+ listFilters: filters
53
+ });
54
+
55
+ const populatedTable = populateRows({
56
+ toggleModal,
57
+ url: match.url,
58
+ entitySchema,
59
+ rows: data
60
+ });
61
+
62
+ setTableData(populatedTable);
63
+ };
64
+
65
+ const updateListingFilters = async filters => {
66
+ await doQuery(filters);
67
+ setListFilters(filters);
68
+ };
69
+
58
70
  const onCloseCardPrompt = () => null;
59
71
 
60
72
  const toggleModal = item => {
@@ -97,7 +109,8 @@ const ListingTable = ({ match, entitySchema }) => {
97
109
  querySettings: {
98
110
  entitySchema,
99
111
  queryParams: sortQueryParams
100
- }
112
+ },
113
+ listFilters
101
114
  });
102
115
  const { columns, isEnquiry } = tableData;
103
116
  const [firstColumn] = columns;
@@ -129,7 +142,8 @@ const ListingTable = ({ match, entitySchema }) => {
129
142
  querySettings: {
130
143
  entitySchema,
131
144
  queryParams: updatedQueryParams
132
- }
145
+ },
146
+ listFilters
133
147
  });
134
148
  const updatedRows = [
135
149
  ...tableData.rows,
@@ -183,7 +197,11 @@ const ListingTable = ({ match, entitySchema }) => {
183
197
  </Fragment>
184
198
  )}
185
199
  </PageHeader>
186
- <RenderHook hookKey="entity:listing:main:top" schema={entitySchema} />
200
+ <RenderHook
201
+ hookKey="entity:listing:main:top"
202
+ schema={entitySchema}
203
+ setListFilters={updateListingFilters}
204
+ />
187
205
  <ListingTableContent
188
206
  overScanBuffer={OVER_SCAN_BUFFER}
189
207
  onSort={handleSort}
@@ -6,9 +6,6 @@ import { withRouter } from 'react-router-dom';
6
6
  const ListingTableContent = ({
7
7
  tableData,
8
8
  handleSelect,
9
- onCloseCardPrompt,
10
- selectedMenuItem,
11
- match,
12
9
  onSort,
13
10
  onClickRow,
14
11
  overScanBuffer,
@@ -44,8 +41,6 @@ const ListingTableContent = ({
44
41
 
45
42
  ListingTableContent.propTypes = {
46
43
  tableData: PropTypes.object.isRequired,
47
- onCloseCardPrompt: PropTypes.func.isRequired,
48
- selectedMenuItem: PropTypes.object,
49
44
  match: PropTypes.shape({
50
45
  url: PropTypes.string
51
46
  }).isRequired,
@@ -1,12 +1,49 @@
1
1
  import buildListingQuery from '../../../utils/build-listing-query';
2
2
 
3
- const fetchData = async ({ client, querySettings: { entitySchema, queryParams } }) => {
4
- const query = buildListingQuery(entitySchema);
3
+ function buildVariables({ entitySchema, isSearchQuery, listFilters = [], queryParams = {} }) {
4
+ const { identifier } = entitySchema;
5
+ const { sort, offset, limit, where } = queryParams;
6
+ const [{ property, direction }] = sort;
7
+ const parsedOffset = `${property}:${direction}`;
8
+
9
+ if (!isSearchQuery)
10
+ return {
11
+ ...queryParams,
12
+ where: !Array.isArray(listFilters) ? listFilters : where
13
+ };
14
+
15
+ const rawQuery = {
16
+ bool: {
17
+ must: listFilters || [],
18
+ filter: [
19
+ {
20
+ term: {
21
+ entityIdentifier: identifier
22
+ }
23
+ }
24
+ ]
25
+ }
26
+ };
27
+
28
+ return {
29
+ limit,
30
+ offset,
31
+ sort: parsedOffset,
32
+ where: JSON.stringify(rawQuery)
33
+ };
34
+ }
35
+
36
+ const fetchData = async ({ client, querySettings: { entitySchema, queryParams }, listFilters }) => {
5
37
  const {
6
- data: { listingData }
7
- } = await client.query({ query, variables: queryParams, fetchPolicy: 'network-only' });
38
+ displayProperties: { adminListings: { dataSource: { source } = {} } = {} } = {}
39
+ } = entitySchema;
40
+
41
+ const isSearchQuery = source === 'search';
42
+ const query = buildListingQuery(entitySchema, isSearchQuery);
43
+ const variables = buildVariables({ entitySchema, listFilters, queryParams, isSearchQuery });
44
+ const { data = {} } = await client.query({ query, variables, fetchPolicy: 'network-only' });
8
45
 
9
- return listingData;
46
+ return data.searchResults ? data.searchResults.results : data.listingData;
10
47
  };
11
48
 
12
49
  export { fetchData };
@@ -1,13 +1,23 @@
1
1
  import { gql } from '@apollo/client';
2
2
  import { BlazeError } from '@blaze-cms/core-errors';
3
+ import { getDynamicQuery } from '@blaze-cms/admin-ui-utils';
3
4
 
4
- function buildListingQuery(entitySchema) {
5
+ const buildAdminSearchQuery = entitySchema => {
6
+ const { listingProperties = [] } = entitySchema || {};
7
+ const parsedProperties = `id, ${listingProperties.join(' ') || 'id name'}`;
8
+
9
+ return getDynamicQuery('ADMIN_SEARCH')([entitySchema], parsedProperties, true);
10
+ };
11
+
12
+ function buildListingQuery(entitySchema, isSearchQuery) {
5
13
  if (!entitySchema.actions || !entitySchema.actions.getAll || !entitySchema.listingProperties) {
6
14
  throw new BlazeError(
7
15
  'Listing query requires getAll action and listingProperties from entity schema'
8
16
  );
9
17
  }
10
18
 
19
+ if (isSearchQuery) return buildAdminSearchQuery(entitySchema);
20
+
11
21
  const sortType =
12
22
  entitySchema.actions.getAll[0].toUpperCase() + entitySchema.actions.getAll.substr(1);
13
23
 
@@ -1,4 +1,4 @@
1
- const getDefaultQueryParams = ({ schema }) => {
1
+ const getDefaultQueryParams = schema => {
2
2
  const updated = schema.properties && schema.properties.updated;
3
3
  const { adminDefaultListingFilter: where } = schema.displayProperties || {};
4
4