@webiny/app-record-locking 0.0.0-unstable.e6f0dc8ca7 → 0.0.0-unstable.eb81deee7e

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 (266) hide show
  1. package/RecordLockingModule.d.ts +2 -0
  2. package/RecordLockingModule.js +74 -0
  3. package/RecordLockingModule.js.map +1 -0
  4. package/SecurityPermissions.js +15 -0
  5. package/SecurityPermissions.js.map +1 -0
  6. package/features/acquireLock/AcquireLockGateway.d.ts +12 -0
  7. package/features/acquireLock/AcquireLockGateway.js +43 -0
  8. package/features/acquireLock/AcquireLockGateway.js.map +1 -0
  9. package/features/acquireLock/AcquireLockUseCase.d.ts +10 -0
  10. package/features/acquireLock/AcquireLockUseCase.js +18 -0
  11. package/features/acquireLock/AcquireLockUseCase.js.map +1 -0
  12. package/features/acquireLock/abstractions.d.ts +19 -0
  13. package/features/acquireLock/abstractions.js +6 -0
  14. package/features/acquireLock/abstractions.js.map +1 -0
  15. package/features/acquireLock/feature.d.ts +3 -0
  16. package/features/acquireLock/feature.js +19 -0
  17. package/features/acquireLock/feature.js.map +1 -0
  18. package/features/checkLockStatus/CheckLockStatusGateway.d.ts +12 -0
  19. package/features/checkLockStatus/CheckLockStatusGateway.js +43 -0
  20. package/features/checkLockStatus/CheckLockStatusGateway.js.map +1 -0
  21. package/features/checkLockStatus/CheckLockStatusUseCase.d.ts +10 -0
  22. package/features/checkLockStatus/CheckLockStatusUseCase.js +18 -0
  23. package/features/checkLockStatus/CheckLockStatusUseCase.js.map +1 -0
  24. package/features/checkLockStatus/abstractions.d.ts +19 -0
  25. package/features/checkLockStatus/abstractions.js +6 -0
  26. package/features/checkLockStatus/abstractions.js.map +1 -0
  27. package/features/checkLockStatus/feature.d.ts +3 -0
  28. package/features/checkLockStatus/feature.js +19 -0
  29. package/features/checkLockStatus/feature.js.map +1 -0
  30. package/features/feature.d.ts +1 -0
  31. package/features/feature.js +19 -0
  32. package/features/feature.js.map +1 -0
  33. package/features/forceUnlock/ForceUnlockGateway.d.ts +12 -0
  34. package/features/forceUnlock/ForceUnlockGateway.js +44 -0
  35. package/features/forceUnlock/ForceUnlockGateway.js.map +1 -0
  36. package/features/forceUnlock/ForceUnlockUseCase.d.ts +10 -0
  37. package/features/forceUnlock/ForceUnlockUseCase.js +18 -0
  38. package/features/forceUnlock/ForceUnlockUseCase.js.map +1 -0
  39. package/features/forceUnlock/abstractions.d.ts +19 -0
  40. package/features/forceUnlock/abstractions.js +6 -0
  41. package/features/forceUnlock/abstractions.js.map +1 -0
  42. package/features/forceUnlock/feature.d.ts +3 -0
  43. package/features/forceUnlock/feature.js +19 -0
  44. package/features/forceUnlock/feature.js.map +1 -0
  45. package/{domain/graphql/fields.js → features/graphqlFields.js} +4 -3
  46. package/features/graphqlFields.js.map +1 -0
  47. package/features/listLockRecords/ListLockRecordsGateway.d.ts +12 -0
  48. package/features/listLockRecords/ListLockRecordsGateway.js +48 -0
  49. package/features/listLockRecords/ListLockRecordsGateway.js.map +1 -0
  50. package/features/listLockRecords/ListLockRecordsUseCase.d.ts +10 -0
  51. package/features/listLockRecords/ListLockRecordsUseCase.js +18 -0
  52. package/features/listLockRecords/ListLockRecordsUseCase.js.map +1 -0
  53. package/features/listLockRecords/abstractions.d.ts +22 -0
  54. package/features/listLockRecords/abstractions.js +6 -0
  55. package/features/listLockRecords/abstractions.js.map +1 -0
  56. package/features/listLockRecords/feature.d.ts +3 -0
  57. package/features/listLockRecords/feature.js +19 -0
  58. package/features/listLockRecords/feature.js.map +1 -0
  59. package/features/permissions/abstractions.d.ts +1 -1
  60. package/features/permissions/abstractions.js +3 -2
  61. package/features/permissions/abstractions.js.map +1 -1
  62. package/features/permissions/feature.js +3 -2
  63. package/features/permissions/feature.js.map +1 -1
  64. package/features/releaseLock/ReleaseLockGateway.d.ts +12 -0
  65. package/features/releaseLock/ReleaseLockGateway.js +44 -0
  66. package/features/releaseLock/ReleaseLockGateway.js.map +1 -0
  67. package/features/releaseLock/ReleaseLockUseCase.d.ts +10 -0
  68. package/features/releaseLock/ReleaseLockUseCase.js +18 -0
  69. package/features/releaseLock/ReleaseLockUseCase.js.map +1 -0
  70. package/features/releaseLock/abstractions.d.ts +19 -0
  71. package/features/releaseLock/abstractions.js +6 -0
  72. package/features/releaseLock/abstractions.js.map +1 -0
  73. package/features/releaseLock/feature.d.ts +3 -0
  74. package/features/releaseLock/feature.js +19 -0
  75. package/features/releaseLock/feature.js.map +1 -0
  76. package/index.d.ts +0 -5
  77. package/index.js +20 -27
  78. package/index.js.map +1 -1
  79. package/package.json +18 -20
  80. package/permissions/permissionsSchema.js +10 -0
  81. package/permissions/permissionsSchema.js.map +1 -0
  82. package/presentation/entryLocking/ContentEntryFormPresenterDecorator.d.ts +23 -0
  83. package/presentation/entryLocking/ContentEntryFormPresenterDecorator.js +64 -0
  84. package/presentation/entryLocking/ContentEntryFormPresenterDecorator.js.map +1 -0
  85. package/presentation/entryLocking/RecordLockingPresenter.d.ts +32 -0
  86. package/presentation/entryLocking/RecordLockingPresenter.js +164 -0
  87. package/presentation/entryLocking/RecordLockingPresenter.js.map +1 -0
  88. package/presentation/entryLocking/SingleEntryContentDecorator.d.ts +2 -0
  89. package/presentation/entryLocking/SingleEntryContentDecorator.js +72 -0
  90. package/presentation/entryLocking/SingleEntryContentDecorator.js.map +1 -0
  91. package/presentation/entryLocking/SingleEntryPresenterDecorator.d.ts +15 -0
  92. package/presentation/entryLocking/SingleEntryPresenterDecorator.js +40 -0
  93. package/presentation/entryLocking/SingleEntryPresenterDecorator.js.map +1 -0
  94. package/presentation/entryLocking/abstractions.d.ts +26 -0
  95. package/presentation/entryLocking/abstractions.js +5 -0
  96. package/presentation/entryLocking/abstractions.js.map +1 -0
  97. package/presentation/entryLocking/components/ForceUnlockButton.d.ts +11 -0
  98. package/presentation/entryLocking/components/ForceUnlockButton.js +37 -0
  99. package/presentation/entryLocking/components/ForceUnlockButton.js.map +1 -0
  100. package/presentation/entryLocking/components/LockedEntryOverlay.d.ts +10 -0
  101. package/presentation/entryLocking/components/LockedEntryOverlay.js +52 -0
  102. package/presentation/entryLocking/components/LockedEntryOverlay.js.map +1 -0
  103. package/presentation/entryLocking/components/RecordLockingGuard.d.ts +12 -0
  104. package/presentation/entryLocking/components/RecordLockingGuard.js +74 -0
  105. package/presentation/entryLocking/components/RecordLockingGuard.js.map +1 -0
  106. package/presentation/entryLocking/feature.d.ts +3 -0
  107. package/presentation/entryLocking/feature.js +21 -0
  108. package/presentation/entryLocking/feature.js.map +1 -0
  109. package/presentation/listLocking/ContentEntriesPresenterDecorator.d.ts +25 -0
  110. package/presentation/listLocking/ContentEntriesPresenterDecorator.js +70 -0
  111. package/presentation/listLocking/ContentEntriesPresenterDecorator.js.map +1 -0
  112. package/presentation/listLocking/ListLockRecordsPresenter.d.ts +17 -0
  113. package/presentation/listLocking/ListLockRecordsPresenter.js +52 -0
  114. package/presentation/listLocking/ListLockRecordsPresenter.js.map +1 -0
  115. package/presentation/listLocking/abstractions.d.ts +16 -0
  116. package/presentation/listLocking/abstractions.js +5 -0
  117. package/presentation/listLocking/abstractions.js.map +1 -0
  118. package/presentation/listLocking/components/ListLockRecordsSync.d.ts +4 -0
  119. package/presentation/listLocking/components/ListLockRecordsSync.js +26 -0
  120. package/presentation/listLocking/components/ListLockRecordsSync.js.map +1 -0
  121. package/presentation/listLocking/components/LockIndicatorCell.d.ts +2 -0
  122. package/presentation/listLocking/components/LockIndicatorCell.js +39 -0
  123. package/presentation/listLocking/components/LockIndicatorCell.js.map +1 -0
  124. package/presentation/listLocking/feature.d.ts +3 -0
  125. package/presentation/listLocking/feature.js +19 -0
  126. package/presentation/listLocking/feature.js.map +1 -0
  127. package/types.d.ts +1 -62
  128. package/types.js +0 -3
  129. package/components/HeadlessCmsActionsAcoCell.d.ts +0 -2
  130. package/components/HeadlessCmsActionsAcoCell.js +0 -60
  131. package/components/HeadlessCmsActionsAcoCell.js.map +0 -1
  132. package/components/HeadlessCmsContentEntry/ContentEntryGuard.d.ts +0 -9
  133. package/components/HeadlessCmsContentEntry/ContentEntryGuard.js +0 -42
  134. package/components/HeadlessCmsContentEntry/ContentEntryGuard.js.map +0 -1
  135. package/components/HeadlessCmsContentEntry/ContentEntryLocker.d.ts +0 -18
  136. package/components/HeadlessCmsContentEntry/ContentEntryLocker.js +0 -99
  137. package/components/HeadlessCmsContentEntry/ContentEntryLocker.js.map +0 -1
  138. package/components/HeadlessCmsContentEntry/HeadlessCmsContentEntry.d.ts +0 -2
  139. package/components/HeadlessCmsContentEntry/HeadlessCmsContentEntry.js +0 -68
  140. package/components/HeadlessCmsContentEntry/HeadlessCmsContentEntry.js.map +0 -1
  141. package/components/HeadlessCmsContentEntry/index.d.ts +0 -1
  142. package/components/HeadlessCmsContentEntry/index.js +0 -3
  143. package/components/HeadlessCmsContentEntry/index.js.map +0 -1
  144. package/components/LockedRecord/LockedRecord.d.ts +0 -6
  145. package/components/LockedRecord/LockedRecord.js +0 -66
  146. package/components/LockedRecord/LockedRecord.js.map +0 -1
  147. package/components/LockedRecord/LockedRecordForceUnlock.d.ts +0 -9
  148. package/components/LockedRecord/LockedRecordForceUnlock.js +0 -71
  149. package/components/LockedRecord/LockedRecordForceUnlock.js.map +0 -1
  150. package/components/LockedRecord/index.d.ts +0 -1
  151. package/components/LockedRecord/index.js +0 -3
  152. package/components/LockedRecord/index.js.map +0 -1
  153. package/components/RecordLockingProvider.d.ts +0 -7
  154. package/components/RecordLockingProvider.js +0 -125
  155. package/components/RecordLockingProvider.js.map +0 -1
  156. package/components/SecurityPermissions.js +0 -18
  157. package/components/SecurityPermissions.js.map +0 -1
  158. package/components/decorators/UseContentEntriesListHookDecorator.d.ts +0 -1
  159. package/components/decorators/UseContentEntriesListHookDecorator.js +0 -23
  160. package/components/decorators/UseContentEntriesListHookDecorator.js.map +0 -1
  161. package/components/decorators/UseRecordsDecorator.d.ts +0 -8
  162. package/components/decorators/UseRecordsDecorator.js +0 -25
  163. package/components/decorators/UseRecordsDecorator.js.map +0 -1
  164. package/components/decorators/UseSaveEntryDecorator.d.ts +0 -1
  165. package/components/decorators/UseSaveEntryDecorator.js +0 -55
  166. package/components/decorators/UseSaveEntryDecorator.js.map +0 -1
  167. package/domain/RecordLocking.d.ts +0 -28
  168. package/domain/RecordLocking.js +0 -321
  169. package/domain/RecordLocking.js.map +0 -1
  170. package/domain/RecordLockingClient.d.ts +0 -12
  171. package/domain/RecordLockingClient.js +0 -19
  172. package/domain/RecordLockingClient.js.map +0 -1
  173. package/domain/RecordLockingGetLockRecord.d.ts +0 -11
  174. package/domain/RecordLockingGetLockRecord.js +0 -21
  175. package/domain/RecordLockingGetLockRecord.js.map +0 -1
  176. package/domain/RecordLockingGetLockedEntryLockRecord.d.ts +0 -11
  177. package/domain/RecordLockingGetLockedEntryLockRecord.js +0 -19
  178. package/domain/RecordLockingGetLockedEntryLockRecord.js.map +0 -1
  179. package/domain/RecordLockingIsEntryLocked.d.ts +0 -11
  180. package/domain/RecordLockingIsEntryLocked.js +0 -19
  181. package/domain/RecordLockingIsEntryLocked.js.map +0 -1
  182. package/domain/RecordLockingListLockRecords.d.ts +0 -12
  183. package/domain/RecordLockingListLockRecords.js +0 -31
  184. package/domain/RecordLockingListLockRecords.js.map +0 -1
  185. package/domain/RecordLockingLockEntry.d.ts +0 -11
  186. package/domain/RecordLockingLockEntry.js +0 -13
  187. package/domain/RecordLockingLockEntry.js.map +0 -1
  188. package/domain/RecordLockingUnlockEntry.d.ts +0 -11
  189. package/domain/RecordLockingUnlockEntry.js +0 -19
  190. package/domain/RecordLockingUnlockEntry.js.map +0 -1
  191. package/domain/RecordLockingUpdateEntryLock.d.ts +0 -11
  192. package/domain/RecordLockingUpdateEntryLock.js +0 -19
  193. package/domain/RecordLockingUpdateEntryLock.js.map +0 -1
  194. package/domain/abstractions/IRecordLocking.d.ts +0 -25
  195. package/domain/abstractions/IRecordLocking.js +0 -3
  196. package/domain/abstractions/IRecordLocking.js.map +0 -1
  197. package/domain/abstractions/IRecordLockingClient.d.ts +0 -6
  198. package/domain/abstractions/IRecordLockingClient.js +0 -3
  199. package/domain/abstractions/IRecordLockingClient.js.map +0 -1
  200. package/domain/abstractions/IRecordLockingGetLockRecord.d.ts +0 -12
  201. package/domain/abstractions/IRecordLockingGetLockRecord.js +0 -3
  202. package/domain/abstractions/IRecordLockingGetLockRecord.js.map +0 -1
  203. package/domain/abstractions/IRecordLockingGetLockedEntryLockRecord.d.ts +0 -12
  204. package/domain/abstractions/IRecordLockingGetLockedEntryLockRecord.js +0 -3
  205. package/domain/abstractions/IRecordLockingGetLockedEntryLockRecord.js.map +0 -1
  206. package/domain/abstractions/IRecordLockingIsEntryLocked.d.ts +0 -8
  207. package/domain/abstractions/IRecordLockingIsEntryLocked.js +0 -3
  208. package/domain/abstractions/IRecordLockingIsEntryLocked.js.map +0 -1
  209. package/domain/abstractions/IRecordLockingListLockRecords.d.ts +0 -19
  210. package/domain/abstractions/IRecordLockingListLockRecords.js +0 -3
  211. package/domain/abstractions/IRecordLockingListLockRecords.js.map +0 -1
  212. package/domain/abstractions/IRecordLockingLockEntry.d.ts +0 -12
  213. package/domain/abstractions/IRecordLockingLockEntry.js +0 -3
  214. package/domain/abstractions/IRecordLockingLockEntry.js.map +0 -1
  215. package/domain/abstractions/IRecordLockingUnlockEntry.d.ts +0 -13
  216. package/domain/abstractions/IRecordLockingUnlockEntry.js +0 -3
  217. package/domain/abstractions/IRecordLockingUnlockEntry.js.map +0 -1
  218. package/domain/abstractions/IRecordLockingUpdateEntryLock.d.ts +0 -12
  219. package/domain/abstractions/IRecordLockingUpdateEntryLock.js +0 -3
  220. package/domain/abstractions/IRecordLockingUpdateEntryLock.js.map +0 -1
  221. package/domain/graphql/fields.js.map +0 -1
  222. package/domain/graphql/getLockRecord.d.ts +0 -12
  223. package/domain/graphql/getLockRecord.js +0 -18
  224. package/domain/graphql/getLockRecord.js.map +0 -1
  225. package/domain/graphql/getLockedEntryLockRecord.d.ts +0 -12
  226. package/domain/graphql/getLockedEntryLockRecord.js +0 -18
  227. package/domain/graphql/getLockedEntryLockRecord.js.map +0 -1
  228. package/domain/graphql/isEntryLocked.d.ts +0 -12
  229. package/domain/graphql/isEntryLocked.js +0 -16
  230. package/domain/graphql/isEntryLocked.js.map +0 -1
  231. package/domain/graphql/listLockRecords.d.ts +0 -17
  232. package/domain/graphql/listLockRecords.js +0 -26
  233. package/domain/graphql/listLockRecords.js.map +0 -1
  234. package/domain/graphql/lockEntry.d.ts +0 -12
  235. package/domain/graphql/lockEntry.js +0 -20
  236. package/domain/graphql/lockEntry.js.map +0 -1
  237. package/domain/graphql/unlockEntry.d.ts +0 -12
  238. package/domain/graphql/unlockEntry.js +0 -18
  239. package/domain/graphql/unlockEntry.js.map +0 -1
  240. package/domain/graphql/updateEntryLock.d.ts +0 -12
  241. package/domain/graphql/updateEntryLock.js +0 -18
  242. package/domain/graphql/updateEntryLock.js.map +0 -1
  243. package/domain/permissionsSchema.js +0 -9
  244. package/domain/permissionsSchema.js.map +0 -1
  245. package/domain/utils/createRecordLockingClient.d.ts +0 -3
  246. package/domain/utils/createRecordLockingClient.js +0 -12
  247. package/domain/utils/createRecordLockingClient.js.map +0 -1
  248. package/domain/utils/createRecordLockingError.d.ts +0 -6
  249. package/domain/utils/createRecordLockingError.js +0 -16
  250. package/domain/utils/createRecordLockingError.js.map +0 -1
  251. package/hooks/index.d.ts +0 -2
  252. package/hooks/index.js +0 -4
  253. package/hooks/index.js.map +0 -1
  254. package/hooks/usePermission.d.ts +0 -3
  255. package/hooks/usePermission.js +0 -20
  256. package/hooks/usePermission.js.map +0 -1
  257. package/hooks/useRecordLocking.d.ts +0 -2
  258. package/hooks/useRecordLocking.js +0 -12
  259. package/hooks/useRecordLocking.js.map +0 -1
  260. package/types.js.map +0 -1
  261. package/utils/createCacheKey.d.ts +0 -3
  262. package/utils/createCacheKey.js +0 -15
  263. package/utils/createCacheKey.js.map +0 -1
  264. /package/{components/SecurityPermissions.d.ts → SecurityPermissions.d.ts} +0 -0
  265. /package/{domain/graphql/fields.d.ts → features/graphqlFields.d.ts} +0 -0
  266. /package/{domain → permissions}/permissionsSchema.d.ts +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"names":["React","useCallback","useEffect","useState","Alert","Button","Text","useConfirmationDialog","useSnackbar","useContentEntriesList","useRecordLocking","usePermission","ErrorMessage","props","title","lockedBy","createElement","type","className","displayName","LockedRecordForceUnlock","unlockEntryForce","navigateTo","showConfirmation","showForceUnlockConfirmation","message","showSnackbar","error","setError","console","onClick","result","id","$lockingType","canForceUnlock","as","text"],"sources":["LockedRecordForceUnlock.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useState } from \"react\";\nimport { Alert, Button, Text } from \"@webiny/admin-ui\";\nimport type { IRecordLockingError, IRecordLockingIdentity } from \"~/types.js\";\nimport { useConfirmationDialog, useSnackbar } from \"@webiny/app-admin\";\nimport { useContentEntriesList } from \"@webiny/app-headless-cms\";\nimport { useRecordLocking, usePermission } from \"~/hooks/index.js\";\n\nexport interface ILockedRecordForceUnlockProps {\n id: string;\n type: string;\n title: string;\n lockedBy?: IRecordLockingIdentity;\n}\n\nconst ErrorMessage = (props: ILockedRecordForceUnlockProps) => {\n const { title, lockedBy } = props;\n return (\n <div>\n <Alert type=\"warning\" title=\"Warning\" className={\"mb-md\"}>\n <strong>{lockedBy?.displayName || \"Unknown user\"}</strong> is currently editing this\n record.\n <br /> If you force unlock it, they could potentially lose their changes.\n </Alert>\n\n <Text>\n You are about to forcefully unlock the <strong>{title}</strong> entry. Are you sure\n you want to continue?\n </Text>\n </div>\n );\n};\n\nexport const LockedRecordForceUnlock = (props: ILockedRecordForceUnlockProps) => {\n const { unlockEntryForce } = useRecordLocking();\n\n const { navigateTo } = useContentEntriesList();\n const { showConfirmation: showForceUnlockConfirmation } = useConfirmationDialog({\n title: \"Force unlock the entry\",\n message: <ErrorMessage {...props} />\n });\n const { showSnackbar } = useSnackbar();\n\n const [error, setError] = useState<IRecordLockingError>();\n\n useEffect(() => {\n if (!error?.message) {\n return;\n }\n console.error(error);\n showSnackbar(error.message);\n }, [error?.message]);\n\n const onClick = useCallback(() => {\n showForceUnlockConfirmation(async () => {\n const result = await unlockEntryForce({\n id: props.id,\n $lockingType: props.type\n });\n if (!result.error) {\n navigateTo();\n return;\n }\n setError(result.error);\n });\n }, [props.id, navigateTo]);\n\n const { canForceUnlock } = usePermission();\n if (!canForceUnlock) {\n return null;\n }\n\n return (\n <div className=\"mt-md\">\n <Text as={\"div\"} className={\"mb-md\"}>\n Because you have a full access to the system, you can force unlock the record.\n </Text>\n <Button onClick={onClick} text={\"Unlock and go back\"} />\n </div>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,WAAW,EAAEC,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AAC/D,SAASC,KAAK,EAAEC,MAAM,EAAEC,IAAI,QAAQ,kBAAkB;AAEtD,SAASC,qBAAqB,EAAEC,WAAW,QAAQ,mBAAmB;AACtE,SAASC,qBAAqB,QAAQ,0BAA0B;AAChE,SAASC,gBAAgB,EAAEC,aAAa;AASxC,MAAMC,YAAY,GAAIC,KAAoC,IAAK;EAC3D,MAAM;IAAEC,KAAK;IAAEC;EAAS,CAAC,GAAGF,KAAK;EACjC,oBACIb,KAAA,CAAAgB,aAAA,2BACIhB,KAAA,CAAAgB,aAAA,CAACZ,KAAK;IAACa,IAAI,EAAC,SAAS;IAACH,KAAK,EAAC,SAAS;IAACI,SAAS,EAAE;EAAQ,gBACrDlB,KAAA,CAAAgB,aAAA,iBAASD,QAAQ,EAAEI,WAAW,IAAI,cAAuB,CAAC,sCAE1D,eAAAnB,KAAA,CAAAgB,aAAA,WAAK,CAAC,uEACH,CAAC,eAERhB,KAAA,CAAAgB,aAAA,CAACV,IAAI,QAAC,yCACqC,eAAAN,KAAA,CAAAgB,aAAA,iBAASF,KAAc,CAAC,8CAE7D,CACL,CAAC;AAEd,CAAC;AAED,OAAO,MAAMM,uBAAuB,GAAIP,KAAoC,IAAK;EAC7E,MAAM;IAAEQ;EAAiB,CAAC,GAAGX,gBAAgB,CAAC,CAAC;EAE/C,MAAM;IAAEY;EAAW,CAAC,GAAGb,qBAAqB,CAAC,CAAC;EAC9C,MAAM;IAAEc,gBAAgB,EAAEC;EAA4B,CAAC,GAAGjB,qBAAqB,CAAC;IAC5EO,KAAK,EAAE,wBAAwB;IAC/BW,OAAO,eAAEzB,KAAA,CAAAgB,aAAA,CAACJ,YAAY,EAAKC,KAAQ;EACvC,CAAC,CAAC;EACF,MAAM;IAAEa;EAAa,CAAC,GAAGlB,WAAW,CAAC,CAAC;EAEtC,MAAM,CAACmB,KAAK,EAAEC,QAAQ,CAAC,GAAGzB,QAAQ,CAAsB,CAAC;EAEzDD,SAAS,CAAC,MAAM;IACZ,IAAI,CAACyB,KAAK,EAAEF,OAAO,EAAE;MACjB;IACJ;IACAI,OAAO,CAACF,KAAK,CAACA,KAAK,CAAC;IACpBD,YAAY,CAACC,KAAK,CAACF,OAAO,CAAC;EAC/B,CAAC,EAAE,CAACE,KAAK,EAAEF,OAAO,CAAC,CAAC;EAEpB,MAAMK,OAAO,GAAG7B,WAAW,CAAC,MAAM;IAC9BuB,2BAA2B,CAAC,YAAY;MACpC,MAAMO,MAAM,GAAG,MAAMV,gBAAgB,CAAC;QAClCW,EAAE,EAAEnB,KAAK,CAACmB,EAAE;QACZC,YAAY,EAAEpB,KAAK,CAACI;MACxB,CAAC,CAAC;MACF,IAAI,CAACc,MAAM,CAACJ,KAAK,EAAE;QACfL,UAAU,CAAC,CAAC;QACZ;MACJ;MACAM,QAAQ,CAACG,MAAM,CAACJ,KAAK,CAAC;IAC1B,CAAC,CAAC;EACN,CAAC,EAAE,CAACd,KAAK,CAACmB,EAAE,EAAEV,UAAU,CAAC,CAAC;EAE1B,MAAM;IAAEY;EAAe,CAAC,GAAGvB,aAAa,CAAC,CAAC;EAC1C,IAAI,CAACuB,cAAc,EAAE;IACjB,OAAO,IAAI;EACf;EAEA,oBACIlC,KAAA,CAAAgB,aAAA;IAAKE,SAAS,EAAC;EAAO,gBAClBlB,KAAA,CAAAgB,aAAA,CAACV,IAAI;IAAC6B,EAAE,EAAE,KAAM;IAACjB,SAAS,EAAE;EAAQ,GAAC,gFAE/B,CAAC,eACPlB,KAAA,CAAAgB,aAAA,CAACX,MAAM;IAACyB,OAAO,EAAEA,OAAQ;IAACM,IAAI,EAAE;EAAqB,CAAE,CACtD,CAAC;AAEd,CAAC","ignoreList":[]}
