@webiny/app-record-locking 6.0.0-beta.0 → 6.0.0-rc.1

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 (149) hide show
  1. package/README.md +8 -9
  2. package/components/HeadlessCmsActionsAcoCell.js +46 -57
  3. package/components/HeadlessCmsActionsAcoCell.js.map +1 -1
  4. package/components/HeadlessCmsContentEntry/ContentEntryGuard.d.ts +4 -0
  5. package/components/HeadlessCmsContentEntry/ContentEntryGuard.js +24 -70
  6. package/components/HeadlessCmsContentEntry/ContentEntryGuard.js.map +1 -1
  7. package/components/HeadlessCmsContentEntry/ContentEntryLocker.d.ts +7 -3
  8. package/components/HeadlessCmsContentEntry/ContentEntryLocker.js +82 -84
  9. package/components/HeadlessCmsContentEntry/ContentEntryLocker.js.map +1 -1
  10. package/components/HeadlessCmsContentEntry/HeadlessCmsContentEntry.js +66 -40
  11. package/components/HeadlessCmsContentEntry/HeadlessCmsContentEntry.js.map +1 -1
  12. package/components/HeadlessCmsContentEntry/index.d.ts +1 -1
  13. package/components/HeadlessCmsContentEntry/index.js +1 -16
  14. package/components/HeadlessCmsContentEntry/index.js.map +1 -1
  15. package/components/LockedRecord/LockedRecord.d.ts +1 -1
  16. package/components/LockedRecord/LockedRecord.js +51 -146
  17. package/components/LockedRecord/LockedRecord.js.map +1 -1
  18. package/components/LockedRecord/LockedRecordForceUnlock.d.ts +1 -1
  19. package/components/LockedRecord/LockedRecordForceUnlock.js +49 -95
  20. package/components/LockedRecord/LockedRecordForceUnlock.js.map +1 -1
  21. package/components/LockedRecord/index.d.ts +1 -1
  22. package/components/LockedRecord/index.js +1 -16
  23. package/components/LockedRecord/index.js.map +1 -1
  24. package/components/RecordLockingProvider.d.ts +1 -1
  25. package/components/RecordLockingProvider.js +63 -68
  26. package/components/RecordLockingProvider.js.map +1 -1
  27. package/components/SecurityPermissions.d.ts +2 -0
  28. package/components/SecurityPermissions.js +23 -0
  29. package/components/SecurityPermissions.js.map +1 -0
  30. package/components/decorators/UseContentEntriesListHookDecorator.d.ts +1 -2
  31. package/components/decorators/UseContentEntriesListHookDecorator.js +13 -18
  32. package/components/decorators/UseContentEntriesListHookDecorator.js.map +1 -1
  33. package/components/decorators/UseRecordsDecorator.d.ts +1 -2
  34. package/components/decorators/UseRecordsDecorator.js +11 -16
  35. package/components/decorators/UseRecordsDecorator.js.map +1 -1
  36. package/components/decorators/UseSaveEntryDecorator.d.ts +1 -2
  37. package/components/decorators/UseSaveEntryDecorator.js +34 -34
  38. package/components/decorators/UseSaveEntryDecorator.js.map +1 -1
  39. package/domain/RecordLocking.d.ts +10 -14
  40. package/domain/RecordLocking.js +272 -330
  41. package/domain/RecordLocking.js.map +1 -1
  42. package/domain/RecordLockingClient.d.ts +3 -3
  43. package/domain/RecordLockingClient.js +15 -29
  44. package/domain/RecordLockingClient.js.map +1 -1
  45. package/domain/RecordLockingGetLockRecord.d.ts +2 -2
  46. package/domain/RecordLockingGetLockRecord.js +16 -29
  47. package/domain/RecordLockingGetLockRecord.js.map +1 -1
  48. package/domain/RecordLockingGetLockedEntryLockRecord.d.ts +2 -2
  49. package/domain/RecordLockingGetLockedEntryLockRecord.js +14 -27
  50. package/domain/RecordLockingGetLockedEntryLockRecord.js.map +1 -1
  51. package/domain/RecordLockingIsEntryLocked.d.ts +2 -2
  52. package/domain/RecordLockingIsEntryLocked.js +14 -27
  53. package/domain/RecordLockingIsEntryLocked.js.map +1 -1
  54. package/domain/RecordLockingListLockRecords.d.ts +3 -3
  55. package/domain/RecordLockingListLockRecords.js +26 -37
  56. package/domain/RecordLockingListLockRecords.js.map +1 -1
  57. package/domain/RecordLockingLockEntry.d.ts +2 -2
  58. package/domain/RecordLockingLockEntry.js +9 -24
  59. package/domain/RecordLockingLockEntry.js.map +1 -1
  60. package/domain/RecordLockingUnlockEntry.d.ts +2 -2
  61. package/domain/RecordLockingUnlockEntry.js +14 -27
  62. package/domain/RecordLockingUnlockEntry.js.map +1 -1
  63. package/domain/RecordLockingUpdateEntryLock.d.ts +2 -2
  64. package/domain/RecordLockingUpdateEntryLock.js +14 -27
  65. package/domain/RecordLockingUpdateEntryLock.js.map +1 -1
  66. package/domain/abstractions/IRecordLocking.d.ts +8 -2
  67. package/domain/abstractions/IRecordLocking.js +1 -5
  68. package/domain/abstractions/IRecordLocking.js.map +1 -1
  69. package/domain/abstractions/IRecordLockingClient.d.ts +2 -2
  70. package/domain/abstractions/IRecordLockingClient.js +1 -5
  71. package/domain/abstractions/IRecordLockingClient.js.map +1 -1
  72. package/domain/abstractions/IRecordLockingGetLockRecord.d.ts +1 -1
  73. package/domain/abstractions/IRecordLockingGetLockRecord.js +1 -5
  74. package/domain/abstractions/IRecordLockingGetLockRecord.js.map +1 -1
  75. package/domain/abstractions/IRecordLockingGetLockedEntryLockRecord.d.ts +1 -1
  76. package/domain/abstractions/IRecordLockingGetLockedEntryLockRecord.js +1 -5
  77. package/domain/abstractions/IRecordLockingGetLockedEntryLockRecord.js.map +1 -1
  78. package/domain/abstractions/IRecordLockingIsEntryLocked.d.ts +1 -1
  79. package/domain/abstractions/IRecordLockingIsEntryLocked.js +1 -5
  80. package/domain/abstractions/IRecordLockingListLockRecords.d.ts +1 -1
  81. package/domain/abstractions/IRecordLockingListLockRecords.js +1 -5
  82. package/domain/abstractions/IRecordLockingListLockRecords.js.map +1 -1
  83. package/domain/abstractions/IRecordLockingLockEntry.d.ts +1 -1
  84. package/domain/abstractions/IRecordLockingLockEntry.js +1 -5
  85. package/domain/abstractions/IRecordLockingLockEntry.js.map +1 -1
  86. package/domain/abstractions/IRecordLockingUnlockEntry.d.ts +1 -1
  87. package/domain/abstractions/IRecordLockingUnlockEntry.js +1 -5
  88. package/domain/abstractions/IRecordLockingUnlockEntry.js.map +1 -1
  89. package/domain/abstractions/IRecordLockingUpdateEntryLock.d.ts +1 -1
  90. package/domain/abstractions/IRecordLockingUpdateEntryLock.js +1 -5
  91. package/domain/abstractions/IRecordLockingUpdateEntryLock.js.map +1 -1
  92. package/domain/graphql/fields.js +28 -8
  93. package/domain/graphql/fields.js.map +1 -1
  94. package/domain/graphql/getLockRecord.d.ts +3 -3
  95. package/domain/graphql/getLockRecord.js +16 -12
  96. package/domain/graphql/getLockRecord.js.map +1 -1
  97. package/domain/graphql/getLockedEntryLockRecord.d.ts +3 -3
  98. package/domain/graphql/getLockedEntryLockRecord.js +16 -12
  99. package/domain/graphql/getLockedEntryLockRecord.js.map +1 -1
  100. package/domain/graphql/isEntryLocked.d.ts +3 -3
  101. package/domain/graphql/isEntryLocked.js +14 -12
  102. package/domain/graphql/isEntryLocked.js.map +1 -1
  103. package/domain/graphql/listLockRecords.d.ts +3 -3
  104. package/domain/graphql/listLockRecords.js +23 -14
  105. package/domain/graphql/listLockRecords.js.map +1 -1
  106. package/domain/graphql/lockEntry.d.ts +3 -3
  107. package/domain/graphql/lockEntry.js +17 -13
  108. package/domain/graphql/lockEntry.js.map +1 -1
  109. package/domain/graphql/unlockEntry.d.ts +3 -3
  110. package/domain/graphql/unlockEntry.js +16 -12
  111. package/domain/graphql/unlockEntry.js.map +1 -1
  112. package/domain/graphql/updateEntryLock.d.ts +3 -3
  113. package/domain/graphql/updateEntryLock.js +16 -12
  114. package/domain/graphql/updateEntryLock.js.map +1 -1
  115. package/domain/utils/createRecordLockingClient.d.ts +1 -1
  116. package/domain/utils/createRecordLockingClient.js +6 -12
  117. package/domain/utils/createRecordLockingClient.js.map +1 -1
  118. package/domain/utils/createRecordLockingError.d.ts +1 -1
  119. package/domain/utils/createRecordLockingError.js +1 -7
  120. package/domain/utils/createRecordLockingError.js.map +1 -1
  121. package/hooks/index.d.ts +2 -2
  122. package/hooks/index.js +2 -27
  123. package/hooks/index.js.map +1 -1
  124. package/hooks/usePermission.d.ts +1 -1
  125. package/hooks/usePermission.js +14 -15
  126. package/hooks/usePermission.js.map +1 -1
  127. package/hooks/useRecordLocking.d.ts +1 -1
  128. package/hooks/useRecordLocking.js +6 -12
  129. package/hooks/useRecordLocking.js.map +1 -1
  130. package/index.d.ts +2 -2
  131. package/index.js +19 -49
  132. package/index.js.map +1 -1
  133. package/package.json +16 -31
  134. package/types.d.ts +32 -12
  135. package/types.js +1 -5
  136. package/types.js.map +1 -1
  137. package/utils/createCacheKey.d.ts +2 -2
  138. package/utils/createCacheKey.js +5 -11
  139. package/utils/createCacheKey.js.map +1 -1
  140. package/components/assets/lock.svg +0 -13
  141. package/domain/RecordLockingUnlockEntryRequest.d.ts +0 -11
  142. package/domain/RecordLockingUnlockEntryRequest.js +0 -28
  143. package/domain/RecordLockingUnlockEntryRequest.js.map +0 -1
  144. package/domain/abstractions/IRecordLockingUnlockEntryRequest.d.ts +0 -12
  145. package/domain/abstractions/IRecordLockingUnlockEntryRequest.js +0 -7
  146. package/domain/abstractions/IRecordLockingUnlockEntryRequest.js.map +0 -1
  147. package/domain/graphql/unlockEntryRequest.d.ts +0 -12
  148. package/domain/graphql/unlockEntryRequest.js +0 -16
  149. package/domain/graphql/unlockEntryRequest.js.map +0 -1
