@blaze-cms/plugin-data-ui 0.147.0-rc-eagle.2 → 0.147.0-rc-eagle.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. package/lib/components/EntityManager/Entity/Entity.js +6 -7
  2. package/lib/components/EntityManager/Entity/Entity.js.map +1 -1
  3. package/lib/components/ListingTable/SearchFilter/SearchContainer.js +321 -49
  4. package/lib/components/ListingTable/SearchFilter/SearchContainer.js.map +1 -1
  5. package/lib/components/ListingTable/SearchFilter/SearchFilter.js +6 -2
  6. package/lib/components/ListingTable/SearchFilter/SearchFilter.js.map +1 -1
  7. package/lib/components/ListingTable/SearchFilter/helpers.js +41 -8
  8. package/lib/components/ListingTable/SearchFilter/helpers.js.map +1 -1
  9. package/lib/index.js +7 -0
  10. package/lib/index.js.map +1 -1
  11. package/lib-es/components/EntityManager/Entity/Entity.js +6 -7
  12. package/lib-es/components/EntityManager/Entity/Entity.js.map +1 -1
  13. package/lib-es/components/ListingTable/SearchFilter/SearchContainer.js +323 -51
  14. package/lib-es/components/ListingTable/SearchFilter/SearchContainer.js.map +1 -1
  15. package/lib-es/components/ListingTable/SearchFilter/SearchFilter.js +7 -3
  16. package/lib-es/components/ListingTable/SearchFilter/SearchFilter.js.map +1 -1
  17. package/lib-es/components/ListingTable/SearchFilter/helpers.js +39 -8
  18. package/lib-es/components/ListingTable/SearchFilter/helpers.js.map +1 -1
  19. package/lib-es/index.js +1 -0
  20. package/lib-es/index.js.map +1 -1
  21. package/package.json +11 -11
  22. package/src/components/EntityManager/Entity/Entity.js +11 -11
  23. package/src/components/ListingTable/SearchFilter/SearchContainer.js +363 -71
  24. package/src/components/ListingTable/SearchFilter/SearchFilter.js +5 -2
  25. package/src/components/ListingTable/SearchFilter/helpers.js +56 -8
  26. package/src/index.js +2 -0
