@webiny/app-record-locking 5.40.6-beta.3 → 5.41.0-beta.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/HeadlessCmsContentEntry/ContentEntryGuard.d.ts +4 -0
- package/components/HeadlessCmsContentEntry/ContentEntryGuard.js +6 -8
- package/components/HeadlessCmsContentEntry/ContentEntryGuard.js.map +1 -1
- package/components/HeadlessCmsContentEntry/ContentEntryLocker.d.ts +5 -1
- package/components/HeadlessCmsContentEntry/ContentEntryLocker.js +7 -10
- package/components/HeadlessCmsContentEntry/ContentEntryLocker.js.map +1 -1
- package/components/HeadlessCmsContentEntry/HeadlessCmsContentEntry.js +48 -8
- package/components/HeadlessCmsContentEntry/HeadlessCmsContentEntry.js.map +1 -1
- package/components/decorators/UseSaveEntryDecorator.js +4 -6
- package/components/decorators/UseSaveEntryDecorator.js.map +1 -1
- package/domain/abstractions/IRecordLockingIsEntryLocked.d.ts +1 -1
- package/domain/graphql/getLockRecord.d.ts +1 -1
- package/domain/graphql/getLockedEntryLockRecord.d.ts +1 -1
- package/domain/graphql/isEntryLocked.d.ts +1 -1
- package/domain/graphql/listLockRecords.d.ts +1 -1
- package/domain/graphql/lockEntry.d.ts +1 -1
- package/domain/graphql/unlockEntry.d.ts +1 -1
- package/domain/graphql/unlockEntryRequest.d.ts +1 -1
- package/domain/graphql/updateEntryLock.d.ts +1 -1
- package/package.json +16 -16
- package/types.d.ts +5 -5
- package/utils/createCacheKey.d.ts +1 -1
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
+
import { CmsContentEntry, CmsModel } from "@webiny/app-headless-cms/types";
|
|
2
3
|
export interface IContentEntryGuardProps {
|
|
4
|
+
loading: boolean;
|
|
5
|
+
entry: CmsContentEntry;
|
|
6
|
+
model: CmsModel;
|
|
3
7
|
children: React.ReactElement;
|
|
4
8
|
}
|
|
5
9
|
export declare const ContentEntryGuard: (props: IContentEntryGuardProps) => React.JSX.Element;
|
|
@@ -8,7 +8,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
8
8
|
exports.ContentEntryGuard = void 0;
|
|
9
9
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
10
10
|
var _base = _interopRequireDefault(require("@emotion/styled/base"));
|
|
11
|
-
var _appHeadlessCms = require("@webiny/app-headless-cms");
|
|
12
11
|
var _hooks = require("../../hooks");
|
|
13
12
|
var _Elevation = require("@webiny/ui/Elevation");
|
|
14
13
|
var _Progress = require("@webiny/ui/Progress");
|
|
@@ -27,7 +26,7 @@ var DetailsContainer = /*#__PURE__*/(0, _base.default)("div", process.env.NODE_E
|
|
|
27
26
|
} : {
|
|
28
27
|
name: "1ypyu3l",
|
|
29
28
|
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,
|
|
29
|
+
map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNvbnRlbnRFbnRyeUd1YXJkLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFVeUIiLCJmaWxlIjoiQ29udGVudEVudHJ5R3VhcmQudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlUmVjb3JkTG9ja2luZyB9IGZyb20gXCJ+L2hvb2tzXCI7XG5pbXBvcnQgeyBFbGV2YXRpb24gfSBmcm9tIFwiQHdlYmlueS91aS9FbGV2YXRpb25cIjtcbmltcG9ydCB7IENpcmN1bGFyUHJvZ3Jlc3MgfSBmcm9tIFwiQHdlYmlueS91aS9Qcm9ncmVzc1wiO1xuaW1wb3J0IHsgY3NzIH0gZnJvbSBcImVtb3Rpb25cIjtcbmltcG9ydCBzdHlsZWQgZnJvbSBcIkBlbW90aW9uL3N0eWxlZFwiO1xuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IExvY2tlZFJlY29yZCB9IGZyb20gXCIuLi9Mb2NrZWRSZWNvcmRcIjtcbmltcG9ydCB7IElSZWNvcmRMb2NraW5nTG9ja1JlY29yZCB9IGZyb20gXCJ+L3R5cGVzXCI7XG5pbXBvcnQgeyBDbXNDb250ZW50RW50cnksIENtc01vZGVsIH0gZnJvbSBcIkB3ZWJpbnkvYXBwLWhlYWRsZXNzLWNtcy90eXBlc1wiO1xuXG5jb25zdCBEZXRhaWxzQ29udGFpbmVyID0gc3R5bGVkKFwiZGl2XCIpKHtcbiAgICBoZWlnaHQ6IFwiY2FsYygxMDAlIC0gMTBweClcIixcbiAgICBvdmVyZmxvdzogXCJoaWRkZW5cIixcbiAgICBwb3NpdGlvbjogXCJyZWxhdGl2ZVwiLFxuICAgIG5hdjoge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwidmFyKC0tbWRjLXRoZW1lLXN1cmZhY2UpXCJcbiAgICB9XG59KTtcblxuY29uc3QgUmVuZGVyQmxvY2sgPSBzdHlsZWQoXCJkaXZcIikoe1xuICAgIHBvc2l0aW9uOiBcInJlbGF0aXZlXCIsXG4gICAgekluZGV4OiAwLFxuICAgIGJhY2tncm91bmRDb2xvcjogXCJ2YXIoLS1tZGMtdGhlbWUtYmFja2dyb3VuZClcIixcbiAgICBoZWlnaHQ6IFwiMTAwJVwiLFxuICAgIHBhZGRpbmc6IDI1XG59KTtcblxuY29uc3QgZWxldmF0aW9uU3R5bGVzID0gY3NzKHtcbiAgICBwb3NpdGlvbjogXCJyZWxhdGl2ZVwiLFxuICAgIGhlaWdodDogXCIxMDAlXCJcbn0pO1xuXG5leHBvcnQgaW50ZXJmYWNlIElDb250ZW50RW50cnlHdWFyZFByb3BzIHtcbiAgICBsb2FkaW5nOiBib29sZWFuO1xuICAgIGVudHJ5OiBDbXNDb250ZW50RW50cnk7XG4gICAgbW9kZWw6IENtc01vZGVsO1xuICAgIGNoaWxkcmVuOiBSZWFjdC5SZWFjdEVsZW1lbnQ7XG59XG5cbmV4cG9ydCBjb25zdCBDb250ZW50RW50cnlHdWFyZCA9IChwcm9wczogSUNvbnRlbnRFbnRyeUd1YXJkUHJvcHMpID0+IHtcbiAgICBjb25zdCB7IGxvYWRpbmcsIGVudHJ5LCBtb2RlbCwgY2hpbGRyZW4gfSA9IHByb3BzO1xuICAgIGNvbnN0IHsgZmV0Y2hMb2NrZWRFbnRyeUxvY2tSZWNvcmQgfSA9IHVzZVJlY29yZExvY2tpbmcoKTtcblxuICAgIGNvbnN0IFtsb2NrZWQsIHNldExvY2tlZF0gPSB1c2VTdGF0ZTxJUmVjb3JkTG9ja2luZ0xvY2tSZWNvcmQgfCBudWxsIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKCFlbnRyeS5pZCB8fCBsb2FkaW5nIHx8IGxvY2tlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZldGNoTG9ja2VkRW50cnlMb2NrUmVjb3JkKHtcbiAgICAgICAgICAgICAgICBpZDogZW50cnkuaWQsXG4gICAgICAgICAgICAgICAgJGxvY2tpbmdUeXBlOiBtb2RlbC5tb2RlbElkXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHNldExvY2tlZChyZXN1bHQpO1xuICAgICAgICB9KSgpO1xuICAgIH0sIFtlbnRyeS5pZCwgbG9hZGluZ10pO1xuXG4gICAgaWYgKGxvY2tlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8RGV0YWlsc0NvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8UmVuZGVyQmxvY2s+XG4gICAgICAgICAgICAgICAgICAgIDxFbGV2YXRpb24gej17Mn0gY2xhc3NOYW1lPXtlbGV2YXRpb25TdHlsZXN9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPENpcmN1bGFyUHJvZ3Jlc3MgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9FbGV2YXRpb24+XG4gICAgICAgICAgICAgICAgPC9SZW5kZXJCbG9jaz5cbiAgICAgICAgICAgIDwvRGV0YWlsc0NvbnRhaW5lcj5cbiAgICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGxvY2tlZCkge1xuICAgICAgICByZXR1cm4gPExvY2tlZFJlY29yZCByZWNvcmQ9e2xvY2tlZH0gLz47XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoaWxkcmVuO1xufTtcbiJdfQ== */",
|
|
31
30
|
toString: _EMOTION_STRINGIFIED_CSS_ERROR__
|
|
32
31
|
});
|
|
33
32
|
var RenderBlock = /*#__PURE__*/(0, _base.default)("div", process.env.NODE_ENV === "production" ? {
|
|
@@ -41,7 +40,7 @@ var RenderBlock = /*#__PURE__*/(0, _base.default)("div", process.env.NODE_ENV ==
|
|
|
41
40
|
} : {
|
|
42
41
|
name: "8nvd3k",
|
|
43
42
|
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,
|
|
43
|
+
map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNvbnRlbnRFbnRyeUd1YXJkLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFtQm9CIiwiZmlsZSI6IkNvbnRlbnRFbnRyeUd1YXJkLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZVJlY29yZExvY2tpbmcgfSBmcm9tIFwifi9ob29rc1wiO1xuaW1wb3J0IHsgRWxldmF0aW9uIH0gZnJvbSBcIkB3ZWJpbnkvdWkvRWxldmF0aW9uXCI7XG5pbXBvcnQgeyBDaXJjdWxhclByb2dyZXNzIH0gZnJvbSBcIkB3ZWJpbnkvdWkvUHJvZ3Jlc3NcIjtcbmltcG9ydCB7IGNzcyB9IGZyb20gXCJlbW90aW9uXCI7XG5pbXBvcnQgc3R5bGVkIGZyb20gXCJAZW1vdGlvbi9zdHlsZWRcIjtcbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBMb2NrZWRSZWNvcmQgfSBmcm9tIFwiLi4vTG9ja2VkUmVjb3JkXCI7XG5pbXBvcnQgeyBJUmVjb3JkTG9ja2luZ0xvY2tSZWNvcmQgfSBmcm9tIFwifi90eXBlc1wiO1xuaW1wb3J0IHsgQ21zQ29udGVudEVudHJ5LCBDbXNNb2RlbCB9IGZyb20gXCJAd2ViaW55L2FwcC1oZWFkbGVzcy1jbXMvdHlwZXNcIjtcblxuY29uc3QgRGV0YWlsc0NvbnRhaW5lciA9IHN0eWxlZChcImRpdlwiKSh7XG4gICAgaGVpZ2h0OiBcImNhbGMoMTAwJSAtIDEwcHgpXCIsXG4gICAgb3ZlcmZsb3c6IFwiaGlkZGVuXCIsXG4gICAgcG9zaXRpb246IFwicmVsYXRpdmVcIixcbiAgICBuYXY6IHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiBcInZhcigtLW1kYy10aGVtZS1zdXJmYWNlKVwiXG4gICAgfVxufSk7XG5cbmNvbnN0IFJlbmRlckJsb2NrID0gc3R5bGVkKFwiZGl2XCIpKHtcbiAgICBwb3NpdGlvbjogXCJyZWxhdGl2ZVwiLFxuICAgIHpJbmRleDogMCxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IFwidmFyKC0tbWRjLXRoZW1lLWJhY2tncm91bmQpXCIsXG4gICAgaGVpZ2h0OiBcIjEwMCVcIixcbiAgICBwYWRkaW5nOiAyNVxufSk7XG5cbmNvbnN0IGVsZXZhdGlvblN0eWxlcyA9IGNzcyh7XG4gICAgcG9zaXRpb246IFwicmVsYXRpdmVcIixcbiAgICBoZWlnaHQ6IFwiMTAwJVwiXG59KTtcblxuZXhwb3J0IGludGVyZmFjZSBJQ29udGVudEVudHJ5R3VhcmRQcm9wcyB7XG4gICAgbG9hZGluZzogYm9vbGVhbjtcbiAgICBlbnRyeTogQ21zQ29udGVudEVudHJ5O1xuICAgIG1vZGVsOiBDbXNNb2RlbDtcbiAgICBjaGlsZHJlbjogUmVhY3QuUmVhY3RFbGVtZW50O1xufVxuXG5leHBvcnQgY29uc3QgQ29udGVudEVudHJ5R3VhcmQgPSAocHJvcHM6IElDb250ZW50RW50cnlHdWFyZFByb3BzKSA9PiB7XG4gICAgY29uc3QgeyBsb2FkaW5nLCBlbnRyeSwgbW9kZWwsIGNoaWxkcmVuIH0gPSBwcm9wcztcbiAgICBjb25zdCB7IGZldGNoTG9ja2VkRW50cnlMb2NrUmVjb3JkIH0gPSB1c2VSZWNvcmRMb2NraW5nKCk7XG5cbiAgICBjb25zdCBbbG9ja2VkLCBzZXRMb2NrZWRdID0gdXNlU3RhdGU8SVJlY29yZExvY2tpbmdMb2NrUmVjb3JkIHwgbnVsbCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmICghZW50cnkuaWQgfHwgbG9hZGluZyB8fCBsb2NrZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBmZXRjaExvY2tlZEVudHJ5TG9ja1JlY29yZCh7XG4gICAgICAgICAgICAgICAgaWQ6IGVudHJ5LmlkLFxuICAgICAgICAgICAgICAgICRsb2NraW5nVHlwZTogbW9kZWwubW9kZWxJZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzZXRMb2NrZWQocmVzdWx0KTtcbiAgICAgICAgfSkoKTtcbiAgICB9LCBbZW50cnkuaWQsIGxvYWRpbmddKTtcblxuICAgIGlmIChsb2NrZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPERldGFpbHNDb250YWluZXI+XG4gICAgICAgICAgICAgICAgPFJlbmRlckJsb2NrPlxuICAgICAgICAgICAgICAgICAgICA8RWxldmF0aW9uIHo9ezJ9IGNsYXNzTmFtZT17ZWxldmF0aW9uU3R5bGVzfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxDaXJjdWxhclByb2dyZXNzIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvRWxldmF0aW9uPlxuICAgICAgICAgICAgICAgIDwvUmVuZGVyQmxvY2s+XG4gICAgICAgICAgICA8L0RldGFpbHNDb250YWluZXI+XG4gICAgICAgICk7XG4gICAgfSBlbHNlIGlmIChsb2NrZWQpIHtcbiAgICAgICAgcmV0dXJuIDxMb2NrZWRSZWNvcmQgcmVjb3JkPXtsb2NrZWR9IC8+O1xuICAgIH1cblxuICAgIHJldHVybiBjaGlsZHJlbjtcbn07XG4iXX0= */",
|
|
45
44
|
toString: _EMOTION_STRINGIFIED_CSS_ERROR__
|
|
46
45
|
});
|
|
47
46
|
var elevationStyles = (0, _emotion.css)({
|
|
@@ -49,11 +48,10 @@ var elevationStyles = (0, _emotion.css)({
|
|
|
49
48
|
height: "100%"
|
|
50
49
|
});
|
|
51
50
|
var ContentEntryGuard = exports.ContentEntryGuard = function ContentEntryGuard(props) {
|
|
52
|
-
var
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
var children = props.children;
|
|
51
|
+
var loading = props.loading,
|
|
52
|
+
entry = props.entry,
|
|
53
|
+
model = props.model,
|
|
54
|
+
children = props.children;
|
|
57
55
|
var _useRecordLocking = (0, _hooks.useRecordLocking)(),
|
|
58
56
|
fetchLockedEntryLockRecord = _useRecordLocking.fetchLockedEntryLockRecord;
|
|
59
57
|
var _useState = (0, _react.useState)(undefined),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["_hooks","require","_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","loading","entry","model","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 { 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\";\nimport { CmsContentEntry, CmsModel } from \"@webiny/app-headless-cms/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 loading: boolean;\n entry: CmsContentEntry;\n model: CmsModel;\n children: React.ReactElement;\n}\n\nexport const ContentEntryGuard = (props: IContentEntryGuardProps) => {\n const { loading, entry, model, children } = props;\n const { fetchLockedEntryLockRecord } = useRecordLocking();\n\n const [locked, setLocked] = useState<IRecordLockingLockRecord | null | undefined>(undefined);\n\n useEffect(() => {\n if (!entry.id || loading || locked !== undefined) {\n return;\n }\n (async () => {\n const result = await fetchLockedEntryLockRecord({\n id: entry.id,\n $lockingType: model.modelId\n });\n setLocked(result);\n })();\n }, [entry.id, loading]);\n\n if (locked === undefined) {\n return (\n <DetailsContainer>\n <RenderBlock>\n <Elevation z={2} className={elevationStyles}>\n <CircularProgress />\n </Elevation>\n </RenderBlock>\n </DetailsContainer>\n );\n } else if (locked) {\n return <LockedRecord record={locked} />;\n }\n\n return children;\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { IRecordLockingIdentity, IRecordLockingLockRecord } from "../../types";
|
|
3
3
|
import { IncomingGenericData } from "@webiny/app-websockets";
|
|
4
|
+
import { CmsContentEntry, CmsModel } from "@webiny/app-headless-cms/types";
|
|
4
5
|
export interface IContentEntryLockerProps {
|
|
6
|
+
entry: CmsContentEntry;
|
|
7
|
+
model: CmsModel;
|
|
8
|
+
onEntryUnlocked: () => void;
|
|
5
9
|
onDisablePrompt: (flag: boolean) => void;
|
|
6
10
|
children: React.ReactElement;
|
|
7
11
|
}
|
|
@@ -11,4 +15,4 @@ export interface IKickOutWebsocketsMessage extends IncomingGenericData {
|
|
|
11
15
|
user: IRecordLockingIdentity;
|
|
12
16
|
};
|
|
13
17
|
}
|
|
14
|
-
export declare const ContentEntryLocker: ({ onDisablePrompt, children }: IContentEntryLockerProps) => React.JSX.Element;
|
|
18
|
+
export declare const ContentEntryLocker: ({ onEntryUnlocked, onDisablePrompt, entry, model, children }: IContentEntryLockerProps) => React.JSX.Element;
|
|
@@ -7,7 +7,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
});
|
|
8
8
|
exports.ContentEntryLocker = void 0;
|
|
9
9
|
var _base = _interopRequireDefault(require("@emotion/styled/base"));
|
|
10
|
-
var _appHeadlessCms = require("@webiny/app-headless-cms");
|
|
11
10
|
var _react = _interopRequireWildcard(require("react"));
|
|
12
11
|
var _hooks = require("../../hooks");
|
|
13
12
|
var _appWebsockets = require("@webiny/app-websockets");
|
|
@@ -25,7 +24,7 @@ var Bold = /*#__PURE__*/(0, _base.default)("span", process.env.NODE_ENV === "pro
|
|
|
25
24
|
} : {
|
|
26
25
|
name: "16ceglb",
|
|
27
26
|
styles: "font-weight:600",
|
|
28
|
-
map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
27
|
+
map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNvbnRlbnRFbnRyeUxvY2tlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBYXdCIiwiZmlsZSI6IkNvbnRlbnRFbnRyeUxvY2tlci50c3giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZVJlY29yZExvY2tpbmcgfSBmcm9tIFwifi9ob29rc1wiO1xuaW1wb3J0IHsgSUlzUmVjb3JkTG9ja2VkUGFyYW1zLCBJUmVjb3JkTG9ja2luZ0lkZW50aXR5LCBJUmVjb3JkTG9ja2luZ0xvY2tSZWNvcmQgfSBmcm9tIFwifi90eXBlc1wiO1xuaW1wb3J0IHtcbiAgICBJbmNvbWluZ0dlbmVyaWNEYXRhLFxuICAgIElXZWJzb2NrZXRzU3Vic2NyaXB0aW9uLFxuICAgIHVzZVdlYnNvY2tldHNcbn0gZnJvbSBcIkB3ZWJpbnkvYXBwLXdlYnNvY2tldHNcIjtcbmltcG9ydCB7IHBhcnNlSWRlbnRpZmllciB9IGZyb20gXCJAd2ViaW55L3V0aWxzXCI7XG5pbXBvcnQgeyB1c2VEaWFsb2dzIH0gZnJvbSBcIkB3ZWJpbnkvYXBwLWFkbWluXCI7XG5pbXBvcnQgc3R5bGVkIGZyb20gXCJAZW1vdGlvbi9zdHlsZWRcIjtcbmltcG9ydCB7IENtc0NvbnRlbnRFbnRyeSwgQ21zTW9kZWwgfSBmcm9tIFwiQHdlYmlueS9hcHAtaGVhZGxlc3MtY21zL3R5cGVzXCI7XG5cbmNvbnN0IEJvbGQgPSBzdHlsZWQuc3BhbmBcbiAgICBmb250LXdlaWdodDogNjAwO1xuYDtcblxuZXhwb3J0IGludGVyZmFjZSBJQ29udGVudEVudHJ5TG9ja2VyUHJvcHMge1xuICAgIGVudHJ5OiBDbXNDb250ZW50RW50cnk7XG4gICAgbW9kZWw6IENtc01vZGVsO1xuICAgIG9uRW50cnlVbmxvY2tlZDogKCkgPT4gdm9pZDtcbiAgICBvbkRpc2FibGVQcm9tcHQ6IChmbGFnOiBib29sZWFuKSA9PiB2b2lkO1xuICAgIGNoaWxkcmVuOiBSZWFjdC5SZWFjdEVsZW1lbnQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUtpY2tPdXRXZWJzb2NrZXRzTWVzc2FnZSBleHRlbmRzIEluY29taW5nR2VuZXJpY0RhdGEge1xuICAgIGRhdGE6IHtcbiAgICAgICAgcmVjb3JkOiBJUmVjb3JkTG9ja2luZ0xvY2tSZWNvcmQ7XG4gICAgICAgIHVzZXI6IElSZWNvcmRMb2NraW5nSWRlbnRpdHk7XG4gICAgfTtcbn1cbmludGVyZmFjZSBJRm9yY2VVbmxvY2tlZFByb3BzIHtcbiAgICB1c2VyOiBJUmVjb3JkTG9ja2luZ0lkZW50aXR5O1xufVxuY29uc3QgRm9yY2VVbmxvY2tlZCA9ICh7IHVzZXIgfTogSUZvcmNlVW5sb2NrZWRQcm9wcykgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAgICBUaGUgZW50cnkgeW91IHdlcmUgZWRpdGluZyB3YXMgZm9yY2VmdWxseSB1bmxvY2tlZCBieXtcIiBcIn1cbiAgICAgICAgICAgIDxCb2xkPnt1c2VyLmRpc3BsYXlOYW1lIHx8IFwiVW5rbm93biB1c2VyXCJ9PC9Cb2xkPi4gVW5mb3J0dW5hdGVseSwgdGhpcyBtZWFucyB5b3UgbG9zdFxuICAgICAgICAgICAgdGhlIHVuc2F2ZWQgY2hhbmdlcy5cbiAgICAgICAgPC8+XG4gICAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBDb250ZW50RW50cnlMb2NrZXIgPSAoe1xuICAgIG9uRW50cnlVbmxvY2tlZCxcbiAgICBvbkRpc2FibGVQcm9tcHQsXG4gICAgZW50cnksXG4gICAgbW9kZWwsXG4gICAgY2hpbGRyZW5cbn06IElDb250ZW50RW50cnlMb2NrZXJQcm9wcykgPT4ge1xuICAgIGNvbnN0IHsgdXBkYXRlRW50cnlMb2NrLCB1bmxvY2tFbnRyeSwgZmV0Y2hMb2NrZWRFbnRyeUxvY2tSZWNvcmQsIHJlbW92ZUVudHJ5TG9jayB9ID1cbiAgICAgICAgdXNlUmVjb3JkTG9ja2luZygpO1xuXG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gdXNlUmVmPElXZWJzb2NrZXRzU3Vic2NyaXB0aW9uPGFueT4+KCk7XG5cbiAgICBjb25zdCB3ZWJzb2NrZXRzID0gdXNlV2Vic29ja2V0cygpO1xuXG4gICAgY29uc3QgeyBzaG93RGlhbG9nIH0gPSB1c2VEaWFsb2dzKCk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoIWVudHJ5LmlkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSBpZiAoc3Vic2NyaXB0aW9uLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbi5jdXJyZW50Lm9mZigpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgaWQ6IGVudHJ5SWQgfSA9IHBhcnNlSWRlbnRpZmllcihlbnRyeS5pZCk7XG5cbiAgICAgICAgc3Vic2NyaXB0aW9uLmN1cnJlbnQgPSB3ZWJzb2NrZXRzLm9uTWVzc2FnZTxJS2lja091dFdlYnNvY2tldHNNZXNzYWdlPihcbiAgICAgICAgICAgIGByZWNvcmRMb2NraW5nLmVudHJ5LmtpY2tPdXQuJHtlbnRyeUlkfWAsXG4gICAgICAgICAgICBhc3luYyBpbmNvbWluZyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyB1c2VyIH0gPSBpbmNvbWluZy5kYXRhO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlY29yZDogSUlzUmVjb3JkTG9ja2VkUGFyYW1zID0ge1xuICAgICAgICAgICAgICAgICAgICBpZDogZW50cnlJZCxcbiAgICAgICAgICAgICAgICAgICAgJGxvY2tpbmdUeXBlOiBtb2RlbC5tb2RlbElkXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZW1vdmVFbnRyeUxvY2socmVjb3JkKTtcbiAgICAgICAgICAgICAgICBvbkRpc2FibGVQcm9tcHQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgc2hvd0RpYWxvZyh7XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcIkVudHJ5IHdhcyBmb3JjZWZ1bGx5IHVubG9ja2VkIVwiLFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50OiA8Rm9yY2VVbmxvY2tlZCB1c2VyPXt1c2VyfSAvPixcbiAgICAgICAgICAgICAgICAgICAgYWNjZXB0TGFiZWw6IFwiT2tcIixcbiAgICAgICAgICAgICAgICAgICAgb25DbG9zZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICBjYW5jZWxMYWJlbDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgb25FbnRyeVVubG9ja2VkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGlmICghc3Vic2NyaXB0aW9uLmN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdWJzY3JpcHRpb24uY3VycmVudC5vZmYoKTtcbiAgICAgICAgfTtcbiAgICB9LCBbZW50cnkuaWQsIG9uRW50cnlVbmxvY2tlZCwgbW9kZWwubW9kZWxJZF0pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKCFlbnRyeS5pZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVjb3JkOiBJSXNSZWNvcmRMb2NrZWRQYXJhbXMgPSB7XG4gICAgICAgICAgICBpZDogZW50cnkuaWQsXG4gICAgICAgICAgICAkbG9ja2luZ1R5cGU6IG1vZGVsLm1vZGVsSWRcbiAgICAgICAgfTtcbiAgICAgICAgdXBkYXRlRW50cnlMb2NrKHJlY29yZCk7XG5cbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZmV0Y2hMb2NrZWRFbnRyeUxvY2tSZWNvcmQocmVjb3JkKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdW5sb2NrRW50cnkocmVjb3JkKTtcbiAgICAgICAgICAgIH0pKCk7XG4gICAgICAgIH07XG4gICAgfSwgW2VudHJ5LmlkXSk7XG5cbiAgICByZXR1cm4gPD57Y2hpbGRyZW59PC8+O1xufTtcbiJdfQ== */",
|
|
29
28
|
toString: _EMOTION_STRINGIFIED_CSS_ERROR__
|
|
30
29
|
});
|
|
31
30
|
var ForceUnlocked = function ForceUnlocked(_ref) {
|
|
@@ -33,18 +32,16 @@ var ForceUnlocked = function ForceUnlocked(_ref) {
|
|
|
33
32
|
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
33
|
};
|
|
35
34
|
var ContentEntryLocker = exports.ContentEntryLocker = function ContentEntryLocker(_ref2) {
|
|
36
|
-
var
|
|
35
|
+
var onEntryUnlocked = _ref2.onEntryUnlocked,
|
|
36
|
+
onDisablePrompt = _ref2.onDisablePrompt,
|
|
37
|
+
entry = _ref2.entry,
|
|
38
|
+
model = _ref2.model,
|
|
37
39
|
children = _ref2.children;
|
|
38
|
-
var _useContentEntry = (0, _appHeadlessCms.useContentEntry)(),
|
|
39
|
-
entry = _useContentEntry.entry,
|
|
40
|
-
model = _useContentEntry.contentModel;
|
|
41
40
|
var _useRecordLocking = (0, _hooks.useRecordLocking)(),
|
|
42
41
|
updateEntryLock = _useRecordLocking.updateEntryLock,
|
|
43
42
|
unlockEntry = _useRecordLocking.unlockEntry,
|
|
44
43
|
fetchLockedEntryLockRecord = _useRecordLocking.fetchLockedEntryLockRecord,
|
|
45
44
|
removeEntryLock = _useRecordLocking.removeEntryLock;
|
|
46
|
-
var _useContentEntriesLis = (0, _appHeadlessCms.useContentEntriesList)(),
|
|
47
|
-
navigateTo = _useContentEntriesLis.navigateTo;
|
|
48
45
|
var subscription = (0, _react.useRef)();
|
|
49
46
|
var websockets = (0, _appWebsockets.useWebsockets)();
|
|
50
47
|
var _useDialogs = (0, _appAdmin.useDialogs)(),
|
|
@@ -74,7 +71,7 @@ var ContentEntryLocker = exports.ContentEntryLocker = function ContentEntryLocke
|
|
|
74
71
|
onClose: undefined,
|
|
75
72
|
cancelLabel: undefined
|
|
76
73
|
});
|
|
77
|
-
|
|
74
|
+
onEntryUnlocked();
|
|
78
75
|
});
|
|
79
76
|
return function () {
|
|
80
77
|
if (!subscription.current) {
|
|
@@ -82,7 +79,7 @@ var ContentEntryLocker = exports.ContentEntryLocker = function ContentEntryLocke
|
|
|
82
79
|
}
|
|
83
80
|
subscription.current.off();
|
|
84
81
|
};
|
|
85
|
-
}, [entry.id,
|
|
82
|
+
}, [entry.id, onEntryUnlocked, model.modelId]);
|
|
86
83
|
(0, _react.useEffect)(function () {
|
|
87
84
|
if (!entry.id) {
|
|
88
85
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_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","onEntryUnlocked","onDisablePrompt","entry","model","children","_useRecordLocking","useRecordLocking","updateEntryLock","unlockEntry","fetchLockedEntryLockRecord","removeEntryLock","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 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\";\nimport { CmsContentEntry, CmsModel } from \"@webiny/app-headless-cms/types\";\n\nconst Bold = styled.span`\n font-weight: 600;\n`;\n\nexport interface IContentEntryLockerProps {\n entry: CmsContentEntry;\n model: CmsModel;\n onEntryUnlocked: () => void;\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 = ({\n onEntryUnlocked,\n onDisablePrompt,\n entry,\n model,\n children\n}: IContentEntryLockerProps) => {\n const { updateEntryLock, unlockEntry, fetchLockedEntryLockRecord, removeEntryLock } =\n useRecordLocking();\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 onEntryUnlocked();\n }\n );\n\n return () => {\n if (!subscription.current) {\n return;\n }\n subscription.current.off();\n };\n }, [entry.id, onEntryUnlocked, 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":[]}
|
|
@@ -13,7 +13,8 @@ var _appHeadlessCms = require("@webiny/app-headless-cms");
|
|
|
13
13
|
var _reactRouter = require("@webiny/react-router");
|
|
14
14
|
var _ContentEntryGuard = require("./ContentEntryGuard");
|
|
15
15
|
var _ContentEntryLocker = require("./ContentEntryLocker");
|
|
16
|
-
var ContentEntry = _appHeadlessCms.ContentEntryEditorConfig.ContentEntry
|
|
16
|
+
var ContentEntry = _appHeadlessCms.ContentEntryEditorConfig.ContentEntry,
|
|
17
|
+
SingletonContentEntry = _appHeadlessCms.ContentEntryEditorConfig.SingletonContentEntry;
|
|
17
18
|
var DisablePrompt = (0, _appAdmin.createGenericContext)("DisablePrompt");
|
|
18
19
|
var PromptDecorator = _reactRouter.Prompt.createDecorator(function (Original) {
|
|
19
20
|
return function Prompt(props) {
|
|
@@ -27,35 +28,74 @@ var PromptDecorator = _reactRouter.Prompt.createDecorator(function (Original) {
|
|
|
27
28
|
};
|
|
28
29
|
});
|
|
29
30
|
var ContentEntryDecorator = ContentEntry.createDecorator(function (Original) {
|
|
30
|
-
return function RecordLockingContentEntry(
|
|
31
|
+
return function RecordLockingContentEntry() {
|
|
31
32
|
var _useState = (0, _react.useState)(false),
|
|
32
33
|
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
33
34
|
disablePrompt = _useState2[0],
|
|
34
35
|
setDisablePrompt = _useState2[1];
|
|
35
36
|
var _ContentEntry$useCont = ContentEntry.useContentEntry(),
|
|
36
|
-
entry = _ContentEntry$useCont.entry
|
|
37
|
+
entry = _ContentEntry$useCont.entry,
|
|
38
|
+
contentModel = _ContentEntry$useCont.contentModel,
|
|
39
|
+
loading = _ContentEntry$useCont.loading;
|
|
40
|
+
var _ContentEntryListConf = _appHeadlessCms.ContentEntryListConfig.ContentEntries.useContentEntriesList(),
|
|
41
|
+
navigateTo = _ContentEntryListConf.navigateTo;
|
|
37
42
|
/**
|
|
38
43
|
* New entry does not have ID yet.
|
|
39
44
|
*/
|
|
40
45
|
if (!entry?.id) {
|
|
41
46
|
return /*#__PURE__*/_react.default.createElement(DisablePrompt.Provider, {
|
|
42
47
|
disablePrompt: disablePrompt
|
|
43
|
-
}, /*#__PURE__*/_react.default.createElement(Original,
|
|
48
|
+
}, /*#__PURE__*/_react.default.createElement(Original, null));
|
|
44
49
|
}
|
|
45
50
|
/**
|
|
46
51
|
* Continue with existing entry.
|
|
47
52
|
*/
|
|
48
|
-
|
|
53
|
+
var props = {
|
|
54
|
+
entry: entry,
|
|
55
|
+
model: contentModel
|
|
56
|
+
};
|
|
57
|
+
return /*#__PURE__*/_react.default.createElement(_ContentEntryGuard.ContentEntryGuard, Object.assign({}, props, {
|
|
58
|
+
loading: loading
|
|
59
|
+
}), /*#__PURE__*/_react.default.createElement(_ContentEntryLocker.ContentEntryLocker, Object.assign({}, props, {
|
|
49
60
|
onDisablePrompt: function onDisablePrompt(flag) {
|
|
50
61
|
return setDisablePrompt(flag);
|
|
62
|
+
},
|
|
63
|
+
onEntryUnlocked: navigateTo
|
|
64
|
+
}), /*#__PURE__*/_react.default.createElement(DisablePrompt.Provider, {
|
|
65
|
+
disablePrompt: disablePrompt
|
|
66
|
+
}, /*#__PURE__*/_react.default.createElement(Original, null))));
|
|
67
|
+
};
|
|
68
|
+
});
|
|
69
|
+
var SingletonContentEntryDecorator = SingletonContentEntry.createDecorator(function (Original) {
|
|
70
|
+
return function RecordLockingSingletonContentEntry() {
|
|
71
|
+
var _useState3 = (0, _react.useState)(false),
|
|
72
|
+
_useState4 = (0, _slicedToArray2.default)(_useState3, 2),
|
|
73
|
+
disablePrompt = _useState4[0],
|
|
74
|
+
setDisablePrompt = _useState4[1];
|
|
75
|
+
var _SingletonContentEntr = SingletonContentEntry.useSingletonContentEntry(),
|
|
76
|
+
entry = _SingletonContentEntr.entry,
|
|
77
|
+
contentModel = _SingletonContentEntr.contentModel,
|
|
78
|
+
loading = _SingletonContentEntr.loading;
|
|
79
|
+
var props = {
|
|
80
|
+
entry: entry,
|
|
81
|
+
model: contentModel
|
|
82
|
+
};
|
|
83
|
+
return /*#__PURE__*/_react.default.createElement(_ContentEntryGuard.ContentEntryGuard, Object.assign({}, props, {
|
|
84
|
+
loading: loading
|
|
85
|
+
}), /*#__PURE__*/_react.default.createElement(_ContentEntryLocker.ContentEntryLocker, Object.assign({}, props, {
|
|
86
|
+
onDisablePrompt: function onDisablePrompt(flag) {
|
|
87
|
+
return setDisablePrompt(flag);
|
|
88
|
+
},
|
|
89
|
+
onEntryUnlocked: function onEntryUnlocked() {
|
|
90
|
+
// There's nowhere to go, since singleton entry doesn't have a list view.
|
|
51
91
|
}
|
|
52
|
-
}, /*#__PURE__*/_react.default.createElement(DisablePrompt.Provider, {
|
|
92
|
+
}), /*#__PURE__*/_react.default.createElement(DisablePrompt.Provider, {
|
|
53
93
|
disablePrompt: disablePrompt
|
|
54
|
-
}, /*#__PURE__*/_react.default.createElement(Original,
|
|
94
|
+
}, /*#__PURE__*/_react.default.createElement(Original, null))));
|
|
55
95
|
};
|
|
56
96
|
});
|
|
57
97
|
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, {
|
|
98
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(ContentEntryDecorator, null), /*#__PURE__*/_react.default.createElement(SingletonContentEntryDecorator, null), /*#__PURE__*/_react.default.createElement(_appAdmin.CompositionScope, {
|
|
59
99
|
name: "cms.contentEntryForm"
|
|
60
100
|
}, /*#__PURE__*/_react.default.createElement(PromptDecorator, null)));
|
|
61
101
|
};
|
|
@@ -1 +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(
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_appAdmin","_appHeadlessCms","_reactRouter","_ContentEntryGuard","_ContentEntryLocker","ContentEntry","ContentEntryEditorConfig","SingletonContentEntry","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","contentModel","loading","_ContentEntryListConf","ContentEntryListConfig","ContentEntries","useContentEntriesList","navigateTo","id","Provider","model","ContentEntryGuard","Object","assign","ContentEntryLocker","onDisablePrompt","flag","onEntryUnlocked","SingletonContentEntryDecorator","RecordLockingSingletonContentEntry","_useState3","_useState4","_SingletonContentEntr","useSingletonContentEntry","HeadlessCmsContentEntry","exports","Fragment","CompositionScope","name"],"sources":["HeadlessCmsContentEntry.tsx"],"sourcesContent":["import React, { useState } from \"react\";\nimport { CompositionScope, createGenericContext } from \"@webiny/app-admin\";\nimport { ContentEntryEditorConfig, ContentEntryListConfig } from \"@webiny/app-headless-cms\";\nimport { Prompt } from \"@webiny/react-router\";\nimport { ContentEntryGuard } from \"./ContentEntryGuard\";\nimport { ContentEntryLocker } from \"./ContentEntryLocker\";\n\nconst { ContentEntry, SingletonContentEntry } = 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() {\n const [disablePrompt, setDisablePrompt] = useState(false);\n const { entry, contentModel, loading } = ContentEntry.useContentEntry();\n const { navigateTo } = ContentEntryListConfig.ContentEntries.useContentEntriesList();\n /**\n * New entry does not have ID yet.\n */\n if (!entry?.id) {\n return (\n <DisablePrompt.Provider disablePrompt={disablePrompt}>\n <Original />\n </DisablePrompt.Provider>\n );\n }\n /**\n * Continue with existing entry.\n */\n const props = { entry, model: contentModel };\n\n return (\n <ContentEntryGuard {...props} loading={loading}>\n <ContentEntryLocker\n {...props}\n onDisablePrompt={flag => setDisablePrompt(flag)}\n onEntryUnlocked={navigateTo}\n >\n <DisablePrompt.Provider disablePrompt={disablePrompt}>\n <Original />\n </DisablePrompt.Provider>\n </ContentEntryLocker>\n </ContentEntryGuard>\n );\n };\n});\n\nconst SingletonContentEntryDecorator = SingletonContentEntry.createDecorator(Original => {\n return function RecordLockingSingletonContentEntry() {\n const [disablePrompt, setDisablePrompt] = useState(false);\n const { entry, contentModel, loading } = SingletonContentEntry.useSingletonContentEntry();\n\n const props = { entry, model: contentModel };\n\n return (\n <ContentEntryGuard {...props} loading={loading}>\n <ContentEntryLocker\n {...props}\n onDisablePrompt={flag => setDisablePrompt(flag)}\n onEntryUnlocked={() => {\n // There's nowhere to go, since singleton entry doesn't have a list view.\n }}\n >\n <DisablePrompt.Provider disablePrompt={disablePrompt}>\n <Original />\n </DisablePrompt.Provider>\n </ContentEntryLocker>\n </ContentEntryGuard>\n );\n };\n});\n\nexport const HeadlessCmsContentEntry = () => {\n return (\n <>\n <ContentEntryDecorator />\n <SingletonContentEntryDecorator />\n <CompositionScope name={\"cms.contentEntryForm\"}>\n <PromptDecorator />\n </CompositionScope>\n </>\n );\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -10,20 +10,18 @@ var _react = require("react");
|
|
|
10
10
|
var _hooks = require("../../hooks");
|
|
11
11
|
var _appHeadlessCms = require("@webiny/app-headless-cms");
|
|
12
12
|
var _appAdmin = require("@webiny/app-admin");
|
|
13
|
-
var
|
|
14
|
-
ContentEntryForm = _ContentEntryEditorCo.ContentEntryForm,
|
|
15
|
-
useContentEntry = _ContentEntryEditorCo.useContentEntry;
|
|
13
|
+
var ContentEntryForm = _appHeadlessCms.ContentEntryEditorConfig.ContentEntry.ContentEntryForm;
|
|
16
14
|
var UseSaveEntryDecorator = exports.UseSaveEntryDecorator = ContentEntryForm.useContentEntryForm.createDecorator(function (originalHook) {
|
|
17
15
|
return function useRecordLockingUseSave() {
|
|
18
16
|
var hook = originalHook();
|
|
19
|
-
var _useContentEntry = useContentEntry(),
|
|
20
|
-
entry = _useContentEntry.entry,
|
|
21
|
-
model = _useContentEntry.contentModel;
|
|
22
17
|
var _useRecordLocking = (0, _hooks.useRecordLocking)(),
|
|
23
18
|
fetchLockedEntryLockRecord = _useRecordLocking.fetchLockedEntryLockRecord,
|
|
24
19
|
updateEntryLock = _useRecordLocking.updateEntryLock;
|
|
25
20
|
var _useSnackbar = (0, _appAdmin.useSnackbar)(),
|
|
26
21
|
showSnackbar = _useSnackbar.showSnackbar;
|
|
22
|
+
var _useModel = (0, _appHeadlessCms.useModel)(),
|
|
23
|
+
model = _useModel.model;
|
|
24
|
+
var entry = hook.entry;
|
|
27
25
|
var saveEntry = (0, _react.useCallback)(async function () {
|
|
28
26
|
if (!entry.id) {
|
|
29
27
|
return hook.saveEntry.apply(hook, arguments);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","require","_hooks","_appHeadlessCms","_appAdmin","
|
|
1
|
+
{"version":3,"names":["_react","require","_hooks","_appHeadlessCms","_appAdmin","ContentEntryForm","ContentEntryEditorConfig","ContentEntry","UseSaveEntryDecorator","exports","useContentEntryForm","createDecorator","originalHook","useRecordLockingUseSave","hook","_useRecordLocking","useRecordLocking","fetchLockedEntryLockRecord","updateEntryLock","_useSnackbar","useSnackbar","showSnackbar","_useModel","useModel","model","entry","saveEntry","useCallback","id","apply","arguments","result","$lockingType","modelId","lockedBy","concat","displayName","saveResult","_objectSpread2","default"],"sources":["UseSaveEntryDecorator.tsx"],"sourcesContent":["import { useCallback } from \"react\";\nimport { useRecordLocking } from \"~/hooks\";\nimport { ContentEntryEditorConfig, useModel } from \"@webiny/app-headless-cms\";\nimport { useSnackbar } from \"@webiny/app-admin\";\n\nconst {\n ContentEntry: { ContentEntryForm }\n} = ContentEntryEditorConfig;\n\ntype SaveEntry = ReturnType<typeof ContentEntryForm.useContentEntryForm>[\"saveEntry\"];\n\nexport const UseSaveEntryDecorator = ContentEntryForm.useContentEntryForm.createDecorator(\n originalHook => {\n return function useRecordLockingUseSave() {\n const hook = originalHook();\n const { fetchLockedEntryLockRecord, updateEntryLock } = useRecordLocking();\n const { showSnackbar } = useSnackbar();\n const { model } = useModel();\n\n const { entry } = hook;\n\n const saveEntry: SaveEntry = useCallback(\n async (...params) => {\n if (!entry.id) {\n return hook.saveEntry(...params);\n }\n\n const result = await fetchLockedEntryLockRecord({\n id: entry.id,\n $lockingType: model.modelId\n });\n\n if (result?.lockedBy) {\n const lockedBy = result.lockedBy;\n showSnackbar(\n `It seems that the entry is locked by ${\n lockedBy.displayName || lockedBy.id\n }. You can't save your changes.`\n );\n return null;\n }\n\n const saveResult = await hook.saveEntry(...params);\n if (saveResult) {\n await updateEntryLock({\n id: saveResult.id,\n $lockingType: model.modelId\n });\n }\n\n return saveResult;\n },\n [entry?.id, model.modelId, updateEntryLock]\n );\n\n return {\n ...hook,\n saveEntry\n };\n };\n }\n);\n"],"mappings":";;;;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,eAAA,GAAAF,OAAA;AACA,IAAAG,SAAA,GAAAH,OAAA;AAEA,IACoBI,gBAAgB,GAChCC,wCAAwB,CADxBC,YAAY,CAAIF,gBAAgB;AAK7B,IAAMG,qBAAqB,GAAAC,OAAA,CAAAD,qBAAA,GAAGH,gBAAgB,CAACK,mBAAmB,CAACC,eAAe,CACrF,UAAAC,YAAY,EAAI;EACZ,OAAO,SAASC,uBAAuBA,CAAA,EAAG;IACtC,IAAMC,IAAI,GAAGF,YAAY,CAAC,CAAC;IAC3B,IAAAG,iBAAA,GAAwD,IAAAC,uBAAgB,EAAC,CAAC;MAAlEC,0BAA0B,GAAAF,iBAAA,CAA1BE,0BAA0B;MAAEC,eAAe,GAAAH,iBAAA,CAAfG,eAAe;IACnD,IAAAC,YAAA,GAAyB,IAAAC,qBAAW,EAAC,CAAC;MAA9BC,YAAY,GAAAF,YAAA,CAAZE,YAAY;IACpB,IAAAC,SAAA,GAAkB,IAAAC,wBAAQ,EAAC,CAAC;MAApBC,KAAK,GAAAF,SAAA,CAALE,KAAK;IAEb,IAAQC,KAAK,GAAKX,IAAI,CAAdW,KAAK;IAEb,IAAMC,SAAoB,GAAG,IAAAC,kBAAW,EACpC,kBAAqB;MACjB,IAAI,CAACF,KAAK,CAACG,EAAE,EAAE;QACX,OAAOd,IAAI,CAACY,SAAS,CAAAG,KAAA,CAAdf,IAAI,EAAAgB,SAAoB,CAAC;MACpC;MAEA,IAAMC,MAAM,GAAG,MAAMd,0BAA0B,CAAC;QAC5CW,EAAE,EAAEH,KAAK,CAACG,EAAE;QACZI,YAAY,EAAER,KAAK,CAACS;MACxB,CAAC,CAAC;MAEF,IAAIF,MAAM,EAAEG,QAAQ,EAAE;QAClB,IAAMA,QAAQ,GAAGH,MAAM,CAACG,QAAQ;QAChCb,YAAY,yCAAAc,MAAA,CAEJD,QAAQ,CAACE,WAAW,IAAIF,QAAQ,CAACN,EAAE,mCAE3C,CAAC;QACD,OAAO,IAAI;MACf;MAEA,IAAMS,UAAU,GAAG,MAAMvB,IAAI,CAACY,SAAS,CAAAG,KAAA,CAAdf,IAAI,EAAAgB,SAAoB,CAAC;MAClD,IAAIO,UAAU,EAAE;QACZ,MAAMnB,eAAe,CAAC;UAClBU,EAAE,EAAES,UAAU,CAACT,EAAE;UACjBI,YAAY,EAAER,KAAK,CAACS;QACxB,CAAC,CAAC;MACN;MAEA,OAAOI,UAAU;IACrB,CAAC,EACD,CAACZ,KAAK,EAAEG,EAAE,EAAEJ,KAAK,CAACS,OAAO,EAAEf,eAAe,CAC9C,CAAC;IAED,WAAAoB,cAAA,CAAAC,OAAA,MAAAD,cAAA,CAAAC,OAAA,MACOzB,IAAI;MACPY,SAAS,EAATA;IAAS;EAEjB,CAAC;AACL,CACJ,CAAC","ignoreList":[]}
|
|
@@ -2,7 +2,7 @@ export interface IRecordLockingIsEntryLockedParams {
|
|
|
2
2
|
id: string;
|
|
3
3
|
type: string;
|
|
4
4
|
}
|
|
5
|
-
export
|
|
5
|
+
export type IRecordLockingIsEntryLockedResult = boolean;
|
|
6
6
|
export interface IRecordLockingIsEntryLocked {
|
|
7
7
|
execute(params: IRecordLockingIsEntryLockedParams): Promise<IRecordLockingIsEntryLockedResult>;
|
|
8
8
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { IRecordLockingError, IRecordLockingLockRecord } from "../../types";
|
|
2
2
|
import { IRecordLockingGetLockRecordExecuteParams } from "../abstractions/IRecordLockingGetLockRecord";
|
|
3
|
-
export
|
|
3
|
+
export type IRecordLockingGetLockRecordVariables = IRecordLockingGetLockRecordExecuteParams;
|
|
4
4
|
export interface IRecordLockingGetLockRecordResponse {
|
|
5
5
|
recordLocking: {
|
|
6
6
|
getLockRecord: {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { IRecordLockingError, IRecordLockingLockRecord } from "../../types";
|
|
2
2
|
import { IRecordLockingGetLockedEntryLockRecordExecuteParams } from "../abstractions/IRecordLockingGetLockedEntryLockRecord";
|
|
3
|
-
export
|
|
3
|
+
export type IRecordLockingGetLockedEntryLockRecordVariables = IRecordLockingGetLockedEntryLockRecordExecuteParams;
|
|
4
4
|
export interface IRecordLockingGetLockedEntryLockRecordResponse {
|
|
5
5
|
recordLocking: {
|
|
6
6
|
getLockedEntryLockRecord: {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { IRecordLockingError } from "../../types";
|
|
2
2
|
import { IRecordLockingIsEntryLockedParams } from "../abstractions/IRecordLockingIsEntryLocked";
|
|
3
|
-
export
|
|
3
|
+
export type IRecordLockingIsEntryLockedVariables = IRecordLockingIsEntryLockedParams;
|
|
4
4
|
export interface IRecordLockingIsEntryLockedResponse {
|
|
5
5
|
recordLocking: {
|
|
6
6
|
isEntryLocked: {
|
|
@@ -3,7 +3,7 @@ import { IRecordLockingListLockRecordsParams } from "../abstractions/IRecordLock
|
|
|
3
3
|
export interface IRecordLockingListLockedRecordsVariablesWhere {
|
|
4
4
|
id_in?: string[];
|
|
5
5
|
}
|
|
6
|
-
export
|
|
6
|
+
export type IRecordLockingListLockedRecordsVariables = IRecordLockingListLockRecordsParams;
|
|
7
7
|
export interface IRecordLockingListLockedRecordsResponse {
|
|
8
8
|
recordLocking: {
|
|
9
9
|
listLockRecords: {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { IRecordLockingError, IRecordLockingLockRecord } from "../../types";
|
|
2
2
|
import { IRecordLockingLockEntryParams } from "../abstractions/IRecordLockingLockEntry";
|
|
3
|
-
export
|
|
3
|
+
export type IRecordLockingLockEntryVariables = IRecordLockingLockEntryParams;
|
|
4
4
|
export interface IRecordLockingLockEntryResponse {
|
|
5
5
|
recordLocking: {
|
|
6
6
|
lockEntry: {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { IRecordLockingError, IRecordLockingLockRecord } from "../../types";
|
|
2
2
|
import { IRecordLockingUnlockEntryParams } from "../abstractions/IRecordLockingUnlockEntry";
|
|
3
|
-
export
|
|
3
|
+
export type IRecordLockingUnlockEntryVariables = IRecordLockingUnlockEntryParams;
|
|
4
4
|
export interface RecordLockingUnlockEntryResponse {
|
|
5
5
|
recordLocking: {
|
|
6
6
|
unlockEntry: {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { IRecordLockingError, IRecordLockingLockRecord } from "../../types";
|
|
2
2
|
import { IRecordLockingUnlockEntryRequestParams } from "../abstractions/IRecordLockingUnlockEntryRequest";
|
|
3
|
-
export
|
|
3
|
+
export type IRecordLockingUnlockEntryRequestVariables = IRecordLockingUnlockEntryRequestParams;
|
|
4
4
|
export interface IRecordLockingUnlockEntryRequestResponse {
|
|
5
5
|
recordLocking: {
|
|
6
6
|
unlockEntryRequest: {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { IRecordLockingError, IRecordLockingLockRecord } from "../../types";
|
|
2
2
|
import { IRecordLockingUpdateEntryLockExecuteParams } from "../abstractions/IRecordLockingUpdateEntryLock";
|
|
3
|
-
export
|
|
3
|
+
export type IRecordLockingUpdateEntryLockVariables = IRecordLockingUpdateEntryLockExecuteParams;
|
|
4
4
|
export interface IRecordLockingUpdateEntryLockResponse {
|
|
5
5
|
recordLocking: {
|
|
6
6
|
updateEntryLock: {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webiny/app-record-locking",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.41.0-beta.0",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -16,17 +16,17 @@
|
|
|
16
16
|
"@apollo/react-hooks": "3.1.5",
|
|
17
17
|
"@emotion/styled": "11.10.6",
|
|
18
18
|
"@material-design-icons/svg": "0.14.13",
|
|
19
|
-
"@webiny/app": "5.
|
|
20
|
-
"@webiny/app-aco": "5.
|
|
21
|
-
"@webiny/app-admin": "5.
|
|
22
|
-
"@webiny/app-headless-cms": "5.
|
|
23
|
-
"@webiny/app-security": "5.
|
|
24
|
-
"@webiny/app-wcp": "5.
|
|
25
|
-
"@webiny/app-websockets": "5.
|
|
26
|
-
"@webiny/error": "5.
|
|
27
|
-
"@webiny/react-router": "5.
|
|
28
|
-
"@webiny/ui": "5.
|
|
29
|
-
"@webiny/utils": "5.
|
|
19
|
+
"@webiny/app": "5.41.0-beta.0",
|
|
20
|
+
"@webiny/app-aco": "5.41.0-beta.0",
|
|
21
|
+
"@webiny/app-admin": "5.41.0-beta.0",
|
|
22
|
+
"@webiny/app-headless-cms": "5.41.0-beta.0",
|
|
23
|
+
"@webiny/app-security": "5.41.0-beta.0",
|
|
24
|
+
"@webiny/app-wcp": "5.41.0-beta.0",
|
|
25
|
+
"@webiny/app-websockets": "5.41.0-beta.0",
|
|
26
|
+
"@webiny/error": "5.41.0-beta.0",
|
|
27
|
+
"@webiny/react-router": "5.41.0-beta.0",
|
|
28
|
+
"@webiny/ui": "5.41.0-beta.0",
|
|
29
|
+
"@webiny/utils": "5.41.0-beta.0",
|
|
30
30
|
"apollo-client": "2.6.10",
|
|
31
31
|
"apollo-link": "1.2.14",
|
|
32
32
|
"crypto-hash": "3.0.0",
|
|
@@ -41,11 +41,11 @@
|
|
|
41
41
|
"@babel/preset-env": "7.24.3",
|
|
42
42
|
"@babel/preset-react": "7.24.1",
|
|
43
43
|
"@babel/preset-typescript": "7.24.1",
|
|
44
|
-
"@webiny/cli": "5.
|
|
45
|
-
"@webiny/project-utils": "5.
|
|
44
|
+
"@webiny/cli": "5.41.0-beta.0",
|
|
45
|
+
"@webiny/project-utils": "5.41.0-beta.0",
|
|
46
46
|
"rimraf": "5.0.5",
|
|
47
47
|
"ttypescript": "1.5.15",
|
|
48
|
-
"typescript": "4.
|
|
48
|
+
"typescript": "4.9.5"
|
|
49
49
|
},
|
|
50
50
|
"publishConfig": {
|
|
51
51
|
"access": "public",
|
|
@@ -55,5 +55,5 @@
|
|
|
55
55
|
"build": "yarn webiny run build",
|
|
56
56
|
"watch": "yarn webiny run watch"
|
|
57
57
|
},
|
|
58
|
-
"gitHead": "
|
|
58
|
+
"gitHead": "9ce5e75fc577aa4de2cf08d5ca734b3c98fe65b6"
|
|
59
59
|
}
|
package/types.d.ts
CHANGED
|
@@ -21,11 +21,11 @@ export interface IRecordLockingRecord extends IPossiblyRecordLockingRecord {
|
|
|
21
21
|
entryId: string;
|
|
22
22
|
$lockingType: string;
|
|
23
23
|
}
|
|
24
|
-
export
|
|
25
|
-
export
|
|
26
|
-
export
|
|
27
|
-
export
|
|
28
|
-
export
|
|
24
|
+
export type IIsRecordLockedParams = Pick<IRecordLockingRecord, "id" | "$lockingType">;
|
|
25
|
+
export type IUpdateEntryLockParams = Pick<IRecordLockingRecord, "id" | "$lockingType">;
|
|
26
|
+
export type IUnlockEntryParams = Pick<IRecordLockingRecord, "id" | "$lockingType">;
|
|
27
|
+
export type IFetchLockRecordParams = Pick<IRecordLockingRecord, "id" | "$lockingType">;
|
|
28
|
+
export type IFetchLockedEntryLockRecordParams = Pick<IRecordLockingRecord, "id" | "$lockingType">;
|
|
29
29
|
export interface IFetchLockRecordResult {
|
|
30
30
|
data: IRecordLockingLockRecord | null;
|
|
31
31
|
error: IRecordLockingError | null;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { GenericRecord } from "@webiny/app/types";
|
|
2
|
-
export
|
|
2
|
+
export type ICreateCacheKeyInput = string | GenericRecord | ICreateCacheKeyInput[];
|
|
3
3
|
export declare const createCacheKey: (input: ICreateCacheKeyInput) => Promise<string>;
|