@@ -1 +0,0 @@
1
- export * from "./LockedRecord.js";
@@ -1,3 +0,0 @@
1
- export * from "./LockedRecord.js";
2
-
3
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export * from \"./LockedRecord.js\";\n"],"mappings":"AAAA","ignoreList":[]}
@@ -1,7 +0,0 @@
1
- import React from "react";
2
- import type { IPossiblyRecordLockingRecord, IRecordLockingContext } from "../types.js";
3
- export interface IRecordLockingProviderProps {
4
- children: React.ReactNode;
5
- }
6
- export declare const RecordLockingContext: React.Context<IRecordLockingContext<IPossiblyRecordLockingRecord>>;
7
- export declare const RecordLockingProvider: (props: IRecordLockingProviderProps) => React.JSX.Element;
@@ -1,125 +0,0 @@
1
- import React, { useCallback, useMemo, useState } from "react";
2
- import { useApolloClient } from "@apollo/react-hooks";
3
- import { createRecordLocking } from "../domain/RecordLocking.js";
4
- import { useStateIfMounted } from "@webiny/app-admin";
5
- export const RecordLockingContext = /*#__PURE__*/React.createContext({});
6
- const isSameArray = (existingRecords, newRecords) => {
7
- if (existingRecords.length !== newRecords.length) {
8
- return false;
9
- }
10
- return existingRecords.every((record, index) => {
11
- const newRecord = newRecords[index];
12
- if (!newRecord) {
13
- return false;
14
- }
15
- return newRecord.id === record.id && newRecord.savedOn === record.savedOn;
16
- });
17
- };
18
- const getData = records => {
19
- return records.map(record => ({
20
- id: record.id,
21
- savedOn: record.savedOn
22
- }));
23
- };
24
- export const RecordLockingProvider = props => {
25
- const client = useApolloClient();
26
- const [loading, setLoading] = useState(false);
27
- const recordLocking = useMemo(() => {
28
- return createRecordLocking({
29
- client,
30
- setLoading
31
- });
32
- }, []);
33
- const [error, setError] = useStateIfMounted(null);
34
- const [records, setRecords] = useStateIfMounted([]);
35
- const setRecordsIfNeeded = useCallback(newRecords => {
36
- const sameArray = isSameArray(getData(records), getData(newRecords));
37
- if (sameArray) {
38
- return;
39
- }
40
- setRecords(newRecords);
41
- }, [records]);
42
- const value = {
43
- async updateEntryLock(params) {
44
- const result = await recordLocking.updateEntryLock(params);
45
- if (result.error) {
46
- setError(result.error);
47
- return result;
48
- }
49
- const target = result.data;
50
- if (!target?.id) {
51
- const error = {
52
- message: "No data returned from server.",
53
- code: "NO_DATA"
54
- };
55
- setError(error);
56
- return {
57
- error,
58
- data: null
59
- };
60
- }
61
- setRecords(prev => {
62
- return prev.map(item => {
63
- if (item.entryId === target.id) {
64
- return {
65
- ...item,
66
- $locked: result.data
67
- };
68
- }
69
- return item;
70
- });
71
- });
72
- return result;
73
- },
74
- async unlockEntry(params) {
75
- return await recordLocking.unlockEntry(params);
76
- },
77
- async unlockEntryForce(params) {
78
- return await recordLocking.unlockEntry(params, true);
79
- },
80
- isLockExpired(input) {
81
- return recordLocking.isLockExpired(input);
82
- },
83
- isRecordLocked(record) {
84
- if (!record) {
85
- return false;
86
- }
87
- return recordLocking.isRecordLocked(record);
88
- },
89
- getLockRecordEntry(id) {
90
- return recordLocking.getLockRecordEntry(id);
91
- },
92
- removeEntryLock(params) {
93
- return recordLocking.removeEntryLock(params);
94
- },
95
- async fetchLockRecord(params) {
96
- try {
97
- return await recordLocking.fetchLockRecord(params);
98
- } catch (ex) {
99
- return {
100
- data: null,
101
- error: ex
102
- };
103
- }
104
- },
105
- async fetchLockedEntryLockRecord(params) {
106
- return recordLocking.fetchLockedEntryLockRecord(params);
107
- },
108
- async setRecords(folderId, type, newRecords) {
109
- setRecordsIfNeeded(newRecords);
110
- const result = await recordLocking.setRecords(folderId, type, newRecords);
111
- if (!result) {
112
- return;
113
- }
114
- setRecords(result);
115
- },
116
- error,
117
- records,
118
- loading
119
- };
120
- return /*#__PURE__*/React.createElement(RecordLockingContext.Provider, Object.assign({}, props, {
121
- value: value
122
- }));
123
- };
124
-
125
- //# sourceMappingURL=RecordLockingProvider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["React","useCallback","useMemo","useState","useApolloClient","createRecordLocking","useStateIfMounted","RecordLockingContext","createContext","isSameArray","existingRecords","newRecords","length","every","record","index","newRecord","id","savedOn","getData","records","map","RecordLockingProvider","props","client","loading","setLoading","recordLocking","error","setError","setRecords","setRecordsIfNeeded","sameArray","value","updateEntryLock","params","result","target","data","message","code","prev","item","entryId","$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.js\";\nimport type {\n IFetchLockedEntryLockRecordParams,\n IFetchLockRecordParams,\n IPossiblyRecordLockingRecord,\n IRecordLockingContext,\n IRecordLockingError,\n IUnlockEntryParams,\n IUpdateEntryLockParams\n} from \"~/types.js\";\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, index) => {\n const newRecord = newRecords[index];\n if (!newRecord) {\n return false;\n }\n\n return newRecord.id === record.id && newRecord.savedOn === record.savedOn;\n });\n};\n\nconst getData = (records: IPossiblyRecordLockingRecord[]) => {\n return records.map(record => ({\n id: record.id,\n savedOn: record.savedOn\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(getData(records), getData(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 result;\n }\n const target = result.data;\n if (!target?.id) {\n const error = {\n message: \"No data returned from server.\",\n code: \"NO_DATA\"\n };\n setError(error);\n return {\n error,\n data: null\n };\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 return result;\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":"AAAA,OAAOA,KAAK,IAAIC,WAAW,EAAEC,OAAO,EAAEC,QAAQ,QAAQ,OAAO;AAC7D,SAASC,eAAe,QAAQ,qBAAqB;AACrD,SAASC,mBAAmB;AAU5B,SAASC,iBAAiB,QAAQ,mBAAmB;AAMrD,OAAO,MAAMC,oBAAoB,gBAAGP,KAAK,CAACQ,aAAa,CAAC,CAAC,CAAqC,CAAC;AAE/F,MAAMC,WAAW,GAAGA,CAChBC,eAAuE,EACvEC,UAAkE,KACxD;EACV,IAAID,eAAe,CAACE,MAAM,KAAKD,UAAU,CAACC,MAAM,EAAE;IAC9C,OAAO,KAAK;EAChB;EACA,OAAOF,eAAe,CAACG,KAAK,CAAC,CAACC,MAAM,EAAEC,KAAK,KAAK;IAC5C,MAAMC,SAAS,GAAGL,UAAU,CAACI,KAAK,CAAC;IACnC,IAAI,CAACC,SAAS,EAAE;MACZ,OAAO,KAAK;IAChB;IAEA,OAAOA,SAAS,CAACC,EAAE,KAAKH,MAAM,CAACG,EAAE,IAAID,SAAS,CAACE,OAAO,KAAKJ,MAAM,CAACI,OAAO;EAC7E,CAAC,CAAC;AACN,CAAC;AAED,MAAMC,OAAO,GAAIC,OAAuC,IAAK;EACzD,OAAOA,OAAO,CAACC,GAAG,CAACP,MAAM,KAAK;IAC1BG,EAAE,EAAEH,MAAM,CAACG,EAAE;IACbC,OAAO,EAAEJ,MAAM,CAACI;EACpB,CAAC,CAAC,CAAC;AACP,CAAC;AAED,OAAO,MAAMI,qBAAqB,GAAIC,KAAkC,IAAK;EACzE,MAAMC,MAAM,GAAGpB,eAAe,CAAC,CAAC;EAEhC,MAAM,CAACqB,OAAO,EAAEC,UAAU,CAAC,GAAGvB,QAAQ,CAAC,KAAK,CAAC;EAE7C,MAAMwB,aAAa,GAAGzB,OAAO,CAAC,MAAM;IAChC,OAAOG,mBAAmB,CAAC;MACvBmB,MAAM;MACNE;IACJ,CAAC,CAAC;EACN,CAAC,EAAE,EAAE,CAAC;EAEN,MAAM,CAACE,KAAK,EAAEC,QAAQ,CAAC,GAAGvB,iBAAiB,CAA6B,IAAI,CAAC;EAE7E,MAAM,CAACc,OAAO,EAAEU,UAAU,CAAC,GAAGxB,iBAAiB,CAAiC,EAAE,CAAC;EAEnF,MAAMyB,kBAAkB,GAAG9B,WAAW,CACjCU,UAA0C,IAAK;IAC5C,MAAMqB,SAAS,GAAGvB,WAAW,CAACU,OAAO,CAACC,OAAO,CAAC,EAAED,OAAO,CAACR,UAAU,CAAC,CAAC;IACpE,IAAIqB,SAAS,EAAE;MACX;IACJ;IACAF,UAAU,CAACnB,UAAU,CAAC;EAC1B,CAAC,EACD,CAACS,OAAO,CACZ,CAAC;EAED,MAAMa,KAA4B,GAAG;IACjC,MAAMC,eAAeA,CAACC,MAA8B,EAAE;MAClD,MAAMC,MAAM,GAAG,MAAMT,aAAa,CAACO,eAAe,CAACC,MAAM,CAAC;MAC1D,IAAIC,MAAM,CAACR,KAAK,EAAE;QACdC,QAAQ,CAACO,MAAM,CAACR,KAAK,CAAC;QACtB,OAAOQ,MAAM;MACjB;MACA,MAAMC,MAAM,GAAGD,MAAM,CAACE,IAAI;MAC1B,IAAI,CAACD,MAAM,EAAEpB,EAAE,EAAE;QACb,MAAMW,KAAK,GAAG;UACVW,OAAO,EAAE,+BAA+B;UACxCC,IAAI,EAAE;QACV,CAAC;QACDX,QAAQ,CAACD,KAAK,CAAC;QACf,OAAO;UACHA,KAAK;UACLU,IAAI,EAAE;QACV,CAAC;MACL;MAEAR,UAAU,CAACW,IAAI,IAAI;QACf,OAAOA,IAAI,CAACpB,GAAG,CAACqB,IAAI,IAAI;UACpB,IAAIA,IAAI,CAACC,OAAO,KAAKN,MAAM,CAACpB,EAAE,EAAE;YAC5B,OAAO;cACH,GAAGyB,IAAI;cACPE,OAAO,EAAER,MAAM,CAACE;YACpB,CAAC;UACL;UACA,OAAOI,IAAI;QACf,CAAC,CAAC;MACN,CAAC,CAAC;MACF,OAAON,MAAM;IACjB,CAAC;IACD,MAAMS,WAAWA,CAACV,MAA0B,EAAE;MAC1C,OAAO,MAAMR,aAAa,CAACkB,WAAW,CAACV,MAAM,CAAC;IAClD,CAAC;IACD,MAAMW,gBAAgBA,CAACX,MAA0B,EAAE;MAC/C,OAAO,MAAMR,aAAa,CAACkB,WAAW,CAACV,MAAM,EAAE,IAAI,CAAC;IACxD,CAAC;IACDY,aAAaA,CAACC,KAAoB,EAAW;MACzC,OAAOrB,aAAa,CAACoB,aAAa,CAACC,KAAK,CAAC;IAC7C,CAAC;IACDC,cAAcA,CAACnC,MAAM,EAAE;MACnB,IAAI,CAACA,MAAM,EAAE;QACT,OAAO,KAAK;MAChB;MACA,OAAOa,aAAa,CAACsB,cAAc,CAACnC,MAAM,CAAC;IAC/C,CAAC;IACDoC,kBAAkBA,CAACjC,EAAU,EAAE;MAC3B,OAAOU,aAAa,CAACuB,kBAAkB,CAACjC,EAAE,CAAC;IAC/C,CAAC;IACDkC,eAAeA,CAAChB,MAA0B,EAAE;MACxC,OAAOR,aAAa,CAACwB,eAAe,CAAChB,MAAM,CAAC;IAChD,CAAC;IACD,MAAMiB,eAAeA,CAACjB,MAA8B,EAAE;MAClD,IAAI;QACA,OAAO,MAAMR,aAAa,CAACyB,eAAe,CAACjB,MAAM,CAAC;MACtD,CAAC,CAAC,OAAOkB,EAAE,EAAE;QACT,OAAO;UACHf,IAAI,EAAE,IAAI;UACVV,KAAK,EAAEyB;QACX,CAAC;MACL;IACJ,CAAC;IACD,MAAMC,0BAA0BA,CAACnB,MAAyC,EAAE;MACxE,OAAOR,aAAa,CAAC2B,0BAA0B,CAACnB,MAAM,CAAC;IAC3D,CAAC;IACD,MAAML,UAAUA,CAACyB,QAAQ,EAAEC,IAAI,EAAE7C,UAAU,EAAE;MACzCoB,kBAAkB,CAACpB,UAAU,CAAC;MAE9B,MAAMyB,MAAM,GAAG,MAAMT,aAAa,CAACG,UAAU,CAACyB,QAAQ,EAAEC,IAAI,EAAE7C,UAAU,CAAC;MACzE,IAAI,CAACyB,MAAM,EAAE;QACT;MACJ;MACAN,UAAU,CAACM,MAAM,CAAC;IACtB,CAAC;IACDR,KAAK;IACLR,OAAO;IACPK;EACJ,CAAC;EAED,oBAAOzB,KAAA,CAAAyD,aAAA,CAAClD,oBAAoB,CAACmD,QAAQ,EAAAC,MAAA,CAAAC,MAAA,KAAKrC,KAAK;IAAEU,KAAK,EAAEA;EAAM,EAAE,CAAC;AACrE,CAAC","ignoreList":[]}
@@ -1,18 +0,0 @@
1
- import React from "react";
2
- import { AdminConfig } from "@webiny/app-admin";
3
- import { ReactComponent as LockIcon } from "@webiny/icons/lock.svg";
4
- import { RECORD_LOCKING_PERMISSIONS_SCHEMA } from "../domain/permissionsSchema.js";
5
- const {
6
- Security
7
- } = AdminConfig;
8
- export const SecurityPermissions = () => {
9
- return /*#__PURE__*/React.createElement(AdminConfig, null, /*#__PURE__*/React.createElement(Security.Permissions, {
10
- name: "record-locking",
11
- title: "Record Locking",
12
- description: "Manage Record Locking permissions.",
13
- icon: /*#__PURE__*/React.createElement(LockIcon, null),
14
- schema: RECORD_LOCKING_PERMISSIONS_SCHEMA
15
- }));
16
- };
17
-
18
- //# sourceMappingURL=SecurityPermissions.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["React","AdminConfig","ReactComponent","LockIcon","RECORD_LOCKING_PERMISSIONS_SCHEMA","Security","SecurityPermissions","createElement","Permissions","name","title","description","icon","schema"],"sources":["SecurityPermissions.tsx"],"sourcesContent":["import React from \"react\";\nimport { AdminConfig } from \"@webiny/app-admin\";\nimport { ReactComponent as LockIcon } from \"@webiny/icons/lock.svg\";\nimport { RECORD_LOCKING_PERMISSIONS_SCHEMA } from \"~/domain/permissionsSchema.js\";\n\nconst { Security } = AdminConfig;\n\nexport const SecurityPermissions = () => {\n return (\n <AdminConfig>\n <Security.Permissions\n name=\"record-locking\"\n title=\"Record Locking\"\n description=\"Manage Record Locking permissions.\"\n icon={<LockIcon />}\n schema={RECORD_LOCKING_PERMISSIONS_SCHEMA}\n />\n </AdminConfig>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,WAAW,QAAQ,mBAAmB;AAC/C,SAASC,cAAc,IAAIC,QAAQ,QAAQ,wBAAwB;AACnE,SAASC,iCAAiC;AAE1C,MAAM;EAAEC;AAAS,CAAC,GAAGJ,WAAW;AAEhC,OAAO,MAAMK,mBAAmB,GAAGA,CAAA,KAAM;EACrC,oBACIN,KAAA,CAAAO,aAAA,CAACN,WAAW,qBACRD,KAAA,CAAAO,aAAA,CAACF,QAAQ,CAACG,WAAW;IACjBC,IAAI,EAAC,gBAAgB;IACrBC,KAAK,EAAC,gBAAgB;IACtBC,WAAW,EAAC,oCAAoC;IAChDC,IAAI,eAAEZ,KAAA,CAAAO,aAAA,CAACJ,QAAQ,MAAE,CAAE;IACnBU,MAAM,EAAET;EAAkC,CAC7C,CACQ,CAAC;AAEtB,CAAC","ignoreList":[]}
@@ -1 +0,0 @@
1
- export declare const UseContentEntriesListHookDecorator: () => React.JSX.Element;
@@ -1,23 +0,0 @@
1
- import { useEffect } from "react";
2
- import { ContentEntryListConfig } from "@webiny/app-headless-cms";
3
- import { useRecordLocking } from "../../hooks/index.js";
4
- export const UseContentEntriesListHookDecorator = ContentEntryListConfig.ContentEntries.useContentEntriesList.createDecorator(originalHook => {
5
- return function RecordLockingUseContentEntriesList() {
6
- const value = originalHook();
7
- const recordLocking = useRecordLocking();
8
- useEffect(() => {
9
- if (!value.records) {
10
- return;
11
- }
12
- recordLocking.setRecords(value.folderId, value.modelId,
13
- // TODO determine if this is correct
14
- value.records);
15
- }, [value.folderId, value.modelId, value.records, recordLocking]);
16
- return {
17
- ...value,
18
- records: recordLocking.records
19
- };
20
- };
21
- });
22
-
23
- //# sourceMappingURL=UseContentEntriesListHookDecorator.js.map
@@ -1 +0,0 @@
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/index.js\";\nimport type { IPossiblyRecordLockingRecord } from \"~/types.js\";\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 recordLocking.setRecords(\n value.folderId,\n value.modelId,\n // TODO determine if this is correct\n value.records as IPossiblyRecordLockingRecord[]\n );\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;AAGzB,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;MACAD,aAAa,CAACE,UAAU,CACpBH,KAAK,CAACI,QAAQ,EACdJ,KAAK,CAACK,OAAO;MACb;MACAL,KAAK,CAACE,OACV,CAAC;IACL,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,8 +0,0 @@
1
- /**
2
- * When record locking mechanism is checking for records equality, it compares record `id` and `savedOn`.
3
- * When you're updating ACO cache, you're just passing the new content entry value(s), and sometimes you might
4
- * be doing it without the `savedOn`, and that causes record locking to keep its old state.
5
- *
6
- * This decorator ensures that calls to `updateRecordInCache` always include a `savedOn` timestamp.
7
- */
8
- export declare const UseRecordsDecorator: () => React.JSX.Element;
@@ -1,25 +0,0 @@
1
- import { useRecords } from "@webiny/app-aco";
2
-
3
- /**
4
- * When record locking mechanism is checking for records equality, it compares record `id` and `savedOn`.
5
- * When you're updating ACO cache, you're just passing the new content entry value(s), and sometimes you might
6
- * be doing it without the `savedOn`, and that causes record locking to keep its old state.
7
- *
8
- * This decorator ensures that calls to `updateRecordInCache` always include a `savedOn` timestamp.
9
- */
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,
18
- savedOn: new Date().toISOString()
19
- });
20
- }
21
- };
22
- };
23
- });
24
-
25
- //# sourceMappingURL=UseRecordsDecorator.js.map
@@ -1 +0,0 @@
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 +0,0 @@
1
- export declare const UseSaveEntryDecorator: () => React.JSX.Element;
@@ -1,55 +0,0 @@
1
- import { useCallback } from "react";
2
- import { useRecordLocking } from "../../hooks/index.js";
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 => {
11
- return function useRecordLockingUseSave() {
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) => {
27
- if (!entry.id) {
28
- return hook.saveEntry(...params);
29
- }
30
- const result = await fetchLockedEntryLockRecord({
31
- id: entry.id,
32
- $lockingType: model.modelId
33
- });
34
- if (result?.lockedBy) {
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.`);
37
- return null;
38
- }
39
- const saveResult = await hook.saveEntry(...params);
40
- if (saveResult) {
41
- await updateEntryLock({
42
- id: saveResult.id,
43
- $lockingType: model.modelId
44
- });
45
- }
46
- return saveResult;
47
- }, [entry?.id, model.modelId, updateEntryLock]);
48
- return {
49
- ...hook,
50
- saveEntry
51
- };
52
- };
53
- });
54
-
55
- //# sourceMappingURL=UseSaveEntryDecorator.js.map
@@ -1 +0,0 @@
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/index.js\";\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,28 +0,0 @@
1
- import type { IRecordLocking } from "./abstractions/IRecordLocking.js";
2
- import type { ApolloClient } from "apollo-client";
3
- import type { IRecordLockingGetLockRecord } from "./abstractions/IRecordLockingGetLockRecord.js";
4
- import type { IRecordLockingIsEntryLocked } from "./abstractions/IRecordLockingIsEntryLocked.js";
5
- import type { IRecordLockingListLockRecords } from "./abstractions/IRecordLockingListLockRecords.js";
6
- import type { IRecordLockingLockEntry } from "./abstractions/IRecordLockingLockEntry.js";
7
- import type { IRecordLockingUnlockEntry } from "./abstractions/IRecordLockingUnlockEntry.js";
8
- import type { IRecordLockingError, IRecordLockingRecord } from "../types.js";
9
- import type { IRecordLockingUpdateEntryLock } from "../domain/abstractions/IRecordLockingUpdateEntryLock.js";
10
- import type { IRecordLockingGetLockedEntryLockRecord } from "./abstractions/IRecordLockingGetLockedEntryLockRecord.js";
11
- export interface ICreateRecordLockingParams {
12
- client: ApolloClient<any>;
13
- setLoading: (loading: boolean) => void;
14
- }
15
- export interface IRecordLockingParams {
16
- setLoading: (loading: boolean) => void;
17
- getLockRecord: IRecordLockingGetLockRecord;
18
- getLockedEntryLockRecord: IRecordLockingGetLockedEntryLockRecord;
19
- isEntryLocked: IRecordLockingIsEntryLocked;
20
- listLockRecords: IRecordLockingListLockRecords;
21
- lockEntry: IRecordLockingLockEntry;
22
- unlockEntry: IRecordLockingUnlockEntry;
23
- updateEntryLock: IRecordLockingUpdateEntryLock;
24
- }
25
- export interface IOnErrorCb {
26
- (error: IRecordLockingError): void;
27
- }
28
- export declare const createRecordLocking: <T extends IRecordLockingRecord>(config: ICreateRecordLockingParams) => IRecordLocking;