@webiny/app-record-locking 5.43.2 → 6.0.0-alpha.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.
Files changed (88) hide show
  1. package/components/HeadlessCmsActionsAcoCell.js +46 -57
  2. package/components/HeadlessCmsActionsAcoCell.js.map +1 -1
  3. package/components/HeadlessCmsContentEntry/ContentEntryGuard.js +22 -29
  4. package/components/HeadlessCmsContentEntry/ContentEntryGuard.js.map +1 -1
  5. package/components/HeadlessCmsContentEntry/ContentEntryLocker.js +43 -60
  6. package/components/HeadlessCmsContentEntry/ContentEntryLocker.js.map +1 -1
  7. package/components/HeadlessCmsContentEntry/HeadlessCmsContentEntry.js +54 -67
  8. package/components/HeadlessCmsContentEntry/HeadlessCmsContentEntry.js.map +1 -1
  9. package/components/HeadlessCmsContentEntry/index.js +1 -16
  10. package/components/HeadlessCmsContentEntry/index.js.map +1 -1
  11. package/components/LockedRecord/LockedRecord.js +49 -144
  12. package/components/LockedRecord/LockedRecord.js.map +1 -1
  13. package/components/LockedRecord/LockedRecordForceUnlock.js +51 -93
  14. package/components/LockedRecord/LockedRecordForceUnlock.js.map +1 -1
  15. package/components/LockedRecord/index.js +1 -16
  16. package/components/LockedRecord/index.js.map +1 -1
  17. package/components/RecordLockingProvider.js +47 -67
  18. package/components/RecordLockingProvider.js.map +1 -1
  19. package/components/decorators/UseContentEntriesListHookDecorator.js +10 -17
  20. package/components/decorators/UseContentEntriesListHookDecorator.js.map +1 -1
  21. package/components/decorators/UseRecordsDecorator.js +11 -16
  22. package/components/decorators/UseRecordsDecorator.js.map +1 -1
  23. package/components/decorators/UseSaveEntryDecorator.js +34 -32
  24. package/components/decorators/UseSaveEntryDecorator.js.map +1 -1
  25. package/components/permissionRenderer/RecordLockingPermissions.js +39 -53
  26. package/components/permissionRenderer/RecordLockingPermissions.js.map +1 -1
  27. package/components/permissionRenderer/index.js +13 -17
  28. package/components/permissionRenderer/index.js.map +1 -1
  29. package/domain/RecordLocking.js +271 -311
  30. package/domain/RecordLocking.js.map +1 -1
  31. package/domain/RecordLockingClient.js +15 -29
  32. package/domain/RecordLockingClient.js.map +1 -1
  33. package/domain/RecordLockingGetLockRecord.js +16 -29
  34. package/domain/RecordLockingGetLockRecord.js.map +1 -1
  35. package/domain/RecordLockingGetLockedEntryLockRecord.js +14 -27
  36. package/domain/RecordLockingGetLockedEntryLockRecord.js.map +1 -1
  37. package/domain/RecordLockingIsEntryLocked.js +14 -27
  38. package/domain/RecordLockingIsEntryLocked.js.map +1 -1
  39. package/domain/RecordLockingListLockRecords.js +26 -37
  40. package/domain/RecordLockingListLockRecords.js.map +1 -1
  41. package/domain/RecordLockingLockEntry.js +9 -22
  42. package/domain/RecordLockingLockEntry.js.map +1 -1
  43. package/domain/RecordLockingUnlockEntry.js +14 -27
  44. package/domain/RecordLockingUnlockEntry.js.map +1 -1
  45. package/domain/RecordLockingUpdateEntryLock.js +14 -27
  46. package/domain/RecordLockingUpdateEntryLock.js.map +1 -1
  47. package/domain/abstractions/IRecordLocking.js +1 -5
  48. package/domain/abstractions/IRecordLockingClient.js +1 -5
  49. package/domain/abstractions/IRecordLockingGetLockRecord.js +1 -5
  50. package/domain/abstractions/IRecordLockingGetLockedEntryLockRecord.js +1 -5
  51. package/domain/abstractions/IRecordLockingIsEntryLocked.js +1 -5
  52. package/domain/abstractions/IRecordLockingListLockRecords.js +1 -5
  53. package/domain/abstractions/IRecordLockingLockEntry.js +1 -5
  54. package/domain/abstractions/IRecordLockingUnlockEntry.js +1 -5
  55. package/domain/abstractions/IRecordLockingUpdateEntryLock.js +1 -5
  56. package/domain/graphql/fields.js +28 -8
  57. package/domain/graphql/fields.js.map +1 -1
  58. package/domain/graphql/getLockRecord.js +16 -12
  59. package/domain/graphql/getLockRecord.js.map +1 -1
  60. package/domain/graphql/getLockedEntryLockRecord.js +16 -12
  61. package/domain/graphql/getLockedEntryLockRecord.js.map +1 -1
  62. package/domain/graphql/isEntryLocked.js +14 -12
  63. package/domain/graphql/isEntryLocked.js.map +1 -1
  64. package/domain/graphql/listLockRecords.js +23 -14
  65. package/domain/graphql/listLockRecords.js.map +1 -1
  66. package/domain/graphql/lockEntry.js +17 -13
  67. package/domain/graphql/lockEntry.js.map +1 -1
  68. package/domain/graphql/unlockEntry.js +16 -12
  69. package/domain/graphql/unlockEntry.js.map +1 -1
  70. package/domain/graphql/updateEntryLock.js +16 -12
  71. package/domain/graphql/updateEntryLock.js.map +1 -1
  72. package/domain/utils/createRecordLockingClient.js +6 -12
  73. package/domain/utils/createRecordLockingClient.js.map +1 -1
  74. package/domain/utils/createRecordLockingError.js +1 -7
  75. package/domain/utils/createRecordLockingError.js.map +1 -1
  76. package/hooks/index.js +2 -27
  77. package/hooks/index.js.map +1 -1
  78. package/hooks/usePermission.js +11 -16
  79. package/hooks/usePermission.js.map +1 -1
  80. package/hooks/useRecordLocking.js +6 -12
  81. package/hooks/useRecordLocking.js.map +1 -1
  82. package/index.js +20 -50
  83. package/index.js.map +1 -1
  84. package/package.json +17 -18
  85. package/types.js +1 -5
  86. package/utils/createCacheKey.js +5 -11
  87. package/utils/createCacheKey.js.map +1 -1
  88. package/components/assets/lock.svg +0 -13
