@webiny/app-record-locking 5.43.2 → 6.0.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/HeadlessCmsActionsAcoCell.js +46 -57
- package/components/HeadlessCmsActionsAcoCell.js.map +1 -1
- package/components/HeadlessCmsContentEntry/ContentEntryGuard.js +22 -29
- package/components/HeadlessCmsContentEntry/ContentEntryGuard.js.map +1 -1
- package/components/HeadlessCmsContentEntry/ContentEntryLocker.js +43 -60
- package/components/HeadlessCmsContentEntry/ContentEntryLocker.js.map +1 -1
- package/components/HeadlessCmsContentEntry/HeadlessCmsContentEntry.js +54 -67
- package/components/HeadlessCmsContentEntry/HeadlessCmsContentEntry.js.map +1 -1
- package/components/HeadlessCmsContentEntry/index.js +1 -16
- package/components/HeadlessCmsContentEntry/index.js.map +1 -1
- package/components/LockedRecord/LockedRecord.js +49 -144
- package/components/LockedRecord/LockedRecord.js.map +1 -1
- package/components/LockedRecord/LockedRecordForceUnlock.js +51 -93
- package/components/LockedRecord/LockedRecordForceUnlock.js.map +1 -1
- package/components/LockedRecord/index.js +1 -16
- package/components/LockedRecord/index.js.map +1 -1
- package/components/RecordLockingProvider.js +47 -67
- package/components/RecordLockingProvider.js.map +1 -1
- package/components/decorators/UseContentEntriesListHookDecorator.js +10 -17
- package/components/decorators/UseContentEntriesListHookDecorator.js.map +1 -1
- package/components/decorators/UseRecordsDecorator.js +11 -16
- package/components/decorators/UseRecordsDecorator.js.map +1 -1
- package/components/decorators/UseSaveEntryDecorator.js +34 -32
- package/components/decorators/UseSaveEntryDecorator.js.map +1 -1
- package/components/permissionRenderer/RecordLockingPermissions.js +39 -53
- package/components/permissionRenderer/RecordLockingPermissions.js.map +1 -1
- package/components/permissionRenderer/index.js +13 -17
- package/components/permissionRenderer/index.js.map +1 -1
- package/domain/RecordLocking.js +271 -311
- package/domain/RecordLocking.js.map +1 -1
- package/domain/RecordLockingClient.js +15 -29
- package/domain/RecordLockingClient.js.map +1 -1
- package/domain/RecordLockingGetLockRecord.js +16 -29
- package/domain/RecordLockingGetLockRecord.js.map +1 -1
- package/domain/RecordLockingGetLockedEntryLockRecord.js +14 -27
- package/domain/RecordLockingGetLockedEntryLockRecord.js.map +1 -1
- package/domain/RecordLockingIsEntryLocked.js +14 -27
- package/domain/RecordLockingIsEntryLocked.js.map +1 -1
- package/domain/RecordLockingListLockRecords.js +26 -37
- package/domain/RecordLockingListLockRecords.js.map +1 -1
- package/domain/RecordLockingLockEntry.js +9 -22
- package/domain/RecordLockingLockEntry.js.map +1 -1
- package/domain/RecordLockingUnlockEntry.js +14 -27
- package/domain/RecordLockingUnlockEntry.js.map +1 -1
- package/domain/RecordLockingUpdateEntryLock.js +14 -27
- package/domain/RecordLockingUpdateEntryLock.js.map +1 -1
- package/domain/abstractions/IRecordLocking.js +1 -5
- package/domain/abstractions/IRecordLockingClient.js +1 -5
- package/domain/abstractions/IRecordLockingGetLockRecord.js +1 -5
- package/domain/abstractions/IRecordLockingGetLockedEntryLockRecord.js +1 -5
- package/domain/abstractions/IRecordLockingIsEntryLocked.js +1 -5
- package/domain/abstractions/IRecordLockingListLockRecords.js +1 -5
- package/domain/abstractions/IRecordLockingLockEntry.js +1 -5
- package/domain/abstractions/IRecordLockingUnlockEntry.js +1 -5
- package/domain/abstractions/IRecordLockingUpdateEntryLock.js +1 -5
- package/domain/graphql/fields.js +28 -8
- package/domain/graphql/fields.js.map +1 -1
- package/domain/graphql/getLockRecord.js +16 -12
- package/domain/graphql/getLockRecord.js.map +1 -1
- package/domain/graphql/getLockedEntryLockRecord.js +16 -12
- package/domain/graphql/getLockedEntryLockRecord.js.map +1 -1
- package/domain/graphql/isEntryLocked.js +14 -12
- package/domain/graphql/isEntryLocked.js.map +1 -1
- package/domain/graphql/listLockRecords.js +23 -14
- package/domain/graphql/listLockRecords.js.map +1 -1
- package/domain/graphql/lockEntry.js +17 -13
- package/domain/graphql/lockEntry.js.map +1 -1
- package/domain/graphql/unlockEntry.js +16 -12
- package/domain/graphql/unlockEntry.js.map +1 -1
- package/domain/graphql/updateEntryLock.js +16 -12
- package/domain/graphql/updateEntryLock.js.map +1 -1
- package/domain/utils/createRecordLockingClient.js +6 -12
- package/domain/utils/createRecordLockingClient.js.map +1 -1
- package/domain/utils/createRecordLockingError.js +1 -7
- package/domain/utils/createRecordLockingError.js.map +1 -1
- package/hooks/index.js +2 -27
- package/hooks/index.js.map +1 -1
- package/hooks/usePermission.js +11 -16
- package/hooks/usePermission.js.map +1 -1
- package/hooks/useRecordLocking.js +6 -12
- package/hooks/useRecordLocking.js.map +1 -1
- package/index.js +20 -50
- package/index.js.map +1 -1
- package/package.json +17 -18
- package/types.js +1 -5
- package/utils/createCacheKey.js +5 -11
- package/utils/createCacheKey.js.map +1 -1
- package/components/assets/lock.svg +0 -13
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["React","ReactComponent","LockIcon","Grid","Heading","Icon","Text","useRecordLocking","useContentEntry","LockedRecordForceUnlock","Wrapper","children","createElement","Fragment","className","Column","span","style","width","height","icon","label","color","size","Title","entry","level","meta","title","LockedRecord","record","lockRecordEntry","getLockRecordEntry","id","lockedBy","type","$lockingType","displayName"],"sources":["LockedRecord.tsx"],"sourcesContent":["import React from \"react\";\nimport { ReactComponent as LockIcon } from \"@webiny/icons/lock.svg\";\nimport { Grid, Heading, Icon, Text } from \"@webiny/admin-ui\";\nimport { useRecordLocking } from \"~/hooks\";\nimport { useContentEntry } from \"@webiny/app-headless-cms\";\nimport { LockedRecordForceUnlock } from \"./LockedRecordForceUnlock\";\nimport { IRecordLockingLockRecord } from \"~/types\";\n\ninterface IWrapperProps {\n children: React.ReactNode;\n}\n\nconst Wrapper = ({ children }: IWrapperProps) => {\n return (\n <>\n <div className=\"wby-w-5/12 wby-absolute wby-top-1/2 wby-left-1/2 wby--translate-x-1/2 wby--translate-y-1/2 wby-z-50\">\n <div\n className={\n \"wby-flex wby-p-lg wby-border-sm wby-border-neutral-dimmed-darker wby-rounded-3xl wby-bg-neutral-base\"\n }\n >\n <Grid>\n <Grid.Column span={3}>\n <div className=\"wby-h-full wby-flex wby-items-center wby-justify-center wby-bg-neutral-dimmed wby-rounded-md wby-p-lg\">\n <Icon\n style={{\n width: \"64px\",\n height: \"64px\"\n }}\n icon={<LockIcon />}\n label={\"Locked Record\"}\n color={\"accent\"}\n size={\"lg\"}\n />\n </div>\n </Grid.Column>\n <Grid.Column span={9}>\n <div className={\"wby-flex wby-flex-col wby-justify-center\"}>\n {children}\n </div>\n </Grid.Column>\n </Grid>\n </div>\n </div>\n {/*<div className=\"wby-absolute wby-inset-0 wby-bg-neutral-dark/50 wby-z-45\"></div>*/}\n </>\n );\n};\n\nconst Title = () => {\n const { entry } = useContentEntry();\n return (\n <Heading level={4} className={\"wby-mb-sm\"}>\n Record ({entry.meta.title}) is locked!\n </Heading>\n );\n};\n\nexport interface ILockedRecordProps {\n record: IRecordLockingLockRecord;\n}\n\nexport const LockedRecord = ({ record: lockRecordEntry }: ILockedRecordProps) => {\n const { getLockRecordEntry } = useRecordLocking();\n\n const record = getLockRecordEntry(lockRecordEntry.id);\n\n if (!record) {\n return (\n <Wrapper>\n <Text>Could not find the lock record. Please refresh the Admin UI.</Text>\n </Wrapper>\n );\n } else if (!lockRecordEntry?.lockedBy) {\n return (\n <Wrapper>\n <Title />\n <Text>\n This record is locked, but the system cannot find the user that created the\n record lock. A force-unlock is required to regain editing capabilities for this\n record.\n </Text>\n <LockedRecordForceUnlock\n id={lockRecordEntry.id}\n type={record.$lockingType}\n title={record.meta.title}\n />\n </Wrapper>\n );\n }\n return (\n <Wrapper>\n <Title />\n <Text>\n It is locked because <strong>{lockRecordEntry.lockedBy.displayName}</strong> is\n currently editing this record. You can either contact the user and ask them to\n unlock the record, or you can wait for the lock to expire.\n </Text>\n <LockedRecordForceUnlock\n id={lockRecordEntry.id}\n type={record.$lockingType}\n lockedBy={lockRecordEntry.lockedBy}\n title={record.meta.title}\n />\n </Wrapper>\n );\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,99 +1,50 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
var _hooks = require("../../hooks");
|
|
14
|
-
var _reactRouter = require("@webiny/react-router");
|
|
15
|
-
var _appHeadlessCms = require("@webiny/app-headless-cms");
|
|
16
|
-
var _Alert = require("@webiny/ui/Alert");
|
|
17
|
-
var _Button = require("@webiny/ui/Button");
|
|
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 Wrapper = /*#__PURE__*/(0, _base.default)("div", process.env.NODE_ENV === "production" ? {
|
|
20
|
-
target: "e1yz5d7m2"
|
|
21
|
-
} : {
|
|
22
|
-
target: "e1yz5d7m2",
|
|
23
|
-
label: "Wrapper"
|
|
24
|
-
})(process.env.NODE_ENV === "production" ? {
|
|
25
|
-
name: "38ejjw",
|
|
26
|
-
styles: "padding:0;background-color:white"
|
|
27
|
-
} : {
|
|
28
|
-
name: "38ejjw",
|
|
29
|
-
styles: "padding:0;background-color:white",
|
|
30
|
-
map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkxvY2tlZFJlY29yZEZvcmNlVW5sb2NrLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFVZ0IiLCJmaWxlIjoiTG9ja2VkUmVjb3JkRm9yY2VVbmxvY2sudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgc3R5bGVkIGZyb20gXCJAZW1vdGlvbi9zdHlsZWRcIjtcbmltcG9ydCB7IElSZWNvcmRMb2NraW5nRXJyb3IsIElSZWNvcmRMb2NraW5nSWRlbnRpdHkgfSBmcm9tIFwifi90eXBlc1wiO1xuaW1wb3J0IHsgdXNlQ29uZmlybWF0aW9uRGlhbG9nLCB1c2VTbmFja2JhciB9IGZyb20gXCJAd2ViaW55L2FwcC1hZG1pblwiO1xuaW1wb3J0IHsgdXNlUmVjb3JkTG9ja2luZywgdXNlUGVybWlzc2lvbiB9IGZyb20gXCJ+L2hvb2tzXCI7XG5pbXBvcnQgeyB1c2VSb3V0ZXIgfSBmcm9tIFwiQHdlYmlueS9yZWFjdC1yb3V0ZXJcIjtcbmltcG9ydCB7IHVzZUNvbnRlbnRFbnRyaWVzTGlzdCB9IGZyb20gXCJAd2ViaW55L2FwcC1oZWFkbGVzcy1jbXNcIjtcbmltcG9ydCB7IEFsZXJ0IH0gZnJvbSBcIkB3ZWJpbnkvdWkvQWxlcnRcIjtcbmltcG9ydCB7IEJ1dHRvblByaW1hcnkgfSBmcm9tIFwiQHdlYmlueS91aS9CdXR0b25cIjtcblxuY29uc3QgV3JhcHBlciA9IHN0eWxlZChcImRpdlwiKSh7XG4gICAgcGFkZGluZzogXCIwXCIsXG4gICAgYmFja2dyb3VuZENvbG9yOiBcIndoaXRlXCJcbn0pO1xuXG5jb25zdCBUZXh0ID0gc3R5bGVkKFwicFwiKSh7XG4gICAgbGluZUhlaWdodDogXCIxMjUlXCJcbn0pO1xuXG5jb25zdCBCb2xkID0gc3R5bGVkKFwic3BhblwiKSh7XG4gICAgZm9udFdlaWdodDogNjAwXG59KTtcblxuZXhwb3J0IGludGVyZmFjZSBJTG9ja2VkUmVjb3JkRm9yY2VVbmxvY2tQcm9wcyB7XG4gICAgaWQ6IHN0cmluZztcbiAgICB0eXBlOiBzdHJpbmc7XG4gICAgdGl0bGU6IHN0cmluZztcbiAgICBsb2NrZWRCeT86IElSZWNvcmRMb2NraW5nSWRlbnRpdHk7XG59XG5cbmNvbnN0IEVycm9yTWVzc2FnZSA9IChwcm9wczogSUxvY2tlZFJlY29yZEZvcmNlVW5sb2NrUHJvcHMpID0+IHtcbiAgICBjb25zdCB7IHRpdGxlLCBsb2NrZWRCeSB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxBbGVydCB0eXBlPVwid2FybmluZ1wiIHRpdGxlPVwiV2FybmluZ1wiPlxuICAgICAgICAgICAgICAgIDxCb2xkPntsb2NrZWRCeT8uZGlzcGxheU5hbWUgfHwgXCJVbmtub3duIHVzZXJcIn08L0JvbGQ+IGlzIGN1cnJlbnRseSBlZGl0aW5nIHRoaXNcbiAgICAgICAgICAgICAgICByZWNvcmQuXG4gICAgICAgICAgICAgICAgPGJyIC8+IElmIHlvdSBmb3JjZSB1bmxvY2sgaXQsIHRoZXkgY291bGQgcG90ZW50aWFsbHkgbG9zZSB0aGVpciBjaGFuZ2VzLlxuICAgICAgICAgICAgPC9BbGVydD5cbiAgICAgICAgICAgIDxiciAvPlxuICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgICAgWW91IGFyZSBhYm91dCB0byBmb3JjZWZ1bGx5IHVubG9jayB0aGUgPEJvbGQ+e3RpdGxlfTwvQm9sZD4gZW50cnkuXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8cD5BcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gY29udGludWU/PC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICApO1xufTtcblxuZXhwb3J0IGNvbnN0IExvY2tlZFJlY29yZEZvcmNlVW5sb2NrID0gKHByb3BzOiBJTG9ja2VkUmVjb3JkRm9yY2VVbmxvY2tQcm9wcykgPT4ge1xuICAgIGNvbnN0IHsgdW5sb2NrRW50cnlGb3JjZSB9ID0gdXNlUmVjb3JkTG9ja2luZygpO1xuXG4gICAgY29uc3QgeyBuYXZpZ2F0ZVRvIH0gPSB1c2VDb250ZW50RW50cmllc0xpc3QoKTtcbiAgICBjb25zdCB7IHNob3dDb25maXJtYXRpb246IHNob3dGb3JjZVVubG9ja0NvbmZpcm1hdGlvbiB9ID0gdXNlQ29uZmlybWF0aW9uRGlhbG9nKHtcbiAgICAgICAgdGl0bGU6IFwiRm9yY2UgdW5sb2NrIHRoZSBlbnRyeVwiLFxuICAgICAgICBtZXNzYWdlOiA8RXJyb3JNZXNzYWdlIHsuLi5wcm9wc30gLz5cbiAgICB9KTtcbiAgICBjb25zdCB7IHNob3dTbmFja2JhciB9ID0gdXNlU25hY2tiYXIoKTtcblxuICAgIGNvbnN0IHsgaGlzdG9yeSB9ID0gdXNlUm91dGVyKCk7XG5cbiAgICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IHVzZVN0YXRlPElSZWNvcmRMb2NraW5nRXJyb3I+KCk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoIWVycm9yPy5tZXNzYWdlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgIHNob3dTbmFja2JhcihlcnJvci5tZXNzYWdlKTtcbiAgICB9LCBbZXJyb3I/Lm1lc3NhZ2VdKTtcblxuICAgIGNvbnN0IG9uQ2xpY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgICAgIHNob3dGb3JjZVVubG9ja0NvbmZpcm1hdGlvbihhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB1bmxvY2tFbnRyeUZvcmNlKHtcbiAgICAgICAgICAgICAgICBpZDogcHJvcHMuaWQsXG4gICAgICAgICAgICAgICAgJGxvY2tpbmdUeXBlOiBwcm9wcy50eXBlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICghcmVzdWx0LmVycm9yKSB7XG4gICAgICAgICAgICAgICAgbmF2aWdhdGVUbygpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldEVycm9yKHJlc3VsdC5lcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0sIFtwcm9wcy5pZCwgaGlzdG9yeSwgbmF2aWdhdGVUb10pO1xuXG4gICAgY29uc3QgeyBjYW5Gb3JjZVVubG9jayB9ID0gdXNlUGVybWlzc2lvbigpO1xuICAgIGlmICghY2FuRm9yY2VVbmxvY2spIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPFdyYXBwZXI+XG4gICAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgICAgICBCZWNhdXNlIHlvdSBoYXZlIGEgZnVsbCBhY2Nlc3MgdG8gdGhlIHN5c3RlbSwgeW91IGNhbiBmb3JjZSB1bmxvY2sgdGhlIHJlY29yZC5cbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDxiciAvPlxuICAgICAgICAgICAgPEJ1dHRvblByaW1hcnkgb25DbGljaz17b25DbGlja30+VW5sb2NrIGFuZCBnbyBiYWNrPC9CdXR0b25QcmltYXJ5PlxuICAgICAgICA8L1dyYXBwZXI+XG4gICAgKTtcbn07XG4iXX0= */",
|
|
31
|
-
toString: _EMOTION_STRINGIFIED_CSS_ERROR__
|
|
32
|
-
});
|
|
33
|
-
var Text = /*#__PURE__*/(0, _base.default)("p", process.env.NODE_ENV === "production" ? {
|
|
34
|
-
target: "e1yz5d7m1"
|
|
35
|
-
} : {
|
|
36
|
-
target: "e1yz5d7m1",
|
|
37
|
-
label: "Text"
|
|
38
|
-
})(process.env.NODE_ENV === "production" ? {
|
|
39
|
-
name: "sqtwzz",
|
|
40
|
-
styles: "line-height:125%"
|
|
41
|
-
} : {
|
|
42
|
-
name: "sqtwzz",
|
|
43
|
-
styles: "line-height:125%",
|
|
44
|
-
map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkxvY2tlZFJlY29yZEZvcmNlVW5sb2NrLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFlYSIsImZpbGUiOiJMb2NrZWRSZWNvcmRGb3JjZVVubG9jay50c3giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBzdHlsZWQgZnJvbSBcIkBlbW90aW9uL3N0eWxlZFwiO1xuaW1wb3J0IHsgSVJlY29yZExvY2tpbmdFcnJvciwgSVJlY29yZExvY2tpbmdJZGVudGl0eSB9IGZyb20gXCJ+L3R5cGVzXCI7XG5pbXBvcnQgeyB1c2VDb25maXJtYXRpb25EaWFsb2csIHVzZVNuYWNrYmFyIH0gZnJvbSBcIkB3ZWJpbnkvYXBwLWFkbWluXCI7XG5pbXBvcnQgeyB1c2VSZWNvcmRMb2NraW5nLCB1c2VQZXJtaXNzaW9uIH0gZnJvbSBcIn4vaG9va3NcIjtcbmltcG9ydCB7IHVzZVJvdXRlciB9IGZyb20gXCJAd2ViaW55L3JlYWN0LXJvdXRlclwiO1xuaW1wb3J0IHsgdXNlQ29udGVudEVudHJpZXNMaXN0IH0gZnJvbSBcIkB3ZWJpbnkvYXBwLWhlYWRsZXNzLWNtc1wiO1xuaW1wb3J0IHsgQWxlcnQgfSBmcm9tIFwiQHdlYmlueS91aS9BbGVydFwiO1xuaW1wb3J0IHsgQnV0dG9uUHJpbWFyeSB9IGZyb20gXCJAd2ViaW55L3VpL0J1dHRvblwiO1xuXG5jb25zdCBXcmFwcGVyID0gc3R5bGVkKFwiZGl2XCIpKHtcbiAgICBwYWRkaW5nOiBcIjBcIixcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IFwid2hpdGVcIlxufSk7XG5cbmNvbnN0IFRleHQgPSBzdHlsZWQoXCJwXCIpKHtcbiAgICBsaW5lSGVpZ2h0OiBcIjEyNSVcIlxufSk7XG5cbmNvbnN0IEJvbGQgPSBzdHlsZWQoXCJzcGFuXCIpKHtcbiAgICBmb250V2VpZ2h0OiA2MDBcbn0pO1xuXG5leHBvcnQgaW50ZXJmYWNlIElMb2NrZWRSZWNvcmRGb3JjZVVubG9ja1Byb3BzIHtcbiAgICBpZDogc3RyaW5nO1xuICAgIHR5cGU6IHN0cmluZztcbiAgICB0aXRsZTogc3RyaW5nO1xuICAgIGxvY2tlZEJ5PzogSVJlY29yZExvY2tpbmdJZGVudGl0eTtcbn1cblxuY29uc3QgRXJyb3JNZXNzYWdlID0gKHByb3BzOiBJTG9ja2VkUmVjb3JkRm9yY2VVbmxvY2tQcm9wcykgPT4ge1xuICAgIGNvbnN0IHsgdGl0bGUsIGxvY2tlZEJ5IH0gPSBwcm9wcztcbiAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPEFsZXJ0IHR5cGU9XCJ3YXJuaW5nXCIgdGl0bGU9XCJXYXJuaW5nXCI+XG4gICAgICAgICAgICAgICAgPEJvbGQ+e2xvY2tlZEJ5Py5kaXNwbGF5TmFtZSB8fCBcIlVua25vd24gdXNlclwifTwvQm9sZD4gaXMgY3VycmVudGx5IGVkaXRpbmcgdGhpc1xuICAgICAgICAgICAgICAgIHJlY29yZC5cbiAgICAgICAgICAgICAgICA8YnIgLz4gSWYgeW91IGZvcmNlIHVubG9jayBpdCwgdGhleSBjb3VsZCBwb3RlbnRpYWxseSBsb3NlIHRoZWlyIGNoYW5nZXMuXG4gICAgICAgICAgICA8L0FsZXJ0PlxuICAgICAgICAgICAgPGJyIC8+XG4gICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgICBZb3UgYXJlIGFib3V0IHRvIGZvcmNlZnVsbHkgdW5sb2NrIHRoZSA8Qm9sZD57dGl0bGV9PC9Cb2xkPiBlbnRyeS5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDxwPkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBjb250aW51ZT88L3A+XG4gICAgICAgIDwvZGl2PlxuICAgICk7XG59O1xuXG5leHBvcnQgY29uc3QgTG9ja2VkUmVjb3JkRm9yY2VVbmxvY2sgPSAocHJvcHM6IElMb2NrZWRSZWNvcmRGb3JjZVVubG9ja1Byb3BzKSA9PiB7XG4gICAgY29uc3QgeyB1bmxvY2tFbnRyeUZvcmNlIH0gPSB1c2VSZWNvcmRMb2NraW5nKCk7XG5cbiAgICBjb25zdCB7IG5hdmlnYXRlVG8gfSA9IHVzZUNvbnRlbnRFbnRyaWVzTGlzdCgpO1xuICAgIGNvbnN0IHsgc2hvd0NvbmZpcm1hdGlvbjogc2hvd0ZvcmNlVW5sb2NrQ29uZmlybWF0aW9uIH0gPSB1c2VDb25maXJtYXRpb25EaWFsb2coe1xuICAgICAgICB0aXRsZTogXCJGb3JjZSB1bmxvY2sgdGhlIGVudHJ5XCIsXG4gICAgICAgIG1lc3NhZ2U6IDxFcnJvck1lc3NhZ2Ugey4uLnByb3BzfSAvPlxuICAgIH0pO1xuICAgIGNvbnN0IHsgc2hvd1NuYWNrYmFyIH0gPSB1c2VTbmFja2JhcigpO1xuXG4gICAgY29uc3QgeyBoaXN0b3J5IH0gPSB1c2VSb3V0ZXIoKTtcblxuICAgIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gdXNlU3RhdGU8SVJlY29yZExvY2tpbmdFcnJvcj4oKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmICghZXJyb3I/Lm1lc3NhZ2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgc2hvd1NuYWNrYmFyKGVycm9yLm1lc3NhZ2UpO1xuICAgIH0sIFtlcnJvcj8ubWVzc2FnZV0pO1xuXG4gICAgY29uc3Qgb25DbGljayA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgc2hvd0ZvcmNlVW5sb2NrQ29uZmlybWF0aW9uKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHVubG9ja0VudHJ5Rm9yY2Uoe1xuICAgICAgICAgICAgICAgIGlkOiBwcm9wcy5pZCxcbiAgICAgICAgICAgICAgICAkbG9ja2luZ1R5cGU6IHByb3BzLnR5cGVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKCFyZXN1bHQuZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBuYXZpZ2F0ZVRvKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2V0RXJyb3IocmVzdWx0LmVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgfSwgW3Byb3BzLmlkLCBoaXN0b3J5LCBuYXZpZ2F0ZVRvXSk7XG5cbiAgICBjb25zdCB7IGNhbkZvcmNlVW5sb2NrIH0gPSB1c2VQZXJtaXNzaW9uKCk7XG4gICAgaWYgKCFjYW5Gb3JjZVVubG9jaykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8V3JhcHBlcj5cbiAgICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgICAgIEJlY2F1c2UgeW91IGhhdmUgYSBmdWxsIGFjY2VzcyB0byB0aGUgc3lzdGVtLCB5b3UgY2FuIGZvcmNlIHVubG9jayB0aGUgcmVjb3JkLlxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgPGJyIC8+XG4gICAgICAgICAgICA8QnV0dG9uUHJpbWFyeSBvbkNsaWNrPXtvbkNsaWNrfT5VbmxvY2sgYW5kIGdvIGJhY2s8L0J1dHRvblByaW1hcnk+XG4gICAgICAgIDwvV3JhcHBlcj5cbiAgICApO1xufTtcbiJdfQ== */",
|
|
45
|
-
toString: _EMOTION_STRINGIFIED_CSS_ERROR__
|
|
46
|
-
});
|
|
47
|
-
var Bold = /*#__PURE__*/(0, _base.default)("span", process.env.NODE_ENV === "production" ? {
|
|
48
|
-
target: "e1yz5d7m0"
|
|
49
|
-
} : {
|
|
50
|
-
target: "e1yz5d7m0",
|
|
51
|
-
label: "Bold"
|
|
52
|
-
})(process.env.NODE_ENV === "production" ? {
|
|
53
|
-
name: "16ceglb",
|
|
54
|
-
styles: "font-weight:600"
|
|
55
|
-
} : {
|
|
56
|
-
name: "16ceglb",
|
|
57
|
-
styles: "font-weight:600",
|
|
58
|
-
map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkxvY2tlZFJlY29yZEZvcmNlVW5sb2NrLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFtQmEiLCJmaWxlIjoiTG9ja2VkUmVjb3JkRm9yY2VVbmxvY2sudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgc3R5bGVkIGZyb20gXCJAZW1vdGlvbi9zdHlsZWRcIjtcbmltcG9ydCB7IElSZWNvcmRMb2NraW5nRXJyb3IsIElSZWNvcmRMb2NraW5nSWRlbnRpdHkgfSBmcm9tIFwifi90eXBlc1wiO1xuaW1wb3J0IHsgdXNlQ29uZmlybWF0aW9uRGlhbG9nLCB1c2VTbmFja2JhciB9IGZyb20gXCJAd2ViaW55L2FwcC1hZG1pblwiO1xuaW1wb3J0IHsgdXNlUmVjb3JkTG9ja2luZywgdXNlUGVybWlzc2lvbiB9IGZyb20gXCJ+L2hvb2tzXCI7XG5pbXBvcnQgeyB1c2VSb3V0ZXIgfSBmcm9tIFwiQHdlYmlueS9yZWFjdC1yb3V0ZXJcIjtcbmltcG9ydCB7IHVzZUNvbnRlbnRFbnRyaWVzTGlzdCB9IGZyb20gXCJAd2ViaW55L2FwcC1oZWFkbGVzcy1jbXNcIjtcbmltcG9ydCB7IEFsZXJ0IH0gZnJvbSBcIkB3ZWJpbnkvdWkvQWxlcnRcIjtcbmltcG9ydCB7IEJ1dHRvblByaW1hcnkgfSBmcm9tIFwiQHdlYmlueS91aS9CdXR0b25cIjtcblxuY29uc3QgV3JhcHBlciA9IHN0eWxlZChcImRpdlwiKSh7XG4gICAgcGFkZGluZzogXCIwXCIsXG4gICAgYmFja2dyb3VuZENvbG9yOiBcIndoaXRlXCJcbn0pO1xuXG5jb25zdCBUZXh0ID0gc3R5bGVkKFwicFwiKSh7XG4gICAgbGluZUhlaWdodDogXCIxMjUlXCJcbn0pO1xuXG5jb25zdCBCb2xkID0gc3R5bGVkKFwic3BhblwiKSh7XG4gICAgZm9udFdlaWdodDogNjAwXG59KTtcblxuZXhwb3J0IGludGVyZmFjZSBJTG9ja2VkUmVjb3JkRm9yY2VVbmxvY2tQcm9wcyB7XG4gICAgaWQ6IHN0cmluZztcbiAgICB0eXBlOiBzdHJpbmc7XG4gICAgdGl0bGU6IHN0cmluZztcbiAgICBsb2NrZWRCeT86IElSZWNvcmRMb2NraW5nSWRlbnRpdHk7XG59XG5cbmNvbnN0IEVycm9yTWVzc2FnZSA9IChwcm9wczogSUxvY2tlZFJlY29yZEZvcmNlVW5sb2NrUHJvcHMpID0+IHtcbiAgICBjb25zdCB7IHRpdGxlLCBsb2NrZWRCeSB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxBbGVydCB0eXBlPVwid2FybmluZ1wiIHRpdGxlPVwiV2FybmluZ1wiPlxuICAgICAgICAgICAgICAgIDxCb2xkPntsb2NrZWRCeT8uZGlzcGxheU5hbWUgfHwgXCJVbmtub3duIHVzZXJcIn08L0JvbGQ+IGlzIGN1cnJlbnRseSBlZGl0aW5nIHRoaXNcbiAgICAgICAgICAgICAgICByZWNvcmQuXG4gICAgICAgICAgICAgICAgPGJyIC8+IElmIHlvdSBmb3JjZSB1bmxvY2sgaXQsIHRoZXkgY291bGQgcG90ZW50aWFsbHkgbG9zZSB0aGVpciBjaGFuZ2VzLlxuICAgICAgICAgICAgPC9BbGVydD5cbiAgICAgICAgICAgIDxiciAvPlxuICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgICAgWW91IGFyZSBhYm91dCB0byBmb3JjZWZ1bGx5IHVubG9jayB0aGUgPEJvbGQ+e3RpdGxlfTwvQm9sZD4gZW50cnkuXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8cD5BcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gY29udGludWU/PC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICApO1xufTtcblxuZXhwb3J0IGNvbnN0IExvY2tlZFJlY29yZEZvcmNlVW5sb2NrID0gKHByb3BzOiBJTG9ja2VkUmVjb3JkRm9yY2VVbmxvY2tQcm9wcykgPT4ge1xuICAgIGNvbnN0IHsgdW5sb2NrRW50cnlGb3JjZSB9ID0gdXNlUmVjb3JkTG9ja2luZygpO1xuXG4gICAgY29uc3QgeyBuYXZpZ2F0ZVRvIH0gPSB1c2VDb250ZW50RW50cmllc0xpc3QoKTtcbiAgICBjb25zdCB7IHNob3dDb25maXJtYXRpb246IHNob3dGb3JjZVVubG9ja0NvbmZpcm1hdGlvbiB9ID0gdXNlQ29uZmlybWF0aW9uRGlhbG9nKHtcbiAgICAgICAgdGl0bGU6IFwiRm9yY2UgdW5sb2NrIHRoZSBlbnRyeVwiLFxuICAgICAgICBtZXNzYWdlOiA8RXJyb3JNZXNzYWdlIHsuLi5wcm9wc30gLz5cbiAgICB9KTtcbiAgICBjb25zdCB7IHNob3dTbmFja2JhciB9ID0gdXNlU25hY2tiYXIoKTtcblxuICAgIGNvbnN0IHsgaGlzdG9yeSB9ID0gdXNlUm91dGVyKCk7XG5cbiAgICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IHVzZVN0YXRlPElSZWNvcmRMb2NraW5nRXJyb3I+KCk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoIWVycm9yPy5tZXNzYWdlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgIHNob3dTbmFja2JhcihlcnJvci5tZXNzYWdlKTtcbiAgICB9LCBbZXJyb3I/Lm1lc3NhZ2VdKTtcblxuICAgIGNvbnN0IG9uQ2xpY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgICAgIHNob3dGb3JjZVVubG9ja0NvbmZpcm1hdGlvbihhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB1bmxvY2tFbnRyeUZvcmNlKHtcbiAgICAgICAgICAgICAgICBpZDogcHJvcHMuaWQsXG4gICAgICAgICAgICAgICAgJGxvY2tpbmdUeXBlOiBwcm9wcy50eXBlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICghcmVzdWx0LmVycm9yKSB7XG4gICAgICAgICAgICAgICAgbmF2aWdhdGVUbygpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldEVycm9yKHJlc3VsdC5lcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0sIFtwcm9wcy5pZCwgaGlzdG9yeSwgbmF2aWdhdGVUb10pO1xuXG4gICAgY29uc3QgeyBjYW5Gb3JjZVVubG9jayB9ID0gdXNlUGVybWlzc2lvbigpO1xuICAgIGlmICghY2FuRm9yY2VVbmxvY2spIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPFdyYXBwZXI+XG4gICAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgICAgICBCZWNhdXNlIHlvdSBoYXZlIGEgZnVsbCBhY2Nlc3MgdG8gdGhlIHN5c3RlbSwgeW91IGNhbiBmb3JjZSB1bmxvY2sgdGhlIHJlY29yZC5cbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDxiciAvPlxuICAgICAgICAgICAgPEJ1dHRvblByaW1hcnkgb25DbGljaz17b25DbGlja30+VW5sb2NrIGFuZCBnbyBiYWNrPC9CdXR0b25QcmltYXJ5PlxuICAgICAgICA8L1dyYXBwZXI+XG4gICAgKTtcbn07XG4iXX0= */",
|
|
59
|
-
toString: _EMOTION_STRINGIFIED_CSS_ERROR__
|
|
60
|
-
});
|
|
61
|
-
var ErrorMessage = function ErrorMessage(props) {
|
|
62
|
-
var title = props.title,
|
|
63
|
-
lockedBy = props.lockedBy;
|
|
64
|
-
return /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_Alert.Alert, {
|
|
1
|
+
import React, { useCallback, useEffect, useState } from "react";
|
|
2
|
+
import { Alert, Button, Text } from "@webiny/admin-ui";
|
|
3
|
+
import { useConfirmationDialog, useSnackbar } from "@webiny/app-admin";
|
|
4
|
+
import { useRecordLocking, usePermission } from "../../hooks";
|
|
5
|
+
import { useRouter } from "@webiny/react-router";
|
|
6
|
+
import { useContentEntriesList } from "@webiny/app-headless-cms";
|
|
7
|
+
const ErrorMessage = props => {
|
|
8
|
+
const {
|
|
9
|
+
title,
|
|
10
|
+
lockedBy
|
|
11
|
+
} = props;
|
|
12
|
+
return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Alert, {
|
|
65
13
|
type: "warning",
|
|
66
|
-
title: "Warning"
|
|
67
|
-
|
|
14
|
+
title: "Warning",
|
|
15
|
+
className: "wby-mb-md"
|
|
16
|
+
}, /*#__PURE__*/React.createElement("strong", null, lockedBy?.displayName || "Unknown user"), " is currently editing this record.", /*#__PURE__*/React.createElement("br", null), " If you force unlock it, they could potentially lose their changes."), /*#__PURE__*/React.createElement(Text, null, "You are about to forcefully unlock the ", /*#__PURE__*/React.createElement("strong", null, title), " entry. Are you sure you want to continue?"));
|
|
68
17
|
};
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
unlockEntryForce
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
18
|
+
export const LockedRecordForceUnlock = props => {
|
|
19
|
+
const {
|
|
20
|
+
unlockEntryForce
|
|
21
|
+
} = useRecordLocking();
|
|
22
|
+
const {
|
|
23
|
+
navigateTo
|
|
24
|
+
} = useContentEntriesList();
|
|
25
|
+
const {
|
|
26
|
+
showConfirmation: showForceUnlockConfirmation
|
|
27
|
+
} = useConfirmationDialog({
|
|
28
|
+
title: "Force unlock the entry",
|
|
29
|
+
message: /*#__PURE__*/React.createElement(ErrorMessage, props)
|
|
30
|
+
});
|
|
31
|
+
const {
|
|
32
|
+
showSnackbar
|
|
33
|
+
} = useSnackbar();
|
|
34
|
+
const {
|
|
35
|
+
history
|
|
36
|
+
} = useRouter();
|
|
37
|
+
const [error, setError] = useState();
|
|
38
|
+
useEffect(() => {
|
|
88
39
|
if (!error?.message) {
|
|
89
40
|
return;
|
|
90
41
|
}
|
|
91
42
|
console.error(error);
|
|
92
43
|
showSnackbar(error.message);
|
|
93
44
|
}, [error?.message]);
|
|
94
|
-
|
|
95
|
-
showForceUnlockConfirmation(async
|
|
96
|
-
|
|
45
|
+
const onClick = useCallback(() => {
|
|
46
|
+
showForceUnlockConfirmation(async () => {
|
|
47
|
+
const result = await unlockEntryForce({
|
|
97
48
|
id: props.id,
|
|
98
49
|
$lockingType: props.type
|
|
99
50
|
});
|
|
@@ -104,14 +55,21 @@ var LockedRecordForceUnlock = exports.LockedRecordForceUnlock = function LockedR
|
|
|
104
55
|
setError(result.error);
|
|
105
56
|
});
|
|
106
57
|
}, [props.id, history, navigateTo]);
|
|
107
|
-
|
|
108
|
-
canForceUnlock
|
|
58
|
+
const {
|
|
59
|
+
canForceUnlock
|
|
60
|
+
} = usePermission();
|
|
109
61
|
if (!canForceUnlock) {
|
|
110
62
|
return null;
|
|
111
63
|
}
|
|
112
|
-
return /*#__PURE__*/
|
|
113
|
-
|
|
114
|
-
},
|
|
64
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
65
|
+
className: "wby-mt-md"
|
|
66
|
+
}, /*#__PURE__*/React.createElement(Text, {
|
|
67
|
+
as: "div",
|
|
68
|
+
className: "wby-mb-md"
|
|
69
|
+
}, "Because you have a full access to the system, you can force unlock the record."), /*#__PURE__*/React.createElement(Button, {
|
|
70
|
+
onClick: onClick,
|
|
71
|
+
text: "Unlock and go back"
|
|
72
|
+
}));
|
|
115
73
|
};
|
|
116
74
|
|
|
117
75
|
//# sourceMappingURL=LockedRecordForceUnlock.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["React","useCallback","useEffect","useState","Alert","Button","Text","useConfirmationDialog","useSnackbar","useRecordLocking","usePermission","useRouter","useContentEntriesList","ErrorMessage","props","title","lockedBy","createElement","type","className","displayName","LockedRecordForceUnlock","unlockEntryForce","navigateTo","showConfirmation","showForceUnlockConfirmation","message","showSnackbar","history","error","setError","console","onClick","result","id","$lockingType","canForceUnlock","as","text"],"sources":["LockedRecordForceUnlock.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useState } from \"react\";\nimport { Alert, Button, Text } from \"@webiny/admin-ui\";\nimport { IRecordLockingError, IRecordLockingIdentity } from \"~/types\";\nimport { useConfirmationDialog, useSnackbar } from \"@webiny/app-admin\";\nimport { useRecordLocking, usePermission } from \"~/hooks\";\nimport { useRouter } from \"@webiny/react-router\";\nimport { useContentEntriesList } from \"@webiny/app-headless-cms\";\n\nexport interface ILockedRecordForceUnlockProps {\n id: string;\n type: string;\n title: string;\n lockedBy?: IRecordLockingIdentity;\n}\n\nconst ErrorMessage = (props: ILockedRecordForceUnlockProps) => {\n const { title, lockedBy } = props;\n return (\n <div>\n <Alert type=\"warning\" title=\"Warning\" className={\"wby-mb-md\"}>\n <strong>{lockedBy?.displayName || \"Unknown user\"}</strong> is currently editing this\n record.\n <br /> If you force unlock it, they could potentially lose their changes.\n </Alert>\n\n <Text>\n You are about to forcefully unlock the <strong>{title}</strong> entry. Are you sure\n you want to continue?\n </Text>\n </div>\n );\n};\n\nexport const LockedRecordForceUnlock = (props: ILockedRecordForceUnlockProps) => {\n const { unlockEntryForce } = useRecordLocking();\n\n const { navigateTo } = useContentEntriesList();\n const { showConfirmation: showForceUnlockConfirmation } = useConfirmationDialog({\n title: \"Force unlock the entry\",\n message: <ErrorMessage {...props} />\n });\n const { showSnackbar } = useSnackbar();\n\n const { history } = useRouter();\n\n const [error, setError] = useState<IRecordLockingError>();\n\n useEffect(() => {\n if (!error?.message) {\n return;\n }\n console.error(error);\n showSnackbar(error.message);\n }, [error?.message]);\n\n const onClick = useCallback(() => {\n showForceUnlockConfirmation(async () => {\n const result = await unlockEntryForce({\n id: props.id,\n $lockingType: props.type\n });\n if (!result.error) {\n navigateTo();\n return;\n }\n setError(result.error);\n });\n }, [props.id, history, navigateTo]);\n\n const { canForceUnlock } = usePermission();\n if (!canForceUnlock) {\n return null;\n }\n\n return (\n <div className=\"wby-mt-md\">\n <Text as={\"div\"} className={\"wby-mb-md\"}>\n Because you have a full access to the system, you can force unlock the record.\n </Text>\n <Button onClick={onClick} text={\"Unlock and go back\"} />\n </div>\n );\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,18 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
var _LockedRecord = require("./LockedRecord");
|
|
7
|
-
Object.keys(_LockedRecord).forEach(function (key) {
|
|
8
|
-
if (key === "default" || key === "__esModule") return;
|
|
9
|
-
if (key in exports && exports[key] === _LockedRecord[key]) return;
|
|
10
|
-
Object.defineProperty(exports, key, {
|
|
11
|
-
enumerable: true,
|
|
12
|
-
get: function get() {
|
|
13
|
-
return _LockedRecord[key];
|
|
14
|
-
}
|
|
15
|
-
});
|
|
16
|
-
});
|
|
1
|
+
export * from "./LockedRecord";
|
|
17
2
|
|
|
18
3
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[
|
|
1
|
+
{"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export * from \"./LockedRecord\";\n"],"mappings":"AAAA","ignoreList":[]}
|
|
@@ -1,108 +1,88 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
});
|
|
8
|
-
exports.RecordLockingProvider = exports.RecordLockingContext = void 0;
|
|
9
|
-
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
10
|
-
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
11
|
-
var _react = _interopRequireWildcard(require("react"));
|
|
12
|
-
var _reactHooks = require("@apollo/react-hooks");
|
|
13
|
-
var _RecordLocking = require("../domain/RecordLocking");
|
|
14
|
-
var _appAdmin = require("@webiny/app-admin");
|
|
15
|
-
var RecordLockingContext = exports.RecordLockingContext = /*#__PURE__*/_react.default.createContext({});
|
|
16
|
-
var isSameArray = function isSameArray(existingRecords, newRecords) {
|
|
1
|
+
import React, { useCallback, useMemo, useState } from "react";
|
|
2
|
+
import { useApolloClient } from "@apollo/react-hooks";
|
|
3
|
+
import { createRecordLocking } from "../domain/RecordLocking";
|
|
4
|
+
import { useStateIfMounted } from "@webiny/app-admin";
|
|
5
|
+
export const RecordLockingContext = /*#__PURE__*/React.createContext({});
|
|
6
|
+
const isSameArray = (existingRecords, newRecords) => {
|
|
17
7
|
if (existingRecords.length !== newRecords.length) {
|
|
18
8
|
return false;
|
|
19
9
|
}
|
|
20
|
-
return existingRecords.every(
|
|
21
|
-
return newRecords.some(
|
|
22
|
-
return newRecord.id === record.id && newRecord.savedOn === record.savedOn;
|
|
23
|
-
});
|
|
10
|
+
return existingRecords.every(record => {
|
|
11
|
+
return newRecords.some(newRecord => newRecord.id === record.id && newRecord.savedOn === record.savedOn);
|
|
24
12
|
});
|
|
25
13
|
};
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
return (0, _RecordLocking.createRecordLocking)({
|
|
34
|
-
client: client,
|
|
35
|
-
setLoading: setLoading
|
|
14
|
+
export const RecordLockingProvider = props => {
|
|
15
|
+
const client = useApolloClient();
|
|
16
|
+
const [loading, setLoading] = useState(false);
|
|
17
|
+
const recordLocking = useMemo(() => {
|
|
18
|
+
return createRecordLocking({
|
|
19
|
+
client,
|
|
20
|
+
setLoading
|
|
36
21
|
});
|
|
37
22
|
}, []);
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
var _useStateIfMounted3 = (0, _appAdmin.useStateIfMounted)([]),
|
|
43
|
-
_useStateIfMounted4 = (0, _slicedToArray2.default)(_useStateIfMounted3, 2),
|
|
44
|
-
records = _useStateIfMounted4[0],
|
|
45
|
-
_setRecords = _useStateIfMounted4[1];
|
|
46
|
-
var setRecordsIfNeeded = (0, _react.useCallback)(function (newRecords) {
|
|
47
|
-
var sameArray = isSameArray(records, newRecords);
|
|
23
|
+
const [error, setError] = useStateIfMounted(null);
|
|
24
|
+
const [records, setRecords] = useStateIfMounted([]);
|
|
25
|
+
const setRecordsIfNeeded = useCallback(newRecords => {
|
|
26
|
+
const sameArray = isSameArray(records, newRecords);
|
|
48
27
|
if (sameArray) {
|
|
49
28
|
return;
|
|
50
29
|
}
|
|
51
|
-
|
|
30
|
+
setRecords(newRecords);
|
|
52
31
|
}, [records]);
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
32
|
+
const value = {
|
|
33
|
+
async updateEntryLock(params) {
|
|
34
|
+
const result = await recordLocking.updateEntryLock(params);
|
|
56
35
|
if (result.error) {
|
|
57
36
|
setError(result.error);
|
|
58
37
|
return result;
|
|
59
38
|
}
|
|
60
|
-
|
|
39
|
+
const target = result.data;
|
|
61
40
|
if (!target?.id) {
|
|
62
|
-
|
|
41
|
+
const error = {
|
|
63
42
|
message: "No data returned from server.",
|
|
64
43
|
code: "NO_DATA"
|
|
65
44
|
};
|
|
66
|
-
setError(
|
|
45
|
+
setError(error);
|
|
67
46
|
return {
|
|
68
|
-
error
|
|
47
|
+
error,
|
|
69
48
|
data: null
|
|
70
49
|
};
|
|
71
50
|
}
|
|
72
|
-
|
|
73
|
-
return prev.map(
|
|
51
|
+
setRecords(prev => {
|
|
52
|
+
return prev.map(item => {
|
|
74
53
|
if (item.entryId === target.id) {
|
|
75
|
-
return
|
|
54
|
+
return {
|
|
55
|
+
...item,
|
|
76
56
|
$locked: result.data
|
|
77
|
-
}
|
|
57
|
+
};
|
|
78
58
|
}
|
|
79
59
|
return item;
|
|
80
60
|
});
|
|
81
61
|
});
|
|
82
62
|
return result;
|
|
83
63
|
},
|
|
84
|
-
|
|
64
|
+
async unlockEntry(params) {
|
|
85
65
|
return await recordLocking.unlockEntry(params);
|
|
86
66
|
},
|
|
87
|
-
|
|
67
|
+
async unlockEntryForce(params) {
|
|
88
68
|
return await recordLocking.unlockEntry(params, true);
|
|
89
69
|
},
|
|
90
|
-
isLockExpired
|
|
70
|
+
isLockExpired(input) {
|
|
91
71
|
return recordLocking.isLockExpired(input);
|
|
92
72
|
},
|
|
93
|
-
isRecordLocked
|
|
73
|
+
isRecordLocked(record) {
|
|
94
74
|
if (!record) {
|
|
95
75
|
return false;
|
|
96
76
|
}
|
|
97
77
|
return recordLocking.isRecordLocked(record);
|
|
98
78
|
},
|
|
99
|
-
getLockRecordEntry
|
|
79
|
+
getLockRecordEntry(id) {
|
|
100
80
|
return recordLocking.getLockRecordEntry(id);
|
|
101
81
|
},
|
|
102
|
-
removeEntryLock
|
|
82
|
+
removeEntryLock(params) {
|
|
103
83
|
return recordLocking.removeEntryLock(params);
|
|
104
84
|
},
|
|
105
|
-
|
|
85
|
+
async fetchLockRecord(params) {
|
|
106
86
|
try {
|
|
107
87
|
return await recordLocking.fetchLockRecord(params);
|
|
108
88
|
} catch (ex) {
|
|
@@ -112,22 +92,22 @@ var RecordLockingProvider = exports.RecordLockingProvider = function RecordLocki
|
|
|
112
92
|
};
|
|
113
93
|
}
|
|
114
94
|
},
|
|
115
|
-
|
|
95
|
+
async fetchLockedEntryLockRecord(params) {
|
|
116
96
|
return recordLocking.fetchLockedEntryLockRecord(params);
|
|
117
97
|
},
|
|
118
|
-
|
|
98
|
+
async setRecords(folderId, type, newRecords) {
|
|
119
99
|
setRecordsIfNeeded(newRecords);
|
|
120
|
-
|
|
100
|
+
const result = await recordLocking.setRecords(folderId, type, newRecords);
|
|
121
101
|
if (!result) {
|
|
122
102
|
return;
|
|
123
103
|
}
|
|
124
|
-
|
|
104
|
+
setRecords(result);
|
|
125
105
|
},
|
|
126
|
-
error
|
|
127
|
-
records
|
|
128
|
-
loading
|
|
106
|
+
error,
|
|
107
|
+
records,
|
|
108
|
+
loading
|
|
129
109
|
};
|
|
130
|
-
return /*#__PURE__*/
|
|
110
|
+
return /*#__PURE__*/React.createElement(RecordLockingContext.Provider, Object.assign({}, props, {
|
|
131
111
|
value: value
|
|
132
112
|
}));
|
|
133
113
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["React","useCallback","useMemo","useState","useApolloClient","createRecordLocking","useStateIfMounted","RecordLockingContext","createContext","isSameArray","existingRecords","newRecords","length","every","record","some","newRecord","id","savedOn","RecordLockingProvider","props","client","loading","setLoading","recordLocking","error","setError","records","setRecords","setRecordsIfNeeded","sameArray","value","updateEntryLock","params","result","target","data","message","code","prev","map","item","entryId","$locked","unlockEntry","unlockEntryForce","isLockExpired","input","isRecordLocked","getLockRecordEntry","removeEntryLock","fetchLockRecord","ex","fetchLockedEntryLockRecord","folderId","type","createElement","Provider","Object","assign"],"sources":["RecordLockingProvider.tsx"],"sourcesContent":["import React, { useCallback, useMemo, useState } from \"react\";\nimport { useApolloClient } from \"@apollo/react-hooks\";\nimport { createRecordLocking } from \"~/domain/RecordLocking\";\nimport {\n IFetchLockedEntryLockRecordParams,\n IFetchLockRecordParams,\n IPossiblyRecordLockingRecord,\n IRecordLockingContext,\n IRecordLockingError,\n IUnlockEntryParams,\n IUpdateEntryLockParams\n} from \"~/types\";\nimport { useStateIfMounted } from \"@webiny/app-admin\";\n\nexport interface IRecordLockingProviderProps {\n children: React.ReactNode;\n}\n\nexport const RecordLockingContext = React.createContext({} as unknown as IRecordLockingContext);\n\nconst isSameArray = (\n existingRecords: Pick<IPossiblyRecordLockingRecord, \"id\" | \"savedOn\">[],\n newRecords: Pick<IPossiblyRecordLockingRecord, \"id\" | \"savedOn\">[]\n): boolean => {\n if (existingRecords.length !== newRecords.length) {\n return false;\n }\n return existingRecords.every(record => {\n return newRecords.some(\n newRecord => newRecord.id === record.id && newRecord.savedOn === record.savedOn\n );\n });\n};\n\nexport const RecordLockingProvider = (props: IRecordLockingProviderProps) => {\n const client = useApolloClient();\n\n const [loading, setLoading] = useState(false);\n\n const recordLocking = useMemo(() => {\n return createRecordLocking({\n client,\n setLoading\n });\n }, []);\n\n const [error, setError] = useStateIfMounted<IRecordLockingError | null>(null);\n\n const [records, setRecords] = useStateIfMounted<IPossiblyRecordLockingRecord[]>([]);\n\n const setRecordsIfNeeded = useCallback(\n (newRecords: IPossiblyRecordLockingRecord[]) => {\n const sameArray = isSameArray(records, newRecords);\n if (sameArray) {\n return;\n }\n setRecords(newRecords);\n },\n [records]\n );\n\n const value: IRecordLockingContext = {\n async updateEntryLock(params: IUpdateEntryLockParams) {\n const result = await recordLocking.updateEntryLock(params);\n if (result.error) {\n setError(result.error);\n return result;\n }\n const target = result.data;\n if (!target?.id) {\n const error = {\n message: \"No data returned from server.\",\n code: \"NO_DATA\"\n };\n setError(error);\n return {\n error,\n data: null\n };\n }\n\n setRecords(prev => {\n return prev.map(item => {\n if (item.entryId === target.id) {\n return {\n ...item,\n $locked: result.data\n };\n }\n return item;\n });\n });\n return result;\n },\n async unlockEntry(params: IUnlockEntryParams) {\n return await recordLocking.unlockEntry(params);\n },\n async unlockEntryForce(params: IUnlockEntryParams) {\n return await recordLocking.unlockEntry(params, true);\n },\n isLockExpired(input: Date | string): boolean {\n return recordLocking.isLockExpired(input);\n },\n isRecordLocked(record) {\n if (!record) {\n return false;\n }\n return recordLocking.isRecordLocked(record);\n },\n getLockRecordEntry(id: string) {\n return recordLocking.getLockRecordEntry(id);\n },\n removeEntryLock(params: IUnlockEntryParams) {\n return recordLocking.removeEntryLock(params);\n },\n async fetchLockRecord(params: IFetchLockRecordParams) {\n try {\n return await recordLocking.fetchLockRecord(params);\n } catch (ex) {\n return {\n data: null,\n error: ex\n };\n }\n },\n async fetchLockedEntryLockRecord(params: IFetchLockedEntryLockRecordParams) {\n return recordLocking.fetchLockedEntryLockRecord(params);\n },\n async setRecords(folderId, type, newRecords) {\n setRecordsIfNeeded(newRecords);\n\n const result = await recordLocking.setRecords(folderId, type, newRecords);\n if (!result) {\n return;\n }\n setRecords(result);\n },\n error,\n records,\n loading\n };\n\n return <RecordLockingContext.Provider {...props} value={value} />;\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,27 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
value: true
|
|
6
|
-
});
|
|
7
|
-
exports.UseContentEntriesListHookDecorator = void 0;
|
|
8
|
-
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
9
|
-
var _react = require("react");
|
|
10
|
-
var _appHeadlessCms = require("@webiny/app-headless-cms");
|
|
11
|
-
var _hooks = require("../../hooks");
|
|
12
|
-
var UseContentEntriesListHookDecorator = exports.UseContentEntriesListHookDecorator = _appHeadlessCms.ContentEntryListConfig.ContentEntries.useContentEntriesList.createDecorator(function (originalHook) {
|
|
1
|
+
import { useEffect } from "react";
|
|
2
|
+
import { ContentEntryListConfig } from "@webiny/app-headless-cms";
|
|
3
|
+
import { useRecordLocking } from "../../hooks";
|
|
4
|
+
export const UseContentEntriesListHookDecorator = ContentEntryListConfig.ContentEntries.useContentEntriesList.createDecorator(originalHook => {
|
|
13
5
|
return function RecordLockingUseContentEntriesList() {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
6
|
+
const value = originalHook();
|
|
7
|
+
const recordLocking = useRecordLocking();
|
|
8
|
+
useEffect(() => {
|
|
17
9
|
if (!value.records) {
|
|
18
10
|
return;
|
|
19
11
|
}
|
|
20
12
|
recordLocking.setRecords(value.folderId, value.modelId, value.records);
|
|
21
13
|
}, [value.folderId, value.modelId, value.records, recordLocking]);
|
|
22
|
-
return
|
|
14
|
+
return {
|
|
15
|
+
...value,
|
|
23
16
|
records: recordLocking.records
|
|
24
|
-
}
|
|
17
|
+
};
|
|
25
18
|
};
|
|
26
19
|
});
|
|
27
20
|
|