@webiny/app-record-locking 5.40.0-beta.3

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 (148) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +12 -0
  3. package/components/HeadlessCmsActionsAcoCell.d.ts +2 -0
  4. package/components/HeadlessCmsActionsAcoCell.js +70 -0
  5. package/components/HeadlessCmsActionsAcoCell.js.map +1 -0
  6. package/components/HeadlessCmsContentEntry/ContentEntryGuard.d.ts +5 -0
  7. package/components/HeadlessCmsContentEntry/ContentEntryGuard.js +88 -0
  8. package/components/HeadlessCmsContentEntry/ContentEntryGuard.js.map +1 -0
  9. package/components/HeadlessCmsContentEntry/ContentEntryLocker.d.ts +14 -0
  10. package/components/HeadlessCmsContentEntry/ContentEntryLocker.js +108 -0
  11. package/components/HeadlessCmsContentEntry/ContentEntryLocker.js.map +1 -0
  12. package/components/HeadlessCmsContentEntry/HeadlessCmsContentEntry.d.ts +2 -0
  13. package/components/HeadlessCmsContentEntry/HeadlessCmsContentEntry.js +63 -0
  14. package/components/HeadlessCmsContentEntry/HeadlessCmsContentEntry.js.map +1 -0
  15. package/components/HeadlessCmsContentEntry/index.d.ts +1 -0
  16. package/components/HeadlessCmsContentEntry/index.js +18 -0
  17. package/components/HeadlessCmsContentEntry/index.js.map +1 -0
  18. package/components/LockedRecord/LockedRecord.d.ts +6 -0
  19. package/components/LockedRecord/LockedRecord.js +161 -0
  20. package/components/LockedRecord/LockedRecord.js.map +1 -0
  21. package/components/LockedRecord/LockedRecordForceUnlock.d.ts +9 -0
  22. package/components/LockedRecord/LockedRecordForceUnlock.js +117 -0
  23. package/components/LockedRecord/LockedRecordForceUnlock.js.map +1 -0
  24. package/components/LockedRecord/index.d.ts +1 -0
  25. package/components/LockedRecord/index.js +18 -0
  26. package/components/LockedRecord/index.js.map +1 -0
  27. package/components/RecordLockingProvider.d.ts +7 -0
  28. package/components/RecordLockingProvider.js +130 -0
  29. package/components/RecordLockingProvider.js.map +1 -0
  30. package/components/assets/lock.svg +13 -0
  31. package/components/decorators/UseContentEntriesListHookDecorator.d.ts +2 -0
  32. package/components/decorators/UseContentEntriesListHookDecorator.js +28 -0
  33. package/components/decorators/UseContentEntriesListHookDecorator.js.map +1 -0
  34. package/components/decorators/UseSaveEntryDecorator.d.ts +2 -0
  35. package/components/decorators/UseSaveEntryDecorator.js +55 -0
  36. package/components/decorators/UseSaveEntryDecorator.js.map +1 -0
  37. package/domain/RecordLocking.d.ts +32 -0
  38. package/domain/RecordLocking.js +379 -0
  39. package/domain/RecordLocking.js.map +1 -0
  40. package/domain/RecordLockingClient.d.ts +12 -0
  41. package/domain/RecordLockingClient.js +33 -0
  42. package/domain/RecordLockingClient.js.map +1 -0
  43. package/domain/RecordLockingGetLockRecord.d.ts +11 -0
  44. package/domain/RecordLockingGetLockRecord.js +34 -0
  45. package/domain/RecordLockingGetLockRecord.js.map +1 -0
  46. package/domain/RecordLockingGetLockedEntryLockRecord.d.ts +11 -0
  47. package/domain/RecordLockingGetLockedEntryLockRecord.js +32 -0
  48. package/domain/RecordLockingGetLockedEntryLockRecord.js.map +1 -0
  49. package/domain/RecordLockingIsEntryLocked.d.ts +11 -0
  50. package/domain/RecordLockingIsEntryLocked.js +32 -0
  51. package/domain/RecordLockingIsEntryLocked.js.map +1 -0
  52. package/domain/RecordLockingListLockRecords.d.ts +12 -0
  53. package/domain/RecordLockingListLockRecords.js +42 -0
  54. package/domain/RecordLockingListLockRecords.js.map +1 -0
  55. package/domain/RecordLockingLockEntry.d.ts +11 -0
  56. package/domain/RecordLockingLockEntry.js +28 -0
  57. package/domain/RecordLockingLockEntry.js.map +1 -0
  58. package/domain/RecordLockingUnlockEntry.d.ts +11 -0
  59. package/domain/RecordLockingUnlockEntry.js +32 -0
  60. package/domain/RecordLockingUnlockEntry.js.map +1 -0
  61. package/domain/RecordLockingUnlockEntryRequest.d.ts +11 -0
  62. package/domain/RecordLockingUnlockEntryRequest.js +28 -0
  63. package/domain/RecordLockingUnlockEntryRequest.js.map +1 -0
  64. package/domain/RecordLockingUpdateEntryLock.d.ts +11 -0
  65. package/domain/RecordLockingUpdateEntryLock.js +32 -0
  66. package/domain/RecordLockingUpdateEntryLock.js.map +1 -0
  67. package/domain/abstractions/IRecordLocking.d.ts +19 -0
  68. package/domain/abstractions/IRecordLocking.js +7 -0
  69. package/domain/abstractions/IRecordLocking.js.map +1 -0
  70. package/domain/abstractions/IRecordLockingClient.d.ts +6 -0
  71. package/domain/abstractions/IRecordLockingClient.js +7 -0
  72. package/domain/abstractions/IRecordLockingClient.js.map +1 -0
  73. package/domain/abstractions/IRecordLockingGetLockRecord.d.ts +12 -0
  74. package/domain/abstractions/IRecordLockingGetLockRecord.js +7 -0
  75. package/domain/abstractions/IRecordLockingGetLockRecord.js.map +1 -0
  76. package/domain/abstractions/IRecordLockingGetLockedEntryLockRecord.d.ts +12 -0
  77. package/domain/abstractions/IRecordLockingGetLockedEntryLockRecord.js +7 -0
  78. package/domain/abstractions/IRecordLockingGetLockedEntryLockRecord.js.map +1 -0
  79. package/domain/abstractions/IRecordLockingIsEntryLocked.d.ts +8 -0
  80. package/domain/abstractions/IRecordLockingIsEntryLocked.js +7 -0
  81. package/domain/abstractions/IRecordLockingIsEntryLocked.js.map +1 -0
  82. package/domain/abstractions/IRecordLockingListLockRecords.d.ts +19 -0
  83. package/domain/abstractions/IRecordLockingListLockRecords.js +7 -0
  84. package/domain/abstractions/IRecordLockingListLockRecords.js.map +1 -0
  85. package/domain/abstractions/IRecordLockingLockEntry.d.ts +12 -0
  86. package/domain/abstractions/IRecordLockingLockEntry.js +7 -0
  87. package/domain/abstractions/IRecordLockingLockEntry.js.map +1 -0
  88. package/domain/abstractions/IRecordLockingUnlockEntry.d.ts +13 -0
  89. package/domain/abstractions/IRecordLockingUnlockEntry.js +7 -0
  90. package/domain/abstractions/IRecordLockingUnlockEntry.js.map +1 -0
  91. package/domain/abstractions/IRecordLockingUnlockEntryRequest.d.ts +12 -0
  92. package/domain/abstractions/IRecordLockingUnlockEntryRequest.js +7 -0
  93. package/domain/abstractions/IRecordLockingUnlockEntryRequest.js.map +1 -0
  94. package/domain/abstractions/IRecordLockingUpdateEntryLock.d.ts +12 -0
  95. package/domain/abstractions/IRecordLockingUpdateEntryLock.js +7 -0
  96. package/domain/abstractions/IRecordLockingUpdateEntryLock.js.map +1 -0
  97. package/domain/graphql/fields.d.ts +2 -0
  98. package/domain/graphql/fields.js +10 -0
  99. package/domain/graphql/fields.js.map +1 -0
  100. package/domain/graphql/getLockRecord.d.ts +12 -0
  101. package/domain/graphql/getLockRecord.js +14 -0
  102. package/domain/graphql/getLockRecord.js.map +1 -0
  103. package/domain/graphql/getLockedEntryLockRecord.d.ts +12 -0
  104. package/domain/graphql/getLockedEntryLockRecord.js +14 -0
  105. package/domain/graphql/getLockedEntryLockRecord.js.map +1 -0
  106. package/domain/graphql/isEntryLocked.d.ts +12 -0
  107. package/domain/graphql/isEntryLocked.js +14 -0
  108. package/domain/graphql/isEntryLocked.js.map +1 -0
  109. package/domain/graphql/listLockRecords.d.ts +17 -0
  110. package/domain/graphql/listLockRecords.js +17 -0
  111. package/domain/graphql/listLockRecords.js.map +1 -0
  112. package/domain/graphql/lockEntry.d.ts +12 -0
  113. package/domain/graphql/lockEntry.js +16 -0
  114. package/domain/graphql/lockEntry.js.map +1 -0
  115. package/domain/graphql/unlockEntry.d.ts +12 -0
  116. package/domain/graphql/unlockEntry.js +14 -0
  117. package/domain/graphql/unlockEntry.js.map +1 -0
  118. package/domain/graphql/unlockEntryRequest.d.ts +12 -0
  119. package/domain/graphql/unlockEntryRequest.js +16 -0
  120. package/domain/graphql/unlockEntryRequest.js.map +1 -0
  121. package/domain/graphql/updateEntryLock.d.ts +12 -0
  122. package/domain/graphql/updateEntryLock.js +14 -0
  123. package/domain/graphql/updateEntryLock.js.map +1 -0
  124. package/domain/utils/createRecordLockingClient.d.ts +3 -0
  125. package/domain/utils/createRecordLockingClient.js +18 -0
  126. package/domain/utils/createRecordLockingClient.js.map +1 -0
  127. package/domain/utils/createRecordLockingError.d.ts +6 -0
  128. package/domain/utils/createRecordLockingError.js +22 -0
  129. package/domain/utils/createRecordLockingError.js.map +1 -0
  130. package/hooks/index.d.ts +2 -0
  131. package/hooks/index.js +29 -0
  132. package/hooks/index.js.map +1 -0
  133. package/hooks/usePermission.d.ts +3 -0
  134. package/hooks/usePermission.js +21 -0
  135. package/hooks/usePermission.js.map +1 -0
  136. package/hooks/useRecordLocking.d.ts +2 -0
  137. package/hooks/useRecordLocking.js +18 -0
  138. package/hooks/useRecordLocking.js.map +1 -0
  139. package/index.d.ts +7 -0
  140. package/index.js +57 -0
  141. package/index.js.map +1 -0
  142. package/package.json +58 -0
  143. package/types.d.ts +72 -0
  144. package/types.js +7 -0
  145. package/types.js.map +1 -0
  146. package/utils/createCacheKey.d.ts +3 -0
  147. package/utils/createCacheKey.js +21 -0
  148. package/utils/createCacheKey.js.map +1 -0
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_reactHooks","_RecordLocking","_appAdmin","RecordLockingContext","exports","React","createContext","isSameArray","existingRecords","newRecords","length","every","record","some","newRecord","id","savedOn","RecordLockingProvider","props","client","useApolloClient","_useState","useState","_useState2","_slicedToArray2","default","loading","setLoading","recordLocking","useMemo","createRecordLocking","_useStateIfMounted","useStateIfMounted","_useStateIfMounted2","error","setError","_useStateIfMounted3","_useStateIfMounted4","records","setRecords","setRecordsIfNeeded","useCallback","sameArray","value","updateEntryLock","params","result","target","data","message","code","prev","map","item","entryId","_objectSpread2","$locked","unlockEntry","unlockEntryForce","isLockExpired","input","isRecordLocked","getLockRecordEntry","removeEntryLock","fetchLockRecord","ex","fetchLockedEntryLockRecord","folderId","type","createElement","Provider","Object","assign"],"sources":["RecordLockingProvider.tsx"],"sourcesContent":["import React, { useCallback, useMemo, useState } from \"react\";\nimport { useApolloClient } from \"@apollo/react-hooks\";\nimport { createRecordLocking } from \"~/domain/RecordLocking\";\nimport {\n IFetchLockedEntryLockRecordParams,\n IFetchLockRecordParams,\n IPossiblyRecordLockingRecord,\n IRecordLockingContext,\n IRecordLockingError,\n IUnlockEntryParams,\n IUpdateEntryLockParams\n} from \"~/types\";\nimport { useStateIfMounted } from \"@webiny/app-admin\";\n\nexport interface IRecordLockingProviderProps {\n children: React.ReactNode;\n}\n\nexport const RecordLockingContext = React.createContext({} as unknown as IRecordLockingContext);\n\nconst isSameArray = (\n existingRecords: Pick<IPossiblyRecordLockingRecord, \"id\" | \"savedOn\">[],\n newRecords: Pick<IPossiblyRecordLockingRecord, \"id\" | \"savedOn\">[]\n): boolean => {\n if (existingRecords.length !== newRecords.length) {\n return false;\n }\n return existingRecords.every(record => {\n return newRecords.some(\n newRecord => newRecord.id === record.id && newRecord.savedOn === record.savedOn\n );\n });\n};\n\nexport const RecordLockingProvider = (props: IRecordLockingProviderProps) => {\n const client = useApolloClient();\n\n const [loading, setLoading] = useState(false);\n\n const recordLocking = useMemo(() => {\n return createRecordLocking({\n client,\n setLoading\n });\n }, []);\n\n const [error, setError] = useStateIfMounted<IRecordLockingError | null>(null);\n\n const [records, setRecords] = useStateIfMounted<IPossiblyRecordLockingRecord[]>([]);\n\n const setRecordsIfNeeded = useCallback(\n (newRecords: IPossiblyRecordLockingRecord[]) => {\n const sameArray = isSameArray(records, newRecords);\n if (sameArray) {\n return;\n }\n setRecords(newRecords);\n },\n [records]\n );\n\n const value: IRecordLockingContext = {\n async updateEntryLock(params: IUpdateEntryLockParams) {\n const result = await recordLocking.updateEntryLock(params);\n if (result.error) {\n setError(result.error);\n return;\n }\n const target = result.data;\n if (!target?.id) {\n setError({\n message: \"No data returned from server.\",\n code: \"NO_DATA\"\n });\n return;\n }\n\n setRecords(prev => {\n return prev.map(item => {\n if (item.entryId === target.id) {\n return {\n ...item,\n $locked: result.data\n };\n }\n return item;\n });\n });\n },\n async unlockEntry(params: IUnlockEntryParams) {\n return await recordLocking.unlockEntry(params);\n },\n async unlockEntryForce(params: IUnlockEntryParams) {\n return await recordLocking.unlockEntry(params, true);\n },\n isLockExpired(input: Date | string): boolean {\n return recordLocking.isLockExpired(input);\n },\n isRecordLocked(record) {\n if (!record) {\n return false;\n }\n return recordLocking.isRecordLocked(record);\n },\n getLockRecordEntry(id: string) {\n return recordLocking.getLockRecordEntry(id);\n },\n removeEntryLock(params: IUnlockEntryParams) {\n return recordLocking.removeEntryLock(params);\n },\n async fetchLockRecord(params: IFetchLockRecordParams) {\n try {\n return await recordLocking.fetchLockRecord(params);\n } catch (ex) {\n return {\n data: null,\n error: ex\n };\n }\n },\n async fetchLockedEntryLockRecord(params: IFetchLockedEntryLockRecordParams) {\n return recordLocking.fetchLockedEntryLockRecord(params);\n },\n async setRecords(folderId, type, newRecords) {\n setRecordsIfNeeded(newRecords);\n\n const result = await recordLocking.setRecords(folderId, type, newRecords);\n if (!result) {\n return;\n }\n setRecords(result);\n },\n error,\n records,\n loading\n };\n\n return <RecordLockingContext.Provider {...props} value={value} />;\n};\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,13 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg width="24px" height="24px" version="1.1" xmlns="http://www.w3.org/2000/svg">
3
+ <g stroke-width="1" fill="none" fill-rule="evenodd">
4
+ <g>
5
+ <g>
6
+ <polygon points="0 0 24 0 24 24 0 24"/>
7
+ <polygon opacity="0.87" points="0 0 24 0 24 24 0 24"/>
8
+ </g>
9
+ <path d="M18,8 L17,8 L17,6 C17,3.24 14.76,1 12,1 C9.24,1 7,3.24 7,6 L7,8 L6,8 C4.9,8 4,8.9 4,10 L4,20 C4,21.1 4.9,22 6,22 L18,22 C19.1,22 20,21.1 20,20 L20,10 C20,8.9 19.1,8 18,8 Z M12,17 C10.9,17 10,16.1 10,15 C10,13.9 10.9,13 12,13 C13.1,13 14,13.9 14,15 C14,16.1 13.1,17 12,17 Z M9,8 L9,6 C9,4.34 10.34,3 12,3 C13.66,3 15,4.34 15,6 L15,8 L9,8 Z"
10
+ fill="#D8D8D8" fill-rule="nonzero"/>
11
+ </g>
12
+ </g>
13
+ </svg>
@@ -0,0 +1,2 @@
1
+ /// <reference types="react" />
2
+ export declare const UseContentEntriesListHookDecorator: () => import("react").JSX.Element;
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.UseContentEntriesListHookDecorator = void 0;
8
+ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
9
+ var _react = require("react");
10
+ var _appHeadlessCms = require("@webiny/app-headless-cms");
11
+ var _hooks = require("../../hooks");
12
+ var UseContentEntriesListHookDecorator = exports.UseContentEntriesListHookDecorator = _appHeadlessCms.ContentEntryListConfig.ContentEntries.useContentEntriesList.createDecorator(function (originalHook) {
13
+ return function RecordLockingUseContentEntriesList() {
14
+ var value = originalHook();
15
+ var recordLocking = (0, _hooks.useRecordLocking)();
16
+ (0, _react.useEffect)(function () {
17
+ if (!value.records) {
18
+ return;
19
+ }
20
+ recordLocking.setRecords(value.folderId, value.modelId, value.records);
21
+ }, [value.folderId, value.modelId, value.records, recordLocking]);
22
+ return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, value), {}, {
23
+ records: recordLocking.records
24
+ });
25
+ };
26
+ });
27
+
28
+ //# sourceMappingURL=UseContentEntriesListHookDecorator.js.map
@@ -0,0 +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":[]}
@@ -0,0 +1,2 @@
1
+ /// <reference types="react" />
2
+ export declare const UseSaveEntryDecorator: () => import("react").JSX.Element;
@@ -0,0 +1,55 @@
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 _ContentEntryEditorCo = _appHeadlessCms.ContentEntryEditorConfig.ContentEntry,
14
+ ContentEntryForm = _ContentEntryEditorCo.ContentEntryForm,
15
+ useContentEntry = _ContentEntryEditorCo.useContentEntry;
16
+ var UseSaveEntryDecorator = exports.UseSaveEntryDecorator = ContentEntryForm.useContentEntryForm.createDecorator(function (originalHook) {
17
+ return function useRecordLockingUseSave() {
18
+ var hook = originalHook();
19
+ var _useContentEntry = useContentEntry(),
20
+ entry = _useContentEntry.entry,
21
+ model = _useContentEntry.contentModel;
22
+ var _useRecordLocking = (0, _hooks.useRecordLocking)(),
23
+ fetchLockedEntryLockRecord = _useRecordLocking.fetchLockedEntryLockRecord,
24
+ updateEntryLock = _useRecordLocking.updateEntryLock;
25
+ var _useSnackbar = (0, _appAdmin.useSnackbar)(),
26
+ showSnackbar = _useSnackbar.showSnackbar;
27
+ var saveEntry = (0, _react.useCallback)(async function () {
28
+ if (!entry.id) {
29
+ return hook.saveEntry.apply(hook, arguments);
30
+ }
31
+ var result = await fetchLockedEntryLockRecord({
32
+ id: entry.id,
33
+ $lockingType: model.modelId
34
+ });
35
+ if (result?.lockedBy) {
36
+ var lockedBy = result.lockedBy;
37
+ showSnackbar("It seems that the entry is locked by ".concat(lockedBy.displayName || lockedBy.id, ". You can't save your changes."));
38
+ return null;
39
+ }
40
+ var saveResult = await hook.saveEntry.apply(hook, arguments);
41
+ if (saveResult) {
42
+ await updateEntryLock({
43
+ id: saveResult.id,
44
+ $lockingType: model.modelId
45
+ });
46
+ }
47
+ return saveResult;
48
+ }, [entry?.id, model.modelId, updateEntryLock]);
49
+ return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, hook), {}, {
50
+ saveEntry: saveEntry
51
+ });
52
+ };
53
+ });
54
+
55
+ //# sourceMappingURL=UseSaveEntryDecorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","require","_hooks","_appHeadlessCms","_appAdmin","_ContentEntryEditorCo","ContentEntryEditorConfig","ContentEntry","ContentEntryForm","useContentEntry","UseSaveEntryDecorator","exports","useContentEntryForm","createDecorator","originalHook","useRecordLockingUseSave","hook","_useContentEntry","entry","model","contentModel","_useRecordLocking","useRecordLocking","fetchLockedEntryLockRecord","updateEntryLock","_useSnackbar","useSnackbar","showSnackbar","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 } from \"@webiny/app-headless-cms\";\nimport { useSnackbar } from \"@webiny/app-admin\";\n\nconst {\n ContentEntry: { ContentEntryForm, useContentEntry }\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 { entry, contentModel: model } = useContentEntry();\n const { fetchLockedEntryLockRecord, updateEntryLock } = useRecordLocking();\n const { showSnackbar } = useSnackbar();\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,IAAAI,qBAAA,GAEIC,wCAAwB,CADxBC,YAAY;EAAIC,gBAAgB,GAAAH,qBAAA,CAAhBG,gBAAgB;EAAEC,eAAe,GAAAJ,qBAAA,CAAfI,eAAe;AAK9C,IAAMC,qBAAqB,GAAAC,OAAA,CAAAD,qBAAA,GAAGF,gBAAgB,CAACI,mBAAmB,CAACC,eAAe,CACrF,UAAAC,YAAY,EAAI;EACZ,OAAO,SAASC,uBAAuBA,CAAA,EAAG;IACtC,IAAMC,IAAI,GAAGF,YAAY,CAAC,CAAC;IAC3B,IAAAG,gBAAA,GAAuCR,eAAe,CAAC,CAAC;MAAhDS,KAAK,GAAAD,gBAAA,CAALC,KAAK;MAAgBC,KAAK,GAAAF,gBAAA,CAAnBG,YAAY;IAC3B,IAAAC,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;IAEpB,IAAMC,SAAoB,GAAG,IAAAC,kBAAW,EACpC,kBAAqB;MACjB,IAAI,CAACX,KAAK,CAACY,EAAE,EAAE;QACX,OAAOd,IAAI,CAACY,SAAS,CAAAG,KAAA,CAAdf,IAAI,EAAAgB,SAAoB,CAAC;MACpC;MAEA,IAAMC,MAAM,GAAG,MAAMV,0BAA0B,CAAC;QAC5CO,EAAE,EAAEZ,KAAK,CAACY,EAAE;QACZI,YAAY,EAAEf,KAAK,CAACgB;MACxB,CAAC,CAAC;MAEF,IAAIF,MAAM,EAAEG,QAAQ,EAAE;QAClB,IAAMA,QAAQ,GAAGH,MAAM,CAACG,QAAQ;QAChCT,YAAY,yCAAAU,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,MAAMf,eAAe,CAAC;UAClBM,EAAE,EAAES,UAAU,CAACT,EAAE;UACjBI,YAAY,EAAEf,KAAK,CAACgB;QACxB,CAAC,CAAC;MACN;MAEA,OAAOI,UAAU;IACrB,CAAC,EACD,CAACrB,KAAK,EAAEY,EAAE,EAAEX,KAAK,CAACgB,OAAO,EAAEX,eAAe,CAC9C,CAAC;IAED,WAAAgB,cAAA,CAAAC,OAAA,MAAAD,cAAA,CAAAC,OAAA,MACOzB,IAAI;MACPY,SAAS,EAATA;IAAS;EAEjB,CAAC;AACL,CACJ,CAAC","ignoreList":[]}
@@ -0,0 +1,32 @@
1
+ import { IRecordLocking } from "./abstractions/IRecordLocking";
2
+ import { ApolloClient } from "apollo-client";
3
+ import { IRecordLockingGetLockRecord } from "./abstractions/IRecordLockingGetLockRecord";
4
+ import { IRecordLockingIsEntryLocked } from "./abstractions/IRecordLockingIsEntryLocked";
5
+ import { IRecordLockingListLockRecords } from "./abstractions/IRecordLockingListLockRecords";
6
+ import { IRecordLockingLockEntry } from "./abstractions/IRecordLockingLockEntry";
7
+ import { IRecordLockingUnlockEntry } from "./abstractions/IRecordLockingUnlockEntry";
8
+ import { IRecordLockingUnlockEntryRequest } from "./abstractions/IRecordLockingUnlockEntryRequest";
9
+ import { IRecordLockingError, IRecordLockingRecord } from "../types";
10
+ import { IRecordLockingClient } from "./abstractions/IRecordLockingClient";
11
+ import { IRecordLockingUpdateEntryLock } from "./abstractions/IRecordLockingUpdateEntryLock";
12
+ import { IRecordLockingGetLockedEntryLockRecord } from "./abstractions/IRecordLockingGetLockedEntryLockRecord";
13
+ export interface ICreateRecordLockingParams {
14
+ client: ApolloClient<any>;
15
+ setLoading: (loading: boolean) => void;
16
+ }
17
+ export interface IRecordLockingParams {
18
+ client: IRecordLockingClient;
19
+ setLoading: (loading: boolean) => void;
20
+ getLockRecord: IRecordLockingGetLockRecord;
21
+ getLockedEntryLockRecord: IRecordLockingGetLockedEntryLockRecord;
22
+ isEntryLocked: IRecordLockingIsEntryLocked;
23
+ listLockRecords: IRecordLockingListLockRecords;
24
+ lockEntry: IRecordLockingLockEntry;
25
+ unlockEntry: IRecordLockingUnlockEntry;
26
+ unlockEntryRequest: IRecordLockingUnlockEntryRequest;
27
+ updateEntryLock: IRecordLockingUpdateEntryLock;
28
+ }
29
+ export interface IOnErrorCb {
30
+ (error: IRecordLockingError): void;
31
+ }
32
+ export declare const createRecordLocking: <T extends IRecordLockingRecord>(config: ICreateRecordLockingParams) => IRecordLocking;
@@ -0,0 +1,379 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.createRecordLocking = void 0;
8
+ var _createForOfIteratorHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/createForOfIteratorHelper"));
9
+ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
10
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
12
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
+ var _RecordLockingGetLockRecord = require("./RecordLockingGetLockRecord");
14
+ var _RecordLockingIsEntryLocked = require("./RecordLockingIsEntryLocked");
15
+ var _RecordLockingListLockRecords = require("./RecordLockingListLockRecords");
16
+ var _RecordLockingLockEntry = require("./RecordLockingLockEntry");
17
+ var _RecordLockingUnlockEntry = require("./RecordLockingUnlockEntry");
18
+ var _RecordLockingUnlockEntryRequest = require("./RecordLockingUnlockEntryRequest");
19
+ var _RecordLockingClient = require("./RecordLockingClient");
20
+ var _createRecordLockingError = require("./utils/createRecordLockingError");
21
+ var _parseIdentifier9 = require("@webiny/utils/parseIdentifier");
22
+ var _createCacheKey = require("../utils/createCacheKey");
23
+ var _RecordLockingUpdateEntryLock = require("./RecordLockingUpdateEntryLock");
24
+ var _RecordLockingGetLockedEntryLockRecord = require("./RecordLockingGetLockedEntryLockRecord");
25
+ var RecordLocking = /*#__PURE__*/function () {
26
+ function RecordLocking(params) {
27
+ (0, _classCallCheck2.default)(this, RecordLocking);
28
+ (0, _defineProperty2.default)(this, "loading", false);
29
+ (0, _defineProperty2.default)(this, "records", []);
30
+ (0, _defineProperty2.default)(this, "onErrorCb", null);
31
+ this.client = params.client;
32
+ this._setLoading = params.setLoading;
33
+ this._getLockRecord = params.getLockRecord;
34
+ this._getLockedEntryLockRecord = params.getLockedEntryLockRecord;
35
+ this._isEntryLocked = params.isEntryLocked;
36
+ this._listLockRecords = params.listLockRecords;
37
+ this._lockEntry = params.lockEntry;
38
+ this._unlockEntry = params.unlockEntry;
39
+ this._unlockEntryRequest = params.unlockEntryRequest;
40
+ this._updateEntryLock = params.updateEntryLock;
41
+ }
42
+ return (0, _createClass2.default)(RecordLocking, [{
43
+ key: "setRecords",
44
+ value: async function setRecords(folderId, type, records) {
45
+ var result = await this.fetchAndAssignRecords(folderId, type, records);
46
+ if (!result) {
47
+ return undefined;
48
+ }
49
+ return result.map(function (record) {
50
+ var _parseIdentifier = (0, _parseIdentifier9.parseIdentifier)(record.id),
51
+ entryId = _parseIdentifier.id;
52
+ return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, record), {}, {
53
+ $lockingType: type,
54
+ $locked: record.$locked,
55
+ $selectable: record.$locked ? false : record.$selectable,
56
+ entryId: entryId
57
+ });
58
+ });
59
+ }
60
+ }, {
61
+ key: "fetchLockRecord",
62
+ value: async function fetchLockRecord(params) {
63
+ var id = params.id,
64
+ $lockingType = params.$lockingType;
65
+ var _parseIdentifier2 = (0, _parseIdentifier9.parseIdentifier)(id),
66
+ entryId = _parseIdentifier2.id;
67
+ try {
68
+ var result = await this._getLockRecord.execute({
69
+ id: entryId,
70
+ type: $lockingType
71
+ });
72
+ return {
73
+ data: result.data,
74
+ error: result.error
75
+ };
76
+ } catch (ex) {
77
+ return {
78
+ data: null,
79
+ error: ex
80
+ };
81
+ }
82
+ }
83
+ }, {
84
+ key: "fetchLockedEntryLockRecord",
85
+ value: async function fetchLockedEntryLockRecord(params) {
86
+ var id = params.id,
87
+ $lockingType = params.$lockingType;
88
+ var _parseIdentifier3 = (0, _parseIdentifier9.parseIdentifier)(id),
89
+ entryId = _parseIdentifier3.id;
90
+ var result = await this._getLockedEntryLockRecord.execute({
91
+ id: entryId,
92
+ type: $lockingType
93
+ });
94
+ return result.data;
95
+ }
96
+ }, {
97
+ key: "getLockRecordEntry",
98
+ value: function getLockRecordEntry(id) {
99
+ return this.records.find(function (record) {
100
+ var _parseIdentifier4 = (0, _parseIdentifier9.parseIdentifier)(id),
101
+ entryId = _parseIdentifier4.id;
102
+ return record.entryId === entryId;
103
+ });
104
+ }
105
+ }, {
106
+ key: "isRecordLocked",
107
+ value: function isRecordLocked(record) {
108
+ var result = this.records.find(function (r) {
109
+ var _parseIdentifier5 = (0, _parseIdentifier9.parseIdentifier)(record.id),
110
+ entryId = _parseIdentifier5.id;
111
+ return r.entryId === entryId && !!r.$locked && r.$lockingType === record.$lockingType;
112
+ });
113
+ if (!result?.$locked?.expiresOn) {
114
+ return false;
115
+ }
116
+ var isExpired = this.isLockExpired(result.$locked.expiresOn);
117
+ return !isExpired;
118
+ }
119
+ }, {
120
+ key: "updateEntryLock",
121
+ value: async function updateEntryLock(params) {
122
+ try {
123
+ return await this._updateEntryLock.execute({
124
+ id: params.id,
125
+ type: params.$lockingType
126
+ });
127
+ } catch (ex) {
128
+ this.triggerOnError(ex);
129
+ return {
130
+ data: null,
131
+ error: ex
132
+ };
133
+ }
134
+ }
135
+ }, {
136
+ key: "removeEntryLock",
137
+ value: function removeEntryLock(params) {
138
+ var index = this.records.findIndex(function (record) {
139
+ return record.entryId === params.id && record.$lockingType === params.$lockingType;
140
+ });
141
+ if (index === -1) {
142
+ return;
143
+ }
144
+ this.records[index] = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, this.records[index]), {}, {
145
+ $locked: null,
146
+ $selectable: true
147
+ });
148
+ }
149
+ }, {
150
+ key: "unlockEntry",
151
+ value: async function unlockEntry(params, force) {
152
+ try {
153
+ var result = await this._unlockEntry.execute({
154
+ id: params.id,
155
+ type: params.$lockingType,
156
+ force: force
157
+ });
158
+ var id = result.data?.id;
159
+ if (!id) {
160
+ return result;
161
+ }
162
+ var index = this.records.findIndex(function (r) {
163
+ return r.entryId === id;
164
+ });
165
+ if (index === -1) {
166
+ return result;
167
+ }
168
+ this.records[index] = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, this.records[index]), {}, {
169
+ $locked: undefined,
170
+ $selectable: true
171
+ });
172
+ return result;
173
+ } catch (ex) {
174
+ this.triggerOnError(ex);
175
+ return {
176
+ data: null,
177
+ error: ex
178
+ };
179
+ }
180
+ }
181
+ }, {
182
+ key: "onError",
183
+ value: function onError(cb) {
184
+ this.onErrorCb = cb;
185
+ }
186
+ }, {
187
+ key: "triggerOnError",
188
+ value: function triggerOnError(error) {
189
+ this.setIsLoading(false);
190
+ if (!this.onErrorCb) {
191
+ return;
192
+ }
193
+ this.onErrorCb(error);
194
+ }
195
+ }, {
196
+ key: "isLockExpired",
197
+ value: function isLockExpired(input) {
198
+ var expiresOn = new Date(input);
199
+ return expiresOn <= new Date();
200
+ }
201
+ }, {
202
+ key: "setIsLoading",
203
+ value: function setIsLoading(loading) {
204
+ this._setLoading(loading);
205
+ this.loading = loading;
206
+ }
207
+ }, {
208
+ key: "fetchAndAssignRecords",
209
+ value: async function fetchAndAssignRecords(folderId, type, records) {
210
+ var _this = this;
211
+ if (records.length === 0) {
212
+ return;
213
+ } else if (this.loading) {
214
+ return;
215
+ }
216
+ var assignedIdList = await this.assignRecords(folderId, type, records);
217
+ if (assignedIdList.length === 0) {
218
+ return;
219
+ }
220
+ this.setIsLoading(true);
221
+ var result;
222
+ try {
223
+ result = await this._listLockRecords.execute({
224
+ where: {
225
+ id_in: assignedIdList,
226
+ type: type
227
+ },
228
+ limit: 10000
229
+ });
230
+ } catch (ex) {
231
+ console.error(ex);
232
+ this.triggerOnError(ex);
233
+ return;
234
+ } finally {
235
+ this.setIsLoading(false);
236
+ }
237
+ if (result.error) {
238
+ this.triggerOnError(result.error);
239
+ return;
240
+ } else if (!result.data) {
241
+ this.triggerOnError((0, _createRecordLockingError.createRecordLockingError)({
242
+ message: "There is no data in the result and there is no error. Please check the network tab for more info.",
243
+ code: "NO_DATA_IN_RESULT"
244
+ }));
245
+ return;
246
+ } else if (result.data.length === 0) {
247
+ return;
248
+ }
249
+ var _iterator = (0, _createForOfIteratorHelper2.default)(result.data),
250
+ _step;
251
+ try {
252
+ var _loop = async function _loop() {
253
+ var record = _step.value;
254
+ var index = _this.records.findIndex(function (r) {
255
+ var _parseIdentifier6 = (0, _parseIdentifier9.parseIdentifier)(record.id),
256
+ entryId = _parseIdentifier6.id;
257
+ return r.entryId === entryId;
258
+ });
259
+ if (index < 0) {
260
+ console.error("There is no record with id ".concat(record.id, " in the records array."));
261
+ return 1; // continue
262
+ }
263
+ _this.records[index] = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, _this.records[index]), {}, {
264
+ $locked: {
265
+ lockedBy: record.lockedBy,
266
+ expiresOn: record.expiresOn,
267
+ lockedOn: record.lockedOn,
268
+ actions: record.actions
269
+ }
270
+ });
271
+ };
272
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
273
+ if (await _loop()) continue;
274
+ }
275
+ } catch (err) {
276
+ _iterator.e(err);
277
+ } finally {
278
+ _iterator.f();
279
+ }
280
+ return this.records;
281
+ }
282
+ /**
283
+ * Assign records and return the assigned ID list.
284
+ */
285
+ }, {
286
+ key: "assignRecords",
287
+ value: async function assignRecords(folderId, type, records) {
288
+ var _this2 = this;
289
+ /**
290
+ * First we check the record keys against ones in the local cache.
291
+ */
292
+ var keys = records.map(function (record) {
293
+ if (record.entryId) {
294
+ return record.entryId;
295
+ }
296
+ var _parseIdentifier7 = (0, _parseIdentifier9.parseIdentifier)(record.id),
297
+ entryId = _parseIdentifier7.id;
298
+ return entryId;
299
+ });
300
+ var cacheKey = await (0, _createCacheKey.createCacheKey)(keys);
301
+ if (this.currentRecordsCacheKey === cacheKey) {
302
+ return [];
303
+ }
304
+ this.currentRecordsCacheKey = cacheKey;
305
+
306
+ /**
307
+ * Reset records if new type is not as same as the old type / folderId.
308
+ */
309
+ if (this.currentRecordType !== type || this.currentFolderId !== folderId) {
310
+ this.records = [];
311
+ this.currentRecordType = type;
312
+ this.currentFolderId = folderId;
313
+ }
314
+ return records.reduce(function (collection, record) {
315
+ var _parseIdentifier8 = (0, _parseIdentifier9.parseIdentifier)(record.id),
316
+ entryId = _parseIdentifier8.id;
317
+ var index = _this2.records.findIndex(function (r) {
318
+ return r.entryId === entryId;
319
+ });
320
+ if (index >= 0) {
321
+ return collection;
322
+ }
323
+ _this2.records.push((0, _objectSpread2.default)((0, _objectSpread2.default)({}, record), {}, {
324
+ entryId: entryId,
325
+ $lockingType: type,
326
+ $locked: undefined
327
+ }));
328
+ if (record.$type !== "RECORD") {
329
+ return collection;
330
+ }
331
+ collection.push(entryId);
332
+ return collection;
333
+ }, []);
334
+ }
335
+ }]);
336
+ }();
337
+ var createRecordLocking = exports.createRecordLocking = function createRecordLocking(config) {
338
+ var client = new _RecordLockingClient.RecordLockingClient({
339
+ client: config.client
340
+ });
341
+ var getLockRecord = new _RecordLockingGetLockRecord.RecordLockingGetLockRecord({
342
+ client: client
343
+ });
344
+ var getLockedEntryLockRecord = new _RecordLockingGetLockedEntryLockRecord.RecordLockingGetLockedEntryLockRecord({
345
+ client: client
346
+ });
347
+ var isEntryLocked = new _RecordLockingIsEntryLocked.RecordLockingIsEntryLocked({
348
+ client: client
349
+ });
350
+ var listLockRecords = new _RecordLockingListLockRecords.RecordLockingListLockRecords({
351
+ client: client
352
+ });
353
+ var lockEntry = new _RecordLockingLockEntry.RecordLockingLockEntry({
354
+ client: client
355
+ });
356
+ var unlockEntry = new _RecordLockingUnlockEntry.RecordLockingUnlockEntry({
357
+ client: client
358
+ });
359
+ var unlockEntryRequest = new _RecordLockingUnlockEntryRequest.RecordLockingUnlockEntryRequest({
360
+ client: client
361
+ });
362
+ var updateEntryLock = new _RecordLockingUpdateEntryLock.RecordLockingUpdateEntryLock({
363
+ client: client
364
+ });
365
+ return new RecordLocking({
366
+ client: client,
367
+ setLoading: config.setLoading,
368
+ getLockRecord: getLockRecord,
369
+ getLockedEntryLockRecord: getLockedEntryLockRecord,
370
+ isEntryLocked: isEntryLocked,
371
+ listLockRecords: listLockRecords,
372
+ updateEntryLock: updateEntryLock,
373
+ lockEntry: lockEntry,
374
+ unlockEntry: unlockEntry,
375
+ unlockEntryRequest: unlockEntryRequest
376
+ });
377
+ };
378
+
379
+ //# sourceMappingURL=RecordLocking.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_RecordLockingGetLockRecord","require","_RecordLockingIsEntryLocked","_RecordLockingListLockRecords","_RecordLockingLockEntry","_RecordLockingUnlockEntry","_RecordLockingUnlockEntryRequest","_RecordLockingClient","_createRecordLockingError","_parseIdentifier9","_createCacheKey","_RecordLockingUpdateEntryLock","_RecordLockingGetLockedEntryLockRecord","RecordLocking","params","_classCallCheck2","default","_defineProperty2","client","_setLoading","setLoading","_getLockRecord","getLockRecord","_getLockedEntryLockRecord","getLockedEntryLockRecord","_isEntryLocked","isEntryLocked","_listLockRecords","listLockRecords","_lockEntry","lockEntry","_unlockEntry","unlockEntry","_unlockEntryRequest","unlockEntryRequest","_updateEntryLock","updateEntryLock","_createClass2","key","value","setRecords","folderId","type","records","result","fetchAndAssignRecords","undefined","map","record","_parseIdentifier","parseIdentifier","id","entryId","_objectSpread2","$lockingType","$locked","$selectable","fetchLockRecord","_parseIdentifier2","execute","data","error","ex","fetchLockedEntryLockRecord","_parseIdentifier3","getLockRecordEntry","find","_parseIdentifier4","isRecordLocked","r","_parseIdentifier5","expiresOn","isExpired","isLockExpired","triggerOnError","removeEntryLock","index","findIndex","force","onError","cb","onErrorCb","setIsLoading","input","Date","loading","_this","length","assignedIdList","assignRecords","where","id_in","limit","console","createRecordLockingError","message","code","_iterator","_createForOfIteratorHelper2","_step","_loop","_parseIdentifier6","concat","lockedBy","lockedOn","actions","s","n","done","err","e","f","_this2","keys","_parseIdentifier7","cacheKey","createCacheKey","currentRecordsCacheKey","currentRecordType","currentFolderId","reduce","collection","_parseIdentifier8","push","$type","createRecordLocking","exports","config","RecordLockingClient","RecordLockingGetLockRecord","RecordLockingGetLockedEntryLockRecord","RecordLockingIsEntryLocked","RecordLockingListLockRecords","RecordLockingLockEntry","RecordLockingUnlockEntry","RecordLockingUnlockEntryRequest","RecordLockingUpdateEntryLock"],"sources":["RecordLocking.ts"],"sourcesContent":["import { IRecordLocking, IRecordLockingUpdateEntryLockResult } from \"./abstractions/IRecordLocking\";\nimport { ApolloClient } from \"apollo-client\";\nimport { RecordLockingGetLockRecord } from \"./RecordLockingGetLockRecord\";\nimport { RecordLockingIsEntryLocked } from \"./RecordLockingIsEntryLocked\";\nimport { RecordLockingListLockRecords } from \"./RecordLockingListLockRecords\";\nimport { RecordLockingLockEntry } from \"./RecordLockingLockEntry\";\nimport { RecordLockingUnlockEntry } from \"./RecordLockingUnlockEntry\";\nimport { RecordLockingUnlockEntryRequest } from \"./RecordLockingUnlockEntryRequest\";\nimport { RecordLockingClient } from \"./RecordLockingClient\";\nimport { IRecordLockingGetLockRecord } from \"./abstractions/IRecordLockingGetLockRecord\";\nimport { IRecordLockingIsEntryLocked } from \"./abstractions/IRecordLockingIsEntryLocked\";\nimport {\n IRecordLockingListLockRecords,\n IRecordLockingListLockRecordsResult\n} from \"./abstractions/IRecordLockingListLockRecords\";\nimport { IRecordLockingLockEntry } from \"./abstractions/IRecordLockingLockEntry\";\nimport {\n IRecordLockingUnlockEntry,\n IRecordLockingUnlockEntryResult\n} from \"./abstractions/IRecordLockingUnlockEntry\";\nimport { IRecordLockingUnlockEntryRequest } from \"./abstractions/IRecordLockingUnlockEntryRequest\";\nimport {\n IFetchLockedEntryLockRecordParams,\n IFetchLockRecordParams,\n IFetchLockRecordResult,\n IIsRecordLockedParams,\n IRecordLockingError,\n IRecordLockingLockRecord,\n IRecordLockingRecord,\n IPossiblyRecordLockingRecord,\n IUnlockEntryParams,\n IUpdateEntryLockParams\n} from \"~/types\";\nimport { IRecordLockingClient } from \"./abstractions/IRecordLockingClient\";\nimport { createRecordLockingError } from \"./utils/createRecordLockingError\";\nimport { parseIdentifier } from \"@webiny/utils/parseIdentifier\";\nimport { createCacheKey } from \"~/utils/createCacheKey\";\nimport { RecordLockingUpdateEntryLock } from \"~/domain/RecordLockingUpdateEntryLock\";\nimport { IRecordLockingUpdateEntryLock } from \"~/domain/abstractions/IRecordLockingUpdateEntryLock\";\nimport { RecordLockingGetLockedEntryLockRecord } from \"~/domain/RecordLockingGetLockedEntryLockRecord\";\nimport { IRecordLockingGetLockedEntryLockRecord } from \"./abstractions/IRecordLockingGetLockedEntryLockRecord\";\n\nexport interface ICreateRecordLockingParams {\n client: ApolloClient<any>;\n setLoading: (loading: boolean) => void;\n}\n\nexport interface IRecordLockingParams {\n client: IRecordLockingClient;\n setLoading: (loading: boolean) => void;\n getLockRecord: IRecordLockingGetLockRecord;\n getLockedEntryLockRecord: IRecordLockingGetLockedEntryLockRecord;\n isEntryLocked: IRecordLockingIsEntryLocked;\n listLockRecords: IRecordLockingListLockRecords;\n lockEntry: IRecordLockingLockEntry;\n unlockEntry: IRecordLockingUnlockEntry;\n unlockEntryRequest: IRecordLockingUnlockEntryRequest;\n updateEntryLock: IRecordLockingUpdateEntryLock;\n}\n\nexport interface IOnErrorCb {\n (error: IRecordLockingError): void;\n}\n\nclass RecordLocking<T extends IPossiblyRecordLockingRecord = IPossiblyRecordLockingRecord>\n implements IRecordLocking<T>\n{\n private currentRecordType?: string;\n private currentFolderId?: string;\n private currentRecordsCacheKey?: string;\n private readonly _setLoading: (loading: boolean) => void;\n public loading = false;\n public records: IRecordLockingRecord[] = [];\n\n private readonly client: IRecordLockingClient;\n private readonly _getLockRecord: IRecordLockingGetLockRecord;\n private readonly _isEntryLocked: IRecordLockingIsEntryLocked;\n private readonly _getLockedEntryLockRecord: IRecordLockingGetLockedEntryLockRecord;\n private readonly _listLockRecords: IRecordLockingListLockRecords;\n private readonly _lockEntry: IRecordLockingLockEntry;\n private readonly _unlockEntry: IRecordLockingUnlockEntry;\n private readonly _unlockEntryRequest: IRecordLockingUnlockEntryRequest;\n private readonly _updateEntryLock: IRecordLockingUpdateEntryLock;\n\n private onErrorCb: IOnErrorCb | null = null;\n\n public constructor(params: IRecordLockingParams) {\n this.client = params.client;\n this._setLoading = params.setLoading;\n this._getLockRecord = params.getLockRecord;\n this._getLockedEntryLockRecord = params.getLockedEntryLockRecord;\n this._isEntryLocked = params.isEntryLocked;\n this._listLockRecords = params.listLockRecords;\n this._lockEntry = params.lockEntry;\n this._unlockEntry = params.unlockEntry;\n this._unlockEntryRequest = params.unlockEntryRequest;\n this._updateEntryLock = params.updateEntryLock;\n }\n\n public async setRecords(\n folderId: string,\n type: string,\n records: T[]\n ): Promise<IRecordLockingRecord[] | undefined> {\n const result = await this.fetchAndAssignRecords(folderId, type, records);\n if (!result) {\n return undefined;\n }\n\n return result.map(record => {\n const { id: entryId } = parseIdentifier(record.id);\n return {\n ...record,\n $lockingType: type,\n $locked: record.$locked,\n $selectable: record.$locked ? false : record.$selectable,\n entryId\n };\n });\n }\n\n public async fetchLockRecord(params: IFetchLockRecordParams): Promise<IFetchLockRecordResult> {\n const { id, $lockingType } = params;\n\n const { id: entryId } = parseIdentifier(id);\n\n try {\n const result = await this._getLockRecord.execute({\n id: entryId,\n type: $lockingType\n });\n\n return {\n data: result.data,\n error: result.error\n };\n } catch (ex) {\n return {\n data: null,\n error: ex\n };\n }\n }\n\n public async fetchLockedEntryLockRecord(\n params: IFetchLockedEntryLockRecordParams\n ): Promise<IRecordLockingLockRecord | null> {\n const { id, $lockingType } = params;\n\n const { id: entryId } = parseIdentifier(id);\n const result = await this._getLockedEntryLockRecord.execute({\n id: entryId,\n type: $lockingType\n });\n return result.data;\n }\n\n public getLockRecordEntry(id: string): IRecordLockingRecord | undefined {\n return this.records.find(record => {\n const { id: entryId } = parseIdentifier(id);\n return record.entryId === entryId;\n });\n }\n\n public isRecordLocked(record: IIsRecordLockedParams): boolean {\n const result = this.records.find(r => {\n const { id: entryId } = parseIdentifier(record.id);\n\n return r.entryId === entryId && !!r.$locked && r.$lockingType === record.$lockingType;\n });\n if (!result?.$locked?.expiresOn) {\n return false;\n }\n const isExpired = this.isLockExpired(result.$locked.expiresOn);\n return !isExpired;\n }\n\n public async updateEntryLock(\n params: IUpdateEntryLockParams\n ): Promise<IRecordLockingUpdateEntryLockResult> {\n try {\n return await this._updateEntryLock.execute({\n id: params.id,\n type: params.$lockingType\n });\n } catch (ex) {\n this.triggerOnError(ex);\n return {\n data: null,\n error: ex\n };\n }\n }\n\n public removeEntryLock(params: IUnlockEntryParams): void {\n const index = this.records.findIndex(record => {\n return record.entryId === params.id && record.$lockingType === params.$lockingType;\n });\n if (index === -1) {\n return;\n }\n this.records[index] = {\n ...this.records[index],\n $locked: null,\n $selectable: true\n };\n }\n\n public async unlockEntry(\n params: IUnlockEntryParams,\n force?: boolean\n ): Promise<IRecordLockingUnlockEntryResult> {\n try {\n const result = await this._unlockEntry.execute({\n id: params.id,\n type: params.$lockingType,\n force\n });\n\n const id = result.data?.id;\n if (!id) {\n return result;\n }\n const index = this.records.findIndex(r => r.entryId === id);\n if (index === -1) {\n return result;\n }\n\n this.records[index] = {\n ...this.records[index],\n $locked: undefined,\n $selectable: true\n };\n\n return result;\n } catch (ex) {\n this.triggerOnError(ex);\n return {\n data: null,\n error: ex\n };\n }\n }\n\n public onError(cb: IOnErrorCb): void {\n this.onErrorCb = cb;\n }\n\n public triggerOnError(error: IRecordLockingError): void {\n this.setIsLoading(false);\n if (!this.onErrorCb) {\n return;\n }\n this.onErrorCb(error);\n }\n\n public isLockExpired(input: Date | string): boolean {\n const expiresOn = new Date(input);\n return expiresOn <= new Date();\n }\n\n private setIsLoading(loading: boolean): void {\n this._setLoading(loading);\n this.loading = loading;\n }\n\n private async fetchAndAssignRecords(\n folderId: string,\n type: string,\n records: T[]\n ): Promise<IPossiblyRecordLockingRecord[] | undefined> {\n if (records.length === 0) {\n return;\n } else if (this.loading) {\n return;\n }\n const assignedIdList = await this.assignRecords(folderId, type, records);\n if (assignedIdList.length === 0) {\n return;\n }\n this.setIsLoading(true);\n let result: IRecordLockingListLockRecordsResult;\n try {\n result = await this._listLockRecords.execute({\n where: {\n id_in: assignedIdList,\n type\n },\n limit: 10000\n });\n } catch (ex) {\n console.error(ex);\n this.triggerOnError(ex);\n return;\n } finally {\n this.setIsLoading(false);\n }\n if (result.error) {\n this.triggerOnError(result.error);\n return;\n } else if (!result.data) {\n this.triggerOnError(\n createRecordLockingError({\n message: `There is no data in the result and there is no error. Please check the network tab for more info.`,\n code: \"NO_DATA_IN_RESULT\"\n })\n );\n return;\n } else if (result.data.length === 0) {\n return;\n }\n\n for (const record of result.data) {\n const index = this.records.findIndex(r => {\n const { id: entryId } = parseIdentifier(record.id);\n return r.entryId === entryId;\n });\n if (index < 0) {\n console.error(`There is no record with id ${record.id} in the records array.`);\n continue;\n }\n this.records[index] = {\n ...this.records[index],\n $locked: {\n lockedBy: record.lockedBy,\n expiresOn: record.expiresOn,\n lockedOn: record.lockedOn,\n actions: record.actions\n }\n };\n }\n\n return this.records;\n }\n /**\n * Assign records and return the assigned ID list.\n */\n private async assignRecords(folderId: string, type: string, records: T[]): Promise<string[]> {\n /**\n * First we check the record keys against ones in the local cache.\n */\n const keys = records.map(record => {\n if (record.entryId) {\n return record.entryId;\n }\n const { id: entryId } = parseIdentifier(record.id);\n return entryId;\n });\n const cacheKey = await createCacheKey(keys);\n if (this.currentRecordsCacheKey === cacheKey) {\n return [];\n }\n this.currentRecordsCacheKey = cacheKey;\n\n /**\n * Reset records if new type is not as same as the old type / folderId.\n */\n if (this.currentRecordType !== type || this.currentFolderId !== folderId) {\n this.records = [];\n this.currentRecordType = type;\n this.currentFolderId = folderId;\n }\n\n return records.reduce<string[]>((collection, record) => {\n const { id: entryId } = parseIdentifier(record.id);\n const index = this.records.findIndex(r => r.entryId === entryId);\n if (index >= 0) {\n return collection;\n }\n this.records.push({\n ...record,\n entryId,\n $lockingType: type,\n $locked: undefined\n });\n if (record.$type !== \"RECORD\") {\n return collection;\n }\n collection.push(entryId);\n return collection;\n }, []);\n }\n}\n\nexport const createRecordLocking = <T extends IRecordLockingRecord>(\n config: ICreateRecordLockingParams\n): IRecordLocking => {\n const client = new RecordLockingClient({\n client: config.client\n });\n\n const getLockRecord = new RecordLockingGetLockRecord({\n client\n });\n\n const getLockedEntryLockRecord = new RecordLockingGetLockedEntryLockRecord({\n client\n });\n\n const isEntryLocked = new RecordLockingIsEntryLocked({\n client\n });\n\n const listLockRecords = new RecordLockingListLockRecords({\n client\n });\n\n const lockEntry = new RecordLockingLockEntry({\n client\n });\n\n const unlockEntry = new RecordLockingUnlockEntry({\n client\n });\n const unlockEntryRequest = new RecordLockingUnlockEntryRequest({\n client\n });\n\n const updateEntryLock = new RecordLockingUpdateEntryLock({\n client\n });\n\n return new RecordLocking<T>({\n client,\n setLoading: config.setLoading,\n getLockRecord,\n getLockedEntryLockRecord,\n isEntryLocked,\n listLockRecords,\n updateEntryLock,\n lockEntry,\n unlockEntry,\n unlockEntryRequest\n });\n};\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,12 @@
1
+ import { ApolloClient, ApolloQueryResult, MutationOptions, QueryOptions } from "apollo-client";
2
+ import { FetchResult } from "apollo-link";
3
+ import { IRecordLockingClient } from "./abstractions/IRecordLockingClient";
4
+ export interface IRecordLockingClientParams {
5
+ client: ApolloClient<any>;
6
+ }
7
+ export declare class RecordLockingClient implements IRecordLockingClient {
8
+ private readonly client;
9
+ constructor(params: IRecordLockingClientParams);
10
+ query<T, R>(params: QueryOptions<R>): Promise<ApolloQueryResult<T>>;
11
+ mutation<T, R>(options: MutationOptions<T, R>): Promise<FetchResult<T>>;
12
+ }