@@ -1 +1 @@
1
- {"version":3,"names":["_react","require","_appHeadlessCms","_hooks","UseContentEntriesListHookDecorator","exports","ContentEntryListConfig","ContentEntries","useContentEntriesList","createDecorator","originalHook","RecordLockingUseContentEntriesList","value","recordLocking","useRecordLocking","useEffect","records","setRecords","folderId","modelId","_objectSpread2","default"],"sources":["UseContentEntriesListHookDecorator.ts"],"sourcesContent":["import { useEffect } from \"react\";\nimport { ContentEntryListConfig } from \"@webiny/app-headless-cms\";\nimport { useRecordLocking } from \"~/hooks\";\n\nexport const UseContentEntriesListHookDecorator =\n ContentEntryListConfig.ContentEntries.useContentEntriesList.createDecorator(originalHook => {\n return function RecordLockingUseContentEntriesList() {\n const value = originalHook();\n const recordLocking = useRecordLocking();\n\n useEffect(() => {\n if (!value.records) {\n return;\n }\n\n recordLocking.setRecords(value.folderId, value.modelId, value.records);\n }, [value.folderId, value.modelId, value.records, recordLocking]);\n\n return {\n ...value,\n records: recordLocking.records\n };\n };\n });\n"],"mappings":";;;;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,eAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAF,OAAA;AAEO,IAAMG,kCAAkC,GAAAC,OAAA,CAAAD,kCAAA,GAC3CE,sCAAsB,CAACC,cAAc,CAACC,qBAAqB,CAACC,eAAe,CAAC,UAAAC,YAAY,EAAI;EACxF,OAAO,SAASC,kCAAkCA,CAAA,EAAG;IACjD,IAAMC,KAAK,GAAGF,YAAY,CAAC,CAAC;IAC5B,IAAMG,aAAa,GAAG,IAAAC,uBAAgB,EAAC,CAAC;IAExC,IAAAC,gBAAS,EAAC,YAAM;MACZ,IAAI,CAACH,KAAK,CAACI,OAAO,EAAE;QAChB;MACJ;MAEAH,aAAa,CAACI,UAAU,CAACL,KAAK,CAACM,QAAQ,EAAEN,KAAK,CAACO,OAAO,EAAEP,KAAK,CAACI,OAAO,CAAC;IAC1E,CAAC,EAAE,CAACJ,KAAK,CAACM,QAAQ,EAAEN,KAAK,CAACO,OAAO,EAAEP,KAAK,CAACI,OAAO,EAAEH,aAAa,CAAC,CAAC;IAEjE,WAAAO,cAAA,CAAAC,OAAA,MAAAD,cAAA,CAAAC,OAAA,MACOT,KAAK;MACRI,OAAO,EAAEH,aAAa,CAACG;IAAO;EAEtC,CAAC;AACL,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["useEffect","ContentEntryListConfig","useRecordLocking","UseContentEntriesListHookDecorator","ContentEntries","useContentEntriesList","createDecorator","originalHook","RecordLockingUseContentEntriesList","value","recordLocking","records","setRecords","folderId","modelId"],"sources":["UseContentEntriesListHookDecorator.ts"],"sourcesContent":["import { useEffect } from \"react\";\nimport { ContentEntryListConfig } from \"@webiny/app-headless-cms\";\nimport { useRecordLocking } from \"~/hooks\";\n\nexport const UseContentEntriesListHookDecorator =\n ContentEntryListConfig.ContentEntries.useContentEntriesList.createDecorator(originalHook => {\n return function RecordLockingUseContentEntriesList() {\n const value = originalHook();\n const recordLocking = useRecordLocking();\n\n useEffect(() => {\n if (!value.records) {\n return;\n }\n\n recordLocking.setRecords(value.folderId, value.modelId, value.records);\n }, [value.folderId, value.modelId, value.records, recordLocking]);\n\n return {\n ...value,\n records: recordLocking.records\n };\n };\n });\n"],"mappings":"AAAA,SAASA,SAAS,QAAQ,OAAO;AACjC,SAASC,sBAAsB,QAAQ,0BAA0B;AACjE,SAASC,gBAAgB;AAEzB,OAAO,MAAMC,kCAAkC,GAC3CF,sBAAsB,CAACG,cAAc,CAACC,qBAAqB,CAACC,eAAe,CAACC,YAAY,IAAI;EACxF,OAAO,SAASC,kCAAkCA,CAAA,EAAG;IACjD,MAAMC,KAAK,GAAGF,YAAY,CAAC,CAAC;IAC5B,MAAMG,aAAa,GAAGR,gBAAgB,CAAC,CAAC;IAExCF,SAAS,CAAC,MAAM;MACZ,IAAI,CAACS,KAAK,CAACE,OAAO,EAAE;QAChB;MACJ;MAEAD,aAAa,CAACE,UAAU,CAACH,KAAK,CAACI,QAAQ,EAAEJ,KAAK,CAACK,OAAO,EAAEL,KAAK,CAACE,OAAO,CAAC;IAC1E,CAAC,EAAE,CAACF,KAAK,CAACI,QAAQ,EAAEJ,KAAK,CAACK,OAAO,EAAEL,KAAK,CAACE,OAAO,EAAED,aAAa,CAAC,CAAC;IAEjE,OAAO;MACH,GAAGD,KAAK;MACRE,OAAO,EAAED,aAAa,CAACC;IAC3B,CAAC;EACL,CAAC;AACL,CAAC,CAAC","ignoreList":[]}
@@ -1,12 +1,5 @@
1
- "use strict";
1
+ import { useRecords } from "@webiny/app-aco";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports.UseRecordsDecorator = void 0;
8
- var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
9
- var _appAco = require("@webiny/app-aco");
10
3
  /**
11
4
  * When record locking mechanism is checking for records equality, it compares record `id` and `savedOn`.
12
5
  * When you're updating ACO cache, you're just passing the new content entry value(s), and sometimes you might
@@ -14,16 +7,18 @@ var _appAco = require("@webiny/app-aco");
14
7
  *
15
8
  * This decorator ensures that calls to `updateRecordInCache` always include a `savedOn` timestamp.
16
9
  */
