@blaze-cms/plugin-data-ui 0.129.0-admin-updates.2 → 0.129.0-project-admin-customisations.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +20 -9
- package/README.md +42 -0
- package/lib/components/EntityDataListing/EntityDataListing.js +3 -24
- package/lib/components/EntityDataListing/EntityDataListing.js.map +1 -1
- package/lib/components/EntityManager/Entity/Entity.js +10 -1
- package/lib/components/EntityManager/Entity/Entity.js.map +1 -1
- package/lib/components/EntityManager/Entity/EntityHeader/EntityHeader.js.map +1 -1
- package/lib/components/EntityManager/Entity/EntityHeader/HeaderPreviewButton/HeaderPreviewButton.js.map +1 -1
- package/lib/components/EntityManager/Entity/SideBarRelations/index.js.map +1 -1
- package/lib/components/EntityManager/Entity/actions-handlers/create/submit.js.map +1 -1
- package/lib/components/EntityManager/Entity/actions-handlers/shared/publish.js.map +1 -1
- package/lib/components/EntityManager/Entity/actions-handlers/update/submit.js.map +1 -1
- package/lib/components/EntityManager/EntityManager.js.map +1 -1
- package/lib/components/EntityManager/utils/entity.js.map +1 -1
- package/lib/components/InfoBoxes/InfoBoxes.js +36 -0
- package/lib/components/InfoBoxes/InfoBoxes.js.map +1 -0
- package/lib/components/InfoBoxes/container/InfoBoxContainer.js +44 -0
- package/lib/components/InfoBoxes/container/InfoBoxContainer.js.map +1 -0
- package/lib/components/InfoBoxes/helpers/build-dynamic-query.js +25 -0
- package/lib/components/InfoBoxes/helpers/build-dynamic-query.js.map +1 -0
- package/lib/components/InfoBoxes/hooks/useData.js +42 -0
- package/lib/components/InfoBoxes/hooks/useData.js.map +1 -0
- package/lib/components/InfoBoxes/hooks/useInfoBox.js +26 -0
- package/lib/components/InfoBoxes/hooks/useInfoBox.js.map +1 -0
- package/lib/components/InfoBoxes/index.js +12 -0
- package/lib/components/InfoBoxes/index.js.map +1 -0
- package/lib/components/InfoBoxes/presentational/InfoBox.js +46 -0
- package/lib/components/InfoBoxes/presentational/InfoBox.js.map +1 -0
- package/lib/components/ListingTable/ListingTable.js +5 -26
- package/lib/components/ListingTable/ListingTable.js.map +1 -1
- package/lib/components/ListingTable/ListingTableContent/ListingTableContent.js +5 -12
- package/lib/components/ListingTable/ListingTableContent/ListingTableContent.js.map +1 -1
- package/lib/components/ListingTable/TableActions/TableActions.js.map +1 -1
- package/lib/components/ListingTable/mappers/populate-rows.js.map +1 -1
- package/lib/components/Tabs/index.js.map +1 -1
- package/lib/index.js +3 -11
- package/lib/index.js.map +1 -1
- package/lib/utils/add-content-menu-items.js +64 -13
- package/lib/utils/add-content-menu-items.js.map +1 -1
- package/lib/utils/build-create-entity-mutation.js.map +1 -1
- package/lib/utils/build-delete-entity-mutation.js.map +1 -1
- package/lib/utils/build-listing-query.js.map +1 -1
- package/lib/utils/build-update-data-query.js.map +1 -1
- package/lib/utils/build-update-publish-unpublish-mutation.js.map +1 -1
- package/lib/utils/hoc/withContext.js.map +1 -1
- package/lib-es/components/EntityDataListing/EntityDataListing.js +3 -14
- package/lib-es/components/EntityDataListing/EntityDataListing.js.map +1 -1
- package/lib-es/components/EntityManager/Entity/Entity.js +10 -1
- package/lib-es/components/EntityManager/Entity/Entity.js.map +1 -1
- package/lib-es/components/EntityManager/Entity/EntityHeader/EntityHeader.js.map +1 -1
- package/lib-es/components/EntityManager/Entity/EntityHeader/HeaderPreviewButton/HeaderPreviewButton.js.map +1 -1
- package/lib-es/components/EntityManager/Entity/SideBarRelations/index.js.map +1 -1
- package/lib-es/components/EntityManager/Entity/actions-handlers/shared/publish.js.map +1 -1
- package/lib-es/components/EntityManager/Entity/actions-handlers/update/submit.js.map +1 -1
- package/lib-es/components/EntityManager/EntityManager.js.map +1 -1
- package/lib-es/components/EntityManager/utils/entity.js.map +1 -1
- package/lib-es/components/InfoBoxes/InfoBoxes.js +28 -0
- package/lib-es/components/InfoBoxes/InfoBoxes.js.map +1 -0
- package/lib-es/components/InfoBoxes/container/InfoBoxContainer.js +30 -0
- package/lib-es/components/InfoBoxes/container/InfoBoxContainer.js.map +1 -0
- package/lib-es/components/InfoBoxes/helpers/build-dynamic-query.js +25 -0
- package/lib-es/components/InfoBoxes/helpers/build-dynamic-query.js.map +1 -0
- package/lib-es/components/InfoBoxes/hooks/useData.js +37 -0
- package/lib-es/components/InfoBoxes/hooks/useData.js.map +1 -0
- package/lib-es/components/InfoBoxes/hooks/useInfoBox.js +19 -0
- package/lib-es/components/InfoBoxes/hooks/useInfoBox.js.map +1 -0
- package/lib-es/components/InfoBoxes/index.js +3 -0
- package/lib-es/components/InfoBoxes/index.js.map +1 -0
- package/lib-es/components/InfoBoxes/presentational/InfoBox.js +31 -0
- package/lib-es/components/InfoBoxes/presentational/InfoBox.js.map +1 -0
- package/lib-es/components/ListingTable/ListingTable.js +4 -25
- package/lib-es/components/ListingTable/ListingTable.js.map +1 -1
- package/lib-es/components/ListingTable/ListingTableContent/ListingTableContent.js +6 -13
- package/lib-es/components/ListingTable/ListingTableContent/ListingTableContent.js.map +1 -1
- package/lib-es/components/ListingTable/TableActions/TableActions.js.map +1 -1
- package/lib-es/components/ListingTable/mappers/populate-rows.js.map +1 -1
- package/lib-es/components/Tabs/index.js.map +1 -1
- package/lib-es/index.js +1 -9
- package/lib-es/index.js.map +1 -1
- package/lib-es/utils/add-content-menu-items.js +49 -5
- package/lib-es/utils/add-content-menu-items.js.map +1 -1
- package/lib-es/utils/build-create-entity-mutation.js.map +1 -1
- package/lib-es/utils/build-listing-query.js.map +1 -1
- package/lib-es/utils/build-update-data-query.js.map +1 -1
- package/lib-es/utils/build-update-publish-unpublish-mutation.js.map +1 -1
- package/lib-es/utils/hoc/withContext.js.map +1 -1
- package/package.json +10 -9
- package/src/components/EntityDataListing/EntityDataListing.js +3 -12
- package/src/components/EntityManager/Entity/Entity.js +4 -0
- package/src/components/InfoBoxes/InfoBoxes.js +24 -0
- package/src/components/InfoBoxes/container/InfoBoxContainer.js +22 -0
- package/src/components/InfoBoxes/helpers/build-dynamic-query.js +25 -0
- package/src/components/InfoBoxes/hooks/useData.js +20 -0
- package/src/components/InfoBoxes/hooks/useInfoBox.js +13 -0
- package/src/components/InfoBoxes/index.js +3 -0
- package/src/components/InfoBoxes/presentational/InfoBox.js +34 -0
- package/src/components/ListingTable/ListingTable.js +4 -18
- package/src/components/ListingTable/ListingTableContent/ListingTableContent.js +5 -16
- package/src/index.js +1 -8
- package/src/utils/add-content-menu-items.js +45 -3
|
@@ -6,31 +6,22 @@ import { getQuery } from '@blaze-cms/admin-ui-utils';
|
|
|
6
6
|
import ListingTable from '../ListingTable/ListingTable';
|
|
7
7
|
import { withContext } from '../../utils/hoc/withContext';
|
|
8
8
|
|
|
9
|
-
const EntityDataListing = ({ match
|
|
9
|
+
const EntityDataListing = ({ match }) => {
|
|
10
10
|
const {
|
|
11
11
|
params: { entityIdentifier: identifier }
|
|
12
12
|
} = match;
|
|
13
13
|
|
|
14
|
-
const [[selectedMenuItem]] = menuItems
|
|
15
|
-
.map(([_, { items }]) => {
|
|
16
|
-
const item = items.filter(({ uri }) => uri.endsWith(`/${identifier}`));
|
|
17
|
-
|
|
18
|
-
return item.length ? item : null;
|
|
19
|
-
})
|
|
20
|
-
.filter(Boolean);
|
|
21
|
-
|
|
22
14
|
const { data: { getEntitySchemas = [] } = {} } = useQuery(getQuery('GET_ENTITY_SCHEMA'), {
|
|
23
15
|
variables: { identifier }
|
|
24
16
|
});
|
|
25
17
|
|
|
26
18
|
if (!getEntitySchemas.length) return '';
|
|
27
19
|
|
|
28
|
-
return <ListingTable entitySchema={getEntitySchemas[0]}
|
|
20
|
+
return <ListingTable entitySchema={getEntitySchemas[0]} />;
|
|
29
21
|
};
|
|
30
22
|
|
|
31
23
|
EntityDataListing.propTypes = {
|
|
32
|
-
match: PropTypes.object.isRequired
|
|
33
|
-
menuItems: PropTypes.array.isRequired
|
|
24
|
+
match: PropTypes.object.isRequired
|
|
34
25
|
};
|
|
35
26
|
|
|
36
27
|
export default withContext(EntityDataListing);
|
|
@@ -3,6 +3,7 @@ import React, { useEffect, useState, useRef } from 'react';
|
|
|
3
3
|
import { withRouter, Prompt } from 'react-router-dom';
|
|
4
4
|
import { useApolloClient } from '@apollo/client';
|
|
5
5
|
import PropTypes from 'prop-types';
|
|
6
|
+
import { RenderHook } from '@blaze-cms/plugin-render-hooks-ui';
|
|
6
7
|
import { getQuery, GET_CURRENT_TAB_ID } from '@blaze-cms/admin-ui-utils';
|
|
7
8
|
import { FormBuilder, parseFormValues } from '@blaze-cms/react-form-builder';
|
|
8
9
|
import { DeleteAction, CopyDataFromAction } from '@blaze-cms/admin';
|
|
@@ -34,6 +35,7 @@ import {
|
|
|
34
35
|
checkFulfilConditions
|
|
35
36
|
} from '../utils/entity';
|
|
36
37
|
import useToggle from '../../../utils/hooks/useToggle';
|
|
38
|
+
import InfoBoxes from '../../InfoBoxes/InfoBoxes';
|
|
37
39
|
|
|
38
40
|
const Entity = ({
|
|
39
41
|
formData,
|
|
@@ -440,6 +442,8 @@ const Entity = ({
|
|
|
440
442
|
<div className="page__content--fixed">
|
|
441
443
|
<div className="page__content">
|
|
442
444
|
<div className="content">
|
|
445
|
+
<RenderHook hookKey={`entity:${action}:main:top`} entity={entity} schema={schema} />
|
|
446
|
+
<InfoBoxes id={entity.id} schema={schema} />
|
|
443
447
|
<Tabs
|
|
444
448
|
enabled={showPageBuilderTabs}
|
|
445
449
|
onTabChange={tabId => {
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import PropTypes from 'prop-types';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import InfoBoxContainer from './container/InfoBoxContainer';
|
|
4
|
+
|
|
5
|
+
const InfoBoxes = ({ id, schema }) => {
|
|
6
|
+
const {
|
|
7
|
+
displayProperties: { adminInfoBoxes = [] }
|
|
8
|
+
} = schema;
|
|
9
|
+
|
|
10
|
+
if (adminInfoBoxes.length <= 0) {
|
|
11
|
+
return null;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
return adminInfoBoxes.map(infoBox => (
|
|
15
|
+
<InfoBoxContainer id={id} schema={schema} key={infoBox.key} infoBox={infoBox} />
|
|
16
|
+
));
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export default InfoBoxes;
|
|
20
|
+
|
|
21
|
+
InfoBoxes.propTypes = {
|
|
22
|
+
id: PropTypes.string.isRequired,
|
|
23
|
+
schema: PropTypes.object.isRequired
|
|
24
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import PropTypes from 'prop-types';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import useData from '../hooks/useData';
|
|
4
|
+
import InfoBox from '../presentational/InfoBox';
|
|
5
|
+
|
|
6
|
+
const InfoBoxContainer = ({ id, schema, infoBox }) => {
|
|
7
|
+
const { data } = useData({ id, schema, infoBox });
|
|
8
|
+
|
|
9
|
+
if (!data || !Object.keys(data) || Object.keys(data).length === 0) return null;
|
|
10
|
+
|
|
11
|
+
const items = Object.values(data).flatMap(item => Object.values(item));
|
|
12
|
+
|
|
13
|
+
return <InfoBox items={items} infoBoxKey={infoBox.key} />;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
export default InfoBoxContainer;
|
|
17
|
+
|
|
18
|
+
InfoBoxContainer.propTypes = {
|
|
19
|
+
id: PropTypes.string.isRequired,
|
|
20
|
+
infoBox: PropTypes.object.isRequired,
|
|
21
|
+
schema: PropTypes.object.isRequired
|
|
22
|
+
};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { gql } from '@apollo/client';
|
|
2
|
+
import { BlazeError } from '@blaze-cms/core-errors';
|
|
3
|
+
|
|
4
|
+
export default function buildDynamicQuery({ id, schema, infoBox }) {
|
|
5
|
+
if (!schema || !schema.actions || !schema.actions.get || !schema.properties) {
|
|
6
|
+
throw new BlazeError(
|
|
7
|
+
'DataEntity query requires get action, properties and fields from entity schema'
|
|
8
|
+
);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
const fields = `${infoBox.property} {
|
|
12
|
+
label
|
|
13
|
+
value
|
|
14
|
+
}`;
|
|
15
|
+
|
|
16
|
+
return {
|
|
17
|
+
query: gql`query getInfoBoxData($id: String!){
|
|
18
|
+
${schema.actions.get}( id: $id ) {
|
|
19
|
+
id
|
|
20
|
+
${fields}
|
|
21
|
+
__typename
|
|
22
|
+
}
|
|
23
|
+
}`
|
|
24
|
+
};
|
|
25
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { useQuery, gql } from '@apollo/client';
|
|
2
|
+
import useInfoBoxData from './useInfoBox';
|
|
3
|
+
|
|
4
|
+
function useData({ id, schema, infoBox }) {
|
|
5
|
+
const { query } = useInfoBoxData({ id, schema, infoBox });
|
|
6
|
+
|
|
7
|
+
const infoBoxQuery =
|
|
8
|
+
query ||
|
|
9
|
+
gql`
|
|
10
|
+
query {
|
|
11
|
+
__typename
|
|
12
|
+
}
|
|
13
|
+
`;
|
|
14
|
+
|
|
15
|
+
const { data = {}, loading, error } = useQuery(infoBoxQuery, { variables: { id }, skip: !query });
|
|
16
|
+
|
|
17
|
+
return { data: data.__typename !== 'Query' ? data : null, loading, error };
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export default useData;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import buildDynamicQuery from '../helpers/build-dynamic-query';
|
|
2
|
+
|
|
3
|
+
function useInfoBox({ id, schema, infoBox }) {
|
|
4
|
+
const { query } = buildDynamicQuery({
|
|
5
|
+
id,
|
|
6
|
+
schema,
|
|
7
|
+
infoBox
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
return { query: query || null };
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export default useInfoBox;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import PropTypes from 'prop-types';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
|
|
4
|
+
const InfoBox = ({ items, infoBoxKey }) => {
|
|
5
|
+
if (!items) return null;
|
|
6
|
+
|
|
7
|
+
const infoBoxItems = items.map(item =>
|
|
8
|
+
Object.values(item)
|
|
9
|
+
.map(info => {
|
|
10
|
+
if (!info.label || !info.value) return null;
|
|
11
|
+
|
|
12
|
+
return (
|
|
13
|
+
<div className="info-box--item" key={`${infoBoxKey}-${info.label.toLowerCase()}`}>
|
|
14
|
+
<div className="info-box--label">{info.label}: </div>
|
|
15
|
+
<div className="info-box--value">{info.value}</div>
|
|
16
|
+
</div>
|
|
17
|
+
);
|
|
18
|
+
})
|
|
19
|
+
.filter(Boolean)
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
return (
|
|
23
|
+
<div className="info-box" key={infoBoxKey}>
|
|
24
|
+
<div className="info-box--container">{infoBoxItems}</div>
|
|
25
|
+
</div>
|
|
26
|
+
);
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export default InfoBox;
|
|
30
|
+
|
|
31
|
+
InfoBox.propTypes = {
|
|
32
|
+
infoBoxKey: PropTypes.string.isRequired,
|
|
33
|
+
items: PropTypes.array.isRequired
|
|
34
|
+
};
|
|
@@ -3,7 +3,6 @@ import React, { useEffect, useState, Fragment } from 'react';
|
|
|
3
3
|
import PropTypes from 'prop-types';
|
|
4
4
|
import { withRouter, Link } from 'react-router-dom';
|
|
5
5
|
import More from '@blaze-react/more';
|
|
6
|
-
import { MainContext, useMainContext } from '@blaze-cms/admin-ui-utils';
|
|
7
6
|
import { PageHeader, DeleteAction } from '@blaze-cms/admin';
|
|
8
7
|
import { useToasts } from '@blaze-react/toaster';
|
|
9
8
|
import ListingTableContent from './ListingTableContent';
|
|
@@ -14,7 +13,7 @@ import { getDefaultQueryParams } from '../../utils/get-default-query-params';
|
|
|
14
13
|
|
|
15
14
|
const OVER_SCAN_BUFFER = 10;
|
|
16
15
|
|
|
17
|
-
const ListingTable = ({ match, entitySchema
|
|
16
|
+
const ListingTable = ({ match, entitySchema }) => {
|
|
18
17
|
const [tableData, setTableData] = useState({});
|
|
19
18
|
const [modalStatus, setModalStatus] = useState(false);
|
|
20
19
|
const [itemToDelete, setItemToDelete] = useState({});
|
|
@@ -23,7 +22,6 @@ const ListingTable = ({ match, entitySchema, selectedMenuItem }) => {
|
|
|
23
22
|
const [verifiedRanges, setVerifiedRanges] = useState([]);
|
|
24
23
|
const queryParamsDefault = getDefaultQueryParams({ schema: entitySchema });
|
|
25
24
|
const [queryParams, setQueryParams] = useState(queryParamsDefault);
|
|
26
|
-
const { menuItems, setMenuItems } = useMainContext(MainContext);
|
|
27
25
|
const client = useApolloClient();
|
|
28
26
|
const { addToast } = useToasts();
|
|
29
27
|
|
|
@@ -55,17 +53,7 @@ const ListingTable = ({ match, entitySchema, selectedMenuItem }) => {
|
|
|
55
53
|
[client, entitySchema, match.url, previousSchema.id, queryParams] // eslint-disable-line react-hooks/exhaustive-deps
|
|
56
54
|
);
|
|
57
55
|
|
|
58
|
-
const onCloseCardPrompt = () =>
|
|
59
|
-
const updatedSelectedMenuItem = {
|
|
60
|
-
...selectedMenuItem,
|
|
61
|
-
isDisplayedPrompt: false
|
|
62
|
-
};
|
|
63
|
-
const [{ header, items }] = menuItems;
|
|
64
|
-
const updatedItems = items.map(
|
|
65
|
-
item => (item.name === selectedMenuItem.name ? updatedSelectedMenuItem : item)
|
|
66
|
-
);
|
|
67
|
-
setMenuItems([{ header, items: updatedItems }]);
|
|
68
|
-
};
|
|
56
|
+
const onCloseCardPrompt = () => null;
|
|
69
57
|
|
|
70
58
|
const toggleModal = item => {
|
|
71
59
|
setModalStatus(!!item);
|
|
@@ -162,7 +150,7 @@ const ListingTable = ({ match, entitySchema, selectedMenuItem }) => {
|
|
|
162
150
|
/>
|
|
163
151
|
)}
|
|
164
152
|
<PageHeader title={entitySchema.displayName} subtitle="">
|
|
165
|
-
{
|
|
153
|
+
{!!tableData.rows.length && (
|
|
166
154
|
<Fragment>
|
|
167
155
|
<Link
|
|
168
156
|
data-testid="addEntity"
|
|
@@ -187,7 +175,6 @@ const ListingTable = ({ match, entitySchema, selectedMenuItem }) => {
|
|
|
187
175
|
onRenderItems={handleRenderedItems}
|
|
188
176
|
tableData={tableData}
|
|
189
177
|
onCloseCardPrompt={onCloseCardPrompt}
|
|
190
|
-
selectedMenuItem={selectedMenuItem}
|
|
191
178
|
scrollToIndex={scrollToIndex}
|
|
192
179
|
/>
|
|
193
180
|
</div>
|
|
@@ -195,8 +182,7 @@ const ListingTable = ({ match, entitySchema, selectedMenuItem }) => {
|
|
|
195
182
|
};
|
|
196
183
|
ListingTable.propTypes = {
|
|
197
184
|
entitySchema: PropTypes.object.isRequired,
|
|
198
|
-
match: PropTypes.object.isRequired
|
|
199
|
-
selectedMenuItem: PropTypes.object.isRequired
|
|
185
|
+
match: PropTypes.object.isRequired
|
|
200
186
|
};
|
|
201
187
|
|
|
202
188
|
export default withRouter(ListingTable);
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import Table from '@blaze-react/table';
|
|
3
3
|
import PropTypes from 'prop-types';
|
|
4
|
-
import {
|
|
5
|
-
import { Link, withRouter } from 'react-router-dom';
|
|
4
|
+
import { withRouter } from 'react-router-dom';
|
|
6
5
|
|
|
7
6
|
const ListingTableContent = ({
|
|
8
7
|
tableData,
|
|
@@ -20,7 +19,7 @@ const ListingTableContent = ({
|
|
|
20
19
|
|
|
21
20
|
return (
|
|
22
21
|
<>
|
|
23
|
-
{displayTable
|
|
22
|
+
{displayTable && (
|
|
24
23
|
<>
|
|
25
24
|
<div className="page__content">
|
|
26
25
|
<Table
|
|
@@ -36,17 +35,6 @@ const ListingTableContent = ({
|
|
|
36
35
|
/>
|
|
37
36
|
</div>
|
|
38
37
|
</>
|
|
39
|
-
) : (
|
|
40
|
-
selectedMenuItem.isDisplayedPrompt && (
|
|
41
|
-
<CardPrompt onClose={onCloseCardPrompt} data-testid="card-prompt">
|
|
42
|
-
<Link
|
|
43
|
-
className="button button--rounded button--cta"
|
|
44
|
-
to={`${match.url}/create`}
|
|
45
|
-
data-testid="add-button">
|
|
46
|
-
Add
|
|
47
|
-
</Link>
|
|
48
|
-
</CardPrompt>
|
|
49
|
-
)
|
|
50
38
|
)}
|
|
51
39
|
</>
|
|
52
40
|
);
|
|
@@ -55,7 +43,7 @@ const ListingTableContent = ({
|
|
|
55
43
|
ListingTableContent.propTypes = {
|
|
56
44
|
tableData: PropTypes.object.isRequired,
|
|
57
45
|
onCloseCardPrompt: PropTypes.func.isRequired,
|
|
58
|
-
selectedMenuItem: PropTypes.object
|
|
46
|
+
selectedMenuItem: PropTypes.object,
|
|
59
47
|
match: PropTypes.shape({
|
|
60
48
|
url: PropTypes.string
|
|
61
49
|
}).isRequired,
|
|
@@ -73,7 +61,8 @@ ListingTableContent.defaultProps = {
|
|
|
73
61
|
onClickRow: () => {},
|
|
74
62
|
overScanBuffer: 0,
|
|
75
63
|
scrollToIndex: 0,
|
|
76
|
-
onRenderItems: () => {}
|
|
64
|
+
onRenderItems: () => {},
|
|
65
|
+
selectedMenuItem: null
|
|
77
66
|
};
|
|
78
67
|
|
|
79
68
|
export default withRouter(ListingTableContent);
|
package/src/index.js
CHANGED
|
@@ -12,14 +12,7 @@ const EntityManager = React.lazy(() =>
|
|
|
12
12
|
);
|
|
13
13
|
|
|
14
14
|
export default async function load(app) {
|
|
15
|
-
|
|
16
|
-
const sectionKey = 'content';
|
|
17
|
-
|
|
18
|
-
app.events.once('load:menu-section', addSection => {
|
|
19
|
-
addSection(sectionKey, { header: 'content', order: 100 });
|
|
20
|
-
});
|
|
21
|
-
|
|
22
|
-
app.events.once('load:menu-items', getAddContentMenuItems(app, sectionKey));
|
|
15
|
+
app.events.once('admin:menu:config:load', getAddContentMenuItems(app));
|
|
23
16
|
|
|
24
17
|
app.events.once('load:custom:field:type', addFieldType => {
|
|
25
18
|
Object.keys(formFieldTypes).forEach(type => {
|
|
@@ -2,8 +2,8 @@ import { getQuery } from '@blaze-cms/admin-ui-utils';
|
|
|
2
2
|
|
|
3
3
|
const { MENU_PERMISSIONS } = require('../constants');
|
|
4
4
|
|
|
5
|
-
function getAddContentMenuItems(app
|
|
6
|
-
return async
|
|
5
|
+
function getAddContentMenuItems(app) {
|
|
6
|
+
return async ({ addConfig }) => {
|
|
7
7
|
const client = app.getClient();
|
|
8
8
|
const {
|
|
9
9
|
data: { getEntitySchemas }
|
|
@@ -14,9 +14,51 @@ function getAddContentMenuItems(app, sectionKey) {
|
|
|
14
14
|
canDoActions: MENU_PERMISSIONS
|
|
15
15
|
}
|
|
16
16
|
});
|
|
17
|
+
|
|
18
|
+
if (!getEntitySchemas || !getEntitySchemas.length) return; // no items so don't add section
|
|
19
|
+
|
|
20
|
+
const menuItems = {};
|
|
21
|
+
const sectionMenuItems = { content: {} };
|
|
22
|
+
|
|
23
|
+
getEntitySchemas.forEach(({ id, displayName, displayProperties }) => {
|
|
24
|
+
if (!displayProperties) return null;
|
|
25
|
+
|
|
26
|
+
const { adminMenu: { sectionKey = 'content' } = {} } = displayProperties;
|
|
27
|
+
const sectionItems = sectionMenuItems[sectionKey] || {};
|
|
28
|
+
sectionItems[id] = {
|
|
29
|
+
label: displayName,
|
|
30
|
+
uri: `/data-listing/${id}`
|
|
31
|
+
};
|
|
32
|
+
sectionMenuItems[sectionKey] = sectionItems;
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
const menuConfig = {
|
|
36
|
+
main: {
|
|
37
|
+
items: {
|
|
38
|
+
content: {
|
|
39
|
+
label: 'Content',
|
|
40
|
+
loadOpen: true,
|
|
41
|
+
order: 10,
|
|
42
|
+
items: menuItems
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
Object.entries(sectionMenuItems).forEach(([sectionKey, sectionItems]) => {
|
|
49
|
+
const sectionConfig = menuConfig.main.items[sectionKey] || {};
|
|
50
|
+
sectionConfig.items = sectionItems;
|
|
51
|
+
menuConfig.main.items[sectionKey] = sectionConfig;
|
|
52
|
+
});
|
|
53
|
+
|
|
17
54
|
getEntitySchemas.forEach(({ id, displayName }) => {
|
|
18
|
-
|
|
55
|
+
menuItems[id] = {
|
|
56
|
+
label: displayName,
|
|
57
|
+
uri: `/data-listing/${id}`
|
|
58
|
+
};
|
|
19
59
|
});
|
|
60
|
+
|
|
61
|
+
addConfig(menuConfig);
|
|
20
62
|
};
|
|
21
63
|
}
|
|
22
64
|
|