@webiny/app-record-locking 5.40.0-beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +12 -0
- package/components/HeadlessCmsActionsAcoCell.d.ts +2 -0
- package/components/HeadlessCmsActionsAcoCell.js +70 -0
- package/components/HeadlessCmsActionsAcoCell.js.map +1 -0
- package/components/HeadlessCmsContentEntry/ContentEntryGuard.d.ts +5 -0
- package/components/HeadlessCmsContentEntry/ContentEntryGuard.js +88 -0
- package/components/HeadlessCmsContentEntry/ContentEntryGuard.js.map +1 -0
- package/components/HeadlessCmsContentEntry/ContentEntryLocker.d.ts +14 -0
- package/components/HeadlessCmsContentEntry/ContentEntryLocker.js +108 -0
- package/components/HeadlessCmsContentEntry/ContentEntryLocker.js.map +1 -0
- package/components/HeadlessCmsContentEntry/HeadlessCmsContentEntry.d.ts +2 -0
- package/components/HeadlessCmsContentEntry/HeadlessCmsContentEntry.js +63 -0
- package/components/HeadlessCmsContentEntry/HeadlessCmsContentEntry.js.map +1 -0
- package/components/HeadlessCmsContentEntry/index.d.ts +1 -0
- package/components/HeadlessCmsContentEntry/index.js +18 -0
- package/components/HeadlessCmsContentEntry/index.js.map +1 -0
- package/components/LockedRecord/LockedRecord.d.ts +6 -0
- package/components/LockedRecord/LockedRecord.js +161 -0
- package/components/LockedRecord/LockedRecord.js.map +1 -0
- package/components/LockedRecord/LockedRecordForceUnlock.d.ts +9 -0
- package/components/LockedRecord/LockedRecordForceUnlock.js +117 -0
- package/components/LockedRecord/LockedRecordForceUnlock.js.map +1 -0
- package/components/LockedRecord/index.d.ts +1 -0
- package/components/LockedRecord/index.js +18 -0
- package/components/LockedRecord/index.js.map +1 -0
- package/components/RecordLockingProvider.d.ts +7 -0
- package/components/RecordLockingProvider.js +130 -0
- package/components/RecordLockingProvider.js.map +1 -0
- package/components/assets/lock.svg +13 -0
- package/components/decorators/UseContentEntriesListHookDecorator.d.ts +2 -0
- package/components/decorators/UseContentEntriesListHookDecorator.js +28 -0
- package/components/decorators/UseContentEntriesListHookDecorator.js.map +1 -0
- package/components/decorators/UseSaveEntryDecorator.d.ts +2 -0
- package/components/decorators/UseSaveEntryDecorator.js +55 -0
- package/components/decorators/UseSaveEntryDecorator.js.map +1 -0
- package/domain/RecordLocking.d.ts +32 -0
- package/domain/RecordLocking.js +379 -0
- package/domain/RecordLocking.js.map +1 -0
- package/domain/RecordLockingClient.d.ts +12 -0
- package/domain/RecordLockingClient.js +33 -0
- package/domain/RecordLockingClient.js.map +1 -0
- package/domain/RecordLockingGetLockRecord.d.ts +11 -0
- package/domain/RecordLockingGetLockRecord.js +34 -0
- package/domain/RecordLockingGetLockRecord.js.map +1 -0
- package/domain/RecordLockingGetLockedEntryLockRecord.d.ts +11 -0
- package/domain/RecordLockingGetLockedEntryLockRecord.js +32 -0
- package/domain/RecordLockingGetLockedEntryLockRecord.js.map +1 -0
- package/domain/RecordLockingIsEntryLocked.d.ts +11 -0
- package/domain/RecordLockingIsEntryLocked.js +32 -0
- package/domain/RecordLockingIsEntryLocked.js.map +1 -0
- package/domain/RecordLockingListLockRecords.d.ts +12 -0
- package/domain/RecordLockingListLockRecords.js +42 -0
- package/domain/RecordLockingListLockRecords.js.map +1 -0
- package/domain/RecordLockingLockEntry.d.ts +11 -0
- package/domain/RecordLockingLockEntry.js +28 -0
- package/domain/RecordLockingLockEntry.js.map +1 -0
- package/domain/RecordLockingUnlockEntry.d.ts +11 -0
- package/domain/RecordLockingUnlockEntry.js +32 -0
- package/domain/RecordLockingUnlockEntry.js.map +1 -0
- package/domain/RecordLockingUnlockEntryRequest.d.ts +11 -0
- package/domain/RecordLockingUnlockEntryRequest.js +28 -0
- package/domain/RecordLockingUnlockEntryRequest.js.map +1 -0
- package/domain/RecordLockingUpdateEntryLock.d.ts +11 -0
- package/domain/RecordLockingUpdateEntryLock.js +32 -0
- package/domain/RecordLockingUpdateEntryLock.js.map +1 -0
- package/domain/abstractions/IRecordLocking.d.ts +19 -0
- package/domain/abstractions/IRecordLocking.js +7 -0
- package/domain/abstractions/IRecordLocking.js.map +1 -0
- package/domain/abstractions/IRecordLockingClient.d.ts +6 -0
- package/domain/abstractions/IRecordLockingClient.js +7 -0
- package/domain/abstractions/IRecordLockingClient.js.map +1 -0
- package/domain/abstractions/IRecordLockingGetLockRecord.d.ts +12 -0
- package/domain/abstractions/IRecordLockingGetLockRecord.js +7 -0
- package/domain/abstractions/IRecordLockingGetLockRecord.js.map +1 -0
- package/domain/abstractions/IRecordLockingGetLockedEntryLockRecord.d.ts +12 -0
- package/domain/abstractions/IRecordLockingGetLockedEntryLockRecord.js +7 -0
- package/domain/abstractions/IRecordLockingGetLockedEntryLockRecord.js.map +1 -0
- package/domain/abstractions/IRecordLockingIsEntryLocked.d.ts +8 -0
- package/domain/abstractions/IRecordLockingIsEntryLocked.js +7 -0
- package/domain/abstractions/IRecordLockingIsEntryLocked.js.map +1 -0
- package/domain/abstractions/IRecordLockingListLockRecords.d.ts +19 -0
- package/domain/abstractions/IRecordLockingListLockRecords.js +7 -0
- package/domain/abstractions/IRecordLockingListLockRecords.js.map +1 -0
- package/domain/abstractions/IRecordLockingLockEntry.d.ts +12 -0
- package/domain/abstractions/IRecordLockingLockEntry.js +7 -0
- package/domain/abstractions/IRecordLockingLockEntry.js.map +1 -0
- package/domain/abstractions/IRecordLockingUnlockEntry.d.ts +13 -0
- package/domain/abstractions/IRecordLockingUnlockEntry.js +7 -0
- package/domain/abstractions/IRecordLockingUnlockEntry.js.map +1 -0
- package/domain/abstractions/IRecordLockingUnlockEntryRequest.d.ts +12 -0
- package/domain/abstractions/IRecordLockingUnlockEntryRequest.js +7 -0
- package/domain/abstractions/IRecordLockingUnlockEntryRequest.js.map +1 -0
- package/domain/abstractions/IRecordLockingUpdateEntryLock.d.ts +12 -0
- package/domain/abstractions/IRecordLockingUpdateEntryLock.js +7 -0
- package/domain/abstractions/IRecordLockingUpdateEntryLock.js.map +1 -0
- package/domain/graphql/fields.d.ts +2 -0
- package/domain/graphql/fields.js +10 -0
- package/domain/graphql/fields.js.map +1 -0
- package/domain/graphql/getLockRecord.d.ts +12 -0
- package/domain/graphql/getLockRecord.js +14 -0
- package/domain/graphql/getLockRecord.js.map +1 -0
- package/domain/graphql/getLockedEntryLockRecord.d.ts +12 -0
- package/domain/graphql/getLockedEntryLockRecord.js +14 -0
- package/domain/graphql/getLockedEntryLockRecord.js.map +1 -0
- package/domain/graphql/isEntryLocked.d.ts +12 -0
- package/domain/graphql/isEntryLocked.js +14 -0
- package/domain/graphql/isEntryLocked.js.map +1 -0
- package/domain/graphql/listLockRecords.d.ts +17 -0
- package/domain/graphql/listLockRecords.js +17 -0
- package/domain/graphql/listLockRecords.js.map +1 -0
- package/domain/graphql/lockEntry.d.ts +12 -0
- package/domain/graphql/lockEntry.js +16 -0
- package/domain/graphql/lockEntry.js.map +1 -0
- package/domain/graphql/unlockEntry.d.ts +12 -0
- package/domain/graphql/unlockEntry.js +14 -0
- package/domain/graphql/unlockEntry.js.map +1 -0
- package/domain/graphql/unlockEntryRequest.d.ts +12 -0
- package/domain/graphql/unlockEntryRequest.js +16 -0
- package/domain/graphql/unlockEntryRequest.js.map +1 -0
- package/domain/graphql/updateEntryLock.d.ts +12 -0
- package/domain/graphql/updateEntryLock.js +14 -0
- package/domain/graphql/updateEntryLock.js.map +1 -0
- package/domain/utils/createRecordLockingClient.d.ts +3 -0
- package/domain/utils/createRecordLockingClient.js +18 -0
- package/domain/utils/createRecordLockingClient.js.map +1 -0
- package/domain/utils/createRecordLockingError.d.ts +6 -0
- package/domain/utils/createRecordLockingError.js +22 -0
- package/domain/utils/createRecordLockingError.js.map +1 -0
- package/hooks/index.d.ts +2 -0
- package/hooks/index.js +29 -0
- package/hooks/index.js.map +1 -0
- package/hooks/usePermission.d.ts +3 -0
- package/hooks/usePermission.js +21 -0
- package/hooks/usePermission.js.map +1 -0
- package/hooks/useRecordLocking.d.ts +2 -0
- package/hooks/useRecordLocking.js +18 -0
- package/hooks/useRecordLocking.js.map +1 -0
- package/index.d.ts +7 -0
- package/index.js +57 -0
- package/index.js.map +1 -0
- package/package.json +58 -0
- package/types.d.ts +72 -0
- package/types.js +7 -0
- package/types.js.map +1 -0
- package/utils/createCacheKey.d.ts +3 -0
- package/utils/createCacheKey.js +21 -0
- package/utils/createCacheKey.js.map +1 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) Webiny
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# @webiny/app-record-locking
|
|
2
|
+
[](https://www.npmjs.com/package/@webiny/app-record-locking)
|
|
3
|
+
[](https://www.npmjs.com/package/@webiny/app-record-locking)
|
|
4
|
+
[](https://github.com/prettier/prettier)
|
|
5
|
+
[](http://makeapullrequest.com)
|
|
6
|
+
|
|
7
|
+
Exposes a simple `SocketsProvider` React provider component and enables you to quickly send socket messages via the `useSockets` React hook.
|
|
8
|
+
|
|
9
|
+
## Install
|
|
10
|
+
```
|
|
11
|
+
yarn add @webiny/app-record-locking
|
|
12
|
+
```
|
|
@@ -0,0 +1,70 @@
|
|
|
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
|
+
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 CenterAlignment = /*#__PURE__*/(0, _base.default)("div", process.env.NODE_ENV === "production" ? {
|
|
18
|
+
target: "e1qmlafx0"
|
|
19
|
+
} : {
|
|
20
|
+
target: "e1qmlafx0",
|
|
21
|
+
label: "CenterAlignment"
|
|
22
|
+
})(process.env.NODE_ENV === "production" ? {
|
|
23
|
+
name: "dmikdp",
|
|
24
|
+
styles: "display:block;margin:0 auto;width:28px;svg{fill:var(--mdc-theme-text-secondary-on-background);}"
|
|
25
|
+
} : {
|
|
26
|
+
name: "dmikdp",
|
|
27
|
+
styles: "display:block;margin:0 auto;width:28px;svg{fill:var(--mdc-theme-text-secondary-on-background);}",
|
|
28
|
+
map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkhlYWRsZXNzQ21zQWN0aW9uc0Fjb0NlbGwudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVNrQyIsImZpbGUiOiJIZWFkbGVzc0Ntc0FjdGlvbnNBY29DZWxsLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IENvbnRlbnRFbnRyeUxpc3RDb25maWcsIHVzZU1vZGVsIH0gZnJvbSBcIkB3ZWJpbnkvYXBwLWhlYWRsZXNzLWNtc1wiO1xuaW1wb3J0IHsgUmVhY3RDb21wb25lbnQgYXMgTG9ja2VkSWNvbiB9IGZyb20gXCJAbWF0ZXJpYWwtZGVzaWduLWljb25zL3N2Zy9yb3VuZC9sb2NrLnN2Z1wiO1xuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gXCJAd2ViaW55L3VpL1Rvb2x0aXBcIjtcbmltcG9ydCB7IHVzZVJlY29yZExvY2tpbmcgfSBmcm9tIFwifi9ob29rc1wiO1xuaW1wb3J0IHsgVXNlQ29udGVudEVudHJpZXNMaXN0SG9va0RlY29yYXRvciB9IGZyb20gXCIuL2RlY29yYXRvcnMvVXNlQ29udGVudEVudHJpZXNMaXN0SG9va0RlY29yYXRvclwiO1xuaW1wb3J0IHN0eWxlZCBmcm9tIFwiQGVtb3Rpb24vc3R5bGVkXCI7XG5pbXBvcnQgeyBVc2VTYXZlRW50cnlEZWNvcmF0b3IgfSBmcm9tIFwifi9jb21wb25lbnRzL2RlY29yYXRvcnMvVXNlU2F2ZUVudHJ5RGVjb3JhdG9yXCI7XG5cbmNvbnN0IENlbnRlckFsaWdubWVudCA9IHN0eWxlZC5kaXZgXG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbWFyZ2luOiAwIGF1dG87XG4gICAgd2lkdGg6IDI4cHg7XG4gICAgc3ZnIHtcbiAgICAgICAgZmlsbDogdmFyKC0tbWRjLXRoZW1lLXRleHQtc2Vjb25kYXJ5LW9uLWJhY2tncm91bmQpO1xuICAgIH1cbmA7XG5cbmNvbnN0IHsgQnJvd3NlciB9ID0gQ29udGVudEVudHJ5TGlzdENvbmZpZztcblxuaW50ZXJmYWNlIEFjdGlvbnNDZWxsUHJvcHMge1xuICAgIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XG59XG5cbmNvbnN0IEFjdGlvbnNDZWxsID0gKHsgY2hpbGRyZW4gfTogQWN0aW9uc0NlbGxQcm9wcykgPT4ge1xuICAgIGNvbnN0IHsgbW9kZWwgfSA9IHVzZU1vZGVsKCk7XG4gICAgY29uc3QgeyBnZXRMb2NrUmVjb3JkRW50cnksIGlzUmVjb3JkTG9ja2VkIH0gPSB1c2VSZWNvcmRMb2NraW5nKCk7XG5cbiAgICBjb25zdCB7IHVzZVRhYmxlUm93LCBpc0ZvbGRlclJvdyB9ID0gQnJvd3Nlci5UYWJsZS5Db2x1bW47XG4gICAgY29uc3QgeyByb3cgfSA9IHVzZVRhYmxlUm93KCk7XG5cbiAgICBpZiAoaXNGb2xkZXJSb3cocm93KSkge1xuICAgICAgICByZXR1cm4gPD57Y2hpbGRyZW59PC8+O1xuICAgIH1cblxuICAgIGNvbnN0IGVudHJ5ID0gZ2V0TG9ja1JlY29yZEVudHJ5KHJvdy5pZCk7XG5cbiAgICBpZiAoIWlzUmVjb3JkTG9ja2VkKGVudHJ5KSB8fCAhZW50cnk/LiRsb2NrZWQpIHtcbiAgICAgICAgcmV0dXJuIDw+e2NoaWxkcmVufTwvPjtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgICAgPENlbnRlckFsaWdubWVudD5cbiAgICAgICAgICAgIDxUb29sdGlwXG4gICAgICAgICAgICAgICAgcGxhY2VtZW50PXtcImxlZnRcIn1cbiAgICAgICAgICAgICAgICBjb250ZW50PXtgVGhpcyAke21vZGVsLm5hbWV9IGlzIGN1cnJlbnRseSBsb2NrZWQgYnkgJHtlbnRyeS4kbG9ja2VkLmxvY2tlZEJ5LmRpc3BsYXlOYW1lfS5gfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxMb2NrZWRJY29uIC8+XG4gICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgIDwvQ2VudGVyQWxpZ25tZW50PlxuICAgICk7XG59O1xuXG5jb25zdCBSZWNvcmRMb2NraW5nQ2VsbEFjdGlvbnMgPSBCcm93c2VyLlRhYmxlLkNvbHVtbi5jcmVhdGVEZWNvcmF0b3IoT3JpZ2luYWwgPT4ge1xuICAgIHJldHVybiBmdW5jdGlvbiBSZWNvcmRMb2NraW5nQ2VsbEFjdGlvbnMocHJvcHMpIHtcbiAgICAgICAgaWYgKHByb3BzLm5hbWUgPT09IFwiYWN0aW9uc1wiICYmIHByb3BzLmNlbGwpIHtcbiAgICAgICAgICAgIHJldHVybiA8T3JpZ2luYWwgey4uLnByb3BzfSBjZWxsPXs8QWN0aW9uc0NlbGw+e3Byb3BzLmNlbGx9PC9BY3Rpb25zQ2VsbD59IC8+O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIDxPcmlnaW5hbCB7Li4ucHJvcHN9IC8+O1xuICAgIH07XG59KTtcblxuZXhwb3J0IGNvbnN0IEhlYWRsZXNzQ21zQWN0aW9uc0Fjb0NlbGwgPSAoKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICAgIDxVc2VDb250ZW50RW50cmllc0xpc3RIb29rRGVjb3JhdG9yIC8+XG4gICAgICAgICAgICA8VXNlU2F2ZUVudHJ5RGVjb3JhdG9yIC8+XG4gICAgICAgICAgICA8UmVjb3JkTG9ja2luZ0NlbGxBY3Rpb25zIC8+XG4gICAgICAgIDwvPlxuICAgICk7XG59O1xuIl19 */",
|
|
29
|
+
toString: _EMOTION_STRINGIFIED_CSS_ERROR__
|
|
30
|
+
});
|
|
31
|
+
var Browser = _appHeadlessCms.ContentEntryListConfig.Browser;
|
|
32
|
+
var ActionsCell = function ActionsCell(_ref) {
|
|
33
|
+
var children = _ref.children;
|
|
34
|
+
var _useModel = (0, _appHeadlessCms.useModel)(),
|
|
35
|
+
model = _useModel.model;
|
|
36
|
+
var _useRecordLocking = (0, _hooks.useRecordLocking)(),
|
|
37
|
+
getLockRecordEntry = _useRecordLocking.getLockRecordEntry,
|
|
38
|
+
isRecordLocked = _useRecordLocking.isRecordLocked;
|
|
39
|
+
var _Browser$Table$Column = Browser.Table.Column,
|
|
40
|
+
useTableRow = _Browser$Table$Column.useTableRow,
|
|
41
|
+
isFolderRow = _Browser$Table$Column.isFolderRow;
|
|
42
|
+
var _useTableRow = useTableRow(),
|
|
43
|
+
row = _useTableRow.row;
|
|
44
|
+
if (isFolderRow(row)) {
|
|
45
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, children);
|
|
46
|
+
}
|
|
47
|
+
var entry = getLockRecordEntry(row.id);
|
|
48
|
+
if (!isRecordLocked(entry) || !entry?.$locked) {
|
|
49
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, children);
|
|
50
|
+
}
|
|
51
|
+
return /*#__PURE__*/_react.default.createElement(CenterAlignment, null, /*#__PURE__*/_react.default.createElement(_Tooltip.Tooltip, {
|
|
52
|
+
placement: "left",
|
|
53
|
+
content: "This ".concat(model.name, " is currently locked by ").concat(entry.$locked.lockedBy.displayName, ".")
|
|
54
|
+
}, /*#__PURE__*/_react.default.createElement(_lock.ReactComponent, null)));
|
|
55
|
+
};
|
|
56
|
+
var RecordLockingCellActions = Browser.Table.Column.createDecorator(function (Original) {
|
|
57
|
+
return function RecordLockingCellActions(props) {
|
|
58
|
+
if (props.name === "actions" && props.cell) {
|
|
59
|
+
return /*#__PURE__*/_react.default.createElement(Original, Object.assign({}, props, {
|
|
60
|
+
cell: /*#__PURE__*/_react.default.createElement(ActionsCell, null, props.cell)
|
|
61
|
+
}));
|
|
62
|
+
}
|
|
63
|
+
return /*#__PURE__*/_react.default.createElement(Original, props);
|
|
64
|
+
};
|
|
65
|
+
});
|
|
66
|
+
var HeadlessCmsActionsAcoCell = exports.HeadlessCmsActionsAcoCell = function HeadlessCmsActionsAcoCell() {
|
|
67
|
+
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));
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
//# sourceMappingURL=HeadlessCmsActionsAcoCell.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireDefault","require","_appHeadlessCms","_lock","_Tooltip","_hooks","_UseContentEntriesListHookDecorator","_UseSaveEntryDecorator","_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"],"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\";\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 </>\n );\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,88 @@
|
|
|
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 () {
|
|
64
|
+
if (!entry.id || loading || locked !== undefined) {
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
(async function () {
|
|
68
|
+
var result = await fetchLockedEntryLockRecord({
|
|
69
|
+
id: entry.id,
|
|
70
|
+
$lockingType: model.modelId
|
|
71
|
+
});
|
|
72
|
+
setLocked(result);
|
|
73
|
+
})();
|
|
74
|
+
}, [entry.id, loading]);
|
|
75
|
+
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))));
|
|
80
|
+
} else if (locked) {
|
|
81
|
+
return /*#__PURE__*/_react.default.createElement(_LockedRecord.LockedRecord, {
|
|
82
|
+
record: locked
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
return children;
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
//# sourceMappingURL=ContentEntryGuard.js.map
|
|
@@ -0,0 +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":[]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { IRecordLockingIdentity, IRecordLockingLockRecord } from "../../types";
|
|
3
|
+
import { IncomingGenericData } from "@webiny/app-websockets";
|
|
4
|
+
export interface IContentEntryLockerProps {
|
|
5
|
+
onDisablePrompt: (flag: boolean) => void;
|
|
6
|
+
children: React.ReactElement;
|
|
7
|
+
}
|
|
8
|
+
export interface IKickOutWebsocketsMessage extends IncomingGenericData {
|
|
9
|
+
data: {
|
|
10
|
+
record: IRecordLockingLockRecord;
|
|
11
|
+
user: IRecordLockingIdentity;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
export declare const ContentEntryLocker: ({ onDisablePrompt, children }: IContentEntryLockerProps) => React.JSX.Element;
|
|
@@ -0,0 +1,108 @@
|
|
|
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+XG4gICAgICAgICAgICBUaGUgZW50cnkgeW91IHdlcmUgZWRpdGluZyB3YXMgZm9yY2VmdWxseSB1bmxvY2tlZCBieVxuICAgICAgICAgICAgPEJvbGQ+e3VzZXIuZGlzcGxheU5hbWUgfHwgXCJVbmtub3duIHVzZXJcIn08L0JvbGQ+LiBVbmZvcnR1bmF0ZWx5LCB0aGlzIG1lYW5zIHlvdSBsb3N0XG4gICAgICAgICAgICB0aGUgdW5zYXZlZCBjaGFuZ2VzLlxuICAgICAgICA8Lz5cbiAgICApO1xufTtcblxuZXhwb3J0IGNvbnN0IENvbnRlbnRFbnRyeUxvY2tlciA9ICh7IG9uRGlzYWJsZVByb21wdCwgY2hpbGRyZW4gfTogSUNvbnRlbnRFbnRyeUxvY2tlclByb3BzKSA9PiB7XG4gICAgY29uc3QgeyBlbnRyeSwgY29udGVudE1vZGVsOiBtb2RlbCB9ID0gdXNlQ29udGVudEVudHJ5KCk7XG4gICAgY29uc3QgeyB1cGRhdGVFbnRyeUxvY2ssIHVubG9ja0VudHJ5LCBmZXRjaExvY2tlZEVudHJ5TG9ja1JlY29yZCwgcmVtb3ZlRW50cnlMb2NrIH0gPVxuICAgICAgICB1c2VSZWNvcmRMb2NraW5nKCk7XG5cbiAgICBjb25zdCB7IG5hdmlnYXRlVG8gfSA9IHVzZUNvbnRlbnRFbnRyaWVzTGlzdCgpO1xuXG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gdXNlUmVmPElXZWJzb2NrZXRzU3Vic2NyaXB0aW9uPGFueT4+KCk7XG5cbiAgICBjb25zdCB3ZWJzb2NrZXRzID0gdXNlV2Vic29ja2V0cygpO1xuXG4gICAgY29uc3QgeyBzaG93RGlhbG9nIH0gPSB1c2VEaWFsb2dzKCk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoIWVudHJ5LmlkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSBpZiAoc3Vic2NyaXB0aW9uLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbi5jdXJyZW50Lm9mZigpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgaWQ6IGVudHJ5SWQgfSA9IHBhcnNlSWRlbnRpZmllcihlbnRyeS5pZCk7XG5cbiAgICAgICAgc3Vic2NyaXB0aW9uLmN1cnJlbnQgPSB3ZWJzb2NrZXRzLm9uTWVzc2FnZTxJS2lja091dFdlYnNvY2tldHNNZXNzYWdlPihcbiAgICAgICAgICAgIGByZWNvcmRMb2NraW5nLmVudHJ5LmtpY2tPdXQuJHtlbnRyeUlkfWAsXG4gICAgICAgICAgICBhc3luYyBpbmNvbWluZyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyB1c2VyIH0gPSBpbmNvbWluZy5kYXRhO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlY29yZDogSUlzUmVjb3JkTG9ja2VkUGFyYW1zID0ge1xuICAgICAgICAgICAgICAgICAgICBpZDogZW50cnlJZCxcbiAgICAgICAgICAgICAgICAgICAgJGxvY2tpbmdUeXBlOiBtb2RlbC5tb2RlbElkXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZW1vdmVFbnRyeUxvY2socmVjb3JkKTtcbiAgICAgICAgICAgICAgICBvbkRpc2FibGVQcm9tcHQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgc2hvd0RpYWxvZyh7XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcIkVudHJ5IHdhcyBmb3JjZWZ1bGx5IHVubG9ja2VkIVwiLFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50OiA8Rm9yY2VVbmxvY2tlZCB1c2VyPXt1c2VyfSAvPixcbiAgICAgICAgICAgICAgICAgICAgYWNjZXB0TGFiZWw6IFwiT2tcIixcbiAgICAgICAgICAgICAgICAgICAgb25DbG9zZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICBjYW5jZWxMYWJlbDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgbmF2aWdhdGVUbygpO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXN1YnNjcmlwdGlvbi5jdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3Vic2NyaXB0aW9uLmN1cnJlbnQub2ZmKCk7XG4gICAgICAgIH07XG4gICAgfSwgW2VudHJ5LmlkLCBuYXZpZ2F0ZVRvLCBtb2RlbC5tb2RlbElkXSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoIWVudHJ5LmlkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZWNvcmQ6IElJc1JlY29yZExvY2tlZFBhcmFtcyA9IHtcbiAgICAgICAgICAgIGlkOiBlbnRyeS5pZCxcbiAgICAgICAgICAgICRsb2NraW5nVHlwZTogbW9kZWwubW9kZWxJZFxuICAgICAgICB9O1xuICAgICAgICB1cGRhdGVFbnRyeUxvY2socmVjb3JkKTtcblxuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBmZXRjaExvY2tlZEVudHJ5TG9ja1JlY29yZChyZWNvcmQpO1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB1bmxvY2tFbnRyeShyZWNvcmQpO1xuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgfTtcbiAgICB9LCBbZW50cnkuaWRdKTtcblxuICAgIHJldHVybiA8PntjaGlsZHJlbn08Lz47XG59O1xuIl19 */",
|
|
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.");
|
|
34
|
+
};
|
|
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 () {
|
|
53
|
+
if (!entry.id) {
|
|
54
|
+
return;
|
|
55
|
+
} else if (subscription.current) {
|
|
56
|
+
subscription.current.off();
|
|
57
|
+
}
|
|
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 = {
|
|
63
|
+
id: entryId,
|
|
64
|
+
$lockingType: model.modelId
|
|
65
|
+
};
|
|
66
|
+
removeEntryLock(record);
|
|
67
|
+
onDisablePrompt(true);
|
|
68
|
+
showDialog({
|
|
69
|
+
title: "Entry was forcefully unlocked!",
|
|
70
|
+
content: /*#__PURE__*/_react.default.createElement(ForceUnlocked, {
|
|
71
|
+
user: user
|
|
72
|
+
}),
|
|
73
|
+
acceptLabel: "Ok",
|
|
74
|
+
onClose: undefined,
|
|
75
|
+
cancelLabel: undefined
|
|
76
|
+
});
|
|
77
|
+
navigateTo();
|
|
78
|
+
});
|
|
79
|
+
return function () {
|
|
80
|
+
if (!subscription.current) {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
subscription.current.off();
|
|
84
|
+
};
|
|
85
|
+
}, [entry.id, navigateTo, model.modelId]);
|
|
86
|
+
(0, _react.useEffect)(function () {
|
|
87
|
+
if (!entry.id) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
var record = {
|
|
91
|
+
id: entry.id,
|
|
92
|
+
$lockingType: model.modelId
|
|
93
|
+
};
|
|
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
|
+
})();
|
|
103
|
+
};
|
|
104
|
+
}, [entry.id]);
|
|
105
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, children);
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
//# sourceMappingURL=ContentEntryLocker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_appHeadlessCms","require","_react","_interopRequireWildcard","_hooks","_appWebsockets","_utils","_appAdmin","_EMOTION_STRINGIFIED_CSS_ERROR__","Bold","_base","default","process","env","NODE_ENV","target","label","name","styles","map","toString","ForceUnlocked","_ref","user","createElement","Fragment","displayName","ContentEntryLocker","exports","_ref2","onDisablePrompt","children","_useContentEntry","useContentEntry","entry","model","contentModel","_useRecordLocking","useRecordLocking","updateEntryLock","unlockEntry","fetchLockedEntryLockRecord","removeEntryLock","_useContentEntriesLis","useContentEntriesList","navigateTo","subscription","useRef","websockets","useWebsockets","_useDialogs","useDialogs","showDialog","useEffect","id","current","off","_parseIdentifier","parseIdentifier","entryId","onMessage","concat","incoming","data","record","$lockingType","modelId","title","content","acceptLabel","onClose","undefined","cancelLabel","result"],"sources":["ContentEntryLocker.tsx"],"sourcesContent":["import { useContentEntriesList, useContentEntry } from \"@webiny/app-headless-cms\";\nimport React, { useEffect, useRef } from \"react\";\nimport { useRecordLocking } from \"~/hooks\";\nimport { IIsRecordLockedParams, IRecordLockingIdentity, IRecordLockingLockRecord } from \"~/types\";\nimport {\n IncomingGenericData,\n IWebsocketsSubscription,\n useWebsockets\n} from \"@webiny/app-websockets\";\nimport { parseIdentifier } from \"@webiny/utils\";\nimport { useDialogs } from \"@webiny/app-admin\";\nimport styled from \"@emotion/styled\";\n\nconst Bold = styled.span`\n font-weight: 600;\n`;\n\nexport interface IContentEntryLockerProps {\n onDisablePrompt: (flag: boolean) => void;\n children: React.ReactElement;\n}\n\nexport interface IKickOutWebsocketsMessage extends IncomingGenericData {\n data: {\n record: IRecordLockingLockRecord;\n user: IRecordLockingIdentity;\n };\n}\ninterface IForceUnlockedProps {\n user: IRecordLockingIdentity;\n}\nconst ForceUnlocked = ({ user }: IForceUnlockedProps) => {\n return (\n <>\n The entry you were editing was forcefully unlocked by\n <Bold>{user.displayName || \"Unknown user\"}</Bold>. Unfortunately, this means you lost\n the unsaved changes.\n </>\n );\n};\n\nexport const ContentEntryLocker = ({ onDisablePrompt, children }: IContentEntryLockerProps) => {\n const { entry, contentModel: model } = useContentEntry();\n const { updateEntryLock, unlockEntry, fetchLockedEntryLockRecord, removeEntryLock } =\n useRecordLocking();\n\n const { navigateTo } = useContentEntriesList();\n\n const subscription = useRef<IWebsocketsSubscription<any>>();\n\n const websockets = useWebsockets();\n\n const { showDialog } = useDialogs();\n\n useEffect(() => {\n if (!entry.id) {\n return;\n } else if (subscription.current) {\n subscription.current.off();\n }\n const { id: entryId } = parseIdentifier(entry.id);\n\n subscription.current = websockets.onMessage<IKickOutWebsocketsMessage>(\n `recordLocking.entry.kickOut.${entryId}`,\n async incoming => {\n const { user } = incoming.data;\n const record: IIsRecordLockedParams = {\n id: entryId,\n $lockingType: model.modelId\n };\n removeEntryLock(record);\n onDisablePrompt(true);\n showDialog({\n title: \"Entry was forcefully unlocked!\",\n content: <ForceUnlocked user={user} />,\n acceptLabel: \"Ok\",\n onClose: undefined,\n cancelLabel: undefined\n });\n navigateTo();\n }\n );\n\n return () => {\n if (!subscription.current) {\n return;\n }\n subscription.current.off();\n };\n }, [entry.id, navigateTo, model.modelId]);\n\n useEffect(() => {\n if (!entry.id) {\n return;\n }\n\n const record: IIsRecordLockedParams = {\n id: entry.id,\n $lockingType: model.modelId\n };\n updateEntryLock(record);\n\n return () => {\n (async () => {\n const result = await fetchLockedEntryLockRecord(record);\n if (result) {\n return;\n }\n unlockEntry(record);\n })();\n };\n }, [entry.id]);\n\n return <>{children}</>;\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,63 @@
|
|
|
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.HeadlessCmsContentEntry = void 0;
|
|
9
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
10
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
11
|
+
var _appAdmin = require("@webiny/app-admin");
|
|
12
|
+
var _appHeadlessCms = require("@webiny/app-headless-cms");
|
|
13
|
+
var _reactRouter = require("@webiny/react-router");
|
|
14
|
+
var _ContentEntryGuard = require("./ContentEntryGuard");
|
|
15
|
+
var _ContentEntryLocker = require("./ContentEntryLocker");
|
|
16
|
+
var ContentEntry = _appHeadlessCms.ContentEntryEditorConfig.ContentEntry;
|
|
17
|
+
var DisablePrompt = (0, _appAdmin.createGenericContext)("DisablePrompt");
|
|
18
|
+
var PromptDecorator = _reactRouter.Prompt.createDecorator(function (Original) {
|
|
19
|
+
return function Prompt(props) {
|
|
20
|
+
var _DisablePrompt$useHoo = DisablePrompt.useHook(),
|
|
21
|
+
disablePrompt = _DisablePrompt$useHoo.disablePrompt;
|
|
22
|
+
var when = disablePrompt === true ? false : props.when;
|
|
23
|
+
return /*#__PURE__*/_react.default.createElement(Original, {
|
|
24
|
+
message: props.message,
|
|
25
|
+
when: when
|
|
26
|
+
});
|
|
27
|
+
};
|
|
28
|
+
});
|
|
29
|
+
var ContentEntryDecorator = ContentEntry.createDecorator(function (Original) {
|
|
30
|
+
return function RecordLockingContentEntry(props) {
|
|
31
|
+
var _useState = (0, _react.useState)(false),
|
|
32
|
+
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
33
|
+
disablePrompt = _useState2[0],
|
|
34
|
+
setDisablePrompt = _useState2[1];
|
|
35
|
+
var _ContentEntry$useCont = ContentEntry.useContentEntry(),
|
|
36
|
+
entry = _ContentEntry$useCont.entry;
|
|
37
|
+
/**
|
|
38
|
+
* New entry does not have ID yet.
|
|
39
|
+
*/
|
|
40
|
+
if (!entry?.id) {
|
|
41
|
+
return /*#__PURE__*/_react.default.createElement(DisablePrompt.Provider, {
|
|
42
|
+
disablePrompt: disablePrompt
|
|
43
|
+
}, /*#__PURE__*/_react.default.createElement(Original, props));
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Continue with existing entry.
|
|
47
|
+
*/
|
|
48
|
+
return /*#__PURE__*/_react.default.createElement(_ContentEntryGuard.ContentEntryGuard, null, /*#__PURE__*/_react.default.createElement(_ContentEntryLocker.ContentEntryLocker, {
|
|
49
|
+
onDisablePrompt: function onDisablePrompt(flag) {
|
|
50
|
+
return setDisablePrompt(flag);
|
|
51
|
+
}
|
|
52
|
+
}, /*#__PURE__*/_react.default.createElement(DisablePrompt.Provider, {
|
|
53
|
+
disablePrompt: disablePrompt
|
|
54
|
+
}, /*#__PURE__*/_react.default.createElement(Original, props))));
|
|
55
|
+
};
|
|
56
|
+
});
|
|
57
|
+
var HeadlessCmsContentEntry = exports.HeadlessCmsContentEntry = function HeadlessCmsContentEntry() {
|
|
58
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(ContentEntryDecorator, null), /*#__PURE__*/_react.default.createElement(_appAdmin.CompositionScope, {
|
|
59
|
+
name: "cms.contentEntryForm"
|
|
60
|
+
}, /*#__PURE__*/_react.default.createElement(PromptDecorator, null)));
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
//# sourceMappingURL=HeadlessCmsContentEntry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_appAdmin","_appHeadlessCms","_reactRouter","_ContentEntryGuard","_ContentEntryLocker","ContentEntry","ContentEntryEditorConfig","DisablePrompt","createGenericContext","PromptDecorator","Prompt","createDecorator","Original","props","_DisablePrompt$useHoo","useHook","disablePrompt","when","default","createElement","message","ContentEntryDecorator","RecordLockingContentEntry","_useState","useState","_useState2","_slicedToArray2","setDisablePrompt","_ContentEntry$useCont","useContentEntry","entry","id","Provider","ContentEntryGuard","ContentEntryLocker","onDisablePrompt","flag","HeadlessCmsContentEntry","exports","Fragment","CompositionScope","name"],"sources":["HeadlessCmsContentEntry.tsx"],"sourcesContent":["import React, { useState } from \"react\";\nimport { CompositionScope, createGenericContext } from \"@webiny/app-admin\";\nimport { ContentEntryEditorConfig } from \"@webiny/app-headless-cms\";\nimport { Prompt } from \"@webiny/react-router\";\nimport { ContentEntryGuard } from \"./ContentEntryGuard\";\nimport { ContentEntryLocker } from \"./ContentEntryLocker\";\n\nconst { ContentEntry } = ContentEntryEditorConfig;\n\nconst DisablePrompt = createGenericContext<{ disablePrompt: boolean }>(\"DisablePrompt\");\n\nconst PromptDecorator = Prompt.createDecorator(Original => {\n return function Prompt(props) {\n const { disablePrompt } = DisablePrompt.useHook();\n const when = disablePrompt === true ? false : props.when;\n return <Original message={props.message} when={when} />;\n };\n});\n\nconst ContentEntryDecorator = ContentEntry.createDecorator(Original => {\n return function RecordLockingContentEntry(props) {\n const [disablePrompt, setDisablePrompt] = useState(false);\n const { entry } = ContentEntry.useContentEntry();\n /**\n * New entry does not have ID yet.\n */\n if (!entry?.id) {\n return (\n <DisablePrompt.Provider disablePrompt={disablePrompt}>\n <Original {...props} />\n </DisablePrompt.Provider>\n );\n }\n /**\n * Continue with existing entry.\n */\n return (\n <ContentEntryGuard>\n <ContentEntryLocker onDisablePrompt={flag => setDisablePrompt(flag)}>\n <DisablePrompt.Provider disablePrompt={disablePrompt}>\n <Original {...props} />\n </DisablePrompt.Provider>\n </ContentEntryLocker>\n </ContentEntryGuard>\n );\n };\n});\n\nexport const HeadlessCmsContentEntry = () => {\n return (\n <>\n <ContentEntryDecorator />\n <CompositionScope name={\"cms.contentEntryForm\"}>\n <PromptDecorator />\n </CompositionScope>\n </>\n );\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./HeadlessCmsContentEntry";
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
var _HeadlessCmsContentEntry = require("./HeadlessCmsContentEntry");
|
|
7
|
+
Object.keys(_HeadlessCmsContentEntry).forEach(function (key) {
|
|
8
|
+
if (key === "default" || key === "__esModule") return;
|
|
9
|
+
if (key in exports && exports[key] === _HeadlessCmsContentEntry[key]) return;
|
|
10
|
+
Object.defineProperty(exports, key, {
|
|
11
|
+
enumerable: true,
|
|
12
|
+
get: function get() {
|
|
13
|
+
return _HeadlessCmsContentEntry[key];
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_HeadlessCmsContentEntry","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get"],"sources":["index.ts"],"sourcesContent":["export * from \"./HeadlessCmsContentEntry\";\n"],"mappings":";;;;;AAAA,IAAAA,wBAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,wBAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,wBAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,IAAA;MAAA,OAAAT,wBAAA,CAAAK,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { IRecordLockingLockRecord } from "../../types";
|
|
3
|
+
export interface ILockedRecordProps {
|
|
4
|
+
record: IRecordLockingLockRecord;
|
|
5
|
+
}
|
|
6
|
+
export declare const LockedRecord: ({ record: lockRecordEntry }: ILockedRecordProps) => React.JSX.Element;
|