@@ -1 +1 @@
1
- {"version":3,"file":"SearchFilter.js","names":["React","useMemo","PropTypes","getKeywordSearchFilters","findSelectFilters","SearchContainer","SearchFilter","schema","setListFilters","displayProperties","adminListings","dataSource","source","index","disableListingFilter","keywordFiltersToUse","selectFiltersToDisplay","canSearch","length","createElement","key","id","propTypes","func","isRequired","object"],"sources":["../../../../src/components/ListingTable/SearchFilter/SearchFilter.js"],"sourcesContent":["import React, { useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport { getKeywordSearchFilters, findSelectFilters } from './helpers';\nimport SearchContainer from './SearchContainer';\n\nconst SearchFilter = ({ schema, setListFilters }) => {\n const { displayProperties = {} } = schema || {};\n const {\n adminListings: { dataSource: { source, index } = {}, disableListingFilter = false } = {}\n } = displayProperties;\n\n const keywordFiltersToUse = useMemo(() => getKeywordSearchFilters(schema), [schema]);\n const selectFiltersToDisplay = useMemo(() => findSelectFilters(schema), [schema]);\n\n if (disableListingFilter) return null;\n\n const canSearch =\n source === 'search' && (keywordFiltersToUse.length > 0 || selectFiltersToDisplay.length > 0);\n if (!canSearch) return null;\n\n return (\n <SearchContainer\n index={index}\n key={schema.id}\n setListFilters={setListFilters}\n keywordFiltersToUse={keywordFiltersToUse}\n selectFiltersToDisplay={selectFiltersToDisplay}\n schema={schema}\n />\n );\n};\n\nSearchFilter.propTypes = {\n setListFilters: PropTypes.func.isRequired,\n schema: PropTypes.object.isRequired\n};\n\nexport default SearchFilter;\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,OAAO,QAAQ,OAAO;AACtC,OAAOC,SAAS,MAAM,YAAY;AAClC,SAASC,uBAAuB,EAAEC,iBAAiB,QAAQ,WAAW;AACtE,OAAOC,eAAe,MAAM,mBAAmB;AAE/C,MAAMC,YAAY,GAAGA,CAAC;EAAEC,MAAM;EAAEC;AAAe,CAAC,KAAK;EACnD,MAAM;IAAEC,iBAAiB,GAAG,CAAC;EAAE,CAAC,GAAGF,MAAM,IAAI,CAAC,CAAC;EAC/C,MAAM;IACJG,aAAa,EAAE;MAAEC,UAAU,EAAE;QAAEC,MAAM;QAAEC;MAAM,CAAC,GAAG,CAAC,CAAC;MAAEC,oBAAoB,GAAG;IAAM,CAAC,GAAG,CAAC;EACzF,CAAC,GAAGL,iBAAiB;EAErB,MAAMM,mBAAmB,GAAGd,OAAO,CAAC,MAAME,uBAAuB,CAACI,MAAM,CAAC,EAAE,CAACA,MAAM,CAAC,CAAC;EACpF,MAAMS,sBAAsB,GAAGf,OAAO,CAAC,MAAMG,iBAAiB,CAACG,MAAM,CAAC,EAAE,CAACA,MAAM,CAAC,CAAC;EAEjF,IAAIO,oBAAoB,EAAE,OAAO,IAAI;EAErC,MAAMG,SAAS,GACbL,MAAM,KAAK,QAAQ,KAAKG,mBAAmB,CAACG,MAAM,GAAG,CAAC,IAAIF,sBAAsB,CAACE,MAAM,GAAG,CAAC,CAAC;EAC9F,IAAI,CAACD,SAAS,EAAE,OAAO,IAAI;EAE3B,oBACEjB,KAAA,CAAAmB,aAAA,CAACd,eAAe;IACdQ,KAAK,EAAEA,KAAM;IACbO,GAAG,EAAEb,MAAM,CAACc,EAAG;IACfb,cAAc,EAAEA,cAAe;IAC/BO,mBAAmB,EAAEA,mBAAoB;IACzCC,sBAAsB,EAAEA,sBAAuB;IAC/CT,MAAM,EAAEA;EAAO,CAChB,CAAC;AAEN,CAAC;AAEDD,YAAY,CAACgB,SAAS,GAAG;EACvBd,cAAc,EAAEN,SAAS,CAACqB,IAAI,CAACC,UAAU;EACzCjB,MAAM,EAAEL,SAAS,CAACuB,MAAM,CAACD;AAC3B,CAAC;AAED,eAAelB,YAAY","ignoreList":[]}
1
+ {"version":3,"file":"SearchFilter.js","names":["React","useMemo","PropTypes","getKeywordSearchFilters","findSelectFilters","findMultiSelectFilters","SearchContainer","SearchFilter","schema","setListFilters","values","displayProperties","adminListings","dataSource","source","index","disableListingFilter","keywordFiltersToUse","selectFiltersToDisplay","multiSelectFiltersToDisplay","canSearch","length","createElement","key","id","propTypes","func","isRequired","object"],"sources":["../../../../src/components/ListingTable/SearchFilter/SearchFilter.js"],"sourcesContent":["import React, { useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport { getKeywordSearchFilters, findSelectFilters, findMultiSelectFilters } from './helpers';\nimport SearchContainer from './SearchContainer';\n\nconst SearchFilter = ({ schema, setListFilters, values }) => {\n const { displayProperties = {} } = schema || {};\n const {\n adminListings: { dataSource: { source, index } = {}, disableListingFilter = false } = {}\n } = displayProperties;\n\n const keywordFiltersToUse = useMemo(() => getKeywordSearchFilters(schema), [schema]);\n const selectFiltersToDisplay = useMemo(() => findSelectFilters(schema), [schema]);\n const multiSelectFiltersToDisplay = useMemo(() => findMultiSelectFilters(schema), [schema]);\n\n if (disableListingFilter) return null;\n\n const canSearch =\n source === 'search' && (keywordFiltersToUse.length > 0 || selectFiltersToDisplay.length > 0);\n if (!canSearch) return null;\n\n return (\n <SearchContainer\n index={index}\n key={schema.id}\n setListFilters={setListFilters}\n keywordFiltersToUse={keywordFiltersToUse}\n selectFiltersToDisplay={selectFiltersToDisplay}\n multiSelectFiltersToDisplay={multiSelectFiltersToDisplay}\n schema={schema}\n values={values}\n />\n );\n};\n\nSearchFilter.propTypes = {\n setListFilters: PropTypes.func.isRequired,\n schema: PropTypes.object.isRequired\n};\n\nexport default SearchFilter;\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,OAAO,QAAQ,OAAO;AACtC,OAAOC,SAAS,MAAM,YAAY;AAClC,SAASC,uBAAuB,EAAEC,iBAAiB,EAAEC,sBAAsB,QAAQ,WAAW;AAC9F,OAAOC,eAAe,MAAM,mBAAmB;AAE/C,MAAMC,YAAY,GAAGA,CAAC;EAAEC,MAAM;EAAEC,cAAc;EAAEC;AAAO,CAAC,KAAK;EAC3D,MAAM;IAAEC,iBAAiB,GAAG,CAAC;EAAE,CAAC,GAAGH,MAAM,IAAI,CAAC,CAAC;EAC/C,MAAM;IACJI,aAAa,EAAE;MAAEC,UAAU,EAAE;QAAEC,MAAM;QAAEC;MAAM,CAAC,GAAG,CAAC,CAAC;MAAEC,oBAAoB,GAAG;IAAM,CAAC,GAAG,CAAC;EACzF,CAAC,GAAGL,iBAAiB;EAErB,MAAMM,mBAAmB,GAAGhB,OAAO,CAAC,MAAME,uBAAuB,CAACK,MAAM,CAAC,EAAE,CAACA,MAAM,CAAC,CAAC;EACpF,MAAMU,sBAAsB,GAAGjB,OAAO,CAAC,MAAMG,iBAAiB,CAACI,MAAM,CAAC,EAAE,CAACA,MAAM,CAAC,CAAC;EACjF,MAAMW,2BAA2B,GAAGlB,OAAO,CAAC,MAAMI,sBAAsB,CAACG,MAAM,CAAC,EAAE,CAACA,MAAM,CAAC,CAAC;EAE3F,IAAIQ,oBAAoB,EAAE,OAAO,IAAI;EAErC,MAAMI,SAAS,GACbN,MAAM,KAAK,QAAQ,KAAKG,mBAAmB,CAACI,MAAM,GAAG,CAAC,IAAIH,sBAAsB,CAACG,MAAM,GAAG,CAAC,CAAC;EAC9F,IAAI,CAACD,SAAS,EAAE,OAAO,IAAI;EAE3B,oBACEpB,KAAA,CAAAsB,aAAA,CAAChB,eAAe;IACdS,KAAK,EAAEA,KAAM;IACbQ,GAAG,EAAEf,MAAM,CAACgB,EAAG;IACff,cAAc,EAAEA,cAAe;IAC/BQ,mBAAmB,EAAEA,mBAAoB;IACzCC,sBAAsB,EAAEA,sBAAuB;IAC/CC,2BAA2B,EAAEA,2BAA4B;IACzDX,MAAM,EAAEA,MAAO;IACfE,MAAM,EAAEA;EAAO,CAChB,CAAC;AAEN,CAAC;AAEDH,YAAY,CAACkB,SAAS,GAAG;EACvBhB,cAAc,EAAEP,SAAS,CAACwB,IAAI,CAACC,UAAU;EACzCnB,MAAM,EAAEN,SAAS,CAAC0B,MAAM,CAACD;AAC3B,CAAC;AAED,eAAepB,YAAY","ignoreList":[]}
@@ -11,14 +11,30 @@ const updateListFilters = (searchTerm, selectedFilters, setListFilters, fields =
11
11
  });
12
12
  }