17
- var UseRecordsDecorator = exports.UseRecordsDecorator = _appAco.useRecords.createDecorator(function (baseHook) {
18
- return function (folderId) {
19
- var hook = baseHook(folderId);
20
- return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, hook), {}, {
21
- updateRecordInCache: function updateRecordInCache(record) {
22
- hook.updateRecordInCache((0, _objectSpread2.default)((0, _objectSpread2.default)({}, record), {}, {
10
+ export const UseRecordsDecorator = useRecords.createDecorator(baseHook => {
11
+ return folderId => {
12
+ const hook = baseHook(folderId);
13
+ return {
14
+ ...hook,
15
+ updateRecordInCache(record) {
16
+ hook.updateRecordInCache({
17
+ ...record,
23
18
  savedOn: new Date().toISOString()
24
- }));
19
+ });
25
20
  }
26
- });
21
+ };
27
22
  };
28
23
  });
29
24
 
@@ -1 +1 @@
1
- {"version":3,"names":["_appAco","require","UseRecordsDecorator","exports","useRecords","createDecorator","baseHook","folderId","hook","_objectSpread2","default","updateRecordInCache","record","savedOn","Date","toISOString"],"sources":["UseRecordsDecorator.tsx"],"sourcesContent":["import { useRecords } from \"@webiny/app-aco\";\n\n/**\n * When record locking mechanism is checking for records equality, it compares record `id` and `savedOn`.\n * When you're updating ACO cache, you're just passing the new content entry value(s), and sometimes you might\n * be doing it without the `savedOn`, and that causes record locking to keep its old state.\n *\n * This decorator ensures that calls to `updateRecordInCache` always include a `savedOn` timestamp.\n */\nexport const UseRecordsDecorator = useRecords.createDecorator(baseHook => {\n return (folderId?: string) => {\n const hook = baseHook(folderId);\n\n return {\n ...hook,\n updateRecordInCache(record: any) {\n hook.updateRecordInCache({\n ...record,\n savedOn: new Date().toISOString()\n });\n }\n };\n };\n});\n"],"mappings":";;;;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,IAAMC,mBAAmB,GAAAC,OAAA,CAAAD,mBAAA,GAAGE,kBAAU,CAACC,eAAe,CAAC,UAAAC,QAAQ,EAAI;EACtE,OAAO,UAACC,QAAiB,EAAK;IAC1B,IAAMC,IAAI,GAAGF,QAAQ,CAACC,QAAQ,CAAC;IAE/B,WAAAE,cAAA,CAAAC,OAAA,MAAAD,cAAA,CAAAC,OAAA,MACOF,IAAI;MACPG,mBAAmB,WAAnBA,mBAAmBA,CAACC,MAAW,EAAE;QAC7BJ,IAAI,CAACG,mBAAmB,KAAAF,cAAA,CAAAC,OAAA,MAAAD,cAAA,CAAAC,OAAA,MACjBE,MAAM;UACTC,OAAO,EAAE,IAAIC,IAAI,CAAC,CAAC,CAACC,WAAW,CAAC;QAAC,EACpC,CAAC;MACN;IAAC;EAET,CAAC;AACL,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["useRecords","UseRecordsDecorator","createDecorator","baseHook","folderId","hook","updateRecordInCache","record","savedOn","Date","toISOString"],"sources":["UseRecordsDecorator.tsx"],"sourcesContent":["import { useRecords } from \"@webiny/app-aco\";\n\n/**\n * When record locking mechanism is checking for records equality, it compares record `id` and `savedOn`.\n * When you're updating ACO cache, you're just passing the new content entry value(s), and sometimes you might\n * be doing it without the `savedOn`, and that causes record locking to keep its old state.\n *\n * This decorator ensures that calls to `updateRecordInCache` always include a `savedOn` timestamp.\n */\nexport const UseRecordsDecorator = useRecords.createDecorator(baseHook => {\n return (folderId?: string) => {\n const hook = baseHook(folderId);\n\n return {\n ...hook,\n updateRecordInCache(record: any) {\n hook.updateRecordInCache({\n ...record,\n savedOn: new Date().toISOString()\n });\n }\n };\n };\n});\n"],"mappings":"AAAA,SAASA,UAAU,QAAQ,iBAAiB;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,mBAAmB,GAAGD,UAAU,CAACE,eAAe,CAACC,QAAQ,IAAI;EACtE,OAAQC,QAAiB,IAAK;IAC1B,MAAMC,IAAI,GAAGF,QAAQ,CAACC,QAAQ,CAAC;IAE/B,OAAO;MACH,GAAGC,IAAI;MACPC,mBAAmBA,CAACC,MAAW,EAAE;QAC7BF,IAAI,CAACC,mBAAmB,CAAC;UACrB,GAAGC,MAAM;UACTC,OAAO,EAAE,IAAIC,IAAI,CAAC,CAAC,CAACC,WAAW,CAAC;QACpC,CAAC,CAAC;MACN;IACJ,CAAC;EACL,CAAC;AACL,CAAC,CAAC","ignoreList":[]}
@@ -1,41 +1,42 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports.UseSaveEntryDecorator = void 0;
8
- var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
9
- var _react = require("react");
10
- var _hooks = require("../../hooks");
11
- var _appHeadlessCms = require("@webiny/app-headless-cms");
12
- var _appAdmin = require("@webiny/app-admin");
13
- var ContentEntryForm = _appHeadlessCms.ContentEntryEditorConfig.ContentEntry.ContentEntryForm;
14
- var UseSaveEntryDecorator = exports.UseSaveEntryDecorator = ContentEntryForm.useContentEntryForm.createDecorator(function (originalHook) {
1
+ import { useCallback } from "react";
2
+ import { useRecordLocking } from "../../hooks";
3
+ import { ContentEntryEditorConfig, useModel } from "@webiny/app-headless-cms";
4
+ import { useSnackbar } from "@webiny/app-admin";
5
+ const {
6
+ ContentEntry: {
7
+ ContentEntryForm
8
+ }
9
+ } = ContentEntryEditorConfig;
10
+ export const UseSaveEntryDecorator = ContentEntryForm.useContentEntryForm.createDecorator(originalHook => {
15
11
  return function useRecordLockingUseSave() {
16
- var hook = originalHook();
17
- var _useRecordLocking = (0, _hooks.useRecordLocking)(),
18
- fetchLockedEntryLockRecord = _useRecordLocking.fetchLockedEntryLockRecord,
19
- updateEntryLock = _useRecordLocking.updateEntryLock;
20
- var _useSnackbar = (0, _appAdmin.useSnackbar)(),
21
- showSnackbar = _useSnackbar.showSnackbar;
22
- var _useModel = (0, _appHeadlessCms.useModel)(),
23
- model = _useModel.model;
24
- var entry = hook.entry;
25
- var saveEntry = (0, _react.useCallback)(async function () {
12
+ const hook = originalHook();
13
+ const {
14
+ fetchLockedEntryLockRecord,
15
+ updateEntryLock
16
+ } = useRecordLocking();
17
+ const {
18
+ showSnackbar
19
+ } = useSnackbar();
20
+ const {
21
+ model
22
+ } = useModel();
23
+ const {
24
+ entry
25
+ } = hook;
26
+ const saveEntry = useCallback(async (...params) => {
26
27
  if (!entry.id) {
27
- return hook.saveEntry.apply(hook, arguments);
28
+ return hook.saveEntry(...params);
28
29
  }
29
- var result = await fetchLockedEntryLockRecord({
30
+ const result = await fetchLockedEntryLockRecord({
30
31
  id: entry.id,
31
32
  $lockingType: model.modelId
32
33
  });
33
34
  if (result?.lockedBy) {
34
- var lockedBy = result.lockedBy;
35
- showSnackbar("It seems that the entry is locked by ".concat(lockedBy.displayName || lockedBy.id, ". You can't save your changes."));
35
+ const lockedBy = result.lockedBy;
36
+ showSnackbar(`It seems that the entry is locked by ${lockedBy.displayName || lockedBy.id}. You can't save your changes.`);
36
37
  return null;
37
38
  }
38
- var saveResult = await hook.saveEntry.apply(hook, arguments);
39
+ const saveResult = await hook.saveEntry(...params);
39
40
  if (saveResult) {
40
41
  await updateEntryLock({
41
42
  id: saveResult.id,
@@ -44,9 +45,10 @@ var UseSaveEntryDecorator = exports.UseSaveEntryDecorator = ContentEntryForm.use
44
45
  }
45
46
  return saveResult;
46
47
  }, [entry?.id, model.modelId, updateEntryLock]);
47
- return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, hook), {}, {
48
- saveEntry: saveEntry
49
- });
48
+ return {
49
+ ...hook,
50
+ saveEntry
51
+ };
50
52
  };
51
53
  });
52
54
 
@@ -1 +1 @@
1
- {"version":3,"names":["_react","require","_hooks","_appHeadlessCms","_appAdmin","ContentEntryForm","ContentEntryEditorConfig","ContentEntry","UseSaveEntryDecorator","exports","useContentEntryForm","createDecorator","originalHook","useRecordLockingUseSave","hook","_useRecordLocking","useRecordLocking","fetchLockedEntryLockRecord","updateEntryLock","_useSnackbar","useSnackbar","showSnackbar","_useModel","useModel","model","entry","saveEntry","useCallback","id","apply","arguments","result","$lockingType","modelId","lockedBy","concat","displayName","saveResult","_objectSpread2","default"],"sources":["UseSaveEntryDecorator.tsx"],"sourcesContent":["import { useCallback } from \"react\";\nimport { useRecordLocking } from \"~/hooks\";\nimport { ContentEntryEditorConfig, useModel } from \"@webiny/app-headless-cms\";\nimport { useSnackbar } from \"@webiny/app-admin\";\n\nconst {\n ContentEntry: { ContentEntryForm }\n} = ContentEntryEditorConfig;\n\ntype SaveEntry = ReturnType<typeof ContentEntryForm.useContentEntryForm>[\"saveEntry\"];\n\nexport const UseSaveEntryDecorator = ContentEntryForm.useContentEntryForm.createDecorator(\n originalHook => {\n return function useRecordLockingUseSave() {\n const hook = originalHook();\n const { fetchLockedEntryLockRecord, updateEntryLock } = useRecordLocking();\n const { showSnackbar } = useSnackbar();\n const { model } = useModel();\n\n const { entry } = hook;\n\n const saveEntry: SaveEntry = useCallback(\n async (...params) => {\n if (!entry.id) {\n return hook.saveEntry(...params);\n }\n\n const result = await fetchLockedEntryLockRecord({\n id: entry.id,\n $lockingType: model.modelId\n });\n\n if (result?.lockedBy) {\n const lockedBy = result.lockedBy;\n showSnackbar(\n `It seems that the entry is locked by ${\n lockedBy.displayName || lockedBy.id\n }. You can't save your changes.`\n );\n return null;\n }\n\n const saveResult = await hook.saveEntry(...params);\n if (saveResult) {\n await updateEntryLock({\n id: saveResult.id,\n $lockingType: model.modelId\n });\n }\n\n return saveResult;\n },\n [entry?.id, model.modelId, updateEntryLock]\n );\n\n return {\n ...hook,\n saveEntry\n };\n };\n }\n);\n"],"mappings":";;;;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,eAAA,GAAAF,OAAA;AACA,IAAAG,SAAA,GAAAH,OAAA;AAEA,IACoBI,gBAAgB,GAChCC,wCAAwB,CADxBC,YAAY,CAAIF,gBAAgB;AAK7B,IAAMG,qBAAqB,GAAAC,OAAA,CAAAD,qBAAA,GAAGH,gBAAgB,CAACK,mBAAmB,CAACC,eAAe,CACrF,UAAAC,YAAY,EAAI;EACZ,OAAO,SAASC,uBAAuBA,CAAA,EAAG;IACtC,IAAMC,IAAI,GAAGF,YAAY,CAAC,CAAC;IAC3B,IAAAG,iBAAA,GAAwD,IAAAC,uBAAgB,EAAC,CAAC;MAAlEC,0BAA0B,GAAAF,iBAAA,CAA1BE,0BAA0B;MAAEC,eAAe,GAAAH,iBAAA,CAAfG,eAAe;IACnD,IAAAC,YAAA,GAAyB,IAAAC,qBAAW,EAAC,CAAC;MAA9BC,YAAY,GAAAF,YAAA,CAAZE,YAAY;IACpB,IAAAC,SAAA,GAAkB,IAAAC,wBAAQ,EAAC,CAAC;MAApBC,KAAK,GAAAF,SAAA,CAALE,KAAK;IAEb,IAAQC,KAAK,GAAKX,IAAI,CAAdW,KAAK;IAEb,IAAMC,SAAoB,GAAG,IAAAC,kBAAW,EACpC,kBAAqB;MACjB,IAAI,CAACF,KAAK,CAACG,EAAE,EAAE;QACX,OAAOd,IAAI,CAACY,SAAS,CAAAG,KAAA,CAAdf,IAAI,EAAAgB,SAAoB,CAAC;MACpC;MAEA,IAAMC,MAAM,GAAG,MAAMd,0BAA0B,CAAC;QAC5CW,EAAE,EAAEH,KAAK,CAACG,EAAE;QACZI,YAAY,EAAER,KAAK,CAACS;MACxB,CAAC,CAAC;MAEF,IAAIF,MAAM,EAAEG,QAAQ,EAAE;QAClB,IAAMA,QAAQ,GAAGH,MAAM,CAACG,QAAQ;QAChCb,YAAY,yCAAAc,MAAA,CAEJD,QAAQ,CAACE,WAAW,IAAIF,QAAQ,CAACN,EAAE,mCAE3C,CAAC;QACD,OAAO,IAAI;MACf;MAEA,IAAMS,UAAU,GAAG,MAAMvB,IAAI,CAACY,SAAS,CAAAG,KAAA,CAAdf,IAAI,EAAAgB,SAAoB,CAAC;MAClD,IAAIO,UAAU,EAAE;QACZ,MAAMnB,eAAe,CAAC;UAClBU,EAAE,EAAES,UAAU,CAACT,EAAE;UACjBI,YAAY,EAAER,KAAK,CAACS;QACxB,CAAC,CAAC;MACN;MAEA,OAAOI,UAAU;IACrB,CAAC,EACD,CAACZ,KAAK,EAAEG,EAAE,EAAEJ,KAAK,CAACS,OAAO,EAAEf,eAAe,CAC9C,CAAC;IAED,WAAAoB,cAAA,CAAAC,OAAA,MAAAD,cAAA,CAAAC,OAAA,MACOzB,IAAI;MACPY,SAAS,EAATA;IAAS;EAEjB,CAAC;AACL,CACJ,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["useCallback","useRecordLocking","ContentEntryEditorConfig","useModel","useSnackbar","ContentEntry","ContentEntryForm","UseSaveEntryDecorator","useContentEntryForm","createDecorator","originalHook","useRecordLockingUseSave","hook","fetchLockedEntryLockRecord","updateEntryLock","showSnackbar","model","entry","saveEntry","params","id","result","$lockingType","modelId","lockedBy","displayName","saveResult"],"sources":["UseSaveEntryDecorator.tsx"],"sourcesContent":["import { useCallback } from \"react\";\nimport { useRecordLocking } from \"~/hooks\";\nimport { ContentEntryEditorConfig, useModel } from \"@webiny/app-headless-cms\";\nimport { useSnackbar } from \"@webiny/app-admin\";\n\nconst {\n ContentEntry: { ContentEntryForm }\n} = ContentEntryEditorConfig;\n\ntype SaveEntry = ReturnType<typeof ContentEntryForm.useContentEntryForm>[\"saveEntry\"];\n\nexport const UseSaveEntryDecorator = ContentEntryForm.useContentEntryForm.createDecorator(\n originalHook => {\n return function useRecordLockingUseSave() {\n const hook = originalHook();\n const { fetchLockedEntryLockRecord, updateEntryLock } = useRecordLocking();\n const { showSnackbar } = useSnackbar();\n const { model } = useModel();\n\n const { entry } = hook;\n\n const saveEntry: SaveEntry = useCallback(\n async (...params) => {\n if (!entry.id) {\n return hook.saveEntry(...params);\n }\n\n const result = await fetchLockedEntryLockRecord({\n id: entry.id,\n $lockingType: model.modelId\n });\n\n if (result?.lockedBy) {\n const lockedBy = result.lockedBy;\n showSnackbar(\n `It seems that the entry is locked by ${\n lockedBy.displayName || lockedBy.id\n }. You can't save your changes.`\n );\n return null;\n }\n\n const saveResult = await hook.saveEntry(...params);\n if (saveResult) {\n await updateEntryLock({\n id: saveResult.id,\n $lockingType: model.modelId\n });\n }\n\n return saveResult;\n },\n [entry?.id, model.modelId, updateEntryLock]\n );\n\n return {\n ...hook,\n saveEntry\n };\n };\n }\n);\n"],"mappings":"AAAA,SAASA,WAAW,QAAQ,OAAO;AACnC,SAASC,gBAAgB;AACzB,SAASC,wBAAwB,EAAEC,QAAQ,QAAQ,0BAA0B;AAC7E,SAASC,WAAW,QAAQ,mBAAmB;AAE/C,MAAM;EACFC,YAAY,EAAE;IAAEC;EAAiB;AACrC,CAAC,GAAGJ,wBAAwB;AAI5B,OAAO,MAAMK,qBAAqB,GAAGD,gBAAgB,CAACE,mBAAmB,CAACC,eAAe,CACrFC,YAAY,IAAI;EACZ,OAAO,SAASC,uBAAuBA,CAAA,EAAG;IACtC,MAAMC,IAAI,GAAGF,YAAY,CAAC,CAAC;IAC3B,MAAM;MAAEG,0BAA0B;MAAEC;IAAgB,CAAC,GAAGb,gBAAgB,CAAC,CAAC;IAC1E,MAAM;MAAEc;IAAa,CAAC,GAAGX,WAAW,CAAC,CAAC;IACtC,MAAM;MAAEY;IAAM,CAAC,GAAGb,QAAQ,CAAC,CAAC;IAE5B,MAAM;MAAEc;IAAM,CAAC,GAAGL,IAAI;IAEtB,MAAMM,SAAoB,GAAGlB,WAAW,CACpC,OAAO,GAAGmB,MAAM,KAAK;MACjB,IAAI,CAACF,KAAK,CAACG,EAAE,EAAE;QACX,OAAOR,IAAI,CAACM,SAAS,CAAC,GAAGC,MAAM,CAAC;MACpC;MAEA,MAAME,MAAM,GAAG,MAAMR,0BAA0B,CAAC;QAC5CO,EAAE,EAAEH,KAAK,CAACG,EAAE;QACZE,YAAY,EAAEN,KAAK,CAACO;MACxB,CAAC,CAAC;MAEF,IAAIF,MAAM,EAAEG,QAAQ,EAAE;QAClB,MAAMA,QAAQ,GAAGH,MAAM,CAACG,QAAQ;QAChCT,YAAY,CACR,wCACIS,QAAQ,CAACC,WAAW,IAAID,QAAQ,CAACJ,EAAE,gCAE3C,CAAC;QACD,OAAO,IAAI;MACf;MAEA,MAAMM,UAAU,GAAG,MAAMd,IAAI,CAACM,SAAS,CAAC,GAAGC,MAAM,CAAC;MAClD,IAAIO,UAAU,EAAE;QACZ,MAAMZ,eAAe,CAAC;UAClBM,EAAE,EAAEM,UAAU,CAACN,EAAE;UACjBE,YAAY,EAAEN,KAAK,CAACO;QACxB,CAAC,CAAC;MACN;MAEA,OAAOG,UAAU;IACrB,CAAC,EACD,CAACT,KAAK,EAAEG,EAAE,EAAEJ,KAAK,CAACO,OAAO,EAAET,eAAe,CAC9C,CAAC;IAED,OAAO;MACH,GAAGF,IAAI;MACPM;IACJ,CAAC;EACL,CAAC;AACL,CACJ,CAAC","ignoreList":[]}
@@ -1,84 +1,70 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.RecordLockingPermissions = void 0;
9
- var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
10
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
11
- var _react = _interopRequireWildcard(require("react"));
12
- var _Grid = require("@webiny/ui/Grid");
13
- var _Select = require("@webiny/ui/Select");
14
- var _i18n = require("@webiny/app/i18n");
15
- var _Permissions = require("@webiny/app-admin/components/Permissions");
16
- var _form = require("@webiny/form");
17
- var _templateObject, _templateObject2, _templateObject3, _templateObject4;
18
- var t = _i18n.i18n.ns("app-record-locking/components/permissionRenderer");
19
- var RECORD_LOCKING_PERMISSION = "recordLocking";
20
- var RecordLockingPermissions = exports.RecordLockingPermissions = function RecordLockingPermissions(_ref) {
21
- var value = _ref.value,
22
- onChange = _ref.onChange;
23
- var onFormChange = (0, _react.useCallback)(function (data) {
24
- var newValue = value.filter(function (p) {
1
+ import React, { useCallback, useMemo } from "react";
2
+ import { i18n } from "@webiny/app/i18n";
3
+ import { gridWithPaddingClass, PermissionInfo } from "@webiny/app-admin/components/Permissions";
4
+ import { Form } from "@webiny/form";
5
+ import { Grid, Select } from "@webiny/admin-ui";
6
+ const t = i18n.ns("app-record-locking/components/permissionRenderer");
7
+ const RECORD_LOCKING_PERMISSION = "recordLocking";
8
+ export const RecordLockingPermissions = ({
9
+ value,
10
+ onChange
11
+ }) => {
12
+ const onFormChange = useCallback(data => {
13
+ const newValue = value.filter(p => {
25
14
  return p.name.startsWith(RECORD_LOCKING_PERMISSION) === false;
26
15
  });
27
16
  if (!data.canForceUnlock || data.canForceUnlock === "no") {
28
17
  onChange(newValue);
29
18
  return;
30
19
  }
31
- onChange([].concat((0, _toConsumableArray2.default)(newValue), [{
20
+ onChange([...newValue, {
32
21
  name: "recordLocking",
33
22
  canForceUnlock: "yes"
34
- }]));
23
+ }]);
35
24
  }, [value]);
36
- var formData = (0, _react.useMemo)(function () {
25
+ const formData = useMemo(() => {
37
26
  if (!Array.isArray(value)) {
38
27
  return {};
39
28
  }
40
- var hasFullAccess = value.some(function (item) {
41
- return item.name === "*";
42
- });
29
+ const hasFullAccess = value.some(item => item.name === "*");
43
30
  if (hasFullAccess) {
44
31
  return {
45
32
  canForceUnlock: "yes"
46
33
  };
47
34
  }
48
- var permissions = value.filter(function (item) {
49
- return item.name.startsWith(RECORD_LOCKING_PERMISSION);
50
- });
51
- if (!permissions.length || !permissions.some(function (item) {
52
- return !!item.canForceUnlock;
53
- })) {
35
+ const permissions = value.filter(item => item.name.startsWith(RECORD_LOCKING_PERMISSION));
36
+ if (!permissions.length || !permissions.some(item => !!item.canForceUnlock)) {
54
37
  return {};
55
38
  }
56
39
  return {
57
40
  canForceUnlock: "yes"
58
41
  };
59
42
  }, []);
60
- return /*#__PURE__*/_react.default.createElement(_form.Form, {
43
+ return /*#__PURE__*/React.createElement(Form, {
61
44
  data: formData,
62
45
  onChange: onFormChange
63
- }, function (_ref2) {
64
- var Bind = _ref2.Bind;
65
- return /*#__PURE__*/_react.default.createElement(_react.Fragment, null, /*#__PURE__*/_react.default.createElement(_Grid.Grid, {
66
- className: _Permissions.gridNoPaddingClass
67
- }, /*#__PURE__*/_react.default.createElement(_Grid.Cell, {
46
+ }, ({
47
+ Bind
48
+ }) => {
49
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Grid, {
50
+ className: gridWithPaddingClass
51
+ }, /*#__PURE__*/React.createElement(Grid.Column, {
68
52
  span: 6
69
- }, /*#__PURE__*/_react.default.createElement(_Permissions.PermissionInfo, {
70
- title: t(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["Advanced Record Locking"])))
71
- })), /*#__PURE__*/_react.default.createElement(_Grid.Cell, {
53
+ }, /*#__PURE__*/React.createElement(PermissionInfo, {
54
+ title: t`Advanced Record Locking`
55
+ })), /*#__PURE__*/React.createElement(Grid.Column, {
72
56
  span: 6
73
- }, /*#__PURE__*/_react.default.createElement(Bind, {
57
+ }, /*#__PURE__*/React.createElement(Bind, {
74
58
  name: "canForceUnlock"
75
- }, /*#__PURE__*/_react.default.createElement(_Select.Select, {
76
- label: t(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2.default)(["Advanced Record Locking"])))
77
- }, /*#__PURE__*/_react.default.createElement("option", {
78
- value: ""
79
- }, t(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2.default)(["No Access"])))), /*#__PURE__*/_react.default.createElement("option", {
80
- value: "yes"
81
- }, t(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2.default)(["Full Access"])))))))));
59
+ }, /*#__PURE__*/React.createElement(Select, {
60
+ options: [{
61
+ label: t`No Access`,
62
+ value: "no"
63
+ }, {
64
+ label: t`Full Access`,
65
+ value: "yes"
66
+ }]
67
+ })))));
82
68
  });
83
69
  };
84
70
 
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_Grid","_Select","_i18n","_Permissions","_form","_templateObject","_templateObject2","_templateObject3","_templateObject4","t","i18n","ns","RECORD_LOCKING_PERMISSION","RecordLockingPermissions","exports","_ref","value","onChange","onFormChange","useCallback","data","newValue","filter","p","name","startsWith","canForceUnlock","concat","_toConsumableArray2","default","formData","useMemo","Array","isArray","hasFullAccess","some","item","permissions","length","createElement","Form","_ref2","Bind","Fragment","Grid","className","gridNoPaddingClass","Cell","span","PermissionInfo","title","_taggedTemplateLiteral2","Select","label"],"sources":["RecordLockingPermissions.tsx"],"sourcesContent":["import React, { Fragment, useCallback, useMemo } from \"react\";\nimport { Cell, Grid } from \"@webiny/ui/Grid\";\nimport { Select } from \"@webiny/ui/Select\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport { gridNoPaddingClass, PermissionInfo } from \"@webiny/app-admin/components/Permissions\";\nimport { Form } from \"@webiny/form\";\nimport { RecordLockingSecurityPermission } from \"~/types\";\n\nconst t = i18n.ns(\"app-record-locking/components/permissionRenderer\");\n\nconst RECORD_LOCKING_PERMISSION = \"recordLocking\";\n\nexport interface RecordLockingPermissionsProps {\n value: RecordLockingSecurityPermission[];\n onChange: (value: RecordLockingSecurityPermission[]) => void;\n}\n\nexport const RecordLockingPermissions = ({ value, onChange }: RecordLockingPermissionsProps) => {\n const onFormChange = useCallback(\n (data: RecordLockingSecurityPermission) => {\n const newValue = value.filter(p => {\n return p.name.startsWith(RECORD_LOCKING_PERMISSION) === false;\n });\n\n if (!data.canForceUnlock || data.canForceUnlock === \"no\") {\n onChange(newValue);\n return;\n }\n\n onChange([\n ...newValue,\n {\n name: \"recordLocking\",\n canForceUnlock: \"yes\"\n }\n ]);\n },\n [value]\n );\n\n const formData = useMemo(() => {\n if (!Array.isArray(value)) {\n return {};\n }\n\n const hasFullAccess = value.some(item => item.name === \"*\");\n\n if (hasFullAccess) {\n return {\n canForceUnlock: \"yes\"\n };\n }\n\n const permissions = value.filter(item => item.name.startsWith(RECORD_LOCKING_PERMISSION));\n\n if (!permissions.length || !permissions.some(item => !!item.canForceUnlock)) {\n return {};\n }\n\n return {\n canForceUnlock: \"yes\"\n };\n }, []);\n\n return (\n <Form<RecordLockingSecurityPermission> data={formData} onChange={onFormChange}>\n {({ Bind }) => {\n return (\n <Fragment>\n <Grid className={gridNoPaddingClass}>\n <Cell span={6}>\n <PermissionInfo title={t`Advanced Record Locking`} />\n </Cell>\n <Cell span={6}>\n <Bind name={\"canForceUnlock\"}>\n <Select label={t`Advanced Record Locking`}>\n <option value={\"\"}>{t`No Access`}</option>\n <option value={\"yes\"}>{t`Full Access`}</option>\n </Select>\n </Bind>\n </Cell>\n </Grid>\n </Fragment>\n );\n }}\n </Form>\n );\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","useCallback","useMemo","i18n","gridWithPaddingClass","PermissionInfo","Form","Grid","Select","t","ns","RECORD_LOCKING_PERMISSION","RecordLockingPermissions","value","onChange","onFormChange","data","newValue","filter","p","name","startsWith","canForceUnlock","formData","Array","isArray","hasFullAccess","some","item","permissions","length","createElement","Bind","Fragment","className","Column","span","title","options","label"],"sources":["RecordLockingPermissions.tsx"],"sourcesContent":["import React, { useCallback, useMemo } from \"react\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport { gridWithPaddingClass, PermissionInfo } from \"@webiny/app-admin/components/Permissions\";\nimport { Form } from \"@webiny/form\";\nimport { RecordLockingSecurityPermission } from \"~/types\";\nimport { Grid, Select } from \"@webiny/admin-ui\";\n\nconst t = i18n.ns(\"app-record-locking/components/permissionRenderer\");\n\nconst RECORD_LOCKING_PERMISSION = \"recordLocking\";\n\nexport interface RecordLockingPermissionsProps {\n value: RecordLockingSecurityPermission[];\n onChange: (value: RecordLockingSecurityPermission[]) => void;\n}\n\nexport const RecordLockingPermissions = ({ value, onChange }: RecordLockingPermissionsProps) => {\n const onFormChange = useCallback(\n (data: RecordLockingSecurityPermission) => {\n const newValue = value.filter(p => {\n return p.name.startsWith(RECORD_LOCKING_PERMISSION) === false;\n });\n\n if (!data.canForceUnlock || data.canForceUnlock === \"no\") {\n onChange(newValue);\n return;\n }\n\n onChange([\n ...newValue,\n {\n name: \"recordLocking\",\n canForceUnlock: \"yes\"\n }\n ]);\n },\n [value]\n );\n\n const formData = useMemo(() => {\n if (!Array.isArray(value)) {\n return {};\n }\n\n const hasFullAccess = value.some(item => item.name === \"*\");\n\n if (hasFullAccess) {\n return {\n canForceUnlock: \"yes\"\n };\n }\n\n const permissions = value.filter(item => item.name.startsWith(RECORD_LOCKING_PERMISSION));\n\n if (!permissions.length || !permissions.some(item => !!item.canForceUnlock)) {\n return {};\n }\n\n return {\n canForceUnlock: \"yes\"\n };\n }, []);\n\n return (\n <Form<RecordLockingSecurityPermission> data={formData} onChange={onFormChange}>\n {({ Bind }) => {\n return (\n <>\n <Grid className={gridWithPaddingClass}>\n <Grid.Column span={6}>\n <PermissionInfo title={t`Advanced Record Locking`} />\n </Grid.Column>\n <Grid.Column span={6}>\n <Bind name={\"canForceUnlock\"}>\n <Select\n options={[\n { label: t`No Access`, value: \"no\" },\n { label: t`Full Access`, value: \"yes\" }\n ]}\n ></Select>\n </Bind>\n </Grid.Column>\n </Grid>\n </>\n );\n }}\n </Form>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,WAAW,EAAEC,OAAO,QAAQ,OAAO;AACnD,SAASC,IAAI,QAAQ,kBAAkB;AACvC,SAASC,oBAAoB,EAAEC,cAAc,QAAQ,0CAA0C;AAC/F,SAASC,IAAI,QAAQ,cAAc;AAEnC,SAASC,IAAI,EAAEC,MAAM,QAAQ,kBAAkB;AAE/C,MAAMC,CAAC,GAAGN,IAAI,CAACO,EAAE,CAAC,kDAAkD,CAAC;AAErE,MAAMC,yBAAyB,GAAG,eAAe;AAOjD,OAAO,MAAMC,wBAAwB,GAAGA,CAAC;EAAEC,KAAK;EAAEC;AAAwC,CAAC,KAAK;EAC5F,MAAMC,YAAY,GAAGd,WAAW,CAC3Be,IAAqC,IAAK;IACvC,MAAMC,QAAQ,GAAGJ,KAAK,CAACK,MAAM,CAACC,CAAC,IAAI;MAC/B,OAAOA,CAAC,CAACC,IAAI,CAACC,UAAU,CAACV,yBAAyB,CAAC,KAAK,KAAK;IACjE,CAAC,CAAC;IAEF,IAAI,CAACK,IAAI,CAACM,cAAc,IAAIN,IAAI,CAACM,cAAc,KAAK,IAAI,EAAE;MACtDR,QAAQ,CAACG,QAAQ,CAAC;MAClB;IACJ;IAEAH,QAAQ,CAAC,CACL,GAAGG,QAAQ,EACX;MACIG,IAAI,EAAE,eAAe;MACrBE,cAAc,EAAE;IACpB,CAAC,CACJ,CAAC;EACN,CAAC,EACD,CAACT,KAAK,CACV,CAAC;EAED,MAAMU,QAAQ,GAAGrB,OAAO,CAAC,MAAM;IAC3B,IAAI,CAACsB,KAAK,CAACC,OAAO,CAACZ,KAAK,CAAC,EAAE;MACvB,OAAO,CAAC,CAAC;IACb;IAEA,MAAMa,aAAa,GAAGb,KAAK,CAACc,IAAI,CAACC,IAAI,IAAIA,IAAI,CAACR,IAAI,KAAK,GAAG,CAAC;IAE3D,IAAIM,aAAa,EAAE;MACf,OAAO;QACHJ,cAAc,EAAE;MACpB,CAAC;IACL;IAEA,MAAMO,WAAW,GAAGhB,KAAK,CAACK,MAAM,CAACU,IAAI,IAAIA,IAAI,CAACR,IAAI,CAACC,UAAU,CAACV,yBAAyB,CAAC,CAAC;IAEzF,IAAI,CAACkB,WAAW,CAACC,MAAM,IAAI,CAACD,WAAW,CAACF,IAAI,CAACC,IAAI,IAAI,CAAC,CAACA,IAAI,CAACN,cAAc,CAAC,EAAE;MACzE,OAAO,CAAC,CAAC;IACb;IAEA,OAAO;MACHA,cAAc,EAAE;IACpB,CAAC;EACL,CAAC,EAAE,EAAE,CAAC;EAEN,oBACItB,KAAA,CAAA+B,aAAA,CAACzB,IAAI;IAAkCU,IAAI,EAAEO,QAAS;IAACT,QAAQ,EAAEC;EAAa,GACzE,CAAC;IAAEiB;EAAK,CAAC,KAAK;IACX,oBACIhC,KAAA,CAAA+B,aAAA,CAAA/B,KAAA,CAAAiC,QAAA,qBACIjC,KAAA,CAAA+B,aAAA,CAACxB,IAAI;MAAC2B,SAAS,EAAE9B;IAAqB,gBAClCJ,KAAA,CAAA+B,aAAA,CAACxB,IAAI,CAAC4B,MAAM;MAACC,IAAI,EAAE;IAAE,gBACjBpC,KAAA,CAAA+B,aAAA,CAAC1B,cAAc;MAACgC,KAAK,EAAE5B,CAAC;IAA0B,CAAE,CAC3C,CAAC,eACdT,KAAA,CAAA+B,aAAA,CAACxB,IAAI,CAAC4B,MAAM;MAACC,IAAI,EAAE;IAAE,gBACjBpC,KAAA,CAAA+B,aAAA,CAACC,IAAI;MAACZ,IAAI,EAAE;IAAiB,gBACzBpB,KAAA,CAAA+B,aAAA,CAACvB,MAAM;MACH8B,OAAO,EAAE,CACL;QAAEC,KAAK,EAAE9B,CAAC,WAAW;QAAEI,KAAK,EAAE;MAAK,CAAC,EACpC;QAAE0B,KAAK,EAAE9B,CAAC,aAAa;QAAEI,KAAK,EAAE;MAAM,CAAC;IACzC,CACG,CACP,CACG,CACX,CACR,CAAC;EAEX,CACE,CAAC;AAEf,CAAC","ignoreList":[]}
@@ -1,24 +1,20 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports.recordLockingPermissionRenderer = void 0;
8
- var _react = _interopRequireDefault(require("react"));
9
- var _Accordion = require("@webiny/ui/Accordion");
10
- var _lock = require("../assets/lock.svg");
11
- var _RecordLockingPermissions = require("./RecordLockingPermissions");
12
- var recordLockingPermissionRenderer = exports.recordLockingPermissionRenderer = {
1
+ import React from "react";
2
+ import { ReactComponent as LockIcon } from "@webiny/icons/lock.svg";
3
+ import { RecordLockingPermissions } from "./RecordLockingPermissions";
4
+ import { Accordion } from "@webiny/admin-ui";
5
+ export const recordLockingPermissionRenderer = {
13
6
  type: "admin-app-permissions-renderer",
14
7
  name: "admin-app-permissions-renderer-record-locking",
15
- render: function render(props) {
16
- return /*#__PURE__*/_react.default.createElement(_Accordion.AccordionItem, {
17
- icon: /*#__PURE__*/_react.default.createElement(_lock.ReactComponent, null),
8
+ render(props) {
9
+ return /*#__PURE__*/React.createElement(Accordion.Item, {
10
+ icon: /*#__PURE__*/React.createElement(Accordion.Item.Icon, {
11
+ label: "Record Locking",
12
+ icon: /*#__PURE__*/React.createElement(LockIcon, null)
13
+ }),
18
14
  title: "Record Locking",
19
- description: "Manage Record Locking Permissions.",
15
+ description: "Manage Record Locking permissions.",
20
16
  "data-testid": "permission.recordLocking"
21
- }, /*#__PURE__*/_react.default.createElement(_RecordLockingPermissions.RecordLockingPermissions, props));
17
+ }, /*#__PURE__*/React.createElement(RecordLockingPermissions, props));
22
18
  }
23
19
  };
24
20
 
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireDefault","require","_Accordion","_lock","_RecordLockingPermissions","recordLockingPermissionRenderer","exports","type","name","render","props","default","createElement","AccordionItem","icon","ReactComponent","title","description","RecordLockingPermissions"],"sources":["index.tsx"],"sourcesContent":["import React from \"react\";\nimport { AccordionItem } from \"@webiny/ui/Accordion\";\nimport { AdminAppPermissionRendererPlugin } from \"@webiny/app-admin/types\";\nimport { ReactComponent as Icon } from \"../assets/lock.svg\";\nimport { RecordLockingPermissions } from \"./RecordLockingPermissions\";\n\nexport const recordLockingPermissionRenderer: AdminAppPermissionRendererPlugin = {\n type: \"admin-app-permissions-renderer\",\n name: \"admin-app-permissions-renderer-record-locking\",\n render(props) {\n return (\n <AccordionItem\n icon={<Icon />}\n title={\"Record Locking\"}\n description={\"Manage Record Locking Permissions.\"}\n data-testid={\"permission.recordLocking\"}\n >\n <RecordLockingPermissions {...props} />\n </AccordionItem>\n );\n }\n};\n"],"mappings":";;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,UAAA,GAAAD,OAAA;AAEA,IAAAE,KAAA,GAAAF,OAAA;AACA,IAAAG,yBAAA,GAAAH,OAAA;AAEO,IAAMI,+BAAiE,GAAAC,OAAA,CAAAD,+BAAA,GAAG;EAC7EE,IAAI,EAAE,gCAAgC;EACtCC,IAAI,EAAE,+CAA+C;EACrDC,MAAM,WAANA,MAAMA,CAACC,KAAK,EAAE;IACV,oBACIX,MAAA,CAAAY,OAAA,CAAAC,aAAA,CAACV,UAAA,CAAAW,aAAa;MACVC,IAAI,eAAEf,MAAA,CAAAY,OAAA,CAAAC,aAAA,CAACT,KAAA,CAAAY,cAAI,MAAE,CAAE;MACfC,KAAK,EAAE,gBAAiB;MACxBC,WAAW,EAAE,oCAAqC;MAClD,eAAa;IAA2B,gBAExClB,MAAA,CAAAY,OAAA,CAAAC,aAAA,CAACR,yBAAA,CAAAc,wBAAwB,EAAKR,KAAQ,CAC3B,CAAC;EAExB;AACJ,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["React","ReactComponent","LockIcon","RecordLockingPermissions","Accordion","recordLockingPermissionRenderer","type","name","render","props","createElement","Item","icon","Icon","label","title","description"],"sources":["index.tsx"],"sourcesContent":["import React from \"react\";\n\nimport { AdminAppPermissionRendererPlugin } from \"@webiny/app-admin/types\";\nimport { ReactComponent as LockIcon } from \"@webiny/icons/lock.svg\";\nimport { RecordLockingPermissions } from \"./RecordLockingPermissions\";\nimport { Accordion } from \"@webiny/admin-ui\";\n\nexport const recordLockingPermissionRenderer: AdminAppPermissionRendererPlugin = {\n type: \"admin-app-permissions-renderer\",\n name: \"admin-app-permissions-renderer-record-locking\",\n render(props) {\n return (\n <Accordion.Item\n icon={<Accordion.Item.Icon label={\"Record Locking\"} icon={<LockIcon />} />}\n title={\"Record Locking\"}\n description={\"Manage Record Locking permissions.\"}\n data-testid={\"permission.recordLocking\"}\n >\n <RecordLockingPermissions {...props} />\n </Accordion.Item>\n );\n }\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AAGzB,SAASC,cAAc,IAAIC,QAAQ,QAAQ,wBAAwB;AACnE,SAASC,wBAAwB;AACjC,SAASC,SAAS,QAAQ,kBAAkB;AAE5C,OAAO,MAAMC,+BAAiE,GAAG;EAC7EC,IAAI,EAAE,gCAAgC;EACtCC,IAAI,EAAE,+CAA+C;EACrDC,MAAMA,CAACC,KAAK,EAAE;IACV,oBACIT,KAAA,CAAAU,aAAA,CAACN,SAAS,CAACO,IAAI;MACXC,IAAI,eAAEZ,KAAA,CAAAU,aAAA,CAACN,SAAS,CAACO,IAAI,CAACE,IAAI;QAACC,KAAK,EAAE,gBAAiB;QAACF,IAAI,eAAEZ,KAAA,CAAAU,aAAA,CAACR,QAAQ,MAAE;MAAE,CAAE,CAAE;MAC3Ea,KAAK,EAAE,gBAAiB;MACxBC,WAAW,EAAE,oCAAqC;MAClD,eAAa;IAA2B,gBAExChB,KAAA,CAAAU,aAAA,CAACP,wBAAwB,EAAKM,KAAQ,CAC1B,CAAC;EAEzB;AACJ,CAAC","ignoreList":[]}