@blaze-cms/plugin-data-ui 0.146.0-rc-eagle-3.9 → 0.146.0-rc-eagle-3.10

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.
@@ -176,7 +176,7 @@ const ListingTable = ({
176
176
  deleteAction: deleteAction,
177
177
  itemName: itemToDelete.name
178
178
  }), /*#__PURE__*/_react.default.createElement(_admin.PageHeader, {
179
- title: entitySchema.displayName,
179
+ title: entitySchema.displayNamePlural || entitySchema.displayName,
180
180
  subtitle: ""
181
181
  }, createAction.active && !showAddButton && /*#__PURE__*/_react.default.createElement(_reactRouterDom.Link, {
182
182
  "data-testid": "addEntity",
@@ -1 +1 @@
1
- {"version":3,"file":"ListingTable.js","names":["_react","_interopRequireWildcard","require","_propTypes","_interopRequireDefault","_client","_reactRouterDom","_admin","_toaster","_pluginRenderHooksUi","_ListingTableContent","_SearchFilter","_actionsHandlers","_service","_populateRows","_getDefaultQueryParams","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ownKeys","keys","getOwnPropertySymbols","filter","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","ListingTable","match","entitySchema","history","tableData","setTableData","useState","modalStatus","setModalStatus","itemToDelete","setItemToDelete","previousSchema","setPreviousSchema","id","totalItems","setTotalItems","queryParamsDefault","getDefaultQueryParams","queryParams","setQueryParams","listFilters","setListFilters","client","useApolloClient","addToast","useToasts","location","useLocation","searchParams","URLSearchParams","search","currentPage","Number","useEffect","updatedQueryParams","offset","limit","doQuery","url","filters","params","listingData","totalRecords","fetchData","querySettings","populatedTable","populateRows","toggleModal","rows","handleOnPageChange","pageNumber","_offset","document","getElementsByClassName","scrollTo","updateListingFilters","onCloseCardPrompt","item","deleteAction","availableActions","delete","submit","parsedFormValues","updatedTableData","handleSort","event","property","direction","entries","sortQueryParams","sort","columns","isEnquiry","firstColumn","appliedSort","formatRows","getParsedRowData","displayProperties","adminCrudActions","create","createAction","active","_deleteAction","showAddButton","createElement","className","DeleteAction","onClose","itemName","name","PageHeader","title","displayName","subtitle","Link","to","CardPrompt","Fragment","RenderHook","hookKey","schema","onSort","propTypes","PropTypes","object","isRequired","_default","exports","withRouter"],"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","_interopRequireWildcard","require","_propTypes","_interopRequireDefault","_client","_reactRouterDom","_admin","_toaster","_pluginRenderHooksUi","_ListingTableContent","_SearchFilter","_actionsHandlers","_service","_populateRows","_getDefaultQueryParams","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ownKeys","keys","getOwnPropertySymbols","filter","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","ListingTable","match","entitySchema","history","tableData","setTableData","useState","modalStatus","setModalStatus","itemToDelete","setItemToDelete","previousSchema","setPreviousSchema","id","totalItems","setTotalItems","queryParamsDefault","getDefaultQueryParams","queryParams","setQueryParams","listFilters","setListFilters","client","useApolloClient","addToast","useToasts","location","useLocation","searchParams","URLSearchParams","search","currentPage","Number","useEffect","updatedQueryParams","offset","limit","doQuery","url","filters","params","listingData","totalRecords","fetchData","querySettings","populatedTable","populateRows","toggleModal","rows","handleOnPageChange","pageNumber","_offset","document","getElementsByClassName","scrollTo","updateListingFilters","onCloseCardPrompt","item","deleteAction","availableActions","delete","submit","parsedFormValues","updatedTableData","handleSort","event","property","direction","entries","sortQueryParams","sort","columns","isEnquiry","firstColumn","appliedSort","formatRows","getParsedRowData","displayProperties","adminCrudActions","create","createAction","active","_deleteAction","showAddButton","createElement","className","DeleteAction","onClose","itemName","name","PageHeader","title","displayNamePlural","displayName","subtitle","Link","to","CardPrompt","Fragment","RenderHook","hookKey","schema","onSort","propTypes","PropTypes","object","isRequired","_default","exports","withRouter"],"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.displayNamePlural || 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":";;;;;;;;AAAA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,UAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,OAAA,GAAAH,OAAA;AACA,IAAAI,eAAA,GAAAJ,OAAA;AACA,IAAAK,MAAA,GAAAL,OAAA;AACA,IAAAM,QAAA,GAAAN,OAAA;AACA,IAAAO,oBAAA,GAAAP,OAAA;AACA,IAAAQ,oBAAA,GAAAN,sBAAA,CAAAF,OAAA;AACA,IAAAS,aAAA,GAAAP,sBAAA,CAAAF,OAAA;AACA,IAAAU,gBAAA,GAAAR,sBAAA,CAAAF,OAAA;AACA,IAAAW,QAAA,GAAAX,OAAA;AACA,IAAAY,aAAA,GAAAZ,OAAA;AACA,IAAAa,sBAAA,GAAAb,OAAA;AAA6E,SAAAD,wBAAAe,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAjB,uBAAA,YAAAA,CAAAe,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,gBAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA,WAAAO,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAAA,SAAAkB,QAAAnB,CAAA,EAAAG,CAAA,QAAAF,CAAA,GAAAe,MAAA,CAAAI,IAAA,CAAApB,CAAA,OAAAgB,MAAA,CAAAK,qBAAA,QAAAf,CAAA,GAAAU,MAAA,CAAAK,qBAAA,CAAArB,CAAA,GAAAG,CAAA,KAAAG,CAAA,GAAAA,CAAA,CAAAgB,MAAA,WAAAnB,CAAA,WAAAa,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAG,CAAA,EAAAoB,UAAA,OAAAtB,CAAA,CAAAuB,IAAA,CAAAC,KAAA,CAAAxB,CAAA,EAAAK,CAAA,YAAAL,CAAA;AAAA,SAAAyB,cAAA1B,CAAA,aAAAG,CAAA,MAAAA,CAAA,GAAAwB,SAAA,CAAAC,MAAA,EAAAzB,CAAA,UAAAF,CAAA,WAAA0B,SAAA,CAAAxB,CAAA,IAAAwB,SAAA,CAAAxB,CAAA,QAAAA,CAAA,OAAAgB,OAAA,CAAAH,MAAA,CAAAf,CAAA,OAAA4B,OAAA,WAAA1B,CAAA,QAAA2B,gBAAA,CAAApB,OAAA,EAAAV,CAAA,EAAAG,CAAA,EAAAF,CAAA,CAAAE,CAAA,SAAAa,MAAA,CAAAe,yBAAA,GAAAf,MAAA,CAAAgB,gBAAA,CAAAhC,CAAA,EAAAgB,MAAA,CAAAe,yBAAA,CAAA9B,CAAA,KAAAkB,OAAA,CAAAH,MAAA,CAAAf,CAAA,GAAA4B,OAAA,WAAA1B,CAAA,IAAAa,MAAA,CAAAC,cAAA,CAAAjB,CAAA,EAAAG,CAAA,EAAAa,MAAA,CAAAE,wBAAA,CAAAjB,CAAA,EAAAE,CAAA,iBAAAH,CAAA;AAE7E,MAAMiC,YAAY,GAAGA,CAAC;EAAEC,KAAK;EAAEC,YAAY;EAAEC;AAAQ,CAAC,KAAK;EACzD,MAAM,CAACC,SAAS,EAAEC,YAAY,CAAC,GAAG,IAAAC,eAAQ,EAAC,CAAC,CAAC,CAAC;EAC9C,MAAM,CAACC,WAAW,EAAEC,cAAc,CAAC,GAAG,IAAAF,eAAQ,EAAC,KAAK,CAAC;EACrD,MAAM,CAACG,YAAY,EAAEC,eAAe,CAAC,GAAG,IAAAJ,eAAQ,EAAC,CAAC,CAAC,CAAC;EACpD,MAAM,CAACK,cAAc,EAAEC,iBAAiB,CAAC,GAAG,IAAAN,eAAQ,EAAC;IAAEO,EAAE,EAAE;EAAK,CAAC,CAAC;EAClE,MAAM,CAACC,UAAU,EAAEC,aAAa,CAAC,GAAG,IAAAT,eAAQ,EAAC,CAAC,CAAC;EAC/C,MAAMU,kBAAkB,GAAG,IAAAC,4CAAqB,EAACf,YAAY,CAAC;EAC9D,MAAM,CAACgB,WAAW,EAAEC,cAAc,CAAC,GAAG,IAAAb,eAAQ,EAACU,kBAAkB,CAAC;EAClE,MAAM,CAACI,WAAW,EAAEC,cAAc,CAAC,GAAG,IAAAf,eAAQ,EAAC,EAAE,CAAC;EAClD,MAAMgB,MAAM,GAAG,IAAAC,uBAAe,EAAC,CAAC;EAChC,MAAM;IAAEC;EAAS,CAAC,GAAG,IAAAC,kBAAS,EAAC,CAAC;EAChC,MAAMC,QAAQ,GAAG,IAAAC,2BAAW,EAAC,CAAC;EAC9B,MAAMC,YAAY,GAAG,IAAIC,eAAe,CAACH,QAAQ,CAACI,MAAM,CAAC;EACzD,MAAMC,WAAW,GAAGC,MAAM,CAACJ,YAAY,CAACjD,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;EAEzD,IAAAsD,gBAAS,EACP,MAAM;IACJ,CAAC,YAAY;MACX,IACE/B,YAAY,CAACW,EAAE,KAAKF,cAAc,CAACE,EAAE,IACpCF,cAAc,CAACE,EAAE,KAAK,IAAI,IAAIX,YAAY,CAACW,EAAG,EAC/C;QACA,MAAMqB,kBAAkB,GAAAzC,aAAA,CAAAA,aAAA,KACnByB,WAAW;UACdiB,MAAM,EAAEJ,WAAW,GAAGf,kBAAkB,CAACoB,KAAK,GAAGpB,kBAAkB,CAACoB;QAAK,EAC1E;QACD,MAAMC,OAAO,CAAC,EAAE,EAAEH,kBAAkB,CAAC;QACrCtB,iBAAiB,CAAC;UAAEC,EAAE,EAAEX,YAAY,CAACW;QAAG,CAAC,CAAC;MAC5C;IACF,CAAC,EAAE,CAAC;EACN,CAAC,EACD,CAACS,MAAM,EAAEpB,YAAY,EAAED,KAAK,CAACqC,GAAG,EAAE3B,cAAc,CAACE,EAAE,EAAEK,WAAW,CAAC,CAAC;EACpE,CAAC;EAED,MAAMmB,OAAO,GAAG,MAAAA,CAAOE,OAAO,GAAGnB,WAAW,EAAEoB,MAAM,GAAGxB,kBAAkB,KAAK;IAC5E,MAAM;MAAEyB,WAAW;MAAEC;IAAa,CAAC,GAAG,MAAM,IAAAC,kBAAS,EAAC;MACpDrB,MAAM;MACNsB,aAAa,EAAE;QACb1C,YAAY;QACZgB,WAAW,EAAEsB;MACf,CAAC;MACDpB,WAAW,EAAEmB;IACf,CAAC,CAAC;IAEF,MAAMM,cAAc,GAAG,IAAAC,0BAAY,EAAC;MAClCC,WAAW;MACXT,GAAG,EAAErC,KAAK,CAACqC,GAAG;MACdpC,YAAY;MACZ8C,IAAI,EAAEP;IACR,CAAC,CAAC;IAEFpC,YAAY,CAACwC,cAAc,CAAC;IAC5B9B,aAAa,CAAC2B,YAAY,CAAC;EAC7B,CAAC;EAED,MAAMO,kBAAkB,GAAG,MAAAA,CAAO;IAAEC,UAAU;IAAEf,MAAM,EAAEgB;EAAQ,CAAC,KAAK;IACpE,MAAMjB,kBAAkB,GAAAzC,aAAA,CAAAA,aAAA,KACnByB,WAAW;MACdiB,MAAM,EAAEgB;IAAO,EAChB;IAED,MAAMd,OAAO,CAACjB,WAAW,EAAEc,kBAAkB,CAAC;IAE9C/B,OAAO,CAACZ,IAAI,CAAC,SAAS2D,UAAU,EAAE,CAAC;IACnCE,QAAQ,CAACC,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;EAC3D,CAAC;EAED,MAAMC,oBAAoB,GAAG,MAAMhB,OAAO,IAAI;IAC5C,MAAMF,OAAO,CAACE,OAAO,CAAC;IACtBlB,cAAc,CAACkB,OAAO,CAAC;EACzB,CAAC;EAED,MAAMiB,iBAAiB,GAAGA,CAAA,KAAM,IAAI;EAEpC,MAAMT,WAAW,GAAGU,IAAI,IAAI;IAC1BjD,cAAc,CAAC,CAAC,CAACiD,IAAI,CAAC;IACtB/C,eAAe,CAAC+C,IAAI,IAAI,CAAC,CAAC,CAAC;EAC7B,CAAC;EAED,MAAMC,YAAY,GAAG,MAAAA,CAAA,KAAY;IAC/B,MAAMC,wBAAgB,CAACC,MAAM,CAACC,MAAM,CAClC;MACE3D,YAAY;MACZ4D,gBAAgB,EAAE;QAAEjD,EAAE,EAAEJ,YAAY,CAACI;MAAG,CAAC;MACzCS;IACF,CAAC,EACDE,QACF,CAAC;IAEDuB,WAAW,CAAC,CAAC;IAEb,MAAMgB,gBAAgB,GAAAtE,aAAA,CAAAA,aAAA,KACjBW,SAAS;MACZ4C,IAAI,EAAE5C,SAAS,CAAC4C,IAAI,CAAC3D,MAAM,CAAC,CAAC;QAAEwB;MAAG,CAAC,KAAKA,EAAE,KAAKJ,YAAY,CAACI,EAAE;IAAC,EAChE;IAEDR,YAAY,CAAC0D,gBAAgB,CAAC;EAChC,CAAC;EAED,MAAMC,UAAU,GAAG,MAAMC,KAAK,IAAI;IAChC,MAAM,CAAC,CAACC,QAAQ,EAAEC,SAAS,CAAC,CAAC,GAAGpF,MAAM,CAACqF,OAAO,CAACH,KAAK,CAAC;IACrD,MAAMI,eAAe,GAAA5E,aAAA,CAAAA,aAAA,KAChBuB,kBAAkB;MACrBsD,IAAI,EAAE,CAAC;QAAEJ,QAAQ;QAAEC;MAAU,CAAC;IAAC,EAChC;IACDhD,cAAc,CAACkD,eAAe,CAAC;IAE/B,MAAM;MAAE5B;IAAY,CAAC,GAAG,MAAM,IAAAE,kBAAS,EAAC;MACtCrB,MAAM;MACNsB,aAAa,EAAE;QACb1C,YAAY;QACZgB,WAAW,EAAEmD;MACf,CAAC;MACDjD;IACF,CAAC,CAAC;IACF,MAAM;MAAEmD,OAAO;MAAEC;IAAU,CAAC,GAAGpE,SAAS;IACxC,MAAM,CAACqE,WAAW,CAAC,GAAGF,OAAO;IAE7BlE,YAAY,CAAAZ,aAAA,CAAAA,aAAA,KACPW,SAAS;MACZsE,WAAW,EAAE;QAAE,CAACR,QAAQ,GAAGC;MAAU,CAAC;MACtCnB,IAAI,EAAE,IAAA2B,wBAAU,EAAC;QACf3B,IAAI,EAAE,IAAA4B,8BAAgB,EAACnC,WAAW,CAAC;QACnCH,GAAG,EAAErC,KAAK,CAACqC,GAAG;QACdS,WAAW;QACX0B,WAAW;QACXD,SAAS;QACTtE;MACF,CAAC;IAAC,EACH,CAAC;IACFC,OAAO,CAACZ,IAAI,CAAC,SAAS,CAAC;EACzB,CAAC;EACD,IAAI,CAACa,SAAS,IAAI,CAACA,SAAS,CAAC4C,IAAI,EAAE,OAAO,SAAS;EAEnD,MAAM;IACJ6B,iBAAiB,EAAE;MACjBC,gBAAgB,EAAE;QAChBC,MAAM,EAAEC,YAAY,GAAG;UAAEC,MAAM,EAAE;QAAK,CAAC;QACvCrB,MAAM,EAAEsB,aAAa,GAAG;UAAED,MAAM,EAAE;QAAK;MACzC,CAAC,GAAG,CAAC;IACP,CAAC,GAAG,CAAC;EACP,CAAC,GAAG/E,YAAY;EAEhB,MAAMiF,aAAa,GAAG,CAAC/E,SAAS,CAAC4C,IAAI,CAACrD,MAAM,IAAIyB,WAAW,CAACzB,MAAM,KAAK,CAAC;EAExE,oBACE5C,MAAA,CAAA0B,OAAA,CAAA2G,aAAA;IAAKC,SAAS,EAAC;EAAM,GAClB9E,WAAW,IAAI2E,aAAa,CAACD,MAAM,iBAClClI,MAAA,CAAA0B,OAAA,CAAA2G,aAAA,CAAC9H,MAAA,CAAAgI,YAAY;IACX,eAAY,cAAc;IAC1BC,OAAO,EAAExC,WAAY;IACrBW,YAAY,EAAEA,YAAa;IAC3B8B,QAAQ,EAAE/E,YAAY,CAACgF;EAAK,CAC7B,CACF,eACD1I,MAAA,CAAA0B,OAAA,CAAA2G,aAAA,CAAC9H,MAAA,CAAAoI,UAAU;IAACC,KAAK,EAAEzF,YAAY,CAAC0F,iBAAiB,IAAI1F,YAAY,CAAC2F,WAAY;IAACC,QAAQ,EAAC;EAAE,GACvFd,YAAY,CAACC,MAAM,IAAI,CAACE,aAAa,iBACpCpI,MAAA,CAAA0B,OAAA,CAAA2G,aAAA,CAAC/H,eAAA,CAAA0I,IAAI;IAAC,eAAY,WAAW;IAACV,SAAS,EAAC,sBAAsB;IAACW,EAAE,EAAE,GAAG/F,KAAK,CAACqC,GAAG;EAAU,GAAC,KAEpF,CAEE,CAAC,EACZ6C,aAAa,gBACZpI,MAAA,CAAA0B,OAAA,CAAA2G,aAAA,CAAC9H,MAAA,CAAA2I,UAAU,qBACTlJ,MAAA,CAAA0B,OAAA,CAAA2G,aAAA,CAAC/H,eAAA,CAAA0I,IAAI;IACHV,SAAS,EAAC,oCAAoC;IAC9CW,EAAE,EAAE,GAAG/F,KAAK,CAACqC,GAAG,SAAU;IAC1B,eAAY;EAAY,GAAC,KAErB,CACI,CAAC,gBAEbvF,MAAA,CAAA0B,OAAA,CAAA2G,aAAA,CAAArI,MAAA,CAAA0B,OAAA,CAAAyH,QAAA,qBACEnJ,MAAA,CAAA0B,OAAA,CAAA2G,aAAA,CAAC5H,oBAAA,CAAA2I,UAAU;IACTC,OAAO,EAAC,yBAAyB;IACjCC,MAAM,EAAEnG,YAAa;IACrBkB,WAAW,EAAEA,WAAY;IACzBC,cAAc,EAAEkC;EAAqB,CACtC,CAAC,eACFxG,MAAA,CAAA0B,OAAA,CAAA2G,aAAA,CAAC1H,aAAA,CAAAe,OAAY;IACX4H,MAAM,EAAEnG,YAAa;IACrBkB,WAAW,EAAEA,WAAY;IACzBC,cAAc,EAAEkC;EAAqB,CACtC,CAAC,eACFxG,MAAA,CAAA0B,OAAA,CAAA2G,aAAA,CAAC3H,oBAAA,CAAAgB,OAAmB;IAClBqC,UAAU,EAAEA,UAAW;IACvBiB,WAAW,EAAEA,WAAY;IACzBuE,MAAM,EAAEtC,UAAW;IACnBf,kBAAkB,EAAEA,kBAAmB;IACvC7C,SAAS,EAAEA,SAAU;IACrBoD,iBAAiB,EAAEA,iBAAkB;IACrC6C,MAAM,EAAEnG,YAAa;IACrBkB,WAAW,EAAEA,WAAY;IACzBC,cAAc,EAAEkC;EAAqB,CACtC,CACD,CAED,CAAC;AAEV,CAAC;AACDvD,YAAY,CAACuG,SAAS,GAAG;EACvBrG,YAAY,EAAEsG,kBAAS,CAACC,MAAM,CAACC,UAAU;EACzCzG,KAAK,EAAEuG,kBAAS,CAACC,MAAM,CAACC,UAAU;EAClCvG,OAAO,EAAEqG,kBAAS,CAACC,MAAM,CAACC;AAC5B,CAAC;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAnI,OAAA,GAEa,IAAAoI,0BAAU,EAAC7G,YAAY,CAAC","ignoreList":[]}
@@ -8,6 +8,16 @@ var _adminUiUtils = require("@blaze-cms/admin-ui-utils");
8
8
  const {
9
9
  MENU_PERMISSIONS
10
10
  } = require('../constants');
11
+
12
+ // Menu items label a listing of many records, so they use the plural. The
13
+ // fallback matters: this package and the API are published independently, so an
14
+ // admin bundle can run against an API that does not yet resolve the field.
15
+ function getMenuLabel({
16
+ displayName,
17
+ displayNamePlural
18
+ }) {
19
+ return displayNamePlural || displayName || '';
20
+ }
11
21
  function getAddContentMenuItems(app) {
12
22
  return async ({
13
23
  addConfig
@@ -26,16 +36,21 @@ function getAddContentMenuItems(app) {
26
36
  });
27
37
  if (!getEntitySchemas || !getEntitySchemas.length) return; // no items so don't add section
28
38
 
29
- const menuItems = {};
30
39
  const sectionMenuItems = {
31
40
  settings: {}
32
41
  };
33
- getEntitySchemas.forEach(({
34
- id,
35
- displayName,
36
- displayProperties
37
- }) => {
38
- if (!displayProperties) return null;
42
+
43
+ // Order by the label that is rendered, not by displayName. getEntitySchemas
44
+ // is sorted on displayName server-side and that order serves every other
45
+ // consumer, which shows the singular, so the plural ordering belongs here.
46
+ // The explicit `order` is what MenuSectionItems reads to sort.
47
+ const orderedEntities = [...getEntitySchemas].sort((entityA, entityB) => getMenuLabel(entityA).localeCompare(getMenuLabel(entityB)));
48
+ orderedEntities.forEach((entity, order) => {
49
+ const {
50
+ id,
51
+ displayProperties
52
+ } = entity;
53
+ if (!displayProperties) return;
39
54
  const {
40
55
  adminMenu: {
41
56
  sectionKey = 'settings'
@@ -43,18 +58,15 @@ function getAddContentMenuItems(app) {
43
58
  } = displayProperties;
44
59
  const sectionItems = sectionMenuItems[sectionKey] || {};
45
60
  sectionItems[id] = {
46
- label: displayName,
61
+ label: getMenuLabel(entity),
62
+ order,
47
63
  uri: `/data-listing/${id}`
48
64
  };
49
65
  sectionMenuItems[sectionKey] = sectionItems;
50
66
  });
51
67
  const menuConfig = {
52
68
  main: {
53
- items: {
54
- settings: {
55
- items: menuItems
56
- }
57
- }
69
+ items: {}
58
70
  }
59
71
  };
60
72
  Object.entries(sectionMenuItems).forEach(([sectionKey, sectionItems]) => {
@@ -62,15 +74,6 @@ function getAddContentMenuItems(app) {
62
74
  sectionConfig.items = sectionItems;
63
75
  menuConfig.main.items[sectionKey] = sectionConfig;
64
76
  });
65
- getEntitySchemas.forEach(({
66
- id,
67
- displayName
68
- }) => {
69
- menuItems[id] = {
70
- label: displayName,
71
- uri: `/data-listing/${id}`
72
- };
73
- });
74
77
  addConfig(menuConfig);
75
78
  };
76
79
  }
@@ -1 +1 @@
1
- {"version":3,"file":"add-content-menu-items.js","names":["_adminUiUtils","require","MENU_PERMISSIONS","getAddContentMenuItems","app","addConfig","client","getClient","data","getEntitySchemas","query","getQuery","variables","canDoActions","length","menuItems","sectionMenuItems","settings","forEach","id","displayName","displayProperties","adminMenu","sectionKey","sectionItems","label","uri","menuConfig","main","items","Object","entries","sectionConfig","_default","exports","default"],"sources":["../../src/utils/add-content-menu-items.js"],"sourcesContent":["import { getQuery } from '@blaze-cms/admin-ui-utils';\n\nconst { MENU_PERMISSIONS } = require('../constants');\n\nfunction getAddContentMenuItems(app) {\n return async ({ addConfig }) => {\n const client = app.getClient();\n const {\n data: { getEntitySchemas }\n } = await client.query({\n query: getQuery('GET_USER_EDITABLE_ENTITIES'),\n variables: {\n // only return entities that the current user can do the following actions on\n canDoActions: MENU_PERMISSIONS\n }\n });\n\n if (!getEntitySchemas || !getEntitySchemas.length) return; // no items so don't add section\n\n const menuItems = {};\n const sectionMenuItems = { settings: {} };\n\n getEntitySchemas.forEach(({ id, displayName, displayProperties }) => {\n if (!displayProperties) return null;\n\n const { adminMenu: { sectionKey = 'settings' } = {} } = displayProperties;\n const sectionItems = sectionMenuItems[sectionKey] || {};\n sectionItems[id] = {\n label: displayName,\n uri: `/data-listing/${id}`\n };\n sectionMenuItems[sectionKey] = sectionItems;\n });\n\n const menuConfig = {\n main: {\n items: {\n settings: {\n items: menuItems\n }\n }\n }\n };\n\n Object.entries(sectionMenuItems).forEach(([sectionKey, sectionItems]) => {\n const sectionConfig = menuConfig.main.items[sectionKey] || {};\n sectionConfig.items = sectionItems;\n menuConfig.main.items[sectionKey] = sectionConfig;\n });\n\n getEntitySchemas.forEach(({ id, displayName }) => {\n menuItems[id] = {\n label: displayName,\n uri: `/data-listing/${id}`\n };\n });\n\n addConfig(menuConfig);\n };\n}\n\nexport default getAddContentMenuItems;\n"],"mappings":";;;;;;AAAA,IAAAA,aAAA,GAAAC,OAAA;AAEA,MAAM;EAAEC;AAAiB,CAAC,GAAGD,OAAO,CAAC,cAAc,CAAC;AAEpD,SAASE,sBAAsBA,CAACC,GAAG,EAAE;EACnC,OAAO,OAAO;IAAEC;EAAU,CAAC,KAAK;IAC9B,MAAMC,MAAM,GAAGF,GAAG,CAACG,SAAS,CAAC,CAAC;IAC9B,MAAM;MACJC,IAAI,EAAE;QAAEC;MAAiB;IAC3B,CAAC,GAAG,MAAMH,MAAM,CAACI,KAAK,CAAC;MACrBA,KAAK,EAAE,IAAAC,sBAAQ,EAAC,4BAA4B,CAAC;MAC7CC,SAAS,EAAE;QACT;QACAC,YAAY,EAAEX;MAChB;IACF,CAAC,CAAC;IAEF,IAAI,CAACO,gBAAgB,IAAI,CAACA,gBAAgB,CAACK,MAAM,EAAE,OAAO,CAAC;;IAE3D,MAAMC,SAAS,GAAG,CAAC,CAAC;IACpB,MAAMC,gBAAgB,GAAG;MAAEC,QAAQ,EAAE,CAAC;IAAE,CAAC;IAEzCR,gBAAgB,CAACS,OAAO,CAAC,CAAC;MAAEC,EAAE;MAAEC,WAAW;MAAEC;IAAkB,CAAC,KAAK;MACnE,IAAI,CAACA,iBAAiB,EAAE,OAAO,IAAI;MAEnC,MAAM;QAAEC,SAAS,EAAE;UAAEC,UAAU,GAAG;QAAW,CAAC,GAAG,CAAC;MAAE,CAAC,GAAGF,iBAAiB;MACzE,MAAMG,YAAY,GAAGR,gBAAgB,CAACO,UAAU,CAAC,IAAI,CAAC,CAAC;MACvDC,YAAY,CAACL,EAAE,CAAC,GAAG;QACjBM,KAAK,EAAEL,WAAW;QAClBM,GAAG,EAAE,iBAAiBP,EAAE;MAC1B,CAAC;MACDH,gBAAgB,CAACO,UAAU,CAAC,GAAGC,YAAY;IAC7C,CAAC,CAAC;IAEF,MAAMG,UAAU,GAAG;MACjBC,IAAI,EAAE;QACJC,KAAK,EAAE;UACLZ,QAAQ,EAAE;YACRY,KAAK,EAAEd;UACT;QACF;MACF;IACF,CAAC;IAEDe,MAAM,CAACC,OAAO,CAACf,gBAAgB,CAAC,CAACE,OAAO,CAAC,CAAC,CAACK,UAAU,EAAEC,YAAY,CAAC,KAAK;MACvE,MAAMQ,aAAa,GAAGL,UAAU,CAACC,IAAI,CAACC,KAAK,CAACN,UAAU,CAAC,IAAI,CAAC,CAAC;MAC7DS,aAAa,CAACH,KAAK,GAAGL,YAAY;MAClCG,UAAU,CAACC,IAAI,CAACC,KAAK,CAACN,UAAU,CAAC,GAAGS,aAAa;IACnD,CAAC,CAAC;IAEFvB,gBAAgB,CAACS,OAAO,CAAC,CAAC;MAAEC,EAAE;MAAEC;IAAY,CAAC,KAAK;MAChDL,SAAS,CAACI,EAAE,CAAC,GAAG;QACdM,KAAK,EAAEL,WAAW;QAClBM,GAAG,EAAE,iBAAiBP,EAAE;MAC1B,CAAC;IACH,CAAC,CAAC;IAEFd,SAAS,CAACsB,UAAU,CAAC;EACvB,CAAC;AACH;AAAC,IAAAM,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEchC,sBAAsB","ignoreList":[]}
1
+ {"version":3,"file":"add-content-menu-items.js","names":["_adminUiUtils","require","MENU_PERMISSIONS","getMenuLabel","displayName","displayNamePlural","getAddContentMenuItems","app","addConfig","client","getClient","data","getEntitySchemas","query","getQuery","variables","canDoActions","length","sectionMenuItems","settings","orderedEntities","sort","entityA","entityB","localeCompare","forEach","entity","order","id","displayProperties","adminMenu","sectionKey","sectionItems","label","uri","menuConfig","main","items","Object","entries","sectionConfig","_default","exports","default"],"sources":["../../src/utils/add-content-menu-items.js"],"sourcesContent":["import { getQuery } from '@blaze-cms/admin-ui-utils';\n\nconst { MENU_PERMISSIONS } = require('../constants');\n\n// Menu items label a listing of many records, so they use the plural. The\n// fallback matters: this package and the API are published independently, so an\n// admin bundle can run against an API that does not yet resolve the field.\nfunction getMenuLabel({ displayName, displayNamePlural }) {\n return displayNamePlural || displayName || '';\n}\n\nfunction getAddContentMenuItems(app) {\n return async ({ addConfig }) => {\n const client = app.getClient();\n const {\n data: { getEntitySchemas }\n } = await client.query({\n query: getQuery('GET_USER_EDITABLE_ENTITIES'),\n variables: {\n // only return entities that the current user can do the following actions on\n canDoActions: MENU_PERMISSIONS\n }\n });\n\n if (!getEntitySchemas || !getEntitySchemas.length) return; // no items so don't add section\n\n const sectionMenuItems = { settings: {} };\n\n // Order by the label that is rendered, not by displayName. getEntitySchemas\n // is sorted on displayName server-side and that order serves every other\n // consumer, which shows the singular, so the plural ordering belongs here.\n // The explicit `order` is what MenuSectionItems reads to sort.\n const orderedEntities = [...getEntitySchemas].sort((entityA, entityB) =>\n getMenuLabel(entityA).localeCompare(getMenuLabel(entityB))\n );\n\n orderedEntities.forEach((entity, order) => {\n const { id, displayProperties } = entity;\n if (!displayProperties) return;\n\n const { adminMenu: { sectionKey = 'settings' } = {} } = displayProperties;\n const sectionItems = sectionMenuItems[sectionKey] || {};\n sectionItems[id] = {\n label: getMenuLabel(entity),\n order,\n uri: `/data-listing/${id}`\n };\n sectionMenuItems[sectionKey] = sectionItems;\n });\n\n const menuConfig = { main: { items: {} } };\n\n Object.entries(sectionMenuItems).forEach(([sectionKey, sectionItems]) => {\n const sectionConfig = menuConfig.main.items[sectionKey] || {};\n sectionConfig.items = sectionItems;\n menuConfig.main.items[sectionKey] = sectionConfig;\n });\n\n addConfig(menuConfig);\n };\n}\n\nexport default getAddContentMenuItems;\n"],"mappings":";;;;;;AAAA,IAAAA,aAAA,GAAAC,OAAA;AAEA,MAAM;EAAEC;AAAiB,CAAC,GAAGD,OAAO,CAAC,cAAc,CAAC;;AAEpD;AACA;AACA;AACA,SAASE,YAAYA,CAAC;EAAEC,WAAW;EAAEC;AAAkB,CAAC,EAAE;EACxD,OAAOA,iBAAiB,IAAID,WAAW,IAAI,EAAE;AAC/C;AAEA,SAASE,sBAAsBA,CAACC,GAAG,EAAE;EACnC,OAAO,OAAO;IAAEC;EAAU,CAAC,KAAK;IAC9B,MAAMC,MAAM,GAAGF,GAAG,CAACG,SAAS,CAAC,CAAC;IAC9B,MAAM;MACJC,IAAI,EAAE;QAAEC;MAAiB;IAC3B,CAAC,GAAG,MAAMH,MAAM,CAACI,KAAK,CAAC;MACrBA,KAAK,EAAE,IAAAC,sBAAQ,EAAC,4BAA4B,CAAC;MAC7CC,SAAS,EAAE;QACT;QACAC,YAAY,EAAEd;MAChB;IACF,CAAC,CAAC;IAEF,IAAI,CAACU,gBAAgB,IAAI,CAACA,gBAAgB,CAACK,MAAM,EAAE,OAAO,CAAC;;IAE3D,MAAMC,gBAAgB,GAAG;MAAEC,QAAQ,EAAE,CAAC;IAAE,CAAC;;IAEzC;IACA;IACA;IACA;IACA,MAAMC,eAAe,GAAG,CAAC,GAAGR,gBAAgB,CAAC,CAACS,IAAI,CAAC,CAACC,OAAO,EAAEC,OAAO,KAClEpB,YAAY,CAACmB,OAAO,CAAC,CAACE,aAAa,CAACrB,YAAY,CAACoB,OAAO,CAAC,CAC3D,CAAC;IAEDH,eAAe,CAACK,OAAO,CAAC,CAACC,MAAM,EAAEC,KAAK,KAAK;MACzC,MAAM;QAAEC,EAAE;QAAEC;MAAkB,CAAC,GAAGH,MAAM;MACxC,IAAI,CAACG,iBAAiB,EAAE;MAExB,MAAM;QAAEC,SAAS,EAAE;UAAEC,UAAU,GAAG;QAAW,CAAC,GAAG,CAAC;MAAE,CAAC,GAAGF,iBAAiB;MACzE,MAAMG,YAAY,GAAGd,gBAAgB,CAACa,UAAU,CAAC,IAAI,CAAC,CAAC;MACvDC,YAAY,CAACJ,EAAE,CAAC,GAAG;QACjBK,KAAK,EAAE9B,YAAY,CAACuB,MAAM,CAAC;QAC3BC,KAAK;QACLO,GAAG,EAAE,iBAAiBN,EAAE;MAC1B,CAAC;MACDV,gBAAgB,CAACa,UAAU,CAAC,GAAGC,YAAY;IAC7C,CAAC,CAAC;IAEF,MAAMG,UAAU,GAAG;MAAEC,IAAI,EAAE;QAAEC,KAAK,EAAE,CAAC;MAAE;IAAE,CAAC;IAE1CC,MAAM,CAACC,OAAO,CAACrB,gBAAgB,CAAC,CAACO,OAAO,CAAC,CAAC,CAACM,UAAU,EAAEC,YAAY,CAAC,KAAK;MACvE,MAAMQ,aAAa,GAAGL,UAAU,CAACC,IAAI,CAACC,KAAK,CAACN,UAAU,CAAC,IAAI,CAAC,CAAC;MAC7DS,aAAa,CAACH,KAAK,GAAGL,YAAY;MAClCG,UAAU,CAACC,IAAI,CAACC,KAAK,CAACN,UAAU,CAAC,GAAGS,aAAa;IACnD,CAAC,CAAC;IAEFhC,SAAS,CAAC2B,UAAU,CAAC;EACvB,CAAC;AACH;AAAC,IAAAM,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEcrC,sBAAsB","ignoreList":[]}
@@ -168,7 +168,7 @@ const ListingTable = ({
168
168
  deleteAction: deleteAction,
169
169
  itemName: itemToDelete.name
170
170
  }), /*#__PURE__*/React.createElement(PageHeader, {
171
- title: entitySchema.displayName,
171
+ title: entitySchema.displayNamePlural || entitySchema.displayName,
172
172
  subtitle: ""
173
173
  }, createAction.active && !showAddButton && /*#__PURE__*/React.createElement(Link, {
174
174
  "data-testid": "addEntity",
@@ -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":";;;AAAA,OAAOA,KAAK,IAAIC,SAAS,EAAEC,QAAQ,EAAEC,QAAQ,QAAQ,OAAO;AAC5D,OAAOC,SAAS,MAAM,YAAY;AAClC,SAASC,eAAe,QAAQ,gBAAgB;AAChD,SAASC,UAAU,EAAEC,IAAI,EAAEC,WAAW,QAAQ,kBAAkB;AAChE,SAASC,UAAU,EAAEC,YAAY,EAAEC,UAAU,QAAQ,kBAAkB;AACvE,SAASC,SAAS,QAAQ,sBAAsB;AAChD,SAASC,UAAU,QAAQ,mCAAmC;AAC9D,OAAOC,mBAAmB,MAAM,uBAAuB;AACvD,OAAOC,YAAY,MAAM,6BAA6B;AACtD,OAAOC,gBAAgB,MAAM,0CAA0C;AACvE,SAASC,SAAS,QAAQ,WAAW;AACrC,SAASC,YAAY,EAAEC,UAAU,EAAEC,gBAAgB,QAAQ,yBAAyB;AACpF,SAASC,qBAAqB,QAAQ,sCAAsC;AAE5E,MAAMC,YAAY,GAAGA,CAAC;EAAEC,KAAK;EAAEC,YAAY;EAAEC;AAAQ,CAAC,KAAK;EACzD,MAAM,CAACC,SAAS,EAAEC,YAAY,CAAC,GAAGzB,QAAQ,CAAC,CAAC,CAAC,CAAC;EAC9C,MAAM,CAAC0B,WAAW,EAAEC,cAAc,CAAC,GAAG3B,QAAQ,CAAC,KAAK,CAAC;EACrD,MAAM,CAAC4B,YAAY,EAAEC,eAAe,CAAC,GAAG7B,QAAQ,CAAC,CAAC,CAAC,CAAC;EACpD,MAAM,CAAC8B,cAAc,EAAEC,iBAAiB,CAAC,GAAG/B,QAAQ,CAAC;IAAEgC,EAAE,EAAE;EAAK,CAAC,CAAC;EAClE,MAAM,CAACC,UAAU,EAAEC,aAAa,CAAC,GAAGlC,QAAQ,CAAC,CAAC,CAAC;EAC/C,MAAMmC,kBAAkB,GAAGhB,qBAAqB,CAACG,YAAY,CAAC;EAC9D,MAAM,CAACc,WAAW,EAAEC,cAAc,CAAC,GAAGrC,QAAQ,CAACmC,kBAAkB,CAAC;EAClE,MAAM,CAACG,WAAW,EAAEC,cAAc,CAAC,GAAGvC,QAAQ,CAAC,EAAE,CAAC;EAClD,MAAMwC,MAAM,GAAGrC,eAAe,CAAC,CAAC;EAChC,MAAM;IAAEsC;EAAS,CAAC,GAAG/B,SAAS,CAAC,CAAC;EAChC,MAAMgC,QAAQ,GAAGpC,WAAW,CAAC,CAAC;EAC9B,MAAMqC,YAAY,GAAG,IAAIC,eAAe,CAACF,QAAQ,CAACG,MAAM,CAAC;EACzD,MAAMC,WAAW,GAAGC,MAAM,CAACJ,YAAY,CAACK,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;EAEzDjD,SAAS,CACP,MAAM;IACJ,CAAC,YAAY;MACX,IACEuB,YAAY,CAACU,EAAE,KAAKF,cAAc,CAACE,EAAE,IACpCF,cAAc,CAACE,EAAE,KAAK,IAAI,IAAIV,YAAY,CAACU,EAAG,EAC/C;QACA,MAAMiB,kBAAkB,GAAAC,aAAA,CAAAA,aAAA,KACnBd,WAAW;UACde,MAAM,EAAEL,WAAW,GAAGX,kBAAkB,CAACiB,KAAK,GAAGjB,kBAAkB,CAACiB;QAAK,EAC1E;QACD,MAAMC,OAAO,CAAC,EAAE,EAAEJ,kBAAkB,CAAC;QACrClB,iBAAiB,CAAC;UAAEC,EAAE,EAAEV,YAAY,CAACU;QAAG,CAAC,CAAC;MAC5C;IACF,CAAC,EAAE,CAAC;EACN,CAAC,EACD,CAACQ,MAAM,EAAElB,YAAY,EAAED,KAAK,CAACiC,GAAG,EAAExB,cAAc,CAACE,EAAE,EAAEI,WAAW,CAAC,CAAC;EACpE,CAAC;EAED,MAAMiB,OAAO,GAAG,MAAAA,CAAOE,OAAO,GAAGjB,WAAW,EAAEkB,MAAM,GAAGrB,kBAAkB,KAAK;IAC5E,MAAM;MAAEsB,WAAW;MAAEC;IAAa,CAAC,GAAG,MAAM3C,SAAS,CAAC;MACpDyB,MAAM;MACNmB,aAAa,EAAE;QACbrC,YAAY;QACZc,WAAW,EAAEoB;MACf,CAAC;MACDlB,WAAW,EAAEiB;IACf,CAAC,CAAC;IAEF,MAAMK,cAAc,GAAG5C,YAAY,CAAC;MAClC6C,WAAW;MACXP,GAAG,EAAEjC,KAAK,CAACiC,GAAG;MACdhC,YAAY;MACZwC,IAAI,EAAEL;IACR,CAAC,CAAC;IAEFhC,YAAY,CAACmC,cAAc,CAAC;IAC5B1B,aAAa,CAACwB,YAAY,CAAC;EAC7B,CAAC;EAED,MAAMK,kBAAkB,GAAG,MAAAA,CAAO;IAAEC,UAAU;IAAEb,MAAM,EAAEc;EAAQ,CAAC,KAAK;IACpE,MAAMhB,kBAAkB,GAAAC,aAAA,CAAAA,aAAA,KACnBd,WAAW;MACde,MAAM,EAAEc;IAAO,EAChB;IAED,MAAMZ,OAAO,CAACf,WAAW,EAAEW,kBAAkB,CAAC;IAE9C1B,OAAO,CAAC2C,IAAI,CAAC,SAASF,UAAU,EAAE,CAAC;IACnCG,QAAQ,CAACC,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;EAC3D,CAAC;EAED,MAAMC,oBAAoB,GAAG,MAAMf,OAAO,IAAI;IAC5C,MAAMF,OAAO,CAACE,OAAO,CAAC;IACtBhB,cAAc,CAACgB,OAAO,CAAC;EACzB,CAAC;EAED,MAAMgB,iBAAiB,GAAGA,CAAA,KAAM,IAAI;EAEpC,MAAMV,WAAW,GAAGW,IAAI,IAAI;IAC1B7C,cAAc,CAAC,CAAC,CAAC6C,IAAI,CAAC;IACtB3C,eAAe,CAAC2C,IAAI,IAAI,CAAC,CAAC,CAAC;EAC7B,CAAC;EAED,MAAMC,YAAY,GAAG,MAAAA,CAAA,KAAY;IAC/B,MAAM3D,gBAAgB,CAAC4D,MAAM,CAACC,MAAM,CAClC;MACErD,YAAY;MACZsD,gBAAgB,EAAE;QAAE5C,EAAE,EAAEJ,YAAY,CAACI;MAAG,CAAC;MACzCQ;IACF,CAAC,EACDC,QACF,CAAC;IAEDoB,WAAW,CAAC,CAAC;IAEb,MAAMgB,gBAAgB,GAAA3B,aAAA,CAAAA,aAAA,KACjB1B,SAAS;MACZsC,IAAI,EAAEtC,SAAS,CAACsC,IAAI,CAACgB,MAAM,CAAC,CAAC;QAAE9C;MAAG,CAAC,KAAKA,EAAE,KAAKJ,YAAY,CAACI,EAAE;IAAC,EAChE;IAEDP,YAAY,CAACoD,gBAAgB,CAAC;EAChC,CAAC;EAED,MAAME,UAAU,GAAG,MAAMC,KAAK,IAAI;IAChC,MAAM,CAAC,CAACC,QAAQ,EAAEC,SAAS,CAAC,CAAC,GAAGC,MAAM,CAACC,OAAO,CAACJ,KAAK,CAAC;IACrD,MAAMK,eAAe,GAAAnC,aAAA,CAAAA,aAAA,KAChBf,kBAAkB;MACrBmD,IAAI,EAAE,CAAC;QAAEL,QAAQ;QAAEC;MAAU,CAAC;IAAC,EAChC;IACD7C,cAAc,CAACgD,eAAe,CAAC;IAE/B,MAAM;MAAE5B;IAAY,CAAC,GAAG,MAAM1C,SAAS,CAAC;MACtCyB,MAAM;MACNmB,aAAa,EAAE;QACbrC,YAAY;QACZc,WAAW,EAAEiD;MACf,CAAC;MACD/C;IACF,CAAC,CAAC;IACF,MAAM;MAAEiD,OAAO;MAAEC;IAAU,CAAC,GAAGhE,SAAS;IACxC,MAAM,CAACiE,WAAW,CAAC,GAAGF,OAAO;IAE7B9D,YAAY,CAAAyB,aAAA,CAAAA,aAAA,KACP1B,SAAS;MACZkE,WAAW,EAAE;QAAE,CAACT,QAAQ,GAAGC;MAAU,CAAC;MACtCpB,IAAI,EAAE7C,UAAU,CAAC;QACf6C,IAAI,EAAE5C,gBAAgB,CAACuC,WAAW,CAAC;QACnCH,GAAG,EAAEjC,KAAK,CAACiC,GAAG;QACdO,WAAW;QACX4B,WAAW;QACXD,SAAS;QACTlE;MACF,CAAC;IAAC,EACH,CAAC;IACFC,OAAO,CAAC2C,IAAI,CAAC,SAAS,CAAC;EACzB,CAAC;EACD,IAAI,CAAC1C,SAAS,IAAI,CAACA,SAAS,CAACsC,IAAI,EAAE,OAAO,SAAS;EAEnD,MAAM;IACJ6B,iBAAiB,EAAE;MACjBC,gBAAgB,EAAE;QAChBC,MAAM,EAAEC,YAAY,GAAG;UAAEC,MAAM,EAAE;QAAK,CAAC;QACvCrB,MAAM,EAAEsB,aAAa,GAAG;UAAED,MAAM,EAAE;QAAK;MACzC,CAAC,GAAG,CAAC;IACP,CAAC,GAAG,CAAC;EACP,CAAC,GAAGzE,YAAY;EAEhB,MAAM2E,aAAa,GAAG,CAACzE,SAAS,CAACsC,IAAI,CAACoC,MAAM,IAAI5D,WAAW,CAAC4D,MAAM,KAAK,CAAC;EAExE,oBACEpG,KAAA,CAAAqG,aAAA;IAAKC,SAAS,EAAC;EAAM,GAClB1E,WAAW,IAAIsE,aAAa,CAACD,MAAM,iBAClCjG,KAAA,CAAAqG,aAAA,CAAC3F,YAAY;IACX,eAAY,cAAc;IAC1B6F,OAAO,EAAExC,WAAY;IACrBY,YAAY,EAAEA,YAAa;IAC3B6B,QAAQ,EAAE1E,YAAY,CAAC2E;EAAK,CAC7B,CACF,eACDzG,KAAA,CAAAqG,aAAA,CAAC5F,UAAU;IAACiG,KAAK,EAAElF,YAAY,CAACmF,WAAY;IAACC,QAAQ,EAAC;EAAE,GACrDZ,YAAY,CAACC,MAAM,IAAI,CAACE,aAAa,iBACpCnG,KAAA,CAAAqG,aAAA,CAAC9F,IAAI;IAAC,eAAY,WAAW;IAAC+F,SAAS,EAAC,sBAAsB;IAACO,EAAE,EAAE,GAAGtF,KAAK,CAACiC,GAAG;EAAU,GAAC,KAEpF,CAEE,CAAC,EACZ2C,aAAa,gBACZnG,KAAA,CAAAqG,aAAA,CAAC1F,UAAU,qBACTX,KAAA,CAAAqG,aAAA,CAAC9F,IAAI;IACH+F,SAAS,EAAC,oCAAoC;IAC9CO,EAAE,EAAE,GAAGtF,KAAK,CAACiC,GAAG,SAAU;IAC1B,eAAY;EAAY,GAAC,KAErB,CACI,CAAC,gBAEbxD,KAAA,CAAAqG,aAAA,CAAArG,KAAA,CAAAG,QAAA,qBACEH,KAAA,CAAAqG,aAAA,CAACxF,UAAU;IACTiG,OAAO,EAAC,yBAAyB;IACjCC,MAAM,EAAEvF,YAAa;IACrBgB,WAAW,EAAEA,WAAY;IACzBC,cAAc,EAAE+B;EAAqB,CACtC,CAAC,eACFxE,KAAA,CAAAqG,aAAA,CAACtF,YAAY;IACXgG,MAAM,EAAEvF,YAAa;IACrBgB,WAAW,EAAEA,WAAY;IACzBC,cAAc,EAAE+B;EAAqB,CACtC,CAAC,eACFxE,KAAA,CAAAqG,aAAA,CAACvF,mBAAmB;IAClBqB,UAAU,EAAEA,UAAW;IACvBa,WAAW,EAAEA,WAAY;IACzBgE,MAAM,EAAE/B,UAAW;IACnBhB,kBAAkB,EAAEA,kBAAmB;IACvCvC,SAAS,EAAEA,SAAU;IACrB+C,iBAAiB,EAAEA,iBAAkB;IACrCsC,MAAM,EAAEvF,YAAa;IACrBgB,WAAW,EAAEA,WAAY;IACzBC,cAAc,EAAE+B;EAAqB,CACtC,CACD,CAED,CAAC;AAEV,CAAC;AACDlD,YAAY,CAAC2F,SAAS,GAAG;EACvBzF,YAAY,EAAEpB,SAAS,CAAC8G,MAAM,CAACC,UAAU;EACzC5F,KAAK,EAAEnB,SAAS,CAAC8G,MAAM,CAACC,UAAU;EAClC1F,OAAO,EAAErB,SAAS,CAAC8G,MAAM,CAACC;AAC5B,CAAC;AAED,eAAe7G,UAAU,CAACgB,YAAY,CAAC","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","displayNamePlural","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.displayNamePlural || 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":[]}
@@ -2,6 +2,16 @@ import { getQuery } from '@blaze-cms/admin-ui-utils';
2
2
  const {
3
3
  MENU_PERMISSIONS
4
4
  } = require('../constants');
5
+
6
+ // Menu items label a listing of many records, so they use the plural. The
7
+ // fallback matters: this package and the API are published independently, so an
8
+ // admin bundle can run against an API that does not yet resolve the field.
9
+ function getMenuLabel({
10
+ displayName,
11
+ displayNamePlural
12
+ }) {
13
+ return displayNamePlural || displayName || '';
14
+ }
5
15
  function getAddContentMenuItems(app) {
6
16
  return async ({
7
17
  addConfig
@@ -20,16 +30,21 @@ function getAddContentMenuItems(app) {
20
30
  });
21
31
  if (!getEntitySchemas || !getEntitySchemas.length) return; // no items so don't add section
22
32
 
23
- const menuItems = {};
24
33
  const sectionMenuItems = {
25
34
  settings: {}
26
35
  };
27
- getEntitySchemas.forEach(({
28
- id,
29
- displayName,
30
- displayProperties
31
- }) => {
32
- if (!displayProperties) return null;
36
+
37
+ // Order by the label that is rendered, not by displayName. getEntitySchemas
38
+ // is sorted on displayName server-side and that order serves every other
39
+ // consumer, which shows the singular, so the plural ordering belongs here.
40
+ // The explicit `order` is what MenuSectionItems reads to sort.
41
+ const orderedEntities = [...getEntitySchemas].sort((entityA, entityB) => getMenuLabel(entityA).localeCompare(getMenuLabel(entityB)));
42
+ orderedEntities.forEach((entity, order) => {
43
+ const {
44
+ id,
45
+ displayProperties
46
+ } = entity;
47
+ if (!displayProperties) return;
33
48
  const {
34
49
  adminMenu: {
35
50
  sectionKey = 'settings'
@@ -37,18 +52,15 @@ function getAddContentMenuItems(app) {
37
52
  } = displayProperties;
38
53
  const sectionItems = sectionMenuItems[sectionKey] || {};
39
54
  sectionItems[id] = {
40
- label: displayName,
55
+ label: getMenuLabel(entity),
56
+ order,
41
57
  uri: `/data-listing/${id}`
42
58
  };
43
59
  sectionMenuItems[sectionKey] = sectionItems;
44
60
  });
45
61
  const menuConfig = {
46
62
  main: {
47
- items: {
48
- settings: {
49
- items: menuItems
50
- }
51
- }
63
+ items: {}
52
64
  }
53
65
  };
54
66
  Object.entries(sectionMenuItems).forEach(([sectionKey, sectionItems]) => {
@@ -56,15 +68,6 @@ function getAddContentMenuItems(app) {
56
68
  sectionConfig.items = sectionItems;
57
69
  menuConfig.main.items[sectionKey] = sectionConfig;
58
70
  });
59
- getEntitySchemas.forEach(({
60
- id,
61
- displayName
62
- }) => {
63
- menuItems[id] = {
64
- label: displayName,
65
- uri: `/data-listing/${id}`
66
- };
67
- });
68
71
  addConfig(menuConfig);
69
72
  };
70
73
  }
@@ -1 +1 @@
1
- {"version":3,"file":"add-content-menu-items.js","names":["getQuery","MENU_PERMISSIONS","require","getAddContentMenuItems","app","addConfig","client","getClient","data","getEntitySchemas","query","variables","canDoActions","length","menuItems","sectionMenuItems","settings","forEach","id","displayName","displayProperties","adminMenu","sectionKey","sectionItems","label","uri","menuConfig","main","items","Object","entries","sectionConfig"],"sources":["../../src/utils/add-content-menu-items.js"],"sourcesContent":["import { getQuery } from '@blaze-cms/admin-ui-utils';\n\nconst { MENU_PERMISSIONS } = require('../constants');\n\nfunction getAddContentMenuItems(app) {\n return async ({ addConfig }) => {\n const client = app.getClient();\n const {\n data: { getEntitySchemas }\n } = await client.query({\n query: getQuery('GET_USER_EDITABLE_ENTITIES'),\n variables: {\n // only return entities that the current user can do the following actions on\n canDoActions: MENU_PERMISSIONS\n }\n });\n\n if (!getEntitySchemas || !getEntitySchemas.length) return; // no items so don't add section\n\n const menuItems = {};\n const sectionMenuItems = { settings: {} };\n\n getEntitySchemas.forEach(({ id, displayName, displayProperties }) => {\n if (!displayProperties) return null;\n\n const { adminMenu: { sectionKey = 'settings' } = {} } = displayProperties;\n const sectionItems = sectionMenuItems[sectionKey] || {};\n sectionItems[id] = {\n label: displayName,\n uri: `/data-listing/${id}`\n };\n sectionMenuItems[sectionKey] = sectionItems;\n });\n\n const menuConfig = {\n main: {\n items: {\n settings: {\n items: menuItems\n }\n }\n }\n };\n\n Object.entries(sectionMenuItems).forEach(([sectionKey, sectionItems]) => {\n const sectionConfig = menuConfig.main.items[sectionKey] || {};\n sectionConfig.items = sectionItems;\n menuConfig.main.items[sectionKey] = sectionConfig;\n });\n\n getEntitySchemas.forEach(({ id, displayName }) => {\n menuItems[id] = {\n label: displayName,\n uri: `/data-listing/${id}`\n };\n });\n\n addConfig(menuConfig);\n };\n}\n\nexport default getAddContentMenuItems;\n"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,2BAA2B;AAEpD,MAAM;EAAEC;AAAiB,CAAC,GAAGC,OAAO,CAAC,cAAc,CAAC;AAEpD,SAASC,sBAAsBA,CAACC,GAAG,EAAE;EACnC,OAAO,OAAO;IAAEC;EAAU,CAAC,KAAK;IAC9B,MAAMC,MAAM,GAAGF,GAAG,CAACG,SAAS,CAAC,CAAC;IAC9B,MAAM;MACJC,IAAI,EAAE;QAAEC;MAAiB;IAC3B,CAAC,GAAG,MAAMH,MAAM,CAACI,KAAK,CAAC;MACrBA,KAAK,EAAEV,QAAQ,CAAC,4BAA4B,CAAC;MAC7CW,SAAS,EAAE;QACT;QACAC,YAAY,EAAEX;MAChB;IACF,CAAC,CAAC;IAEF,IAAI,CAACQ,gBAAgB,IAAI,CAACA,gBAAgB,CAACI,MAAM,EAAE,OAAO,CAAC;;IAE3D,MAAMC,SAAS,GAAG,CAAC,CAAC;IACpB,MAAMC,gBAAgB,GAAG;MAAEC,QAAQ,EAAE,CAAC;IAAE,CAAC;IAEzCP,gBAAgB,CAACQ,OAAO,CAAC,CAAC;MAAEC,EAAE;MAAEC,WAAW;MAAEC;IAAkB,CAAC,KAAK;MACnE,IAAI,CAACA,iBAAiB,EAAE,OAAO,IAAI;MAEnC,MAAM;QAAEC,SAAS,EAAE;UAAEC,UAAU,GAAG;QAAW,CAAC,GAAG,CAAC;MAAE,CAAC,GAAGF,iBAAiB;MACzE,MAAMG,YAAY,GAAGR,gBAAgB,CAACO,UAAU,CAAC,IAAI,CAAC,CAAC;MACvDC,YAAY,CAACL,EAAE,CAAC,GAAG;QACjBM,KAAK,EAAEL,WAAW;QAClBM,GAAG,EAAE,iBAAiBP,EAAE;MAC1B,CAAC;MACDH,gBAAgB,CAACO,UAAU,CAAC,GAAGC,YAAY;IAC7C,CAAC,CAAC;IAEF,MAAMG,UAAU,GAAG;MACjBC,IAAI,EAAE;QACJC,KAAK,EAAE;UACLZ,QAAQ,EAAE;YACRY,KAAK,EAAEd;UACT;QACF;MACF;IACF,CAAC;IAEDe,MAAM,CAACC,OAAO,CAACf,gBAAgB,CAAC,CAACE,OAAO,CAAC,CAAC,CAACK,UAAU,EAAEC,YAAY,CAAC,KAAK;MACvE,MAAMQ,aAAa,GAAGL,UAAU,CAACC,IAAI,CAACC,KAAK,CAACN,UAAU,CAAC,IAAI,CAAC,CAAC;MAC7DS,aAAa,CAACH,KAAK,GAAGL,YAAY;MAClCG,UAAU,CAACC,IAAI,CAACC,KAAK,CAACN,UAAU,CAAC,GAAGS,aAAa;IACnD,CAAC,CAAC;IAEFtB,gBAAgB,CAACQ,OAAO,CAAC,CAAC;MAAEC,EAAE;MAAEC;IAAY,CAAC,KAAK;MAChDL,SAAS,CAACI,EAAE,CAAC,GAAG;QACdM,KAAK,EAAEL,WAAW;QAClBM,GAAG,EAAE,iBAAiBP,EAAE;MAC1B,CAAC;IACH,CAAC,CAAC;IAEFb,SAAS,CAACqB,UAAU,CAAC;EACvB,CAAC;AACH;AAEA,eAAevB,sBAAsB","ignoreList":[]}
1
+ {"version":3,"file":"add-content-menu-items.js","names":["getQuery","MENU_PERMISSIONS","require","getMenuLabel","displayName","displayNamePlural","getAddContentMenuItems","app","addConfig","client","getClient","data","getEntitySchemas","query","variables","canDoActions","length","sectionMenuItems","settings","orderedEntities","sort","entityA","entityB","localeCompare","forEach","entity","order","id","displayProperties","adminMenu","sectionKey","sectionItems","label","uri","menuConfig","main","items","Object","entries","sectionConfig"],"sources":["../../src/utils/add-content-menu-items.js"],"sourcesContent":["import { getQuery } from '@blaze-cms/admin-ui-utils';\n\nconst { MENU_PERMISSIONS } = require('../constants');\n\n// Menu items label a listing of many records, so they use the plural. The\n// fallback matters: this package and the API are published independently, so an\n// admin bundle can run against an API that does not yet resolve the field.\nfunction getMenuLabel({ displayName, displayNamePlural }) {\n return displayNamePlural || displayName || '';\n}\n\nfunction getAddContentMenuItems(app) {\n return async ({ addConfig }) => {\n const client = app.getClient();\n const {\n data: { getEntitySchemas }\n } = await client.query({\n query: getQuery('GET_USER_EDITABLE_ENTITIES'),\n variables: {\n // only return entities that the current user can do the following actions on\n canDoActions: MENU_PERMISSIONS\n }\n });\n\n if (!getEntitySchemas || !getEntitySchemas.length) return; // no items so don't add section\n\n const sectionMenuItems = { settings: {} };\n\n // Order by the label that is rendered, not by displayName. getEntitySchemas\n // is sorted on displayName server-side and that order serves every other\n // consumer, which shows the singular, so the plural ordering belongs here.\n // The explicit `order` is what MenuSectionItems reads to sort.\n const orderedEntities = [...getEntitySchemas].sort((entityA, entityB) =>\n getMenuLabel(entityA).localeCompare(getMenuLabel(entityB))\n );\n\n orderedEntities.forEach((entity, order) => {\n const { id, displayProperties } = entity;\n if (!displayProperties) return;\n\n const { adminMenu: { sectionKey = 'settings' } = {} } = displayProperties;\n const sectionItems = sectionMenuItems[sectionKey] || {};\n sectionItems[id] = {\n label: getMenuLabel(entity),\n order,\n uri: `/data-listing/${id}`\n };\n sectionMenuItems[sectionKey] = sectionItems;\n });\n\n const menuConfig = { main: { items: {} } };\n\n Object.entries(sectionMenuItems).forEach(([sectionKey, sectionItems]) => {\n const sectionConfig = menuConfig.main.items[sectionKey] || {};\n sectionConfig.items = sectionItems;\n menuConfig.main.items[sectionKey] = sectionConfig;\n });\n\n addConfig(menuConfig);\n };\n}\n\nexport default getAddContentMenuItems;\n"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,2BAA2B;AAEpD,MAAM;EAAEC;AAAiB,CAAC,GAAGC,OAAO,CAAC,cAAc,CAAC;;AAEpD;AACA;AACA;AACA,SAASC,YAAYA,CAAC;EAAEC,WAAW;EAAEC;AAAkB,CAAC,EAAE;EACxD,OAAOA,iBAAiB,IAAID,WAAW,IAAI,EAAE;AAC/C;AAEA,SAASE,sBAAsBA,CAACC,GAAG,EAAE;EACnC,OAAO,OAAO;IAAEC;EAAU,CAAC,KAAK;IAC9B,MAAMC,MAAM,GAAGF,GAAG,CAACG,SAAS,CAAC,CAAC;IAC9B,MAAM;MACJC,IAAI,EAAE;QAAEC;MAAiB;IAC3B,CAAC,GAAG,MAAMH,MAAM,CAACI,KAAK,CAAC;MACrBA,KAAK,EAAEb,QAAQ,CAAC,4BAA4B,CAAC;MAC7Cc,SAAS,EAAE;QACT;QACAC,YAAY,EAAEd;MAChB;IACF,CAAC,CAAC;IAEF,IAAI,CAACW,gBAAgB,IAAI,CAACA,gBAAgB,CAACI,MAAM,EAAE,OAAO,CAAC;;IAE3D,MAAMC,gBAAgB,GAAG;MAAEC,QAAQ,EAAE,CAAC;IAAE,CAAC;;IAEzC;IACA;IACA;IACA;IACA,MAAMC,eAAe,GAAG,CAAC,GAAGP,gBAAgB,CAAC,CAACQ,IAAI,CAAC,CAACC,OAAO,EAAEC,OAAO,KAClEnB,YAAY,CAACkB,OAAO,CAAC,CAACE,aAAa,CAACpB,YAAY,CAACmB,OAAO,CAAC,CAC3D,CAAC;IAEDH,eAAe,CAACK,OAAO,CAAC,CAACC,MAAM,EAAEC,KAAK,KAAK;MACzC,MAAM;QAAEC,EAAE;QAAEC;MAAkB,CAAC,GAAGH,MAAM;MACxC,IAAI,CAACG,iBAAiB,EAAE;MAExB,MAAM;QAAEC,SAAS,EAAE;UAAEC,UAAU,GAAG;QAAW,CAAC,GAAG,CAAC;MAAE,CAAC,GAAGF,iBAAiB;MACzE,MAAMG,YAAY,GAAGd,gBAAgB,CAACa,UAAU,CAAC,IAAI,CAAC,CAAC;MACvDC,YAAY,CAACJ,EAAE,CAAC,GAAG;QACjBK,KAAK,EAAE7B,YAAY,CAACsB,MAAM,CAAC;QAC3BC,KAAK;QACLO,GAAG,EAAE,iBAAiBN,EAAE;MAC1B,CAAC;MACDV,gBAAgB,CAACa,UAAU,CAAC,GAAGC,YAAY;IAC7C,CAAC,CAAC;IAEF,MAAMG,UAAU,GAAG;MAAEC,IAAI,EAAE;QAAEC,KAAK,EAAE,CAAC;MAAE;IAAE,CAAC;IAE1CC,MAAM,CAACC,OAAO,CAACrB,gBAAgB,CAAC,CAACO,OAAO,CAAC,CAAC,CAACM,UAAU,EAAEC,YAAY,CAAC,KAAK;MACvE,MAAMQ,aAAa,GAAGL,UAAU,CAACC,IAAI,CAACC,KAAK,CAACN,UAAU,CAAC,IAAI,CAAC,CAAC;MAC7DS,aAAa,CAACH,KAAK,GAAGL,YAAY;MAClCG,UAAU,CAACC,IAAI,CAACC,KAAK,CAACN,UAAU,CAAC,GAAGS,aAAa;IACnD,CAAC,CAAC;IAEF/B,SAAS,CAAC0B,UAAU,CAAC;EACvB,CAAC;AACH;AAEA,eAAe5B,sBAAsB","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blaze-cms/plugin-data-ui",
3
- "version": "0.146.0-rc-eagle-3.9",
3
+ "version": "0.146.0-rc-eagle-3.10",
4
4
  "description": "Blaze plugin data ui",
5
5
  "main": "lib/index.js",
6
6
  "module": "lib-es/index.js",
@@ -32,11 +32,11 @@
32
32
  },
33
33
  "license": "GPL-3.0",
34
34
  "dependencies": {
35
- "@blaze-cms/admin-ui-utils": "0.146.0-rc-eagle-3.6",
35
+ "@blaze-cms/admin-ui-utils": "0.146.0-rc-eagle-3.10",
36
36
  "@blaze-cms/core-errors": "0.146.0-rc-eagle-3.0",
37
37
  "@blaze-cms/plugin-render-hooks-ui": "0.146.0-rc-eagle-3.0",
38
- "@blaze-cms/react-form-builder": "0.146.0-rc-eagle-3.9",
39
- "@blaze-cms/react-page-builder": "0.146.0-rc-eagle-3.6",
38
+ "@blaze-cms/react-form-builder": "0.146.0-rc-eagle-3.10",
39
+ "@blaze-cms/react-page-builder": "0.146.0-rc-eagle-3.10",
40
40
  "@blaze-cms/setup-ui": "0.146.0-rc-eagle-3.0",
41
41
  "@blaze-cms/versioning-ui": "0.146.0-rc-eagle-3.0",
42
42
  "@blaze-react/button": "0.8.0-alpha.82",
@@ -72,5 +72,5 @@
72
72
  "lib/*",
73
73
  "lib-es/*"
74
74
  ],
75
- "gitHead": "acfa3a71a3c44d6665457ae88fcbb88d5c3c423e"
75
+ "gitHead": "782e5e3c8df78fc8c873288a155958ff5b5c6705"
76
76
  }
@@ -167,7 +167,7 @@ const ListingTable = ({ match, entitySchema, history }) => {
167
167
  itemName={itemToDelete.name}
168
168
  />
169
169
  )}
170
- <PageHeader title={entitySchema.displayName} subtitle="">
170
+ <PageHeader title={entitySchema.displayNamePlural || entitySchema.displayName} subtitle="">
171
171
  {createAction.active && !showAddButton && (
172
172
  <Link data-testid="addEntity" className="button button--small" to={`${match.url}/create`}>
173
173
  Add
@@ -2,6 +2,13 @@ import { getQuery } from '@blaze-cms/admin-ui-utils';
2
2
 
3
3
  const { MENU_PERMISSIONS } = require('../constants');
4
4
 
5
+ // Menu items label a listing of many records, so they use the plural. The
6
+ // fallback matters: this package and the API are published independently, so an
7
+ // admin bundle can run against an API that does not yet resolve the field.
8
+ function getMenuLabel({ displayName, displayNamePlural }) {
9
+ return displayNamePlural || displayName || '';
10
+ }
11
+
5
12
  function getAddContentMenuItems(app) {
6
13
  return async ({ addConfig }) => {
7
14
  const client = app.getClient();
@@ -17,30 +24,31 @@ function getAddContentMenuItems(app) {
17
24
 
18
25
  if (!getEntitySchemas || !getEntitySchemas.length) return; // no items so don't add section
19
26
 
20
- const menuItems = {};
21
27
  const sectionMenuItems = { settings: {} };
22
28
 
23
- getEntitySchemas.forEach(({ id, displayName, displayProperties }) => {
24
- if (!displayProperties) return null;
29
+ // Order by the label that is rendered, not by displayName. getEntitySchemas
30
+ // is sorted on displayName server-side and that order serves every other
31
+ // consumer, which shows the singular, so the plural ordering belongs here.
32
+ // The explicit `order` is what MenuSectionItems reads to sort.
33
+ const orderedEntities = [...getEntitySchemas].sort((entityA, entityB) =>
34
+ getMenuLabel(entityA).localeCompare(getMenuLabel(entityB))
35
+ );
36
+
37
+ orderedEntities.forEach((entity, order) => {
38
+ const { id, displayProperties } = entity;
39
+ if (!displayProperties) return;
25
40
 
26
41
  const { adminMenu: { sectionKey = 'settings' } = {} } = displayProperties;
27
42
  const sectionItems = sectionMenuItems[sectionKey] || {};
28
43
  sectionItems[id] = {
29
- label: displayName,
44
+ label: getMenuLabel(entity),
45
+ order,
30
46
  uri: `/data-listing/${id}`
31
47
  };
32
48
  sectionMenuItems[sectionKey] = sectionItems;
33
49
  });
34
50
 
35
- const menuConfig = {
36
- main: {
37
- items: {
38
- settings: {
39
- items: menuItems
40
- }
41
- }
42
- }
43
- };
51
+ const menuConfig = { main: { items: {} } };
44
52
 
45
53
  Object.entries(sectionMenuItems).forEach(([sectionKey, sectionItems]) => {
46
54
  const sectionConfig = menuConfig.main.items[sectionKey] || {};
@@ -48,13 +56,6 @@ function getAddContentMenuItems(app) {
48
56
  menuConfig.main.items[sectionKey] = sectionConfig;
49
57
  });
50
58
 
51
- getEntitySchemas.forEach(({ id, displayName }) => {
52
- menuItems[id] = {
53
- label: displayName,
54
- uri: `/data-listing/${id}`
55
- };
56
- });
57
-
58
59
  addConfig(menuConfig);
59
60
  };
60
61
  }