13
13
  Object.entries(selectedFilters).forEach(([filterKey, filterValue]) => {
14
- if (!filterValue || filterValue === DEFAULT_FILTER_OPTION_LABEL) return;
15
- filters.push({
16
- match: {
17
- [`${filterKey}.keyword`]: {
18
- query: filterValue
19
- }
14
+ const isEmptyArray = Array.isArray(filterValue) && filterValue.length === 0;
15
+ if (filterValue == null || filterValue === '' || filterValue === DEFAULT_FILTER_OPTION_LABEL || isEmptyArray) return;
16
+ const field = `${filterKey}.keyword`;
17
+ if (Array.isArray(filterValue)) {
18
+ if (filterValue.length > 1) {
19
+ filters.push({
20
+ terms: {
21
+ [field]: filterValue
22
+ }
23
+ });
24
+ } else {
25
+ filters.push({
26
+ term: {
27
+ [field]: filterValue[0]
28
+ }
29
+ });
20
30
  }
21
- });
31
+ } else {
32
+ filters.push({
33
+ term: {
34
+ [field]: filterValue
35
+ }
36
+ });
37
+ }
22
38
  });
23
39
  setListFilters(filters);
24
40
  };
@@ -43,7 +59,18 @@ const findSelectFilters = schema => {
43
59
  const dynamicPropertySelects = Object.entries(dynamicProperties).filter(isFilterSelectItem);
44
60
  return [...propertySelects, ...dynamicPropertySelects];
45
61
  };
62
+ const findMultiSelectFilters = schema => {
63
+ if (!schema || !schema.properties) return [];
64
+ const {
65
+ properties = {},
66
+ dynamicProperties = {}
67
+ } = schema;
68
+ const propertyMultiSelect = Object.entries(properties).filter(isFilterMultiSelectItems);
69
+ const dynamicPropertyMultiSelect = Object.entries(dynamicProperties).filter(isFilterMultiSelectItems);
70
+ return [...propertyMultiSelect, ...dynamicPropertyMultiSelect];
71
+ };
46
72
  const isFilterSelectItem = ([, item]) => item.adminListingOptions && item.adminListingOptions.filterType === 'select';