package/README.md CHANGED
@@ -1,12 +1,11 @@
1
1
  # @webiny/app-record-locking
2
- [![](https://img.shields.io/npm/dw/@webiny/app-record-locking.svg)](https://www.npmjs.com/package/@webiny/app-record-locking)
3
- [![](https://img.shields.io/npm/v/@webiny/app-record-locking.svg)](https://www.npmjs.com/package/@webiny/app-record-locking)
4
- [![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square)](https://github.com/prettier/prettier)
5
- [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com)
6
2
 
7
- Exposes a simple `SocketsProvider` React provider component and enables you to quickly send socket messages via the `useSockets` React hook.
3
+ > [!NOTE]
4
+ > This package is part of the [Webiny](https://www.webiny.com) monorepo.
5
+ > It’s **included in every Webiny project by default** and is not meant to be used as a standalone package.
8
6
 
9
- ## Install
10
- ```
11
- yarn add @webiny/app-record-locking
12
- ```
7
+ 📘 **Documentation:** [https://www.webiny.com/docs](https://www.webiny.com/docs)
8
+
9
+ ---
10
+
11
+ _This README file is automatically generated during the publish process._
@@ -1,71 +1,60 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports.HeadlessCmsActionsAcoCell = void 0;
8
- var _base = _interopRequireDefault(require("@emotion/styled/base"));
9
- var _react = _interopRequireDefault(require("react"));
10
- var _appHeadlessCms = require("@webiny/app-headless-cms");
11
- var _lock = require("@material-design-icons/svg/round/lock.svg");
12
- var _Tooltip = require("@webiny/ui/Tooltip");
13
- var _hooks = require("../hooks");
14
- var _UseContentEntriesListHookDecorator = require("./decorators/UseContentEntriesListHookDecorator");
15
- var _UseSaveEntryDecorator = require("./decorators/UseSaveEntryDecorator");
16
- var _UseRecordsDecorator = require("./decorators/UseRecordsDecorator");
17
- function _EMOTION_STRINGIFIED_CSS_ERROR__() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; }
18
- var CenterAlignment = /*#__PURE__*/(0, _base.default)("div", process.env.NODE_ENV === "production" ? {
19
- target: "e1qmlafx0"
20
- } : {
21
- target: "e1qmlafx0",
22
- label: "CenterAlignment"
23
- })(process.env.NODE_ENV === "production" ? {
24
- name: "dmikdp",
25
- styles: "display:block;margin:0 auto;width:28px;svg{fill:var(--mdc-theme-text-secondary-on-background);}"
26
- } : {
27
- name: "dmikdp",
28
- styles: "display:block;margin:0 auto;width:28px;svg{fill:var(--mdc-theme-text-secondary-on-background);}",
29
- map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkhlYWRsZXNzQ21zQWN0aW9uc0Fjb0NlbGwudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVVrQyIsImZpbGUiOiJIZWFkbGVzc0Ntc0FjdGlvbnNBY29DZWxsLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IENvbnRlbnRFbnRyeUxpc3RDb25maWcsIHVzZU1vZGVsIH0gZnJvbSBcIkB3ZWJpbnkvYXBwLWhlYWRsZXNzLWNtc1wiO1xuaW1wb3J0IHsgUmVhY3RDb21wb25lbnQgYXMgTG9ja2VkSWNvbiB9IGZyb20gXCJAbWF0ZXJpYWwtZGVzaWduLWljb25zL3N2Zy9yb3VuZC9sb2NrLnN2Z1wiO1xuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gXCJAd2ViaW55L3VpL1Rvb2x0aXBcIjtcbmltcG9ydCB7IHVzZVJlY29yZExvY2tpbmcgfSBmcm9tIFwifi9ob29rc1wiO1xuaW1wb3J0IHsgVXNlQ29udGVudEVudHJpZXNMaXN0SG9va0RlY29yYXRvciB9IGZyb20gXCIuL2RlY29yYXRvcnMvVXNlQ29udGVudEVudHJpZXNMaXN0SG9va0RlY29yYXRvclwiO1xuaW1wb3J0IHN0eWxlZCBmcm9tIFwiQGVtb3Rpb24vc3R5bGVkXCI7XG5pbXBvcnQgeyBVc2VTYXZlRW50cnlEZWNvcmF0b3IgfSBmcm9tIFwifi9jb21wb25lbnRzL2RlY29yYXRvcnMvVXNlU2F2ZUVudHJ5RGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBVc2VSZWNvcmRzRGVjb3JhdG9yIH0gZnJvbSBcIi4vZGVjb3JhdG9ycy9Vc2VSZWNvcmRzRGVjb3JhdG9yXCI7XG5cbmNvbnN0IENlbnRlckFsaWdubWVudCA9IHN0eWxlZC5kaXZgXG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbWFyZ2luOiAwIGF1dG87XG4gICAgd2lkdGg6IDI4cHg7XG4gICAgc3ZnIHtcbiAgICAgICAgZmlsbDogdmFyKC0tbWRjLXRoZW1lLXRleHQtc2Vjb25kYXJ5LW9uLWJhY2tncm91bmQpO1xuICAgIH1cbmA7XG5cbmNvbnN0IHsgQnJvd3NlciB9ID0gQ29udGVudEVudHJ5TGlzdENvbmZpZztcblxuaW50ZXJmYWNlIEFjdGlvbnNDZWxsUHJvcHMge1xuICAgIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XG59XG5cbmNvbnN0IEFjdGlvbnNDZWxsID0gKHsgY2hpbGRyZW4gfTogQWN0aW9uc0NlbGxQcm9wcykgPT4ge1xuICAgIGNvbnN0IHsgbW9kZWwgfSA9IHVzZU1vZGVsKCk7XG4gICAgY29uc3QgeyBnZXRMb2NrUmVjb3JkRW50cnksIGlzUmVjb3JkTG9ja2VkIH0gPSB1c2VSZWNvcmRMb2NraW5nKCk7XG5cbiAgICBjb25zdCB7IHVzZVRhYmxlUm93LCBpc0ZvbGRlclJvdyB9ID0gQnJvd3Nlci5UYWJsZS5Db2x1bW47XG4gICAgY29uc3QgeyByb3cgfSA9IHVzZVRhYmxlUm93KCk7XG5cbiAgICBpZiAoaXNGb2xkZXJSb3cocm93KSkge1xuICAgICAgICByZXR1cm4gPD57Y2hpbGRyZW59PC8+O1xuICAgIH1cblxuICAgIGNvbnN0IGVudHJ5ID0gZ2V0TG9ja1JlY29yZEVudHJ5KHJvdy5pZCk7XG5cbiAgICBpZiAoIWlzUmVjb3JkTG9ja2VkKGVudHJ5KSB8fCAhZW50cnk/LiRsb2NrZWQpIHtcbiAgICAgICAgcmV0dXJuIDw+e2NoaWxkcmVufTwvPjtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgICAgPENlbnRlckFsaWdubWVudD5cbiAgICAgICAgICAgIDxUb29sdGlwXG4gICAgICAgICAgICAgICAgcGxhY2VtZW50PXtcImxlZnRcIn1cbiAgICAgICAgICAgICAgICBjb250ZW50PXtgVGhpcyAke21vZGVsLm5hbWV9IGlzIGN1cnJlbnRseSBsb2NrZWQgYnkgJHtlbnRyeS4kbG9ja2VkLmxvY2tlZEJ5LmRpc3BsYXlOYW1lfS5gfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxMb2NrZWRJY29uIC8+XG4gICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgIDwvQ2VudGVyQWxpZ25tZW50PlxuICAgICk7XG59O1xuXG5jb25zdCBSZWNvcmRMb2NraW5nQ2VsbEFjdGlvbnMgPSBCcm93c2VyLlRhYmxlLkNvbHVtbi5jcmVhdGVEZWNvcmF0b3IoT3JpZ2luYWwgPT4ge1xuICAgIHJldHVybiBmdW5jdGlvbiBSZWNvcmRMb2NraW5nQ2VsbEFjdGlvbnMocHJvcHMpIHtcbiAgICAgICAgaWYgKHByb3BzLm5hbWUgPT09IFwiYWN0aW9uc1wiICYmIHByb3BzLmNlbGwpIHtcbiAgICAgICAgICAgIHJldHVybiA8T3JpZ2luYWwgey4uLnByb3BzfSBjZWxsPXs8QWN0aW9uc0NlbGw+e3Byb3BzLmNlbGx9PC9BY3Rpb25zQ2VsbD59IC8+O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIDxPcmlnaW5hbCB7Li4ucHJvcHN9IC8+O1xuICAgIH07XG59KTtcblxuZXhwb3J0IGNvbnN0IEhlYWRsZXNzQ21zQWN0aW9uc0Fjb0NlbGwgPSAoKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICAgIDxVc2VDb250ZW50RW50cmllc0xpc3RIb29rRGVjb3JhdG9yIC8+XG4gICAgICAgICAgICA8VXNlU2F2ZUVudHJ5RGVjb3JhdG9yIC8+XG4gICAgICAgICAgICA8UmVjb3JkTG9ja2luZ0NlbGxBY3Rpb25zIC8+XG4gICAgICAgICAgICA8VXNlUmVjb3Jkc0RlY29yYXRvciAvPlxuICAgICAgICA8Lz5cbiAgICApO1xufTtcbiJdfQ== */",
30
- toString: _EMOTION_STRINGIFIED_CSS_ERROR__
31
- });
32
- var Browser = _appHeadlessCms.ContentEntryListConfig.Browser;
33
- var ActionsCell = function ActionsCell(_ref) {
34
- var children = _ref.children;
35
- var _useModel = (0, _appHeadlessCms.useModel)(),
36
- model = _useModel.model;
37
- var _useRecordLocking = (0, _hooks.useRecordLocking)(),
38
- getLockRecordEntry = _useRecordLocking.getLockRecordEntry,
39
- isRecordLocked = _useRecordLocking.isRecordLocked;
40
- var _Browser$Table$Column = Browser.Table.Column,
41
- useTableRow = _Browser$Table$Column.useTableRow,
42
- isFolderRow = _Browser$Table$Column.isFolderRow;
43
- var _useTableRow = useTableRow(),
44
- row = _useTableRow.row;
1
+ import React from "react";
2
+ import { ContentEntryListConfig, useModel } from "@webiny/app-headless-cms";
3
+ import { ReactComponent as LockedIcon } from "@webiny/icons/lock.svg";
4
+ import { useRecordLocking } from "../hooks/index.js";
5
+ import { UseContentEntriesListHookDecorator } from "./decorators/UseContentEntriesListHookDecorator.js";
6
+ import { UseSaveEntryDecorator } from "./decorators/UseSaveEntryDecorator.js";
7
+ import { UseRecordsDecorator } from "./decorators/UseRecordsDecorator.js";
8
+ import { Icon, Tooltip } from "@webiny/admin-ui";
9
+ const {
10
+ Browser
11
+ } = ContentEntryListConfig;
12
+ const ActionsCell = ({
13
+ children
14
+ }) => {
15
+ const {
16
+ model
17
+ } = useModel();
18
+ const {
19
+ getLockRecordEntry,
20
+ isRecordLocked
21
+ } = useRecordLocking();
22
+ const {
23
+ useTableRow,
24
+ isFolderRow
25
+ } = Browser.Table.Column;
26
+ const {
27
+ row
28
+ } = useTableRow();
45
29
  if (isFolderRow(row)) {
46
- return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, children);
30
+ return /*#__PURE__*/React.createElement(React.Fragment, null, children);
47
31
  }
48
- var entry = getLockRecordEntry(row.id);
32
+ const entry = getLockRecordEntry(row.id);
49
33
  if (!isRecordLocked(entry) || !entry?.$locked) {
50
- return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, children);
34
+ return /*#__PURE__*/React.createElement(React.Fragment, null, children);
51
35
  }
52
- return /*#__PURE__*/_react.default.createElement(CenterAlignment, null, /*#__PURE__*/_react.default.createElement(_Tooltip.Tooltip, {
53
- placement: "left",
54
- content: "This ".concat(model.name, " is currently locked by ").concat(entry.$locked.lockedBy.displayName, ".")
55
- }, /*#__PURE__*/_react.default.createElement(_lock.ReactComponent, null)));
36
+ return /*#__PURE__*/React.createElement(Tooltip, {
37
+ side: "left",
38
+ content: `This ${model.name} is currently locked by ${entry.$locked.lockedBy.displayName}.`,
39
+ trigger: /*#__PURE__*/React.createElement(Icon, {
40
+ icon: /*#__PURE__*/React.createElement(LockedIcon, null),
41
+ label: "Locked entry",
42
+ color: "neutral-light"
43
+ })
44
+ });
56
45
  };
57
- var RecordLockingCellActions = Browser.Table.Column.createDecorator(function (Original) {
46
+ const RecordLockingCellActions = Browser.Table.Column.createDecorator(Original => {
58
47
  return function RecordLockingCellActions(props) {
59
48
  if (props.name === "actions" && props.cell) {
60
- return /*#__PURE__*/_react.default.createElement(Original, Object.assign({}, props, {
61
- cell: /*#__PURE__*/_react.default.createElement(ActionsCell, null, props.cell)
49
+ return /*#__PURE__*/React.createElement(Original, Object.assign({}, props, {
50
+ cell: /*#__PURE__*/React.createElement(ActionsCell, null, props.cell)
62
51
  }));
63
52
  }
64
- return /*#__PURE__*/_react.default.createElement(Original, props);
53
+ return /*#__PURE__*/React.createElement(Original, props);
65
54
  };
66
55
  });
67
- var HeadlessCmsActionsAcoCell = exports.HeadlessCmsActionsAcoCell = function HeadlessCmsActionsAcoCell() {
68
- return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_UseContentEntriesListHookDecorator.UseContentEntriesListHookDecorator, null), /*#__PURE__*/_react.default.createElement(_UseSaveEntryDecorator.UseSaveEntryDecorator, null), /*#__PURE__*/_react.default.createElement(RecordLockingCellActions, null), /*#__PURE__*/_react.default.createElement(_UseRecordsDecorator.UseRecordsDecorator, null));
56
+ export const HeadlessCmsActionsAcoCell = () => {
57
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(UseContentEntriesListHookDecorator, null), /*#__PURE__*/React.createElement(UseSaveEntryDecorator, null), /*#__PURE__*/React.createElement(RecordLockingCellActions, null), /*#__PURE__*/React.createElement(UseRecordsDecorator, null));
69
58
  };
70
59
 
71
60
  //# sourceMappingURL=HeadlessCmsActionsAcoCell.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireDefault","require","_appHeadlessCms","_lock","_Tooltip","_hooks","_UseContentEntriesListHookDecorator","_UseSaveEntryDecorator","_UseRecordsDecorator","_EMOTION_STRINGIFIED_CSS_ERROR__","CenterAlignment","_base","default","process","env","NODE_ENV","target","label","name","styles","map","toString","Browser","ContentEntryListConfig","ActionsCell","_ref","children","_useModel","useModel","model","_useRecordLocking","useRecordLocking","getLockRecordEntry","isRecordLocked","_Browser$Table$Column","Table","Column","useTableRow","isFolderRow","_useTableRow","row","createElement","Fragment","entry","id","$locked","Tooltip","placement","content","concat","lockedBy","displayName","ReactComponent","RecordLockingCellActions","createDecorator","Original","props","cell","Object","assign","HeadlessCmsActionsAcoCell","exports","UseContentEntriesListHookDecorator","UseSaveEntryDecorator","UseRecordsDecorator"],"sources":["HeadlessCmsActionsAcoCell.tsx"],"sourcesContent":["import React from \"react\";\nimport { ContentEntryListConfig, useModel } from \"@webiny/app-headless-cms\";\nimport { ReactComponent as LockedIcon } from \"@material-design-icons/svg/round/lock.svg\";\nimport { Tooltip } from \"@webiny/ui/Tooltip\";\nimport { useRecordLocking } from \"~/hooks\";\nimport { UseContentEntriesListHookDecorator } from \"./decorators/UseContentEntriesListHookDecorator\";\nimport styled from \"@emotion/styled\";\nimport { UseSaveEntryDecorator } from \"~/components/decorators/UseSaveEntryDecorator\";\nimport { UseRecordsDecorator } from \"./decorators/UseRecordsDecorator\";\n\nconst CenterAlignment = styled.div`\n display: block;\n margin: 0 auto;\n width: 28px;\n svg {\n fill: var(--mdc-theme-text-secondary-on-background);\n }\n`;\n\nconst { Browser } = ContentEntryListConfig;\n\ninterface ActionsCellProps {\n children: React.ReactNode;\n}\n\nconst ActionsCell = ({ children }: ActionsCellProps) => {\n const { model } = useModel();\n const { getLockRecordEntry, isRecordLocked } = useRecordLocking();\n\n const { useTableRow, isFolderRow } = Browser.Table.Column;\n const { row } = useTableRow();\n\n if (isFolderRow(row)) {\n return <>{children}</>;\n }\n\n const entry = getLockRecordEntry(row.id);\n\n if (!isRecordLocked(entry) || !entry?.$locked) {\n return <>{children}</>;\n }\n return (\n <CenterAlignment>\n <Tooltip\n placement={\"left\"}\n content={`This ${model.name} is currently locked by ${entry.$locked.lockedBy.displayName}.`}\n >\n <LockedIcon />\n </Tooltip>\n </CenterAlignment>\n );\n};\n\nconst RecordLockingCellActions = Browser.Table.Column.createDecorator(Original => {\n return function RecordLockingCellActions(props) {\n if (props.name === \"actions\" && props.cell) {\n return <Original {...props} cell={<ActionsCell>{props.cell}</ActionsCell>} />;\n }\n\n return <Original {...props} />;\n };\n});\n\nexport const HeadlessCmsActionsAcoCell = () => {\n return (\n <>\n <UseContentEntriesListHookDecorator />\n <UseSaveEntryDecorator />\n <RecordLockingCellActions />\n <UseRecordsDecorator />\n </>\n );\n};\n"],"mappings":";;;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,eAAA,GAAAD,OAAA;AACA,IAAAE,KAAA,GAAAF,OAAA;AACA,IAAAG,QAAA,GAAAH,OAAA;AACA,IAAAI,MAAA,GAAAJ,OAAA;AACA,IAAAK,mCAAA,GAAAL,OAAA;AAEA,IAAAM,sBAAA,GAAAN,OAAA;AACA,IAAAO,oBAAA,GAAAP,OAAA;AAAuE,SAAAQ,iCAAA;AAEvE,IAAMC,eAAe,oBAAAC,KAAA,CAAAC,OAAA,SAAAC,OAAA,CAAAC,GAAA,CAAAC,QAAA;EAAAC,MAAA;AAAA;EAAAA,MAAA;EAAAC,KAAA;AAAA,GAAAJ,OAAA,CAAAC,GAAA,CAAAC,QAAA;EAAAG,IAAA;EAAAC,MAAA;AAAA;EAAAD,IAAA;EAAAC,MAAA;EAAAC,GAAA;EAAAC,QAAA,EAAAZ;AAAA,EAOpB;AAED,IAAQa,OAAO,GAAKC,sCAAsB,CAAlCD,OAAO;AAMf,IAAME,WAAW,GAAG,SAAdA,WAAWA,CAAAC,IAAA,EAAuC;EAAA,IAAjCC,QAAQ,GAAAD,IAAA,CAARC,QAAQ;EAC3B,IAAAC,SAAA,GAAkB,IAAAC,wBAAQ,EAAC,CAAC;IAApBC,KAAK,GAAAF,SAAA,CAALE,KAAK;EACb,IAAAC,iBAAA,GAA+C,IAAAC,uBAAgB,EAAC,CAAC;IAAzDC,kBAAkB,GAAAF,iBAAA,CAAlBE,kBAAkB;IAAEC,cAAc,GAAAH,iBAAA,CAAdG,cAAc;EAE1C,IAAAC,qBAAA,GAAqCZ,OAAO,CAACa,KAAK,CAACC,MAAM;IAAjDC,WAAW,GAAAH,qBAAA,CAAXG,WAAW;IAAEC,WAAW,GAAAJ,qBAAA,CAAXI,WAAW;EAChC,IAAAC,YAAA,GAAgBF,WAAW,CAAC,CAAC;IAArBG,GAAG,GAAAD,YAAA,CAAHC,GAAG;EAEX,IAAIF,WAAW,CAACE,GAAG,CAAC,EAAE;IAClB,oBAAOzC,MAAA,CAAAa,OAAA,CAAA6B,aAAA,CAAA1C,MAAA,CAAAa,OAAA,CAAA8B,QAAA,QAAGhB,QAAW,CAAC;EAC1B;EAEA,IAAMiB,KAAK,GAAGX,kBAAkB,CAACQ,GAAG,CAACI,EAAE,CAAC;EAExC,IAAI,CAACX,cAAc,CAACU,KAAK,CAAC,IAAI,CAACA,KAAK,EAAEE,OAAO,EAAE;IAC3C,oBAAO9C,MAAA,CAAAa,OAAA,CAAA6B,aAAA,CAAA1C,MAAA,CAAAa,OAAA,CAAA8B,QAAA,QAAGhB,QAAW,CAAC;EAC1B;EACA,oBACI3B,MAAA,CAAAa,OAAA,CAAA6B,aAAA,CAAC/B,eAAe,qBACZX,MAAA,CAAAa,OAAA,CAAA6B,aAAA,CAACrC,QAAA,CAAA0C,OAAO;IACJC,SAAS,EAAE,MAAO;IAClBC,OAAO,UAAAC,MAAA,CAAUpB,KAAK,CAACX,IAAI,8BAAA+B,MAAA,CAA2BN,KAAK,CAACE,OAAO,CAACK,QAAQ,CAACC,WAAW;EAAI,gBAE5FpD,MAAA,CAAAa,OAAA,CAAA6B,aAAA,CAACtC,KAAA,CAAAiD,cAAU,MAAE,CACR,CACI,CAAC;AAE1B,CAAC;AAED,IAAMC,wBAAwB,GAAG/B,OAAO,CAACa,KAAK,CAACC,MAAM,CAACkB,eAAe,CAAC,UAAAC,QAAQ,EAAI;EAC9E,OAAO,SAASF,wBAAwBA,CAACG,KAAK,EAAE;IAC5C,IAAIA,KAAK,CAACtC,IAAI,KAAK,SAAS,IAAIsC,KAAK,CAACC,IAAI,EAAE;MACxC,oBAAO1D,MAAA,CAAAa,OAAA,CAAA6B,aAAA,CAACc,QAAQ,EAAAG,MAAA,CAAAC,MAAA,KAAKH,KAAK;QAAEC,IAAI,eAAE1D,MAAA,CAAAa,OAAA,CAAA6B,aAAA,CAACjB,WAAW,QAAEgC,KAAK,CAACC,IAAkB;MAAE,EAAE,CAAC;IACjF;IAEA,oBAAO1D,MAAA,CAAAa,OAAA,CAAA6B,aAAA,CAACc,QAAQ,EAAKC,KAAQ,CAAC;EAClC,CAAC;AACL,CAAC,CAAC;AAEK,IAAMI,yBAAyB,GAAAC,OAAA,CAAAD,yBAAA,GAAG,SAA5BA,yBAAyBA,CAAA,EAAS;EAC3C,oBACI7D,MAAA,CAAAa,OAAA,CAAA6B,aAAA,CAAA1C,MAAA,CAAAa,OAAA,CAAA8B,QAAA,qBACI3C,MAAA,CAAAa,OAAA,CAAA6B,aAAA,CAACnC,mCAAA,CAAAwD,kCAAkC,MAAE,CAAC,eACtC/D,MAAA,CAAAa,OAAA,CAAA6B,aAAA,CAAClC,sBAAA,CAAAwD,qBAAqB,MAAE,CAAC,eACzBhE,MAAA,CAAAa,OAAA,CAAA6B,aAAA,CAACY,wBAAwB,MAAE,CAAC,eAC5BtD,MAAA,CAAAa,OAAA,CAAA6B,aAAA,CAACjC,oBAAA,CAAAwD,mBAAmB,MAAE,CACxB,CAAC;AAEX,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["React","ContentEntryListConfig","useModel","ReactComponent","LockedIcon","useRecordLocking","UseContentEntriesListHookDecorator","UseSaveEntryDecorator","UseRecordsDecorator","Icon","Tooltip","Browser","ActionsCell","children","model","getLockRecordEntry","isRecordLocked","useTableRow","isFolderRow","Table","Column","row","createElement","Fragment","entry","id","$locked","side","content","name","lockedBy","displayName","trigger","icon","label","color","RecordLockingCellActions","createDecorator","Original","props","cell","Object","assign","HeadlessCmsActionsAcoCell"],"sources":["HeadlessCmsActionsAcoCell.tsx"],"sourcesContent":["import React from \"react\";\nimport { ContentEntryListConfig, useModel } from \"@webiny/app-headless-cms\";\nimport { ReactComponent as LockedIcon } from \"@webiny/icons/lock.svg\";\nimport { useRecordLocking } from \"~/hooks/index.js\";\nimport { UseContentEntriesListHookDecorator } from \"./decorators/UseContentEntriesListHookDecorator.js\";\nimport { UseSaveEntryDecorator } from \"~/components/decorators/UseSaveEntryDecorator.js\";\nimport { UseRecordsDecorator } from \"./decorators/UseRecordsDecorator.js\";\nimport { Icon, Tooltip } from \"@webiny/admin-ui\";\n\nconst { Browser } = ContentEntryListConfig;\n\ninterface ActionsCellProps {\n children: React.ReactNode;\n}\n\nconst ActionsCell = ({ children }: ActionsCellProps) => {\n const { model } = useModel();\n const { getLockRecordEntry, isRecordLocked } = useRecordLocking();\n\n const { useTableRow, isFolderRow } = Browser.Table.Column;\n const { row } = useTableRow();\n\n if (isFolderRow(row)) {\n return <>{children}</>;\n }\n\n const entry = getLockRecordEntry(row.id);\n\n if (!isRecordLocked(entry) || !entry?.$locked) {\n return <>{children}</>;\n }\n return (\n <Tooltip\n side={\"left\"}\n content={`This ${model.name} is currently locked by ${entry.$locked.lockedBy.displayName}.`}\n trigger={<Icon icon={<LockedIcon />} label={\"Locked entry\"} color={\"neutral-light\"} />}\n />\n );\n};\n\nconst RecordLockingCellActions = Browser.Table.Column.createDecorator(Original => {\n return function RecordLockingCellActions(props) {\n if (props.name === \"actions\" && props.cell) {\n return <Original {...props} cell={<ActionsCell>{props.cell}</ActionsCell>} />;\n }\n\n return <Original {...props} />;\n };\n});\n\nexport const HeadlessCmsActionsAcoCell = () => {\n return (\n <>\n <UseContentEntriesListHookDecorator />\n <UseSaveEntryDecorator />\n <RecordLockingCellActions />\n <UseRecordsDecorator />\n </>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,sBAAsB,EAAEC,QAAQ,QAAQ,0BAA0B;AAC3E,SAASC,cAAc,IAAIC,UAAU,QAAQ,wBAAwB;AACrE,SAASC,gBAAgB;AACzB,SAASC,kCAAkC;AAC3C,SAASC,qBAAqB;AAC9B,SAASC,mBAAmB;AAC5B,SAASC,IAAI,EAAEC,OAAO,QAAQ,kBAAkB;AAEhD,MAAM;EAAEC;AAAQ,CAAC,GAAGV,sBAAsB;AAM1C,MAAMW,WAAW,GAAGA,CAAC;EAAEC;AAA2B,CAAC,KAAK;EACpD,MAAM;IAAEC;EAAM,CAAC,GAAGZ,QAAQ,CAAC,CAAC;EAC5B,MAAM;IAAEa,kBAAkB;IAAEC;EAAe,CAAC,GAAGX,gBAAgB,CAAC,CAAC;EAEjE,MAAM;IAAEY,WAAW;IAAEC;EAAY,CAAC,GAAGP,OAAO,CAACQ,KAAK,CAACC,MAAM;EACzD,MAAM;IAAEC;EAAI,CAAC,GAAGJ,WAAW,CAAC,CAAC;EAE7B,IAAIC,WAAW,CAACG,GAAG,CAAC,EAAE;IAClB,oBAAOrB,KAAA,CAAAsB,aAAA,CAAAtB,KAAA,CAAAuB,QAAA,QAAGV,QAAW,CAAC;EAC1B;EAEA,MAAMW,KAAK,GAAGT,kBAAkB,CAACM,GAAG,CAACI,EAAE,CAAC;EAExC,IAAI,CAACT,cAAc,CAACQ,KAAK,CAAC,IAAI,CAACA,KAAK,EAAEE,OAAO,EAAE;IAC3C,oBAAO1B,KAAA,CAAAsB,aAAA,CAAAtB,KAAA,CAAAuB,QAAA,QAAGV,QAAW,CAAC;EAC1B;EACA,oBACIb,KAAA,CAAAsB,aAAA,CAACZ,OAAO;IACJiB,IAAI,EAAE,MAAO;IACbC,OAAO,EAAE,QAAQd,KAAK,CAACe,IAAI,2BAA2BL,KAAK,CAACE,OAAO,CAACI,QAAQ,CAACC,WAAW,GAAI;IAC5FC,OAAO,eAAEhC,KAAA,CAAAsB,aAAA,CAACb,IAAI;MAACwB,IAAI,eAAEjC,KAAA,CAAAsB,aAAA,CAAClB,UAAU,MAAE,CAAE;MAAC8B,KAAK,EAAE,cAAe;MAACC,KAAK,EAAE;IAAgB,CAAE;EAAE,CAC1F,CAAC;AAEV,CAAC;AAED,MAAMC,wBAAwB,GAAGzB,OAAO,CAACQ,KAAK,CAACC,MAAM,CAACiB,eAAe,CAACC,QAAQ,IAAI;EAC9E,OAAO,SAASF,wBAAwBA,CAACG,KAAK,EAAE;IAC5C,IAAIA,KAAK,CAACV,IAAI,KAAK,SAAS,IAAIU,KAAK,CAACC,IAAI,EAAE;MACxC,oBAAOxC,KAAA,CAAAsB,aAAA,CAACgB,QAAQ,EAAAG,MAAA,CAAAC,MAAA,KAAKH,KAAK;QAAEC,IAAI,eAAExC,KAAA,CAAAsB,aAAA,CAACV,WAAW,QAAE2B,KAAK,CAACC,IAAkB;MAAE,EAAE,CAAC;IACjF;IAEA,oBAAOxC,KAAA,CAAAsB,aAAA,CAACgB,QAAQ,EAAKC,KAAQ,CAAC;EAClC,CAAC;AACL,CAAC,CAAC;AAEF,OAAO,MAAMI,yBAAyB,GAAGA,CAAA,KAAM;EAC3C,oBACI3C,KAAA,CAAAsB,aAAA,CAAAtB,KAAA,CAAAuB,QAAA,qBACIvB,KAAA,CAAAsB,aAAA,CAAChB,kCAAkC,MAAE,CAAC,eACtCN,KAAA,CAAAsB,aAAA,CAACf,qBAAqB,MAAE,CAAC,eACzBP,KAAA,CAAAsB,aAAA,CAACc,wBAAwB,MAAE,CAAC,eAC5BpC,KAAA,CAAAsB,aAAA,CAACd,mBAAmB,MAAE,CACxB,CAAC;AAEX,CAAC","ignoreList":[]}
@@ -1,5 +1,9 @@
1
1
  import React from "react";
2
+ import type { CmsContentEntry, CmsModel } from "@webiny/app-headless-cms/types.js";
2
3
  export interface IContentEntryGuardProps {
4
+ loading: boolean;
5
+ entry: CmsContentEntry;
6
+ model: CmsModel;
3
7
  children: React.ReactElement;
4
8
  }
5
9
  export declare const ContentEntryGuard: (props: IContentEntryGuardProps) => React.JSX.Element;
@@ -1,71 +1,24 @@
1
- "use strict";
2
-
3
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
4
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.ContentEntryGuard = void 0;
9
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
- var _base = _interopRequireDefault(require("@emotion/styled/base"));
11
- var _appHeadlessCms = require("@webiny/app-headless-cms");
12
- var _hooks = require("../../hooks");
13
- var _Elevation = require("@webiny/ui/Elevation");
14
- var _Progress = require("@webiny/ui/Progress");
15
- var _emotion = require("emotion");
16
- var _react = _interopRequireWildcard(require("react"));
17
- var _LockedRecord = require("../LockedRecord");
18
- function _EMOTION_STRINGIFIED_CSS_ERROR__() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; }
19
- var DetailsContainer = /*#__PURE__*/(0, _base.default)("div", process.env.NODE_ENV === "production" ? {
20
- target: "ecb7tlj1"
21
- } : {
22
- target: "ecb7tlj1",
23
- label: "DetailsContainer"
24
- })(process.env.NODE_ENV === "production" ? {
25
- name: "1ypyu3l",
26
- styles: "height:calc(100% - 10px);overflow:hidden;position:relative;nav{background-color:var(--mdc-theme-surface);}"
27
- } : {
28
- name: "1ypyu3l",
29
- styles: "height:calc(100% - 10px);overflow:hidden;position:relative;nav{background-color:var(--mdc-theme-surface);}",
30
- map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNvbnRlbnRFbnRyeUd1YXJkLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFVeUIiLCJmaWxlIjoiQ29udGVudEVudHJ5R3VhcmQudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlQ29udGVudEVudHJ5IH0gZnJvbSBcIkB3ZWJpbnkvYXBwLWhlYWRsZXNzLWNtc1wiO1xuaW1wb3J0IHsgdXNlUmVjb3JkTG9ja2luZyB9IGZyb20gXCJ+L2hvb2tzXCI7XG5pbXBvcnQgeyBFbGV2YXRpb24gfSBmcm9tIFwiQHdlYmlueS91aS9FbGV2YXRpb25cIjtcbmltcG9ydCB7IENpcmN1bGFyUHJvZ3Jlc3MgfSBmcm9tIFwiQHdlYmlueS91aS9Qcm9ncmVzc1wiO1xuaW1wb3J0IHsgY3NzIH0gZnJvbSBcImVtb3Rpb25cIjtcbmltcG9ydCBzdHlsZWQgZnJvbSBcIkBlbW90aW9uL3N0eWxlZFwiO1xuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IExvY2tlZFJlY29yZCB9IGZyb20gXCIuLi9Mb2NrZWRSZWNvcmRcIjtcbmltcG9ydCB7IElSZWNvcmRMb2NraW5nTG9ja1JlY29yZCB9IGZyb20gXCJ+L3R5cGVzXCI7XG5cbmNvbnN0IERldGFpbHNDb250YWluZXIgPSBzdHlsZWQoXCJkaXZcIikoe1xuICAgIGhlaWdodDogXCJjYWxjKDEwMCUgLSAxMHB4KVwiLFxuICAgIG92ZXJmbG93OiBcImhpZGRlblwiLFxuICAgIHBvc2l0aW9uOiBcInJlbGF0aXZlXCIsXG4gICAgbmF2OiB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogXCJ2YXIoLS1tZGMtdGhlbWUtc3VyZmFjZSlcIlxuICAgIH1cbn0pO1xuXG5jb25zdCBSZW5kZXJCbG9jayA9IHN0eWxlZChcImRpdlwiKSh7XG4gICAgcG9zaXRpb246IFwicmVsYXRpdmVcIixcbiAgICB6SW5kZXg6IDAsXG4gICAgYmFja2dyb3VuZENvbG9yOiBcInZhcigtLW1kYy10aGVtZS1iYWNrZ3JvdW5kKVwiLFxuICAgIGhlaWdodDogXCIxMDAlXCIsXG4gICAgcGFkZGluZzogMjVcbn0pO1xuXG5jb25zdCBlbGV2YXRpb25TdHlsZXMgPSBjc3Moe1xuICAgIHBvc2l0aW9uOiBcInJlbGF0aXZlXCIsXG4gICAgaGVpZ2h0OiBcIjEwMCVcIlxufSk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbnRlbnRFbnRyeUd1YXJkUHJvcHMge1xuICAgIGNoaWxkcmVuOiBSZWFjdC5SZWFjdEVsZW1lbnQ7XG59XG5cbmV4cG9ydCBjb25zdCBDb250ZW50RW50cnlHdWFyZCA9IChwcm9wczogSUNvbnRlbnRFbnRyeUd1YXJkUHJvcHMpID0+IHtcbiAgICBjb25zdCB7IGxvYWRpbmcsIGVudHJ5LCBjb250ZW50TW9kZWw6IG1vZGVsIH0gPSB1c2VDb250ZW50RW50cnkoKTtcbiAgICBjb25zdCB7IGNoaWxkcmVuIH0gPSBwcm9wcztcbiAgICBjb25zdCB7IGZldGNoTG9ja2VkRW50cnlMb2NrUmVjb3JkIH0gPSB1c2VSZWNvcmRMb2NraW5nKCk7XG5cbiAgICBjb25zdCBbbG9ja2VkLCBzZXRMb2NrZWRdID0gdXNlU3RhdGU8SVJlY29yZExvY2tpbmdMb2NrUmVjb3JkIHwgbnVsbCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmICghZW50cnkuaWQgfHwgbG9hZGluZyB8fCBsb2NrZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBmZXRjaExvY2tlZEVudHJ5TG9ja1JlY29yZCh7XG4gICAgICAgICAgICAgICAgaWQ6IGVudHJ5LmlkLFxuICAgICAgICAgICAgICAgICRsb2NraW5nVHlwZTogbW9kZWwubW9kZWxJZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzZXRMb2NrZWQocmVzdWx0KTtcbiAgICAgICAgfSkoKTtcbiAgICB9LCBbZW50cnkuaWQsIGxvYWRpbmddKTtcblxuICAgIGlmIChsb2NrZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPERldGFpbHNDb250YWluZXI+XG4gICAgICAgICAgICAgICAgPFJlbmRlckJsb2NrPlxuICAgICAgICAgICAgICAgICAgICA8RWxldmF0aW9uIHo9ezJ9IGNsYXNzTmFtZT17ZWxldmF0aW9uU3R5bGVzfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxDaXJjdWxhclByb2dyZXNzIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvRWxldmF0aW9uPlxuICAgICAgICAgICAgICAgIDwvUmVuZGVyQmxvY2s+XG4gICAgICAgICAgICA8L0RldGFpbHNDb250YWluZXI+XG4gICAgICAgICk7XG4gICAgfSBlbHNlIGlmIChsb2NrZWQpIHtcbiAgICAgICAgcmV0dXJuIDxMb2NrZWRSZWNvcmQgcmVjb3JkPXtsb2NrZWR9IC8+O1xuICAgIH1cblxuICAgIHJldHVybiBjaGlsZHJlbjtcbn07XG4iXX0= */",
31
- toString: _EMOTION_STRINGIFIED_CSS_ERROR__
32
- });
33
- var RenderBlock = /*#__PURE__*/(0, _base.default)("div", process.env.NODE_ENV === "production" ? {
34
- target: "ecb7tlj0"
35
- } : {
36
- target: "ecb7tlj0",
37
- label: "RenderBlock"
38
- })(process.env.NODE_ENV === "production" ? {
39
- name: "8nvd3k",
40
- styles: "position:relative;z-index:0;background-color:var(--mdc-theme-background);height:100%;padding:25px"
41
- } : {
42
- name: "8nvd3k",
43
- styles: "position:relative;z-index:0;background-color:var(--mdc-theme-background);height:100%;padding:25px",
44
- map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNvbnRlbnRFbnRyeUd1YXJkLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFtQm9CIiwiZmlsZSI6IkNvbnRlbnRFbnRyeUd1YXJkLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZUNvbnRlbnRFbnRyeSB9IGZyb20gXCJAd2ViaW55L2FwcC1oZWFkbGVzcy1jbXNcIjtcbmltcG9ydCB7IHVzZVJlY29yZExvY2tpbmcgfSBmcm9tIFwifi9ob29rc1wiO1xuaW1wb3J0IHsgRWxldmF0aW9uIH0gZnJvbSBcIkB3ZWJpbnkvdWkvRWxldmF0aW9uXCI7XG5pbXBvcnQgeyBDaXJjdWxhclByb2dyZXNzIH0gZnJvbSBcIkB3ZWJpbnkvdWkvUHJvZ3Jlc3NcIjtcbmltcG9ydCB7IGNzcyB9IGZyb20gXCJlbW90aW9uXCI7XG5pbXBvcnQgc3R5bGVkIGZyb20gXCJAZW1vdGlvbi9zdHlsZWRcIjtcbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBMb2NrZWRSZWNvcmQgfSBmcm9tIFwiLi4vTG9ja2VkUmVjb3JkXCI7XG5pbXBvcnQgeyBJUmVjb3JkTG9ja2luZ0xvY2tSZWNvcmQgfSBmcm9tIFwifi90eXBlc1wiO1xuXG5jb25zdCBEZXRhaWxzQ29udGFpbmVyID0gc3R5bGVkKFwiZGl2XCIpKHtcbiAgICBoZWlnaHQ6IFwiY2FsYygxMDAlIC0gMTBweClcIixcbiAgICBvdmVyZmxvdzogXCJoaWRkZW5cIixcbiAgICBwb3NpdGlvbjogXCJyZWxhdGl2ZVwiLFxuICAgIG5hdjoge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwidmFyKC0tbWRjLXRoZW1lLXN1cmZhY2UpXCJcbiAgICB9XG59KTtcblxuY29uc3QgUmVuZGVyQmxvY2sgPSBzdHlsZWQoXCJkaXZcIikoe1xuICAgIHBvc2l0aW9uOiBcInJlbGF0aXZlXCIsXG4gICAgekluZGV4OiAwLFxuICAgIGJhY2tncm91bmRDb2xvcjogXCJ2YXIoLS1tZGMtdGhlbWUtYmFja2dyb3VuZClcIixcbiAgICBoZWlnaHQ6IFwiMTAwJVwiLFxuICAgIHBhZGRpbmc6IDI1XG59KTtcblxuY29uc3QgZWxldmF0aW9uU3R5bGVzID0gY3NzKHtcbiAgICBwb3NpdGlvbjogXCJyZWxhdGl2ZVwiLFxuICAgIGhlaWdodDogXCIxMDAlXCJcbn0pO1xuXG5leHBvcnQgaW50ZXJmYWNlIElDb250ZW50RW50cnlHdWFyZFByb3BzIHtcbiAgICBjaGlsZHJlbjogUmVhY3QuUmVhY3RFbGVtZW50O1xufVxuXG5leHBvcnQgY29uc3QgQ29udGVudEVudHJ5R3VhcmQgPSAocHJvcHM6IElDb250ZW50RW50cnlHdWFyZFByb3BzKSA9PiB7XG4gICAgY29uc3QgeyBsb2FkaW5nLCBlbnRyeSwgY29udGVudE1vZGVsOiBtb2RlbCB9ID0gdXNlQ29udGVudEVudHJ5KCk7XG4gICAgY29uc3QgeyBjaGlsZHJlbiB9ID0gcHJvcHM7XG4gICAgY29uc3QgeyBmZXRjaExvY2tlZEVudHJ5TG9ja1JlY29yZCB9ID0gdXNlUmVjb3JkTG9ja2luZygpO1xuXG4gICAgY29uc3QgW2xvY2tlZCwgc2V0TG9ja2VkXSA9IHVzZVN0YXRlPElSZWNvcmRMb2NraW5nTG9ja1JlY29yZCB8IG51bGwgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoIWVudHJ5LmlkIHx8IGxvYWRpbmcgfHwgbG9ja2VkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZmV0Y2hMb2NrZWRFbnRyeUxvY2tSZWNvcmQoe1xuICAgICAgICAgICAgICAgIGlkOiBlbnRyeS5pZCxcbiAgICAgICAgICAgICAgICAkbG9ja2luZ1R5cGU6IG1vZGVsLm1vZGVsSWRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc2V0TG9ja2VkKHJlc3VsdCk7XG4gICAgICAgIH0pKCk7XG4gICAgfSwgW2VudHJ5LmlkLCBsb2FkaW5nXSk7XG5cbiAgICBpZiAobG9ja2VkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxEZXRhaWxzQ29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxSZW5kZXJCbG9jaz5cbiAgICAgICAgICAgICAgICAgICAgPEVsZXZhdGlvbiB6PXsyfSBjbGFzc05hbWU9e2VsZXZhdGlvblN0eWxlc30+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Q2lyY3VsYXJQcm9ncmVzcyAvPlxuICAgICAgICAgICAgICAgICAgICA8L0VsZXZhdGlvbj5cbiAgICAgICAgICAgICAgICA8L1JlbmRlckJsb2NrPlxuICAgICAgICAgICAgPC9EZXRhaWxzQ29udGFpbmVyPlxuICAgICAgICApO1xuICAgIH0gZWxzZSBpZiAobG9ja2VkKSB7XG4gICAgICAgIHJldHVybiA8TG9ja2VkUmVjb3JkIHJlY29yZD17bG9ja2VkfSAvPjtcbiAgICB9XG5cbiAgICByZXR1cm4gY2hpbGRyZW47XG59O1xuIl19 */",
45
- toString: _EMOTION_STRINGIFIED_CSS_ERROR__
46
- });
47
- var elevationStyles = (0, _emotion.css)({
48
- position: "relative",
49
- height: "100%"
50
- });
51
- var ContentEntryGuard = exports.ContentEntryGuard = function ContentEntryGuard(props) {
52
- var _useContentEntry = (0, _appHeadlessCms.useContentEntry)(),
53
- loading = _useContentEntry.loading,
54
- entry = _useContentEntry.entry,
55
- model = _useContentEntry.contentModel;
56
- var children = props.children;
57
- var _useRecordLocking = (0, _hooks.useRecordLocking)(),
58
- fetchLockedEntryLockRecord = _useRecordLocking.fetchLockedEntryLockRecord;
59
- var _useState = (0, _react.useState)(undefined),
60
- _useState2 = (0, _slicedToArray2.default)(_useState, 2),
61
- locked = _useState2[0],
62
- setLocked = _useState2[1];
63
- (0, _react.useEffect)(function () {
1
+ import React, { useEffect, useState } from "react";
2
+ import { useRecordLocking } from "../../hooks/index.js";
3
+ import { LockedRecord } from "../LockedRecord/index.js";
4
+ import { OverlayLoader } from "@webiny/admin-ui";
5
+ export const ContentEntryGuard = props => {
6
+ const {
7
+ loading,
8
+ entry,
9
+ model,
10
+ children
11
+ } = props;
12
+ const {
13
+ fetchLockedEntryLockRecord
14
+ } = useRecordLocking();
15
+ const [locked, setLocked] = useState(undefined);
16
+ useEffect(() => {
64
17
  if (!entry.id || loading || locked !== undefined) {
65
18
  return;
66
19
  }
67
- (async function () {
68
- var result = await fetchLockedEntryLockRecord({
20
+ (async () => {
21
+ const result = await fetchLockedEntryLockRecord({
69
22
  id: entry.id,
70
23
  $lockingType: model.modelId
71
24
  });
@@ -73,12 +26,13 @@ var ContentEntryGuard = exports.ContentEntryGuard = function ContentEntryGuard(p
73
26
  })();
74
27
  }, [entry.id, loading]);
75
28
  if (locked === undefined) {
76
- return /*#__PURE__*/_react.default.createElement(DetailsContainer, null, /*#__PURE__*/_react.default.createElement(RenderBlock, null, /*#__PURE__*/_react.default.createElement(_Elevation.Elevation, {
77
- z: 2,
78
- className: elevationStyles
79
- }, /*#__PURE__*/_react.default.createElement(_Progress.CircularProgress, null))));
29
+ return /*#__PURE__*/React.createElement("div", {
30
+ className: "h-screen w-screen fixed top-0 left-0 z-20"
31
+ }, /*#__PURE__*/React.createElement(OverlayLoader, {
32
+ text: "Checking record status..."
33
+ }));
80
34
  } else if (locked) {
81
- return /*#__PURE__*/_react.default.createElement(_LockedRecord.LockedRecord, {
35
+ return /*#__PURE__*/React.createElement(LockedRecord, {
82
36
  record: locked
83
37
  });
84
38
  }
@@ -1 +1 @@
1
- {"version":3,"names":["_appHeadlessCms","require","_hooks","_Elevation","_Progress","_emotion","_react","_interopRequireWildcard","_LockedRecord","_EMOTION_STRINGIFIED_CSS_ERROR__","DetailsContainer","_base","default","process","env","NODE_ENV","target","label","name","styles","map","toString","RenderBlock","elevationStyles","css","position","height","ContentEntryGuard","exports","props","_useContentEntry","useContentEntry","loading","entry","model","contentModel","children","_useRecordLocking","useRecordLocking","fetchLockedEntryLockRecord","_useState","useState","undefined","_useState2","_slicedToArray2","locked","setLocked","useEffect","id","result","$lockingType","modelId","createElement","Elevation","z","className","CircularProgress","LockedRecord","record"],"sources":["ContentEntryGuard.tsx"],"sourcesContent":["import { useContentEntry } from \"@webiny/app-headless-cms\";\nimport { useRecordLocking } from \"~/hooks\";\nimport { Elevation } from \"@webiny/ui/Elevation\";\nimport { CircularProgress } from \"@webiny/ui/Progress\";\nimport { css } from \"emotion\";\nimport styled from \"@emotion/styled\";\nimport React, { useEffect, useState } from \"react\";\nimport { LockedRecord } from \"../LockedRecord\";\nimport { IRecordLockingLockRecord } from \"~/types\";\n\nconst DetailsContainer = styled(\"div\")({\n height: \"calc(100% - 10px)\",\n overflow: \"hidden\",\n position: \"relative\",\n nav: {\n backgroundColor: \"var(--mdc-theme-surface)\"\n }\n});\n\nconst RenderBlock = styled(\"div\")({\n position: \"relative\",\n zIndex: 0,\n backgroundColor: \"var(--mdc-theme-background)\",\n height: \"100%\",\n padding: 25\n});\n\nconst elevationStyles = css({\n position: \"relative\",\n height: \"100%\"\n});\n\nexport interface IContentEntryGuardProps {\n children: React.ReactElement;\n}\n\nexport const ContentEntryGuard = (props: IContentEntryGuardProps) => {\n const { loading, entry, contentModel: model } = useContentEntry();\n const { children } = props;\n const { fetchLockedEntryLockRecord } = useRecordLocking();\n\n const [locked, setLocked] = useState<IRecordLockingLockRecord | null | undefined>(undefined);\n\n useEffect(() => {\n if (!entry.id || loading || locked !== undefined) {\n return;\n }\n (async () => {\n const result = await fetchLockedEntryLockRecord({\n id: entry.id,\n $lockingType: model.modelId\n });\n setLocked(result);\n })();\n }, [entry.id, loading]);\n\n if (locked === undefined) {\n return (\n <DetailsContainer>\n <RenderBlock>\n <Elevation z={2} className={elevationStyles}>\n <CircularProgress />\n </Elevation>\n </RenderBlock>\n </DetailsContainer>\n );\n } else if (locked) {\n return <LockedRecord record={locked} />;\n }\n\n return children;\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","useEffect","useState","useRecordLocking","LockedRecord","OverlayLoader","ContentEntryGuard","props","loading","entry","model","children","fetchLockedEntryLockRecord","locked","setLocked","undefined","id","result","$lockingType","modelId","createElement","className","text","record"],"sources":["ContentEntryGuard.tsx"],"sourcesContent":["import React, { useEffect, useState } from \"react\";\nimport { useRecordLocking } from \"~/hooks/index.js\";\nimport { LockedRecord } from \"../LockedRecord/index.js\";\nimport type { IRecordLockingLockRecord } from \"~/types.js\";\nimport type { CmsContentEntry, CmsModel } from \"@webiny/app-headless-cms/types.js\";\nimport { OverlayLoader } from \"@webiny/admin-ui\";\n\nexport interface IContentEntryGuardProps {\n loading: boolean;\n entry: CmsContentEntry;\n model: CmsModel;\n children: React.ReactElement;\n}\n\nexport const ContentEntryGuard = (props: IContentEntryGuardProps) => {\n const { loading, entry, model, children } = props;\n const { fetchLockedEntryLockRecord } = useRecordLocking();\n\n const [locked, setLocked] = useState<IRecordLockingLockRecord | null | undefined>(undefined);\n\n useEffect(() => {\n if (!entry.id || loading || locked !== undefined) {\n return;\n }\n (async () => {\n const result = await fetchLockedEntryLockRecord({\n id: entry.id,\n $lockingType: model.modelId\n });\n setLocked(result);\n })();\n }, [entry.id, loading]);\n\n if (locked === undefined) {\n return (\n <div className={\"h-screen w-screen fixed top-0 left-0 z-20\"}>\n <OverlayLoader text={\"Checking record status...\"} />\n </div>\n );\n } else if (locked) {\n return <LockedRecord record={locked} />;\n }\n\n return children;\n};\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AAClD,SAASC,gBAAgB;AACzB,SAASC,YAAY;AAGrB,SAASC,aAAa,QAAQ,kBAAkB;AAShD,OAAO,MAAMC,iBAAiB,GAAIC,KAA8B,IAAK;EACjE,MAAM;IAAEC,OAAO;IAAEC,KAAK;IAAEC,KAAK;IAAEC;EAAS,CAAC,GAAGJ,KAAK;EACjD,MAAM;IAAEK;EAA2B,CAAC,GAAGT,gBAAgB,CAAC,CAAC;EAEzD,MAAM,CAACU,MAAM,EAAEC,SAAS,CAAC,GAAGZ,QAAQ,CAA8Ca,SAAS,CAAC;EAE5Fd,SAAS,CAAC,MAAM;IACZ,IAAI,CAACQ,KAAK,CAACO,EAAE,IAAIR,OAAO,IAAIK,MAAM,KAAKE,SAAS,EAAE;MAC9C;IACJ;IACA,CAAC,YAAY;MACT,MAAME,MAAM,GAAG,MAAML,0BAA0B,CAAC;QAC5CI,EAAE,EAAEP,KAAK,CAACO,EAAE;QACZE,YAAY,EAAER,KAAK,CAACS;MACxB,CAAC,CAAC;MACFL,SAAS,CAACG,MAAM,CAAC;IACrB,CAAC,EAAE,CAAC;EACR,CAAC,EAAE,CAACR,KAAK,CAACO,EAAE,EAAER,OAAO,CAAC,CAAC;EAEvB,IAAIK,MAAM,KAAKE,SAAS,EAAE;IACtB,oBACIf,KAAA,CAAAoB,aAAA;MAAKC,SAAS,EAAE;IAA4C,gBACxDrB,KAAA,CAAAoB,aAAA,CAACf,aAAa;MAACiB,IAAI,EAAE;IAA4B,CAAE,CAClD,CAAC;EAEd,CAAC,MAAM,IAAIT,MAAM,EAAE;IACf,oBAAOb,KAAA,CAAAoB,aAAA,CAAChB,YAAY;MAACmB,MAAM,EAAEV;IAAO,CAAE,CAAC;EAC3C;EAEA,OAAOF,QAAQ;AACnB,CAAC","ignoreList":[]}
@@ -1,7 +1,11 @@
1
1
  import React from "react";
2
- import { IRecordLockingIdentity, IRecordLockingLockRecord } from "../../types";
3
- import { IncomingGenericData } from "@webiny/app-websockets";
2
+ import type { IRecordLockingIdentity, IRecordLockingLockRecord } from "../../types.js";
3
+ import type { IncomingGenericData } from "@webiny/app-websockets";
4
+ import type { CmsContentEntry, CmsModel } from "@webiny/app-headless-cms/types.js";
4
5
  export interface IContentEntryLockerProps {
6
+ entry: CmsContentEntry;
7
+ model: CmsModel;
8
+ onEntryUnlocked: () => void;
5
9
  onDisablePrompt: (flag: boolean) => void;
6
10
  children: React.ReactElement;
7
11
  }
@@ -11,4 +15,4 @@ export interface IKickOutWebsocketsMessage extends IncomingGenericData {
11
15
  user: IRecordLockingIdentity;
12
16
  };
13
17
  }
14
- export declare const ContentEntryLocker: ({ onDisablePrompt, children }: IContentEntryLockerProps) => React.JSX.Element;
18
+ export declare const ContentEntryLocker: ({ onEntryUnlocked, onDisablePrompt, entry, model, children }: IContentEntryLockerProps) => React.JSX.Element;
@@ -1,108 +1,106 @@
1
- "use strict";
2
-
3
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
4
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.ContentEntryLocker = void 0;
9
- var _base = _interopRequireDefault(require("@emotion/styled/base"));
10
- var _appHeadlessCms = require("@webiny/app-headless-cms");
11
- var _react = _interopRequireWildcard(require("react"));
12
- var _hooks = require("../../hooks");
13
- var _appWebsockets = require("@webiny/app-websockets");
14
- var _utils = require("@webiny/utils");
15
- var _appAdmin = require("@webiny/app-admin");
16
- function _EMOTION_STRINGIFIED_CSS_ERROR__() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; }
17
- var Bold = /*#__PURE__*/(0, _base.default)("span", process.env.NODE_ENV === "production" ? {
18
- target: "e11fa9fc0"
19
- } : {
20
- target: "e11fa9fc0",
21
- label: "Bold"
22
- })(process.env.NODE_ENV === "production" ? {
23
- name: "16ceglb",
24
- styles: "font-weight:600"
25
- } : {
26
- name: "16ceglb",
27
- styles: "font-weight:600",
28
- map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNvbnRlbnRFbnRyeUxvY2tlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBYXdCIiwiZmlsZSI6IkNvbnRlbnRFbnRyeUxvY2tlci50c3giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VDb250ZW50RW50cmllc0xpc3QsIHVzZUNvbnRlbnRFbnRyeSB9IGZyb20gXCJAd2ViaW55L2FwcC1oZWFkbGVzcy1jbXNcIjtcbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlUmVjb3JkTG9ja2luZyB9IGZyb20gXCJ+L2hvb2tzXCI7XG5pbXBvcnQgeyBJSXNSZWNvcmRMb2NrZWRQYXJhbXMsIElSZWNvcmRMb2NraW5nSWRlbnRpdHksIElSZWNvcmRMb2NraW5nTG9ja1JlY29yZCB9IGZyb20gXCJ+L3R5cGVzXCI7XG5pbXBvcnQge1xuICAgIEluY29taW5nR2VuZXJpY0RhdGEsXG4gICAgSVdlYnNvY2tldHNTdWJzY3JpcHRpb24sXG4gICAgdXNlV2Vic29ja2V0c1xufSBmcm9tIFwiQHdlYmlueS9hcHAtd2Vic29ja2V0c1wiO1xuaW1wb3J0IHsgcGFyc2VJZGVudGlmaWVyIH0gZnJvbSBcIkB3ZWJpbnkvdXRpbHNcIjtcbmltcG9ydCB7IHVzZURpYWxvZ3MgfSBmcm9tIFwiQHdlYmlueS9hcHAtYWRtaW5cIjtcbmltcG9ydCBzdHlsZWQgZnJvbSBcIkBlbW90aW9uL3N0eWxlZFwiO1xuXG5jb25zdCBCb2xkID0gc3R5bGVkLnNwYW5gXG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbmA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbnRlbnRFbnRyeUxvY2tlclByb3BzIHtcbiAgICBvbkRpc2FibGVQcm9tcHQ6IChmbGFnOiBib29sZWFuKSA9PiB2b2lkO1xuICAgIGNoaWxkcmVuOiBSZWFjdC5SZWFjdEVsZW1lbnQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUtpY2tPdXRXZWJzb2NrZXRzTWVzc2FnZSBleHRlbmRzIEluY29taW5nR2VuZXJpY0RhdGEge1xuICAgIGRhdGE6IHtcbiAgICAgICAgcmVjb3JkOiBJUmVjb3JkTG9ja2luZ0xvY2tSZWNvcmQ7XG4gICAgICAgIHVzZXI6IElSZWNvcmRMb2NraW5nSWRlbnRpdHk7XG4gICAgfTtcbn1cbmludGVyZmFjZSBJRm9yY2VVbmxvY2tlZFByb3BzIHtcbiAgICB1c2VyOiBJUmVjb3JkTG9ja2luZ0lkZW50aXR5O1xufVxuY29uc3QgRm9yY2VVbmxvY2tlZCA9ICh7IHVzZXIgfTogSUZvcmNlVW5sb2NrZWRQcm9wcykgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAgICBUaGUgZW50cnkgeW91IHdlcmUgZWRpdGluZyB3YXMgZm9yY2VmdWxseSB1bmxvY2tlZCBieXtcIiBcIn1cbiAgICAgICAgICAgIDxCb2xkPnt1c2VyLmRpc3BsYXlOYW1lIHx8IFwiVW5rbm93biB1c2VyXCJ9PC9Cb2xkPi4gVW5mb3J0dW5hdGVseSwgdGhpcyBtZWFucyB5b3UgbG9zdFxuICAgICAgICAgICAgdGhlIHVuc2F2ZWQgY2hhbmdlcy5cbiAgICAgICAgPC8+XG4gICAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBDb250ZW50RW50cnlMb2NrZXIgPSAoeyBvbkRpc2FibGVQcm9tcHQsIGNoaWxkcmVuIH06IElDb250ZW50RW50cnlMb2NrZXJQcm9wcykgPT4ge1xuICAgIGNvbnN0IHsgZW50cnksIGNvbnRlbnRNb2RlbDogbW9kZWwgfSA9IHVzZUNvbnRlbnRFbnRyeSgpO1xuICAgIGNvbnN0IHsgdXBkYXRlRW50cnlMb2NrLCB1bmxvY2tFbnRyeSwgZmV0Y2hMb2NrZWRFbnRyeUxvY2tSZWNvcmQsIHJlbW92ZUVudHJ5TG9jayB9ID1cbiAgICAgICAgdXNlUmVjb3JkTG9ja2luZygpO1xuXG4gICAgY29uc3QgeyBuYXZpZ2F0ZVRvIH0gPSB1c2VDb250ZW50RW50cmllc0xpc3QoKTtcblxuICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHVzZVJlZjxJV2Vic29ja2V0c1N1YnNjcmlwdGlvbjxhbnk+PigpO1xuXG4gICAgY29uc3Qgd2Vic29ja2V0cyA9IHVzZVdlYnNvY2tldHMoKTtcblxuICAgIGNvbnN0IHsgc2hvd0RpYWxvZyB9ID0gdXNlRGlhbG9ncygpO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKCFlbnRyeS5pZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2UgaWYgKHN1YnNjcmlwdGlvbi5jdXJyZW50KSB7XG4gICAgICAgICAgICBzdWJzY3JpcHRpb24uY3VycmVudC5vZmYoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IGlkOiBlbnRyeUlkIH0gPSBwYXJzZUlkZW50aWZpZXIoZW50cnkuaWQpO1xuXG4gICAgICAgIHN1YnNjcmlwdGlvbi5jdXJyZW50ID0gd2Vic29ja2V0cy5vbk1lc3NhZ2U8SUtpY2tPdXRXZWJzb2NrZXRzTWVzc2FnZT4oXG4gICAgICAgICAgICBgcmVjb3JkTG9ja2luZy5lbnRyeS5raWNrT3V0LiR7ZW50cnlJZH1gLFxuICAgICAgICAgICAgYXN5bmMgaW5jb21pbmcgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgdXNlciB9ID0gaW5jb21pbmcuZGF0YTtcbiAgICAgICAgICAgICAgICBjb25zdCByZWNvcmQ6IElJc1JlY29yZExvY2tlZFBhcmFtcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGVudHJ5SWQsXG4gICAgICAgICAgICAgICAgICAgICRsb2NraW5nVHlwZTogbW9kZWwubW9kZWxJZFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmVtb3ZlRW50cnlMb2NrKHJlY29yZCk7XG4gICAgICAgICAgICAgICAgb25EaXNhYmxlUHJvbXB0KHRydWUpO1xuICAgICAgICAgICAgICAgIHNob3dEaWFsb2coe1xuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXCJFbnRyeSB3YXMgZm9yY2VmdWxseSB1bmxvY2tlZCFcIixcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogPEZvcmNlVW5sb2NrZWQgdXNlcj17dXNlcn0gLz4sXG4gICAgICAgICAgICAgICAgICAgIGFjY2VwdExhYmVsOiBcIk9rXCIsXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xvc2U6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgY2FuY2VsTGFiZWw6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIG5hdmlnYXRlVG8oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFzdWJzY3JpcHRpb24uY3VycmVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbi5jdXJyZW50Lm9mZigpO1xuICAgICAgICB9O1xuICAgIH0sIFtlbnRyeS5pZCwgbmF2aWdhdGVUbywgbW9kZWwubW9kZWxJZF0pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKCFlbnRyeS5pZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVjb3JkOiBJSXNSZWNvcmRMb2NrZWRQYXJhbXMgPSB7XG4gICAgICAgICAgICBpZDogZW50cnkuaWQsXG4gICAgICAgICAgICAkbG9ja2luZ1R5cGU6IG1vZGVsLm1vZGVsSWRcbiAgICAgICAgfTtcbiAgICAgICAgdXBkYXRlRW50cnlMb2NrKHJlY29yZCk7XG5cbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZmV0Y2hMb2NrZWRFbnRyeUxvY2tSZWNvcmQocmVjb3JkKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdW5sb2NrRW50cnkocmVjb3JkKTtcbiAgICAgICAgICAgIH0pKCk7XG4gICAgICAgIH07XG4gICAgfSwgW2VudHJ5LmlkXSk7XG5cbiAgICByZXR1cm4gPD57Y2hpbGRyZW59PC8+O1xufTtcbiJdfQ== */",
29
- toString: _EMOTION_STRINGIFIED_CSS_ERROR__
30
- });
31
- var ForceUnlocked = function ForceUnlocked(_ref) {
32
- var user = _ref.user;
33
- return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, "The entry you were editing was forcefully unlocked by", " ", /*#__PURE__*/_react.default.createElement(Bold, null, user.displayName || "Unknown user"), ". Unfortunately, this means you lost the unsaved changes.");
1
+ import React, { useEffect, useRef } from "react";
2
+ import { useRecordLocking } from "../../hooks/index.js";
3
+ import { useWebsockets } from "@webiny/app-websockets";
4
+ import { parseIdentifier } from "@webiny/utils";
5
+ import { useDialogs } from "@webiny/app-admin";
6
+ const autoUpdateTimeout = 20;
7
+ const ForceUnlocked = ({
8
+ user
9
+ }) => {
10
+ return /*#__PURE__*/React.createElement(React.Fragment, null, "The entry you were editing was forcefully unlocked by", " ", /*#__PURE__*/React.createElement("strong", null, user.displayName || "Unknown user"), ". Unfortunately, this means you lost the unsaved changes.");
34
11
  };
35
- var ContentEntryLocker = exports.ContentEntryLocker = function ContentEntryLocker(_ref2) {
36
- var onDisablePrompt = _ref2.onDisablePrompt,
37
- children = _ref2.children;
38
- var _useContentEntry = (0, _appHeadlessCms.useContentEntry)(),
39
- entry = _useContentEntry.entry,
40
- model = _useContentEntry.contentModel;
41
- var _useRecordLocking = (0, _hooks.useRecordLocking)(),
42
- updateEntryLock = _useRecordLocking.updateEntryLock,
43
- unlockEntry = _useRecordLocking.unlockEntry,
44
- fetchLockedEntryLockRecord = _useRecordLocking.fetchLockedEntryLockRecord,
45
- removeEntryLock = _useRecordLocking.removeEntryLock;
46
- var _useContentEntriesLis = (0, _appHeadlessCms.useContentEntriesList)(),
47
- navigateTo = _useContentEntriesLis.navigateTo;
48
- var subscription = (0, _react.useRef)();
49
- var websockets = (0, _appWebsockets.useWebsockets)();
50
- var _useDialogs = (0, _appAdmin.useDialogs)(),
51
- showDialog = _useDialogs.showDialog;
52
- (0, _react.useEffect)(function () {
12
+ export const ContentEntryLocker = ({
13
+ onEntryUnlocked,
14
+ onDisablePrompt,
15
+ entry,
16
+ model,
17
+ children
18
+ }) => {
19
+ const {
20
+ updateEntryLock,
21
+ removeEntryLock
22
+ } = useRecordLocking();
23
+ const websockets = useWebsockets();
24
+ const {
25
+ showDialog
26
+ } = useDialogs();
27
+ const entryLockerTimeout = useRef(null);
28
+ useEffect(() => {
53
29
  if (!entry.id) {
54
30
  return;
55
- } else if (subscription.current) {
56
- subscription.current.off();
57
31
  }
58
- var _parseIdentifier = (0, _utils.parseIdentifier)(entry.id),
59
- entryId = _parseIdentifier.id;
60
- subscription.current = websockets.onMessage("recordLocking.entry.kickOut.".concat(entryId), async function (incoming) {
61
- var user = incoming.data.user;
62
- var record = {
32
+ const {
33
+ id: entryId
34
+ } = parseIdentifier(entry.id);
35
+ let onMessageSub = websockets.onMessage(`recordLocking.entry.kickOut.${entryId}`, async incoming => {
36
+ const {
37
+ user
38
+ } = incoming.data;
39
+ onDisablePrompt(true);
40
+ removeEntryLock({
63
41
  id: entryId,
64
42
  $lockingType: model.modelId
65
- };
66
- removeEntryLock(record);
67
- onDisablePrompt(true);
43
+ });
68
44
  showDialog({
69
45
  title: "Entry was forcefully unlocked!",
70
- content: /*#__PURE__*/_react.default.createElement(ForceUnlocked, {
46
+ content: /*#__PURE__*/React.createElement(ForceUnlocked, {
71
47
  user: user
72
48
  }),
73
49
  acceptLabel: "Ok",
74
50
  onClose: undefined,
75
51
  cancelLabel: undefined
76
52
  });
77
- navigateTo();
53
+ onEntryUnlocked();
78
54
  });
79
- return function () {
80
- if (!subscription.current) {
81
- return;
82
- }
83
- subscription.current.off();
55
+ return () => {
56
+ onMessageSub.off();
57
+ /**
58
+ * Lets null subscriptions, just in case it...
59
+ */
60
+ // @ts-expect-error
61
+ onMessageSub = null;
84
62
  };
85
- }, [entry.id, navigateTo, model.modelId]);
86
- (0, _react.useEffect)(function () {
63
+ }, [entry.id, onEntryUnlocked, model.modelId]);
64
+ useEffect(() => {
87
65
  if (!entry.id) {
88
66
  return;
89
67
  }
90
- var record = {
91
- id: entry.id,
92
- $lockingType: model.modelId
68
+ if (entryLockerTimeout.current) {
69
+ return;
70
+ }
71
+ const updateLock = async () => {
72
+ const result = await updateEntryLock({
73
+ id: entry.id,
74
+ $lockingType: model.modelId
75
+ });
76
+ if (result.error) {
77
+ showDialog({
78
+ title: "There was an error while updating the entry lock.",
79
+ content: result.error.message,
80
+ acceptLabel: "Ok",
81
+ onClose: undefined,
82
+ cancelLabel: undefined
83
+ });
84
+ onEntryUnlocked();
85
+ return;
86
+ }
87
+ createTimeout();
93
88
  };
94
- updateEntryLock(record);
95
- return function () {
96
- (async function () {
97
- var result = await fetchLockedEntryLockRecord(record);
98
- if (result) {
99
- return;
100
- }
101
- unlockEntry(record);
102
- })();
89
+ const createTimeout = () => {
90
+ entryLockerTimeout.current = window.setTimeout(() => {
91
+ updateLock();
92
+ }, autoUpdateTimeout * 1000);
93
+ };
94
+ updateLock();
95
+ return () => {
96
+ if (!entryLockerTimeout.current) {
97
+ return;
98
+ }
99
+ clearTimeout(entryLockerTimeout.current);
100
+ entryLockerTimeout.current = null;
103
101
  };
104
- }, [entry.id]);
105
- return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, children);
102
+ }, [entry.id, onEntryUnlocked]);
103
+ return /*#__PURE__*/React.createElement(React.Fragment, null, children);
106
104
  };
107
105
 
108
106
  //# sourceMappingURL=ContentEntryLocker.js.map