73
+ const isFilterMultiSelectItems = ([, item]) => item.adminListingOptions && item.adminListingOptions.filterType === 'multiSelect';
47
74
  const buildQueryFields = (selectFilters, entityId) => {
48
75
  if (!Array.isArray(selectFilters) || selectFilters.length === 0) {
49
76
  return {
@@ -92,5 +119,9 @@ const buildQueryFields = (selectFilters, entityId) => {
92
119
  rawQuery
93
120
  };
94
121
  };
95
- export { buildQueryFields, updateListFilters, getKeywordSearchFilters, findSelectFilters };
122
+ const getTidyLabel = (value, tidy) => {
123
+ if (!tidy) return value;
124
+ return value.split(/[\s_-]+/).map(word => word.charAt(0).toUpperCase() + word.slice(1)).join(' ');
125
+ };
126
+ export { buildQueryFields, updateListFilters, getKeywordSearchFilters, findSelectFilters, findMultiSelectFilters, getTidyLabel };
96
127
  //# sourceMappingURL=helpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","names":["DEFAULT_FILTER_OPTION_LABEL","updateListFilters","searchTerm","selectedFilters","setListFilters","fields","filters","push","simple_query_string","query","default_operator","map","field","Object","entries","forEach","filterKey","filterValue","match","getKeywordSearchFilters","schema","properties","dynamicProperties","propertyKeyword","filter","isFilterKeywordItem","dynamicPropertyKeywords","item","adminListingOptions","includeInKeywordSeach","findSelectFilters","propertySelects","isFilterSelectItem","dynamicPropertySelects","filterType","buildQueryFields","selectFilters","entityId","Array","isArray","length","gqlFields","rawQuery","aggs","property","details","terms","size","order","_key","docType","rawQueryObject","bool","must","JSON","stringify"],"sources":["../../../../src/components/ListingTable/SearchFilter/helpers.js"],"sourcesContent":["import { DEFAULT_FILTER_OPTION_LABEL } from '../../../constants';\n\nconst updateListFilters = (searchTerm, selectedFilters, setListFilters, fields = []) => {\n const filters = [];\n\n if (searchTerm) {\n filters.push({\n simple_query_string: {\n query: `${searchTerm}`,\n default_operator: 'AND',\n fields: fields.map(field => field)\n }\n });\n }\n\n Object.entries(selectedFilters).forEach(([filterKey, filterValue]) => {\n if (!filterValue || filterValue === DEFAULT_FILTER_OPTION_LABEL) return;\n filters.push({\n match: {\n [`${filterKey}.keyword`]: {\n query: filterValue\n }\n }\n });\n });\n\n setListFilters(filters);\n};\n\nconst getKeywordSearchFilters = schema => {\n if (!schema || !schema.properties) return [];\n\n const { properties = {}, dynamicProperties = {} } = schema;\n\n const propertyKeyword = Object.entries(properties).filter(isFilterKeywordItem);\n const dynamicPropertyKeywords = Object.entries(dynamicProperties).filter(isFilterKeywordItem);\n\n return [...propertyKeyword, ...dynamicPropertyKeywords];\n};\n\nconst isFilterKeywordItem = ([, item]) =>\n item.adminListingOptions && item.adminListingOptions.includeInKeywordSeach === true;\n\nconst findSelectFilters = schema => {\n if (!schema || !schema.properties) return [];\n\n const { properties = {}, dynamicProperties = {} } = schema;\n\n const propertySelects = Object.entries(properties).filter(isFilterSelectItem);\n const dynamicPropertySelects = Object.entries(dynamicProperties).filter(isFilterSelectItem);\n\n return [...propertySelects, ...dynamicPropertySelects];\n};\n\nconst isFilterSelectItem = ([, item]) =>\n item.adminListingOptions && item.adminListingOptions.filterType === 'select';\n\nconst buildQueryFields = (selectFilters, entityId) => {\n if (!Array.isArray(selectFilters) || selectFilters.length === 0) {\n return { gqlFields: '', rawQuery: '{}' };\n }\n\n const aggs = {};\n selectFilters.forEach(([property, details]) => {\n aggs[property] = {\n terms: {\n field: `${property}.keyword`, // todo: handle different field types\n size: 1000, // todo: customise size\n order: {\n _key: 'asc'\n }\n }\n };\n });\n\n const docType = entityId;\n const rawQueryObject = {\n size: 0,\n query: {\n bool: {\n filter: {\n bool: {\n must: [{ match: { docType } }]\n }\n }\n }\n },\n aggs\n };\n const rawQuery = JSON.stringify(rawQueryObject);\n\n const gqlFields = `\n rawResults\n `;\n\n return { gqlFields, rawQuery };\n};\n\nexport { buildQueryFields, updateListFilters, getKeywordSearchFilters, findSelectFilters };\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"helpers.js","names":["DEFAULT_FILTER_OPTION_LABEL","updateListFilters","searchTerm","selectedFilters","setListFilters","fields","filters","push","simple_query_string","query","default_operator","map","field","Object","entries","forEach","filterKey","filterValue","isEmptyArray","Array","isArray","length","terms","term","getKeywordSearchFilters","schema","properties","dynamicProperties","propertyKeyword","filter","isFilterKeywordItem","dynamicPropertyKeywords","item","adminListingOptions","includeInKeywordSeach","findSelectFilters","propertySelects","isFilterSelectItem","dynamicPropertySelects","findMultiSelectFilters","propertyMultiSelect","isFilterMultiSelectItems","dynamicPropertyMultiSelect","filterType","buildQueryFields","selectFilters","entityId","gqlFields","rawQuery","aggs","property","details","size","order","_key","docType","rawQueryObject","bool","must","match","JSON","stringify","getTidyLabel","value","tidy","split","word","charAt","toUpperCase","slice","join"],"sources":["../../../../src/components/ListingTable/SearchFilter/helpers.js"],"sourcesContent":["import { DEFAULT_FILTER_OPTION_LABEL } from '../../../constants';\n\nconst updateListFilters = (searchTerm, selectedFilters, setListFilters, fields = []) => {\n const filters = [];\n\n if (searchTerm) {\n filters.push({\n simple_query_string: {\n query: `${searchTerm}`,\n default_operator: 'AND',\n fields: fields.map(field => field)\n }\n });\n }\n\n Object.entries(selectedFilters).forEach(([filterKey, filterValue]) => {\n const isEmptyArray = Array.isArray(filterValue) && filterValue.length === 0;\n if (\n filterValue == null ||\n filterValue === '' ||\n filterValue === DEFAULT_FILTER_OPTION_LABEL ||\n isEmptyArray\n )\n return;\n\n const field = `${filterKey}.keyword`;\n\n if (Array.isArray(filterValue)) {\n if (filterValue.length > 1) {\n filters.push({\n terms: { [field]: filterValue }\n });\n } else {\n filters.push({\n term: { [field]: filterValue[0] }\n });\n }\n } else {\n filters.push({\n term: { [field]: filterValue }\n });\n }\n });\n\n setListFilters(filters);\n};\n\nconst getKeywordSearchFilters = schema => {\n if (!schema || !schema.properties) return [];\n\n const { properties = {}, dynamicProperties = {} } = schema;\n\n const propertyKeyword = Object.entries(properties).filter(isFilterKeywordItem);\n const dynamicPropertyKeywords = Object.entries(dynamicProperties).filter(isFilterKeywordItem);\n\n return [...propertyKeyword, ...dynamicPropertyKeywords];\n};\n\nconst isFilterKeywordItem = ([, item]) =>\n item.adminListingOptions && item.adminListingOptions.includeInKeywordSeach === true;\n\nconst findSelectFilters = schema => {\n if (!schema || !schema.properties) return [];\n\n const { properties = {}, dynamicProperties = {} } = schema;\n\n const propertySelects = Object.entries(properties).filter(isFilterSelectItem);\n const dynamicPropertySelects = Object.entries(dynamicProperties).filter(isFilterSelectItem);\n\n return [...propertySelects, ...dynamicPropertySelects];\n};\n\nconst findMultiSelectFilters = schema => {\n if (!schema || !schema.properties) return [];\n\n const { properties = {}, dynamicProperties = {} } = schema;\n const propertyMultiSelect = Object.entries(properties).filter(isFilterMultiSelectItems);\n const dynamicPropertyMultiSelect = Object.entries(dynamicProperties).filter(\n isFilterMultiSelectItems\n );\n return [...propertyMultiSelect, ...dynamicPropertyMultiSelect];\n};\n\nconst isFilterSelectItem = ([, item]) =>\n item.adminListingOptions && item.adminListingOptions.filterType === 'select';\n\nconst isFilterMultiSelectItems = ([, item]) =>\n item.adminListingOptions && item.adminListingOptions.filterType === 'multiSelect';\n\nconst buildQueryFields = (selectFilters, entityId) => {\n if (!Array.isArray(selectFilters) || selectFilters.length === 0) {\n return { gqlFields: '', rawQuery: '{}' };\n }\n\n const aggs = {};\n selectFilters.forEach(([property, details]) => {\n aggs[property] = {\n terms: {\n field: `${property}.keyword`, // todo: handle different field types\n size: 1000, // todo: customise size\n order: {\n _key: 'asc'\n }\n }\n };\n });\n\n const docType = entityId;\n const rawQueryObject = {\n size: 0,\n query: {\n bool: {\n filter: {\n bool: {\n must: [{ match: { docType } }]\n }\n }\n }\n },\n aggs\n };\n const rawQuery = JSON.stringify(rawQueryObject);\n\n const gqlFields = `\n rawResults\n `;\n\n return { gqlFields, rawQuery };\n};\n\nconst getTidyLabel = (value, tidy) => {\n if (!tidy) return value;\n\n return value\n .split(/[\\s_-]+/)\n .map(word => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ');\n};\n\nexport {\n buildQueryFields,\n updateListFilters,\n getKeywordSearchFilters,\n findSelectFilters,\n findMultiSelectFilters,\n getTidyLabel\n};\n"],"mappings":"AAAA,SAASA,2BAA2B,QAAQ,oBAAoB;AAEhE,MAAMC,iBAAiB,GAAGA,CAACC,UAAU,EAAEC,eAAe,EAAEC,cAAc,EAAEC,MAAM,GAAG,EAAE,KAAK;EACtF,MAAMC,OAAO,GAAG,EAAE;EAElB,IAAIJ,UAAU,EAAE;IACdI,OAAO,CAACC,IAAI,CAAC;MACXC,mBAAmB,EAAE;QACnBC,KAAK,EAAE,GAAGP,UAAU,EAAE;QACtBQ,gBAAgB,EAAE,KAAK;QACvBL,MAAM,EAAEA,MAAM,CAACM,GAAG,CAACC,KAAK,IAAIA,KAAK;MACnC;IACF,CAAC,CAAC;EACJ;EAEAC,MAAM,CAACC,OAAO,CAACX,eAAe,CAAC,CAACY,OAAO,CAAC,CAAC,CAACC,SAAS,EAAEC,WAAW,CAAC,KAAK;IACpE,MAAMC,YAAY,GAAGC,KAAK,CAACC,OAAO,CAACH,WAAW,CAAC,IAAIA,WAAW,CAACI,MAAM,KAAK,CAAC;IAC3E,IACEJ,WAAW,IAAI,IAAI,IACnBA,WAAW,KAAK,EAAE,IAClBA,WAAW,KAAKjB,2BAA2B,IAC3CkB,YAAY,EAEZ;IAEF,MAAMN,KAAK,GAAG,GAAGI,SAAS,UAAU;IAEpC,IAAIG,KAAK,CAACC,OAAO,CAACH,WAAW,CAAC,EAAE;MAC9B,IAAIA,WAAW,CAACI,MAAM,GAAG,CAAC,EAAE;QAC1Bf,OAAO,CAACC,IAAI,CAAC;UACXe,KAAK,EAAE;YAAE,CAACV,KAAK,GAAGK;UAAY;QAChC,CAAC,CAAC;MACJ,CAAC,MAAM;QACLX,OAAO,CAACC,IAAI,CAAC;UACXgB,IAAI,EAAE;YAAE,CAACX,KAAK,GAAGK,WAAW,CAAC,CAAC;UAAE;QAClC,CAAC,CAAC;MACJ;IACF,CAAC,MAAM;MACLX,OAAO,CAACC,IAAI,CAAC;QACXgB,IAAI,EAAE;UAAE,CAACX,KAAK,GAAGK;QAAY;MAC/B,CAAC,CAAC;IACJ;EACF,CAAC,CAAC;EAEFb,cAAc,CAACE,OAAO,CAAC;AACzB,CAAC;AAED,MAAMkB,uBAAuB,GAAGC,MAAM,IAAI;EACxC,IAAI,CAACA,MAAM,IAAI,CAACA,MAAM,CAACC,UAAU,EAAE,OAAO,EAAE;EAE5C,MAAM;IAAEA,UAAU,GAAG,CAAC,CAAC;IAAEC,iBAAiB,GAAG,CAAC;EAAE,CAAC,GAAGF,MAAM;EAE1D,MAAMG,eAAe,GAAGf,MAAM,CAACC,OAAO,CAACY,UAAU,CAAC,CAACG,MAAM,CAACC,mBAAmB,CAAC;EAC9E,MAAMC,uBAAuB,GAAGlB,MAAM,CAACC,OAAO,CAACa,iBAAiB,CAAC,CAACE,MAAM,CAACC,mBAAmB,CAAC;EAE7F,OAAO,CAAC,GAAGF,eAAe,EAAE,GAAGG,uBAAuB,CAAC;AACzD,CAAC;AAED,MAAMD,mBAAmB,GAAGA,CAAC,GAAGE,IAAI,CAAC,KACnCA,IAAI,CAACC,mBAAmB,IAAID,IAAI,CAACC,mBAAmB,CAACC,qBAAqB,KAAK,IAAI;AAErF,MAAMC,iBAAiB,GAAGV,MAAM,IAAI;EAClC,IAAI,CAACA,MAAM,IAAI,CAACA,MAAM,CAACC,UAAU,EAAE,OAAO,EAAE;EAE5C,MAAM;IAAEA,UAAU,GAAG,CAAC,CAAC;IAAEC,iBAAiB,GAAG,CAAC;EAAE,CAAC,GAAGF,MAAM;EAE1D,MAAMW,eAAe,GAAGvB,MAAM,CAACC,OAAO,CAACY,UAAU,CAAC,CAACG,MAAM,CAACQ,kBAAkB,CAAC;EAC7E,MAAMC,sBAAsB,GAAGzB,MAAM,CAACC,OAAO,CAACa,iBAAiB,CAAC,CAACE,MAAM,CAACQ,kBAAkB,CAAC;EAE3F,OAAO,CAAC,GAAGD,eAAe,EAAE,GAAGE,sBAAsB,CAAC;AACxD,CAAC;AAED,MAAMC,sBAAsB,GAAGd,MAAM,IAAI;EACvC,IAAI,CAACA,MAAM,IAAI,CAACA,MAAM,CAACC,UAAU,EAAE,OAAO,EAAE;EAE5C,MAAM;IAAEA,UAAU,GAAG,CAAC,CAAC;IAAEC,iBAAiB,GAAG,CAAC;EAAE,CAAC,GAAGF,MAAM;EAC1D,MAAMe,mBAAmB,GAAG3B,MAAM,CAACC,OAAO,CAACY,UAAU,CAAC,CAACG,MAAM,CAACY,wBAAwB,CAAC;EACvF,MAAMC,0BAA0B,GAAG7B,MAAM,CAACC,OAAO,CAACa,iBAAiB,CAAC,CAACE,MAAM,CACzEY,wBACF,CAAC;EACD,OAAO,CAAC,GAAGD,mBAAmB,EAAE,GAAGE,0BAA0B,CAAC;AAChE,CAAC;AAED,MAAML,kBAAkB,GAAGA,CAAC,GAAGL,IAAI,CAAC,KAClCA,IAAI,CAACC,mBAAmB,IAAID,IAAI,CAACC,mBAAmB,CAACU,UAAU,KAAK,QAAQ;AAE9E,MAAMF,wBAAwB,GAAGA,CAAC,GAAGT,IAAI,CAAC,KACxCA,IAAI,CAACC,mBAAmB,IAAID,IAAI,CAACC,mBAAmB,CAACU,UAAU,KAAK,aAAa;AAEnF,MAAMC,gBAAgB,GAAGA,CAACC,aAAa,EAAEC,QAAQ,KAAK;EACpD,IAAI,CAAC3B,KAAK,CAACC,OAAO,CAACyB,aAAa,CAAC,IAAIA,aAAa,CAACxB,MAAM,KAAK,CAAC,EAAE;IAC/D,OAAO;MAAE0B,SAAS,EAAE,EAAE;MAAEC,QAAQ,EAAE;IAAK,CAAC;EAC1C;EAEA,MAAMC,IAAI,GAAG,CAAC,CAAC;EACfJ,aAAa,CAAC9B,OAAO,CAAC,CAAC,CAACmC,QAAQ,EAAEC,OAAO,CAAC,KAAK;IAC7CF,IAAI,CAACC,QAAQ,CAAC,GAAG;MACf5B,KAAK,EAAE;QACLV,KAAK,EAAE,GAAGsC,QAAQ,UAAU;QAAE;QAC9BE,IAAI,EAAE,IAAI;QAAE;QACZC,KAAK,EAAE;UACLC,IAAI,EAAE;QACR;MACF;IACF,CAAC;EACH,CAAC,CAAC;EAEF,MAAMC,OAAO,GAAGT,QAAQ;EACxB,MAAMU,cAAc,GAAG;IACrBJ,IAAI,EAAE,CAAC;IACP3C,KAAK,EAAE;MACLgD,IAAI,EAAE;QACJ5B,MAAM,EAAE;UACN4B,IAAI,EAAE;YACJC,IAAI,EAAE,CAAC;cAAEC,KAAK,EAAE;gBAAEJ;cAAQ;YAAE,CAAC;UAC/B;QACF;MACF;IACF,CAAC;IACDN;EACF,CAAC;EACD,MAAMD,QAAQ,GAAGY,IAAI,CAACC,SAAS,CAACL,cAAc,CAAC;EAE/C,MAAMT,SAAS,GAAG;AACpB;AACA,GAAG;EAED,OAAO;IAAEA,SAAS;IAAEC;EAAS,CAAC;AAChC,CAAC;AAED,MAAMc,YAAY,GAAGA,CAACC,KAAK,EAAEC,IAAI,KAAK;EACpC,IAAI,CAACA,IAAI,EAAE,OAAOD,KAAK;EAEvB,OAAOA,KAAK,CACTE,KAAK,CAAC,SAAS,CAAC,CAChBtD,GAAG,CAACuD,IAAI,IAAIA,IAAI,CAACC,MAAM,CAAC,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC,GAAGF,IAAI,CAACG,KAAK,CAAC,CAAC,CAAC,CAAC,CACzDC,IAAI,CAAC,GAAG,CAAC;AACd,CAAC;AAED,SACE1B,gBAAgB,EAChB3C,iBAAiB,EACjBuB,uBAAuB,EACvBW,iBAAiB,EACjBI,sBAAsB,EACtBuB,YAAY","ignoreList":[]}
package/lib-es/index.js CHANGED
@@ -14,6 +14,7 @@ import EntityManager from './components/EntityManager';
14
14
  // () => import(/* webpackChunkName: 'EntityManager' */ './components/EntityManager')
15
15
  // );
16
16
 
17
+ export { default as SearchFilter } from './components/ListingTable/SearchFilter/SearchFilter';
17
18
  export default async function load(app) {
18
19
  app.events.once('admin:menu:config:load', getAddContentMenuItems(app));
19
20
  app.events.once('load:custom:field:type', addFieldType => {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["getFormBuilderLookup","formFieldTypes","pkg","DATA_LISTING_PREFIX","PLUGIN_NAME","getAddContentMenuItems","UserIcon","TaxonomyIcon","ContentIcon","SettingsIcon","EntityDataListing","EntityManager","load","app","events","once","addFieldType","Object","keys","forEach","type","component","emitAsync","addConfig","main","items","content","label","loadOpen","icon","order","taxonomy","user","settings","entityDataListingRoute","path","key","exact","editEntityRoute","addEntityRoute","addRoute","name","version","pluginName"],"sources":["../src/index.js"],"sourcesContent":["import { getFormBuilderLookup, formFieldTypes } from '@blaze-cms/react-form-builder';\nimport pkg from '../package.json';\nimport { DATA_LISTING_PREFIX, PLUGIN_NAME } from './constants';\nimport getAddContentMenuItems from './utils/add-content-menu-items';\nimport { UserIcon, TaxonomyIcon, ContentIcon, SettingsIcon } from './icons';\nimport EntityDataListing from './components/EntityDataListing';\nimport EntityManager from './components/EntityManager';\n\n// todo: renable lazy loading after bundler optimisations, currently they are too slow in dev mode\n// const EntityDataListing = React.lazy(\n// () => import(/* webpackChunkName: 'EntityDataListing' */ './components/EntityDataListing')\n// );\n// const EntityManager = React.lazy(\n// () => import(/* webpackChunkName: 'EntityManager' */ './components/EntityManager')\n// );\n\nexport default async function load(app) {\n app.events.once('admin:menu:config:load', getAddContentMenuItems(app));\n\n app.events.once('load:custom:field:type', addFieldType => {\n Object.keys(formFieldTypes).forEach(type => {\n addFieldType({ type, component: formFieldTypes[type] });\n });\n });\n\n app.events.once('plugin:data-ui:load:loaded', async () => {\n await app.events.emitAsync('load:custom:field:type', getFormBuilderLookup.addFieldType);\n });\n\n app.events.once('admin:menu:config:load', ({ addConfig }) => {\n addConfig({\n main: {\n items: {\n content: {\n label: 'content',\n loadOpen: true,\n items: {},\n icon: ContentIcon,\n order: 10\n },\n taxonomy: {\n label: 'Taxonomy',\n items: {},\n icon: TaxonomyIcon,\n order: 40\n },\n user: {\n label: 'User',\n items: {},\n icon: UserIcon,\n order: 90\n },\n settings: {\n label: 'Settings',\n items: {},\n icon: SettingsIcon,\n order: 100\n }\n }\n }\n });\n });\n\n const entityDataListingRoute = {\n path: `${DATA_LISTING_PREFIX}/:entityIdentifier`,\n key: 'entityDataListing',\n component: EntityDataListing,\n exact: true\n };\n\n const editEntityRoute = {\n path: `${DATA_LISTING_PREFIX}/:entityIdentifier/:action/:id`,\n key: 'editEntity',\n component: EntityManager,\n exact: true\n };\n\n const addEntityRoute = {\n path: `${DATA_LISTING_PREFIX}/:entityIdentifier/:action`,\n key: 'createEntity',\n component: EntityManager,\n exact: true\n };\n\n app.addRoute(entityDataListingRoute);\n app.addRoute(editEntityRoute);\n app.addRoute(addEntityRoute);\n\n return {\n name: PLUGIN_NAME,\n version: pkg.version\n };\n}\n\nload.pluginName = PLUGIN_NAME;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["getFormBuilderLookup","formFieldTypes","pkg","DATA_LISTING_PREFIX","PLUGIN_NAME","getAddContentMenuItems","UserIcon","TaxonomyIcon","ContentIcon","SettingsIcon","EntityDataListing","EntityManager","default","SearchFilter","load","app","events","once","addFieldType","Object","keys","forEach","type","component","emitAsync","addConfig","main","items","content","label","loadOpen","icon","order","taxonomy","user","settings","entityDataListingRoute","path","key","exact","editEntityRoute","addEntityRoute","addRoute","name","version","pluginName"],"sources":["../src/index.js"],"sourcesContent":["import { getFormBuilderLookup, formFieldTypes } from '@blaze-cms/react-form-builder';\nimport pkg from '../package.json';\nimport { DATA_LISTING_PREFIX, PLUGIN_NAME } from './constants';\nimport getAddContentMenuItems from './utils/add-content-menu-items';\nimport { UserIcon, TaxonomyIcon, ContentIcon, SettingsIcon } from './icons';\nimport EntityDataListing from './components/EntityDataListing';\nimport EntityManager from './components/EntityManager';\n\n// todo: renable lazy loading after bundler optimisations, currently they are too slow in dev mode\n// const EntityDataListing = React.lazy(\n// () => import(/* webpackChunkName: 'EntityDataListing' */ './components/EntityDataListing')\n// );\n// const EntityManager = React.lazy(\n// () => import(/* webpackChunkName: 'EntityManager' */ './components/EntityManager')\n// );\n\nexport { default as SearchFilter } from './components/ListingTable/SearchFilter/SearchFilter';\n\nexport default async function load(app) {\n app.events.once('admin:menu:config:load', getAddContentMenuItems(app));\n\n app.events.once('load:custom:field:type', addFieldType => {\n Object.keys(formFieldTypes).forEach(type => {\n addFieldType({ type, component: formFieldTypes[type] });\n });\n });\n\n app.events.once('plugin:data-ui:load:loaded', async () => {\n await app.events.emitAsync('load:custom:field:type', getFormBuilderLookup.addFieldType);\n });\n\n app.events.once('admin:menu:config:load', ({ addConfig }) => {\n addConfig({\n main: {\n items: {\n content: {\n label: 'content',\n loadOpen: true,\n items: {},\n icon: ContentIcon,\n order: 10\n },\n taxonomy: {\n label: 'Taxonomy',\n items: {},\n icon: TaxonomyIcon,\n order: 40\n },\n user: {\n label: 'User',\n items: {},\n icon: UserIcon,\n order: 90\n },\n settings: {\n label: 'Settings',\n items: {},\n icon: SettingsIcon,\n order: 100\n }\n }\n }\n });\n });\n\n const entityDataListingRoute = {\n path: `${DATA_LISTING_PREFIX}/:entityIdentifier`,\n key: 'entityDataListing',\n component: EntityDataListing,\n exact: true\n };\n\n const editEntityRoute = {\n path: `${DATA_LISTING_PREFIX}/:entityIdentifier/:action/:id`,\n key: 'editEntity',\n component: EntityManager,\n exact: true\n };\n\n const addEntityRoute = {\n path: `${DATA_LISTING_PREFIX}/:entityIdentifier/:action`,\n key: 'createEntity',\n component: EntityManager,\n exact: true\n };\n\n app.addRoute(entityDataListingRoute);\n app.addRoute(editEntityRoute);\n app.addRoute(addEntityRoute);\n\n return {\n name: PLUGIN_NAME,\n version: pkg.version\n };\n}\n\nload.pluginName = PLUGIN_NAME;\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blaze-cms/plugin-data-ui",
3
- "version": "0.147.0-rc-eagle.2",
3
+ "version": "0.147.0-rc-eagle.4",
4
4
  "description": "Blaze plugin data ui",
5
5
  "main": "lib/index.js",
6
6
  "module": "lib-es/index.js",
@@ -32,16 +32,16 @@
32
32
  },
33
33
  "license": "GPL-3.0",
34
34
  "dependencies": {
35
- "@blaze-cms/admin-ui-utils": "0.147.0-rc-eagle.2",
36
- "@blaze-cms/core-errors": "0.147.0-rc-eagle.2",
37
- "@blaze-cms/plugin-render-hooks-ui": "0.147.0-rc-eagle.2",
38
- "@blaze-cms/react-form-builder": "0.147.0-rc-eagle.2",
39
- "@blaze-cms/react-page-builder": "0.147.0-rc-eagle.2",
40
- "@blaze-cms/setup-ui": "0.147.0-rc-eagle.2",
41
- "@blaze-cms/versioning-ui": "0.147.0-rc-eagle.2",
35
+ "@blaze-cms/admin-ui-utils": "0.147.0-rc-eagle.4",
36
+ "@blaze-cms/core-errors": "0.147.0-rc-eagle.4",
37
+ "@blaze-cms/plugin-render-hooks-ui": "0.147.0-rc-eagle.4",
38
+ "@blaze-cms/react-form-builder": "0.147.0-rc-eagle.4",
39
+ "@blaze-cms/react-page-builder": "0.147.0-rc-eagle.4",
40
+ "@blaze-cms/setup-ui": "0.147.0-rc-eagle.4",
41
+ "@blaze-cms/versioning-ui": "0.147.0-rc-eagle.4",
42
42
  "@blaze-react/button": "0.8.0-alpha.82",
43
43
  "@blaze-react/more": "0.5.19",
44
- "@blaze-react/multiselect": "0.8.0-alpha.103",
44
+ "@blaze-react/multiselect": "0.8.0-alpha.108",
45
45
  "@blaze-react/pagination": "0.8.0-alpha.76",
46
46
  "@blaze-react/select": "0.8.0-alpha.100",
47
47
  "@blaze-react/tab": "^0.7.0",
@@ -61,7 +61,7 @@
61
61
  "uuid": "^3.3.3"
62
62
  },
63
63
  "devDependencies": {
64
- "@blaze-cms/core-ui": "0.147.0-rc-eagle.2"
64
+ "@blaze-cms/core-ui": "0.147.0-rc-eagle.4"
65
65
  },
66
66
  "peerDependencies": {
67
67
  "@apollo/client": "3.x",
@@ -73,5 +73,5 @@
73
73
  "lib/*",
74
74
  "lib-es/*"
75
75
  ],
76
- "gitHead": "156a1560d7bc2bbd57b5b51fdf11098349bb26f5"
76
+ "gitHead": "ddfab9ac3d59438939268c106917b092e4071071"
77
77
  }
@@ -10,6 +10,7 @@ import { DeleteAction, CopyDataFromAction } from '@blaze-cms/admin';
10
10
  import { useToasts } from '@blaze-react/toaster';
11
11
  import cloneDeep from 'lodash.clonedeep';
12
12
  import { getPageName } from '../utils/data-mappers';
13
+ import isFormEmpty from '../utils/is-form-empty';
13
14
  import availableActions from './actions-handlers';
14
15
  import SideBarRelations from './SideBarRelations';
15
16
  import useCallbackDebounce from '../../hooks/useCallbackDebounce';
@@ -69,7 +70,6 @@ const Entity = ({
69
70
  const [newUpdatedDate, setNewUpdatedDate] = useState(null);
70
71
  const [saveButtonText, setSaveButtonText] = useState(SAVE_BUTTON_TEXTS.save);
71
72
  const [externalUpdateTime, setExternalUpdateTime] = useState(null);
72
- const [suppressPrompt, setSuppressPrompt] = useState(false);
73
73
  const [isRightSidebarOpen, setIsRightSidebarOpen] = useState(true);
74
74
  const handleToggleRightSidebar = () => setIsRightSidebarOpen(!isRightSidebarOpen);
75
75
 
@@ -249,12 +249,13 @@ const Entity = ({
249
249
  const [updatedEntity = null] = fields.filter(({ id }) => id === 'name');
250
250
  updatedEntity && setPageTitle(updatedEntity.value);
251
251
 
252
+ const isValidAndNewValueSet = isValid && isNewValueSet;
252
253
  const isNotValidOrNotNewValueSet = !isValid || !isNewValueSet;
253
254
  if (componentIsMounted.current) {
254
255
  setIsFormValid(isValid);
255
256
  }
256
257
 
257
- if (isValid && isNewValueSet && componentIsMounted.current) {
258
+ if (isValidAndNewValueSet && componentIsMounted.current) {
258
259
  setIsSaveButtonAvailable(true);
259
260
  setSaveButtonText(SAVE_BUTTON_TEXTS.save);
260
261
  }
@@ -270,12 +271,10 @@ const Entity = ({
270
271
 
271
272
  const onSubmit = event => {
272
273
  event && event.preventDefault();
273
- if (!isSaveButtonAvailable) return null;
274
274
 
275
- if (isCreatePage) {
276
- setSuppressPrompt(true);
277
- }
275
+ if (!isSaveButtonAvailable) return null;
278
276
  const parsedFormValues = parseFormValues(formValues);
277
+
279
278
  const updatedFormValues = newUpdatedDate
280
279
  ? { ...formData.values, update: newUpdatedDate }
281
280
  : { ...formData.values };
@@ -413,7 +412,8 @@ const Entity = ({
413
412
 
414
413
  const pageName = formData && formData.values && formData.values.name;
415
414
 
416
- const hasToDisplayPrompt = isSaveButtonAvailable && !suppressPrompt;
415
+ const hasNewFormValues = checkFulfilConditions(isNewEntity, !isFormEmpty(formValues));
416
+ const hasToDisplayPrompt = isSaveButtonAvailable || hasNewFormValues;
417
417
 
418
418
  const showSideBarRelations = checkFulfilConditions(schema, formData);
419
419
 
@@ -457,7 +457,8 @@ const Entity = ({
457
457
  )}
458
458
 
459
459
  <div
460
- className={`page__content${!isRightSidebarOpen ? ' right-sidebar-collapsed' : ''}`}>
460
+ className={`page__content--fixed${!isRightSidebarOpen ? ' right-sidebar-collapsed' : ''
461
+ }`}>
461
462
  <div className="page__content">
462
463
  <div className="content">
463
464
  <RenderHook
@@ -490,9 +491,8 @@ const Entity = ({
490
491
  </div>
491
492
 
492
493
  <div
493
- className={`column column--one-third page-sidebar page-sidebar--relations${
494
- !isRightSidebarOpen ? ' sidebar--collapsed' : ''
495
- }`}>
494
+ className={`column column--one-third page-sidebar page-sidebar--relations${!isRightSidebarOpen ? ' sidebar--collapsed' : ''
495
+ }`}>
496
496
  {showSideBarRelations && (
497
497
  <SideBarRelations
498
498
  entity={entity}