@contentstack/live-preview-utils 3.2.1 → 3.2.2
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/README.md +2 -2
- package/dist/legacy/index.cjs +1 -1
- package/dist/legacy/index.js +1 -1
- package/dist/legacy/livePreview/eventManager/postMessageEvent.hooks.cjs +1 -1
- package/dist/legacy/livePreview/eventManager/postMessageEvent.hooks.js +1 -1
- package/dist/legacy/preview/contentstack-live-preview-HOC.cjs +1 -1
- package/dist/legacy/preview/contentstack-live-preview-HOC.js +1 -1
- package/dist/legacy/visualBuilder/components/FieldRevert/FieldRevertComponent.cjs +4 -1
- package/dist/legacy/visualBuilder/components/FieldRevert/FieldRevertComponent.cjs.map +1 -1
- package/dist/legacy/visualBuilder/components/FieldRevert/FieldRevertComponent.js +4 -1
- package/dist/legacy/visualBuilder/components/FieldRevert/FieldRevertComponent.js.map +1 -1
- package/dist/legacy/visualBuilder/components/FieldToolbar.cjs +24 -13
- package/dist/legacy/visualBuilder/components/FieldToolbar.cjs.map +1 -1
- package/dist/legacy/visualBuilder/components/FieldToolbar.d.cts +2 -0
- package/dist/legacy/visualBuilder/components/FieldToolbar.d.ts +2 -0
- package/dist/legacy/visualBuilder/components/FieldToolbar.js +24 -13
- package/dist/legacy/visualBuilder/components/FieldToolbar.js.map +1 -1
- package/dist/legacy/visualBuilder/components/fieldLabelWrapper.cjs +8 -1
- package/dist/legacy/visualBuilder/components/fieldLabelWrapper.cjs.map +1 -1
- package/dist/legacy/visualBuilder/components/fieldLabelWrapper.js +8 -1
- package/dist/legacy/visualBuilder/components/fieldLabelWrapper.js.map +1 -1
- package/dist/legacy/visualBuilder/eventManager/useVariantsPostMessageEvent.cjs +12 -0
- package/dist/legacy/visualBuilder/eventManager/useVariantsPostMessageEvent.cjs.map +1 -1
- package/dist/legacy/visualBuilder/eventManager/useVariantsPostMessageEvent.d.cts +6 -1
- package/dist/legacy/visualBuilder/eventManager/useVariantsPostMessageEvent.d.ts +6 -1
- package/dist/legacy/visualBuilder/eventManager/useVariantsPostMessageEvent.js +7 -0
- package/dist/legacy/visualBuilder/eventManager/useVariantsPostMessageEvent.js.map +1 -1
- package/dist/legacy/visualBuilder/generators/generateOverlay.cjs +4 -2
- package/dist/legacy/visualBuilder/generators/generateOverlay.cjs.map +1 -1
- package/dist/legacy/visualBuilder/generators/generateOverlay.js +4 -2
- package/dist/legacy/visualBuilder/generators/generateOverlay.js.map +1 -1
- package/dist/legacy/visualBuilder/generators/generateToolbar.cjs +9 -2
- package/dist/legacy/visualBuilder/generators/generateToolbar.cjs.map +1 -1
- package/dist/legacy/visualBuilder/generators/generateToolbar.d.cts +1 -1
- package/dist/legacy/visualBuilder/generators/generateToolbar.d.ts +1 -1
- package/dist/legacy/visualBuilder/generators/generateToolbar.js +9 -2
- package/dist/legacy/visualBuilder/generators/generateToolbar.js.map +1 -1
- package/dist/legacy/visualBuilder/index.cjs +3 -3
- package/dist/legacy/visualBuilder/index.cjs.map +1 -1
- package/dist/legacy/visualBuilder/index.d.cts +1 -0
- package/dist/legacy/visualBuilder/index.d.ts +1 -0
- package/dist/legacy/visualBuilder/index.js +3 -3
- package/dist/legacy/visualBuilder/index.js.map +1 -1
- package/dist/legacy/visualBuilder/listeners/mouseClick.cjs +21 -2
- package/dist/legacy/visualBuilder/listeners/mouseClick.cjs.map +1 -1
- package/dist/legacy/visualBuilder/listeners/mouseClick.js +21 -2
- package/dist/legacy/visualBuilder/listeners/mouseClick.js.map +1 -1
- package/dist/legacy/visualBuilder/listeners/mouseHover.cjs +46 -12
- package/dist/legacy/visualBuilder/listeners/mouseHover.cjs.map +1 -1
- package/dist/legacy/visualBuilder/listeners/mouseHover.js +46 -12
- package/dist/legacy/visualBuilder/listeners/mouseHover.js.map +1 -1
- package/dist/legacy/visualBuilder/utils/createCachedFetch.cjs +58 -0
- package/dist/legacy/visualBuilder/utils/createCachedFetch.cjs.map +1 -0
- package/dist/legacy/visualBuilder/utils/createCachedFetch.d.cts +12 -0
- package/dist/legacy/visualBuilder/utils/createCachedFetch.d.ts +12 -0
- package/dist/legacy/visualBuilder/utils/createCachedFetch.js +35 -0
- package/dist/legacy/visualBuilder/utils/createCachedFetch.js.map +1 -0
- package/dist/legacy/visualBuilder/utils/fieldSchemaMap.cjs +1 -0
- package/dist/legacy/visualBuilder/utils/fieldSchemaMap.cjs.map +1 -1
- package/dist/legacy/visualBuilder/utils/fieldSchemaMap.js +1 -0
- package/dist/legacy/visualBuilder/utils/fieldSchemaMap.js.map +1 -1
- package/dist/legacy/visualBuilder/utils/getEntryPermissions.cjs +71 -0
- package/dist/legacy/visualBuilder/utils/getEntryPermissions.cjs.map +1 -0
- package/dist/legacy/visualBuilder/utils/getEntryPermissions.d.cts +14 -0
- package/dist/legacy/visualBuilder/utils/getEntryPermissions.d.ts +14 -0
- package/dist/legacy/visualBuilder/utils/getEntryPermissions.js +38 -0
- package/dist/legacy/visualBuilder/utils/getEntryPermissions.js.map +1 -0
- package/dist/legacy/visualBuilder/utils/getEntryPermissionsCached.cjs +36 -0
- package/dist/legacy/visualBuilder/utils/getEntryPermissionsCached.cjs.map +1 -0
- package/dist/legacy/visualBuilder/utils/getEntryPermissionsCached.d.cts +12 -0
- package/dist/legacy/visualBuilder/utils/getEntryPermissionsCached.d.ts +12 -0
- package/dist/legacy/visualBuilder/utils/getEntryPermissionsCached.js +13 -0
- package/dist/legacy/visualBuilder/utils/getEntryPermissionsCached.js.map +1 -0
- package/dist/legacy/visualBuilder/utils/handleFieldMouseDown.cjs +4 -0
- package/dist/legacy/visualBuilder/utils/handleFieldMouseDown.cjs.map +1 -1
- package/dist/legacy/visualBuilder/utils/handleFieldMouseDown.js +4 -0
- package/dist/legacy/visualBuilder/utils/handleFieldMouseDown.js.map +1 -1
- package/dist/legacy/visualBuilder/utils/handleIndividualFields.cjs +11 -1
- package/dist/legacy/visualBuilder/utils/handleIndividualFields.cjs.map +1 -1
- package/dist/legacy/visualBuilder/utils/handleIndividualFields.js +11 -1
- package/dist/legacy/visualBuilder/utils/handleIndividualFields.js.map +1 -1
- package/dist/legacy/visualBuilder/utils/isFieldDisabled.cjs +7 -1
- package/dist/legacy/visualBuilder/utils/isFieldDisabled.cjs.map +1 -1
- package/dist/legacy/visualBuilder/utils/isFieldDisabled.d.cts +4 -2
- package/dist/legacy/visualBuilder/utils/isFieldDisabled.d.ts +4 -2
- package/dist/legacy/visualBuilder/utils/isFieldDisabled.js +7 -1
- package/dist/legacy/visualBuilder/utils/isFieldDisabled.js.map +1 -1
- package/dist/legacy/visualBuilder/utils/updateFocussedState.cjs +21 -3
- package/dist/legacy/visualBuilder/utils/updateFocussedState.cjs.map +1 -1
- package/dist/legacy/visualBuilder/utils/updateFocussedState.d.cts +1 -1
- package/dist/legacy/visualBuilder/utils/updateFocussedState.d.ts +1 -1
- package/dist/legacy/visualBuilder/utils/updateFocussedState.js +21 -3
- package/dist/legacy/visualBuilder/utils/updateFocussedState.js.map +1 -1
- package/dist/legacy/visualBuilder/visualBuilder.style.cjs +10 -1
- package/dist/legacy/visualBuilder/visualBuilder.style.cjs.map +1 -1
- package/dist/legacy/visualBuilder/visualBuilder.style.js +10 -1
- package/dist/legacy/visualBuilder/visualBuilder.style.js.map +1 -1
- package/dist/modern/index.cjs +1 -1
- package/dist/modern/index.js +1 -1
- package/dist/modern/livePreview/eventManager/postMessageEvent.hooks.cjs +1 -1
- package/dist/modern/livePreview/eventManager/postMessageEvent.hooks.js +1 -1
- package/dist/modern/preview/contentstack-live-preview-HOC.cjs +1 -1
- package/dist/modern/preview/contentstack-live-preview-HOC.js +1 -1
- package/dist/modern/visualBuilder/components/FieldRevert/FieldRevertComponent.cjs +4 -1
- package/dist/modern/visualBuilder/components/FieldRevert/FieldRevertComponent.cjs.map +1 -1
- package/dist/modern/visualBuilder/components/FieldRevert/FieldRevertComponent.js +4 -1
- package/dist/modern/visualBuilder/components/FieldRevert/FieldRevertComponent.js.map +1 -1
- package/dist/modern/visualBuilder/components/FieldToolbar.cjs +24 -13
- package/dist/modern/visualBuilder/components/FieldToolbar.cjs.map +1 -1
- package/dist/modern/visualBuilder/components/FieldToolbar.d.cts +2 -0
- package/dist/modern/visualBuilder/components/FieldToolbar.d.ts +2 -0
- package/dist/modern/visualBuilder/components/FieldToolbar.js +24 -13
- package/dist/modern/visualBuilder/components/FieldToolbar.js.map +1 -1
- package/dist/modern/visualBuilder/components/fieldLabelWrapper.cjs +8 -1
- package/dist/modern/visualBuilder/components/fieldLabelWrapper.cjs.map +1 -1
- package/dist/modern/visualBuilder/components/fieldLabelWrapper.js +8 -1
- package/dist/modern/visualBuilder/components/fieldLabelWrapper.js.map +1 -1
- package/dist/modern/visualBuilder/eventManager/useVariantsPostMessageEvent.cjs +12 -0
- package/dist/modern/visualBuilder/eventManager/useVariantsPostMessageEvent.cjs.map +1 -1
- package/dist/modern/visualBuilder/eventManager/useVariantsPostMessageEvent.d.cts +6 -1
- package/dist/modern/visualBuilder/eventManager/useVariantsPostMessageEvent.d.ts +6 -1
- package/dist/modern/visualBuilder/eventManager/useVariantsPostMessageEvent.js +7 -0
- package/dist/modern/visualBuilder/eventManager/useVariantsPostMessageEvent.js.map +1 -1
- package/dist/modern/visualBuilder/generators/generateOverlay.cjs +4 -2
- package/dist/modern/visualBuilder/generators/generateOverlay.cjs.map +1 -1
- package/dist/modern/visualBuilder/generators/generateOverlay.js +4 -2
- package/dist/modern/visualBuilder/generators/generateOverlay.js.map +1 -1
- package/dist/modern/visualBuilder/generators/generateToolbar.cjs +9 -2
- package/dist/modern/visualBuilder/generators/generateToolbar.cjs.map +1 -1
- package/dist/modern/visualBuilder/generators/generateToolbar.d.cts +1 -1
- package/dist/modern/visualBuilder/generators/generateToolbar.d.ts +1 -1
- package/dist/modern/visualBuilder/generators/generateToolbar.js +9 -2
- package/dist/modern/visualBuilder/generators/generateToolbar.js.map +1 -1
- package/dist/modern/visualBuilder/index.cjs +3 -3
- package/dist/modern/visualBuilder/index.cjs.map +1 -1
- package/dist/modern/visualBuilder/index.d.cts +1 -0
- package/dist/modern/visualBuilder/index.d.ts +1 -0
- package/dist/modern/visualBuilder/index.js +3 -3
- package/dist/modern/visualBuilder/index.js.map +1 -1
- package/dist/modern/visualBuilder/listeners/mouseClick.cjs +21 -2
- package/dist/modern/visualBuilder/listeners/mouseClick.cjs.map +1 -1
- package/dist/modern/visualBuilder/listeners/mouseClick.js +21 -2
- package/dist/modern/visualBuilder/listeners/mouseClick.js.map +1 -1
- package/dist/modern/visualBuilder/listeners/mouseHover.cjs +46 -12
- package/dist/modern/visualBuilder/listeners/mouseHover.cjs.map +1 -1
- package/dist/modern/visualBuilder/listeners/mouseHover.js +46 -12
- package/dist/modern/visualBuilder/listeners/mouseHover.js.map +1 -1
- package/dist/modern/visualBuilder/utils/createCachedFetch.cjs +58 -0
- package/dist/modern/visualBuilder/utils/createCachedFetch.cjs.map +1 -0
- package/dist/modern/visualBuilder/utils/createCachedFetch.d.cts +12 -0
- package/dist/modern/visualBuilder/utils/createCachedFetch.d.ts +12 -0
- package/dist/modern/visualBuilder/utils/createCachedFetch.js +35 -0
- package/dist/modern/visualBuilder/utils/createCachedFetch.js.map +1 -0
- package/dist/modern/visualBuilder/utils/fieldSchemaMap.cjs +1 -0
- package/dist/modern/visualBuilder/utils/fieldSchemaMap.cjs.map +1 -1
- package/dist/modern/visualBuilder/utils/fieldSchemaMap.js +1 -0
- package/dist/modern/visualBuilder/utils/fieldSchemaMap.js.map +1 -1
- package/dist/modern/visualBuilder/utils/getEntryPermissions.cjs +70 -0
- package/dist/modern/visualBuilder/utils/getEntryPermissions.cjs.map +1 -0
- package/dist/modern/visualBuilder/utils/getEntryPermissions.d.cts +14 -0
- package/dist/modern/visualBuilder/utils/getEntryPermissions.d.ts +14 -0
- package/dist/modern/visualBuilder/utils/getEntryPermissions.js +37 -0
- package/dist/modern/visualBuilder/utils/getEntryPermissions.js.map +1 -0
- package/dist/modern/visualBuilder/utils/getEntryPermissionsCached.cjs +36 -0
- package/dist/modern/visualBuilder/utils/getEntryPermissionsCached.cjs.map +1 -0
- package/dist/modern/visualBuilder/utils/getEntryPermissionsCached.d.cts +12 -0
- package/dist/modern/visualBuilder/utils/getEntryPermissionsCached.d.ts +12 -0
- package/dist/modern/visualBuilder/utils/getEntryPermissionsCached.js +13 -0
- package/dist/modern/visualBuilder/utils/getEntryPermissionsCached.js.map +1 -0
- package/dist/modern/visualBuilder/utils/handleFieldMouseDown.cjs +4 -0
- package/dist/modern/visualBuilder/utils/handleFieldMouseDown.cjs.map +1 -1
- package/dist/modern/visualBuilder/utils/handleFieldMouseDown.js +4 -0
- package/dist/modern/visualBuilder/utils/handleFieldMouseDown.js.map +1 -1
- package/dist/modern/visualBuilder/utils/handleIndividualFields.cjs +11 -1
- package/dist/modern/visualBuilder/utils/handleIndividualFields.cjs.map +1 -1
- package/dist/modern/visualBuilder/utils/handleIndividualFields.js +11 -1
- package/dist/modern/visualBuilder/utils/handleIndividualFields.js.map +1 -1
- package/dist/modern/visualBuilder/utils/isFieldDisabled.cjs +7 -1
- package/dist/modern/visualBuilder/utils/isFieldDisabled.cjs.map +1 -1
- package/dist/modern/visualBuilder/utils/isFieldDisabled.d.cts +4 -2
- package/dist/modern/visualBuilder/utils/isFieldDisabled.d.ts +4 -2
- package/dist/modern/visualBuilder/utils/isFieldDisabled.js +7 -1
- package/dist/modern/visualBuilder/utils/isFieldDisabled.js.map +1 -1
- package/dist/modern/visualBuilder/utils/updateFocussedState.cjs +21 -3
- package/dist/modern/visualBuilder/utils/updateFocussedState.cjs.map +1 -1
- package/dist/modern/visualBuilder/utils/updateFocussedState.d.cts +1 -1
- package/dist/modern/visualBuilder/utils/updateFocussedState.d.ts +1 -1
- package/dist/modern/visualBuilder/utils/updateFocussedState.js +21 -3
- package/dist/modern/visualBuilder/utils/updateFocussedState.js.map +1 -1
- package/dist/modern/visualBuilder/visualBuilder.style.cjs +10 -1
- package/dist/modern/visualBuilder/visualBuilder.style.cjs.map +1 -1
- package/dist/modern/visualBuilder/visualBuilder.style.js +10 -1
- package/dist/modern/visualBuilder/visualBuilder.style.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
|
|
30
|
+
// src/visualBuilder/utils/getEntryPermissions.ts
|
|
31
|
+
var getEntryPermissions_exports = {};
|
|
32
|
+
__export(getEntryPermissions_exports, {
|
|
33
|
+
getEntryPermissions: () => getEntryPermissions
|
|
34
|
+
});
|
|
35
|
+
module.exports = __toCommonJS(getEntryPermissions_exports);
|
|
36
|
+
var import_visualBuilderPostMessage = __toESM(require("./visualBuilderPostMessage.cjs"), 1);
|
|
37
|
+
async function getEntryPermissions({
|
|
38
|
+
entryUid,
|
|
39
|
+
contentTypeUid,
|
|
40
|
+
locale
|
|
41
|
+
}) {
|
|
42
|
+
try {
|
|
43
|
+
const permissions = await import_visualBuilderPostMessage.default?.send(
|
|
44
|
+
"get-permissions",
|
|
45
|
+
{
|
|
46
|
+
type: "entry",
|
|
47
|
+
entryUid,
|
|
48
|
+
contentTypeUid,
|
|
49
|
+
locale
|
|
50
|
+
}
|
|
51
|
+
);
|
|
52
|
+
if (permissions) {
|
|
53
|
+
return permissions;
|
|
54
|
+
}
|
|
55
|
+
} catch (error) {
|
|
56
|
+
console.debug("[Visual Builder] Error fetching permissions", error);
|
|
57
|
+
}
|
|
58
|
+
return {
|
|
59
|
+
create: true,
|
|
60
|
+
read: true,
|
|
61
|
+
update: true,
|
|
62
|
+
delete: true,
|
|
63
|
+
publish: true
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
67
|
+
0 && (module.exports = {
|
|
68
|
+
getEntryPermissions
|
|
69
|
+
});
|
|
70
|
+
//# sourceMappingURL=getEntryPermissions.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/visualBuilder/utils/getEntryPermissions.ts"],"sourcesContent":["import visualBuilderPostMessage from \"./visualBuilderPostMessage\";\n\nexport interface EntryPermissions {\n create: boolean;\n read: boolean;\n update: boolean;\n delete: boolean;\n publish: boolean;\n}\n\nexport async function getEntryPermissions({\n entryUid,\n contentTypeUid,\n locale,\n}: {\n entryUid: string;\n contentTypeUid: string;\n locale: string;\n}) {\n try {\n const permissions =\n await visualBuilderPostMessage?.send<EntryPermissions>(\n \"get-permissions\",\n {\n type: \"entry\",\n entryUid,\n contentTypeUid,\n locale,\n }\n );\n if (permissions) {\n return permissions;\n }\n } catch (error) {\n console.debug(\"[Visual Builder] Error fetching permissions\", error);\n }\n // allow editing when things go wrong,\n // e.g. when no permissions are received\n return {\n create: true,\n read: true,\n update: true,\n delete: true,\n publish: true,\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sCAAqC;AAUrC,eAAsB,oBAAoB;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AACJ,GAIG;AACC,MAAI;AACA,UAAM,cACF,MAAM,gCAAAA,SAA0B;AAAA,MAC5B;AAAA,MACA;AAAA,QACI,MAAM;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,IACJ;AACJ,QAAI,aAAa;AACb,aAAO;AAAA,IACX;AAAA,EACJ,SAAS,OAAO;AACZ,YAAQ,MAAM,+CAA+C,KAAK;AAAA,EACtE;AAGA,SAAO;AAAA,IACH,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS;AAAA,EACb;AACJ;","names":["visualBuilderPostMessage"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
interface EntryPermissions {
|
|
2
|
+
create: boolean;
|
|
3
|
+
read: boolean;
|
|
4
|
+
update: boolean;
|
|
5
|
+
delete: boolean;
|
|
6
|
+
publish: boolean;
|
|
7
|
+
}
|
|
8
|
+
declare function getEntryPermissions({ entryUid, contentTypeUid, locale, }: {
|
|
9
|
+
entryUid: string;
|
|
10
|
+
contentTypeUid: string;
|
|
11
|
+
locale: string;
|
|
12
|
+
}): Promise<EntryPermissions>;
|
|
13
|
+
|
|
14
|
+
export { type EntryPermissions, getEntryPermissions };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
interface EntryPermissions {
|
|
2
|
+
create: boolean;
|
|
3
|
+
read: boolean;
|
|
4
|
+
update: boolean;
|
|
5
|
+
delete: boolean;
|
|
6
|
+
publish: boolean;
|
|
7
|
+
}
|
|
8
|
+
declare function getEntryPermissions({ entryUid, contentTypeUid, locale, }: {
|
|
9
|
+
entryUid: string;
|
|
10
|
+
contentTypeUid: string;
|
|
11
|
+
locale: string;
|
|
12
|
+
}): Promise<EntryPermissions>;
|
|
13
|
+
|
|
14
|
+
export { type EntryPermissions, getEntryPermissions };
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import "../../chunk-5WRI5ZAA.js";
|
|
2
|
+
|
|
3
|
+
// src/visualBuilder/utils/getEntryPermissions.ts
|
|
4
|
+
import visualBuilderPostMessage from "./visualBuilderPostMessage.js";
|
|
5
|
+
async function getEntryPermissions({
|
|
6
|
+
entryUid,
|
|
7
|
+
contentTypeUid,
|
|
8
|
+
locale
|
|
9
|
+
}) {
|
|
10
|
+
try {
|
|
11
|
+
const permissions = await visualBuilderPostMessage?.send(
|
|
12
|
+
"get-permissions",
|
|
13
|
+
{
|
|
14
|
+
type: "entry",
|
|
15
|
+
entryUid,
|
|
16
|
+
contentTypeUid,
|
|
17
|
+
locale
|
|
18
|
+
}
|
|
19
|
+
);
|
|
20
|
+
if (permissions) {
|
|
21
|
+
return permissions;
|
|
22
|
+
}
|
|
23
|
+
} catch (error) {
|
|
24
|
+
console.debug("[Visual Builder] Error fetching permissions", error);
|
|
25
|
+
}
|
|
26
|
+
return {
|
|
27
|
+
create: true,
|
|
28
|
+
read: true,
|
|
29
|
+
update: true,
|
|
30
|
+
delete: true,
|
|
31
|
+
publish: true
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
export {
|
|
35
|
+
getEntryPermissions
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=getEntryPermissions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/visualBuilder/utils/getEntryPermissions.ts"],"sourcesContent":["import visualBuilderPostMessage from \"./visualBuilderPostMessage\";\n\nexport interface EntryPermissions {\n create: boolean;\n read: boolean;\n update: boolean;\n delete: boolean;\n publish: boolean;\n}\n\nexport async function getEntryPermissions({\n entryUid,\n contentTypeUid,\n locale,\n}: {\n entryUid: string;\n contentTypeUid: string;\n locale: string;\n}) {\n try {\n const permissions =\n await visualBuilderPostMessage?.send<EntryPermissions>(\n \"get-permissions\",\n {\n type: \"entry\",\n entryUid,\n contentTypeUid,\n locale,\n }\n );\n if (permissions) {\n return permissions;\n }\n } catch (error) {\n console.debug(\"[Visual Builder] Error fetching permissions\", error);\n }\n // allow editing when things go wrong,\n // e.g. when no permissions are received\n return {\n create: true,\n read: true,\n update: true,\n delete: true,\n publish: true,\n };\n}\n"],"mappings":";;;AAAA,OAAO,8BAA8B;AAUrC,eAAsB,oBAAoB;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AACJ,GAIG;AACC,MAAI;AACA,UAAM,cACF,MAAM,0BAA0B;AAAA,MAC5B;AAAA,MACA;AAAA,QACI,MAAM;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA,IACJ;AACJ,QAAI,aAAa;AACb,aAAO;AAAA,IACX;AAAA,EACJ,SAAS,OAAO;AACZ,YAAQ,MAAM,+CAA+C,KAAK;AAAA,EACtE;AAGA,SAAO;AAAA,IACH,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS;AAAA,EACb;AACJ;","names":[]}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/visualBuilder/utils/getEntryPermissionsCached.ts
|
|
21
|
+
var getEntryPermissionsCached_exports = {};
|
|
22
|
+
__export(getEntryPermissionsCached_exports, {
|
|
23
|
+
getEntryPermissionsCached: () => getEntryPermissionsCached
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(getEntryPermissionsCached_exports);
|
|
26
|
+
var import_getEntryPermissions = require("./getEntryPermissions.cjs");
|
|
27
|
+
var import_createCachedFetch = require("./createCachedFetch.cjs");
|
|
28
|
+
var getEntryPermissionsCached = (0, import_createCachedFetch.createCachedFetch)(
|
|
29
|
+
import_getEntryPermissions.getEntryPermissions,
|
|
30
|
+
({ entryUid, contentTypeUid, locale }) => `${entryUid}.${contentTypeUid}.${locale}`
|
|
31
|
+
);
|
|
32
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
33
|
+
0 && (module.exports = {
|
|
34
|
+
getEntryPermissionsCached
|
|
35
|
+
});
|
|
36
|
+
//# sourceMappingURL=getEntryPermissionsCached.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/visualBuilder/utils/getEntryPermissionsCached.ts"],"sourcesContent":["import { getEntryPermissions } from \"./getEntryPermissions\";\nimport { createCachedFetch } from \"./createCachedFetch\";\n\nexport const getEntryPermissionsCached = createCachedFetch(\n getEntryPermissions,\n ({ entryUid, contentTypeUid, locale }) =>\n `${entryUid}.${contentTypeUid}.${locale}`\n);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iCAAoC;AACpC,+BAAkC;AAE3B,IAAM,gCAA4B;AAAA,EACrC;AAAA,EACA,CAAC,EAAE,UAAU,gBAAgB,OAAO,MAChC,GAAG,QAAQ,IAAI,cAAc,IAAI,MAAM;AAC/C;","names":[]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { EntryPermissions } from './getEntryPermissions.cjs';
|
|
2
|
+
|
|
3
|
+
declare const getEntryPermissionsCached: {
|
|
4
|
+
(args_0: {
|
|
5
|
+
entryUid: string;
|
|
6
|
+
contentTypeUid: string;
|
|
7
|
+
locale: string;
|
|
8
|
+
}): Promise<EntryPermissions>;
|
|
9
|
+
clearCache: () => void;
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export { getEntryPermissionsCached };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { EntryPermissions } from './getEntryPermissions.js';
|
|
2
|
+
|
|
3
|
+
declare const getEntryPermissionsCached: {
|
|
4
|
+
(args_0: {
|
|
5
|
+
entryUid: string;
|
|
6
|
+
contentTypeUid: string;
|
|
7
|
+
locale: string;
|
|
8
|
+
}): Promise<EntryPermissions>;
|
|
9
|
+
clearCache: () => void;
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export { getEntryPermissionsCached };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import "../../chunk-5WRI5ZAA.js";
|
|
2
|
+
|
|
3
|
+
// src/visualBuilder/utils/getEntryPermissionsCached.ts
|
|
4
|
+
import { getEntryPermissions } from "./getEntryPermissions.js";
|
|
5
|
+
import { createCachedFetch } from "./createCachedFetch.js";
|
|
6
|
+
var getEntryPermissionsCached = createCachedFetch(
|
|
7
|
+
getEntryPermissions,
|
|
8
|
+
({ entryUid, contentTypeUid, locale }) => `${entryUid}.${contentTypeUid}.${locale}`
|
|
9
|
+
);
|
|
10
|
+
export {
|
|
11
|
+
getEntryPermissionsCached
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=getEntryPermissionsCached.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/visualBuilder/utils/getEntryPermissionsCached.ts"],"sourcesContent":["import { getEntryPermissions } from \"./getEntryPermissions\";\nimport { createCachedFetch } from \"./createCachedFetch\";\n\nexport const getEntryPermissionsCached = createCachedFetch(\n getEntryPermissions,\n ({ entryUid, contentTypeUid, locale }) =>\n `${entryUid}.${contentTypeUid}.${locale}`\n);\n"],"mappings":";;;AAAA,SAAS,2BAA2B;AACpC,SAAS,yBAAyB;AAE3B,IAAM,4BAA4B;AAAA,EACrC;AAAA,EACA,CAAC,EAAE,UAAU,gBAAgB,OAAO,MAChC,GAAG,QAAQ,IAAI,cAAc,IAAI,MAAM;AAC/C;","names":[]}
|
|
@@ -30,6 +30,7 @@ var import_constants = require("./constants.cjs");
|
|
|
30
30
|
var import_types = require("./types/index.types.cjs");
|
|
31
31
|
var import_postMessage = require("./types/postMessage.types.cjs");
|
|
32
32
|
var import_insertSpaceAtCursor = require("./insertSpaceAtCursor.cjs");
|
|
33
|
+
var import__ = require("../index.cjs");
|
|
33
34
|
function handleFieldInput(e) {
|
|
34
35
|
const event = e;
|
|
35
36
|
const targetElement = event.target;
|
|
@@ -37,6 +38,9 @@ function handleFieldInput(e) {
|
|
|
37
38
|
import_constants.VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY
|
|
38
39
|
);
|
|
39
40
|
if (event.type === "input" && import_constants.ALLOWED_INLINE_EDITABLE_FIELD.includes(fieldType)) {
|
|
41
|
+
if (!import__.VisualBuilder.VisualBuilderGlobalState.value.focusFieldReceivedInput) {
|
|
42
|
+
import__.VisualBuilder.VisualBuilderGlobalState.value.focusFieldReceivedInput = true;
|
|
43
|
+
}
|
|
40
44
|
throttledFieldSync();
|
|
41
45
|
}
|
|
42
46
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/visualBuilder/utils/handleFieldMouseDown.ts"],"sourcesContent":["import { throttle } from \"lodash-es\";\nimport { sendFieldEvent } from \"../generators/generateOverlay\";\nimport {\n ALLOWED_INLINE_EDITABLE_FIELD,\n VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY,\n numericInputRegex,\n} from \"./constants\";\nimport { FieldDataType } from \"./types/index.types\";\nimport { VisualBuilderPostMessageEvents } from \"./types/postMessage.types\";\nimport { insertSpaceAtCursor } from \"./insertSpaceAtCursor\";\n\nexport function handleFieldInput(e: Event): void {\n const event = e as InputEvent;\n const targetElement = event.target as HTMLElement;\n const fieldType = targetElement.getAttribute(\n VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY\n ) as FieldDataType | null;\n if (\n event.type === \"input\" &&\n ALLOWED_INLINE_EDITABLE_FIELD.includes(fieldType as FieldDataType)\n ) {\n throttledFieldSync();\n }\n}\nconst throttledFieldSync = throttle(() => {\n try {\n const visualBuilderContainer = document.querySelector(\n \".visual-builder__container\"\n ) as HTMLElement;\n if (!visualBuilderContainer) return;\n sendFieldEvent({\n visualBuilderContainer,\n eventType: VisualBuilderPostMessageEvents.SYNC_FIELD,\n });\n } catch (error) {\n console.error(\"Error in throttledFieldSync\", error);\n }\n}, 300);\n\nexport function handleFieldKeyDown(e: Event): void {\n const event = e as KeyboardEvent;\n const targetElement = event.target as HTMLElement;\n const fieldType = targetElement.getAttribute(\n VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY\n ) as FieldDataType | null;\n\n if (\n event\n .composedPath()\n .some(\n (element) =>\n element instanceof Element && element.tagName === \"BUTTON\"\n )\n ) {\n // custom space handling when a button is involved\n handleKeyDownOnButton(event);\n }\n if (fieldType === FieldDataType.NUMBER) {\n handleNumericFieldKeyDown(event);\n } else if (fieldType === FieldDataType.SINGLELINE) {\n handleSingleLineFieldKeyDown(event);\n }\n}\n\n// spaces do not work inside a button content-editable\n// this adds a space and moves the cursor ahead, the\n// button press event is also prevented, finally syncs the field\nfunction handleKeyDownOnButton(e: KeyboardEvent) {\n if (e.code === \"Space\" && e.target) {\n e.preventDefault();\n insertSpaceAtCursor(e.target as HTMLElement);\n throttledFieldSync();\n }\n}\n\nfunction handleSingleLineFieldKeyDown(e: KeyboardEvent) {\n if (e.code === \"Enter\") {\n e.preventDefault();\n }\n}\n\nfunction handleNumericFieldKeyDown(event: KeyboardEvent): void {\n const targetElement = event.target as HTMLElement;\n\n const allowedKeys = [\n \"Backspace\",\n \"Tab\",\n \"Enter\",\n \"End\",\n \"Home\",\n \"ArrowLeft\",\n \"ArrowRight\",\n \"Delete\",\n ];\n\n if (\n event.ctrlKey ||\n event.metaKey ||\n event.altKey ||\n allowedKeys.includes(event.code)\n ) {\n // Allow Ctrl, Cmd, Alt, and special keys\n return;\n }\n\n if (event.code.includes(\"Digit\")) {\n return;\n }\n\n const nonNumericAllowedCharacters = [\"-\", \".\", \"e\", \"E\"];\n\n if (!nonNumericAllowedCharacters.includes(event.key)) {\n event.preventDefault();\n return;\n }\n\n const selection = {\n startOffset: window.getSelection()?.getRangeAt(0).startOffset || 0,\n endOffset: window.getSelection()?.getRangeAt(0).endOffset || 0,\n };\n\n const existingInput = targetElement.textContent || \"\";\n const currentOutputArr = existingInput.split(\"\");\n currentOutputArr.splice(\n selection.startOffset,\n selection.endOffset - selection.startOffset,\n event.key\n );\n const currentInput = currentOutputArr.join(\"\");\n\n if (!numericInputRegex.test(currentInput)) {\n event.preventDefault();\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAAyB;AACzB,6BAA+B;AAC/B,uBAIO;AACP,mBAA8B;AAC9B,yBAA+C;AAC/C,iCAAoC;
|
|
1
|
+
{"version":3,"sources":["../../../../src/visualBuilder/utils/handleFieldMouseDown.ts"],"sourcesContent":["import { throttle } from \"lodash-es\";\nimport { sendFieldEvent } from \"../generators/generateOverlay\";\nimport {\n ALLOWED_INLINE_EDITABLE_FIELD,\n VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY,\n numericInputRegex,\n} from \"./constants\";\nimport { FieldDataType } from \"./types/index.types\";\nimport { VisualBuilderPostMessageEvents } from \"./types/postMessage.types\";\nimport { insertSpaceAtCursor } from \"./insertSpaceAtCursor\";\nimport { VisualBuilder } from \"..\";\n\nexport function handleFieldInput(e: Event): void {\n const event = e as InputEvent;\n const targetElement = event.target as HTMLElement;\n const fieldType = targetElement.getAttribute(\n VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY\n ) as FieldDataType | null;\n if (\n event.type === \"input\" &&\n ALLOWED_INLINE_EDITABLE_FIELD.includes(fieldType as FieldDataType)\n ) {\n if (\n !VisualBuilder.VisualBuilderGlobalState.value\n .focusFieldReceivedInput\n ) {\n VisualBuilder.VisualBuilderGlobalState.value.focusFieldReceivedInput =\n true;\n }\n throttledFieldSync();\n }\n}\nconst throttledFieldSync = throttle(() => {\n try {\n const visualBuilderContainer = document.querySelector(\n \".visual-builder__container\"\n ) as HTMLElement;\n if (!visualBuilderContainer) return;\n sendFieldEvent({\n visualBuilderContainer,\n eventType: VisualBuilderPostMessageEvents.SYNC_FIELD,\n });\n } catch (error) {\n console.error(\"Error in throttledFieldSync\", error);\n }\n}, 300);\n\nexport function handleFieldKeyDown(e: Event): void {\n const event = e as KeyboardEvent;\n const targetElement = event.target as HTMLElement;\n const fieldType = targetElement.getAttribute(\n VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY\n ) as FieldDataType | null;\n\n if (\n event\n .composedPath()\n .some(\n (element) =>\n element instanceof Element && element.tagName === \"BUTTON\"\n )\n ) {\n // custom space handling when a button is involved\n handleKeyDownOnButton(event);\n }\n if (fieldType === FieldDataType.NUMBER) {\n handleNumericFieldKeyDown(event);\n } else if (fieldType === FieldDataType.SINGLELINE) {\n handleSingleLineFieldKeyDown(event);\n }\n}\n\n// spaces do not work inside a button content-editable\n// this adds a space and moves the cursor ahead, the\n// button press event is also prevented, finally syncs the field\nfunction handleKeyDownOnButton(e: KeyboardEvent) {\n if (e.code === \"Space\" && e.target) {\n e.preventDefault();\n insertSpaceAtCursor(e.target as HTMLElement);\n throttledFieldSync();\n }\n}\n\nfunction handleSingleLineFieldKeyDown(e: KeyboardEvent) {\n if (e.code === \"Enter\") {\n e.preventDefault();\n }\n}\n\nfunction handleNumericFieldKeyDown(event: KeyboardEvent): void {\n const targetElement = event.target as HTMLElement;\n\n const allowedKeys = [\n \"Backspace\",\n \"Tab\",\n \"Enter\",\n \"End\",\n \"Home\",\n \"ArrowLeft\",\n \"ArrowRight\",\n \"Delete\",\n ];\n\n if (\n event.ctrlKey ||\n event.metaKey ||\n event.altKey ||\n allowedKeys.includes(event.code)\n ) {\n // Allow Ctrl, Cmd, Alt, and special keys\n return;\n }\n\n if (event.code.includes(\"Digit\")) {\n return;\n }\n\n const nonNumericAllowedCharacters = [\"-\", \".\", \"e\", \"E\"];\n\n if (!nonNumericAllowedCharacters.includes(event.key)) {\n event.preventDefault();\n return;\n }\n\n const selection = {\n startOffset: window.getSelection()?.getRangeAt(0).startOffset || 0,\n endOffset: window.getSelection()?.getRangeAt(0).endOffset || 0,\n };\n\n const existingInput = targetElement.textContent || \"\";\n const currentOutputArr = existingInput.split(\"\");\n currentOutputArr.splice(\n selection.startOffset,\n selection.endOffset - selection.startOffset,\n event.key\n );\n const currentInput = currentOutputArr.join(\"\");\n\n if (!numericInputRegex.test(currentInput)) {\n event.preventDefault();\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAAyB;AACzB,6BAA+B;AAC/B,uBAIO;AACP,mBAA8B;AAC9B,yBAA+C;AAC/C,iCAAoC;AACpC,eAA8B;AAEvB,SAAS,iBAAiB,GAAgB;AAC7C,QAAM,QAAQ;AACd,QAAM,gBAAgB,MAAM;AAC5B,QAAM,YAAY,cAAc;AAAA,IAC5B;AAAA,EACJ;AACA,MACI,MAAM,SAAS,WACf,+CAA8B,SAAS,SAA0B,GACnE;AACE,QACI,CAAC,uBAAc,yBAAyB,MACnC,yBACP;AACE,6BAAc,yBAAyB,MAAM,0BACzC;AAAA,IACR;AACA,uBAAmB;AAAA,EACvB;AACJ;AACA,IAAM,yBAAqB,2BAAS,MAAM;AACtC,MAAI;AACA,UAAM,yBAAyB,SAAS;AAAA,MACpC;AAAA,IACJ;AACA,QAAI,CAAC,uBAAwB;AAC7B,+CAAe;AAAA,MACX;AAAA,MACA,WAAW,kDAA+B;AAAA,IAC9C,CAAC;AAAA,EACL,SAAS,OAAO;AACZ,YAAQ,MAAM,+BAA+B,KAAK;AAAA,EACtD;AACJ,GAAG,GAAG;AAEC,SAAS,mBAAmB,GAAgB;AAC/C,QAAM,QAAQ;AACd,QAAM,gBAAgB,MAAM;AAC5B,QAAM,YAAY,cAAc;AAAA,IAC5B;AAAA,EACJ;AAEA,MACI,MACK,aAAa,EACb;AAAA,IACG,CAAC,YACG,mBAAmB,WAAW,QAAQ,YAAY;AAAA,EAC1D,GACN;AAEE,0BAAsB,KAAK;AAAA,EAC/B;AACA,MAAI,cAAc,2BAAc,QAAQ;AACpC,8BAA0B,KAAK;AAAA,EACnC,WAAW,cAAc,2BAAc,YAAY;AAC/C,iCAA6B,KAAK;AAAA,EACtC;AACJ;AAKA,SAAS,sBAAsB,GAAkB;AAC7C,MAAI,EAAE,SAAS,WAAW,EAAE,QAAQ;AAChC,MAAE,eAAe;AACjB,wDAAoB,EAAE,MAAqB;AAC3C,uBAAmB;AAAA,EACvB;AACJ;AAEA,SAAS,6BAA6B,GAAkB;AACpD,MAAI,EAAE,SAAS,SAAS;AACpB,MAAE,eAAe;AAAA,EACrB;AACJ;AAEA,SAAS,0BAA0B,OAA4B;AAC3D,QAAM,gBAAgB,MAAM;AAE5B,QAAM,cAAc;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AAEA,MACI,MAAM,WACN,MAAM,WACN,MAAM,UACN,YAAY,SAAS,MAAM,IAAI,GACjC;AAEE;AAAA,EACJ;AAEA,MAAI,MAAM,KAAK,SAAS,OAAO,GAAG;AAC9B;AAAA,EACJ;AAEA,QAAM,8BAA8B,CAAC,KAAK,KAAK,KAAK,GAAG;AAEvD,MAAI,CAAC,4BAA4B,SAAS,MAAM,GAAG,GAAG;AAClD,UAAM,eAAe;AACrB;AAAA,EACJ;AAEA,QAAM,YAAY;AAAA,IACd,aAAa,OAAO,aAAa,GAAG,WAAW,CAAC,EAAE,eAAe;AAAA,IACjE,WAAW,OAAO,aAAa,GAAG,WAAW,CAAC,EAAE,aAAa;AAAA,EACjE;AAEA,QAAM,gBAAgB,cAAc,eAAe;AACnD,QAAM,mBAAmB,cAAc,MAAM,EAAE;AAC/C,mBAAiB;AAAA,IACb,UAAU;AAAA,IACV,UAAU,YAAY,UAAU;AAAA,IAChC,MAAM;AAAA,EACV;AACA,QAAM,eAAe,iBAAiB,KAAK,EAAE;AAE7C,MAAI,CAAC,mCAAkB,KAAK,YAAY,GAAG;AACvC,UAAM,eAAe;AAAA,EACzB;AACJ;","names":[]}
|
|
@@ -11,6 +11,7 @@ import {
|
|
|
11
11
|
import { FieldDataType } from "./types/index.types.js";
|
|
12
12
|
import { VisualBuilderPostMessageEvents } from "./types/postMessage.types.js";
|
|
13
13
|
import { insertSpaceAtCursor } from "./insertSpaceAtCursor.js";
|
|
14
|
+
import { VisualBuilder } from "../index.js";
|
|
14
15
|
function handleFieldInput(e) {
|
|
15
16
|
const event = e;
|
|
16
17
|
const targetElement = event.target;
|
|
@@ -18,6 +19,9 @@ function handleFieldInput(e) {
|
|
|
18
19
|
VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY
|
|
19
20
|
);
|
|
20
21
|
if (event.type === "input" && ALLOWED_INLINE_EDITABLE_FIELD.includes(fieldType)) {
|
|
22
|
+
if (!VisualBuilder.VisualBuilderGlobalState.value.focusFieldReceivedInput) {
|
|
23
|
+
VisualBuilder.VisualBuilderGlobalState.value.focusFieldReceivedInput = true;
|
|
24
|
+
}
|
|
21
25
|
throttledFieldSync();
|
|
22
26
|
}
|
|
23
27
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/visualBuilder/utils/handleFieldMouseDown.ts"],"sourcesContent":["import { throttle } from \"lodash-es\";\nimport { sendFieldEvent } from \"../generators/generateOverlay\";\nimport {\n ALLOWED_INLINE_EDITABLE_FIELD,\n VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY,\n numericInputRegex,\n} from \"./constants\";\nimport { FieldDataType } from \"./types/index.types\";\nimport { VisualBuilderPostMessageEvents } from \"./types/postMessage.types\";\nimport { insertSpaceAtCursor } from \"./insertSpaceAtCursor\";\n\nexport function handleFieldInput(e: Event): void {\n const event = e as InputEvent;\n const targetElement = event.target as HTMLElement;\n const fieldType = targetElement.getAttribute(\n VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY\n ) as FieldDataType | null;\n if (\n event.type === \"input\" &&\n ALLOWED_INLINE_EDITABLE_FIELD.includes(fieldType as FieldDataType)\n ) {\n throttledFieldSync();\n }\n}\nconst throttledFieldSync = throttle(() => {\n try {\n const visualBuilderContainer = document.querySelector(\n \".visual-builder__container\"\n ) as HTMLElement;\n if (!visualBuilderContainer) return;\n sendFieldEvent({\n visualBuilderContainer,\n eventType: VisualBuilderPostMessageEvents.SYNC_FIELD,\n });\n } catch (error) {\n console.error(\"Error in throttledFieldSync\", error);\n }\n}, 300);\n\nexport function handleFieldKeyDown(e: Event): void {\n const event = e as KeyboardEvent;\n const targetElement = event.target as HTMLElement;\n const fieldType = targetElement.getAttribute(\n VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY\n ) as FieldDataType | null;\n\n if (\n event\n .composedPath()\n .some(\n (element) =>\n element instanceof Element && element.tagName === \"BUTTON\"\n )\n ) {\n // custom space handling when a button is involved\n handleKeyDownOnButton(event);\n }\n if (fieldType === FieldDataType.NUMBER) {\n handleNumericFieldKeyDown(event);\n } else if (fieldType === FieldDataType.SINGLELINE) {\n handleSingleLineFieldKeyDown(event);\n }\n}\n\n// spaces do not work inside a button content-editable\n// this adds a space and moves the cursor ahead, the\n// button press event is also prevented, finally syncs the field\nfunction handleKeyDownOnButton(e: KeyboardEvent) {\n if (e.code === \"Space\" && e.target) {\n e.preventDefault();\n insertSpaceAtCursor(e.target as HTMLElement);\n throttledFieldSync();\n }\n}\n\nfunction handleSingleLineFieldKeyDown(e: KeyboardEvent) {\n if (e.code === \"Enter\") {\n e.preventDefault();\n }\n}\n\nfunction handleNumericFieldKeyDown(event: KeyboardEvent): void {\n const targetElement = event.target as HTMLElement;\n\n const allowedKeys = [\n \"Backspace\",\n \"Tab\",\n \"Enter\",\n \"End\",\n \"Home\",\n \"ArrowLeft\",\n \"ArrowRight\",\n \"Delete\",\n ];\n\n if (\n event.ctrlKey ||\n event.metaKey ||\n event.altKey ||\n allowedKeys.includes(event.code)\n ) {\n // Allow Ctrl, Cmd, Alt, and special keys\n return;\n }\n\n if (event.code.includes(\"Digit\")) {\n return;\n }\n\n const nonNumericAllowedCharacters = [\"-\", \".\", \"e\", \"E\"];\n\n if (!nonNumericAllowedCharacters.includes(event.key)) {\n event.preventDefault();\n return;\n }\n\n const selection = {\n startOffset: window.getSelection()?.getRangeAt(0).startOffset || 0,\n endOffset: window.getSelection()?.getRangeAt(0).endOffset || 0,\n };\n\n const existingInput = targetElement.textContent || \"\";\n const currentOutputArr = existingInput.split(\"\");\n currentOutputArr.splice(\n selection.startOffset,\n selection.endOffset - selection.startOffset,\n event.key\n );\n const currentInput = currentOutputArr.join(\"\");\n\n if (!numericInputRegex.test(currentInput)) {\n event.preventDefault();\n }\n}\n"],"mappings":";;;AAAA,SAAS,gBAAgB;AACzB,SAAS,sBAAsB;AAC/B;AAAA,EACI;AAAA,EACA;AAAA,EACA;AAAA,OACG;AACP,SAAS,qBAAqB;AAC9B,SAAS,sCAAsC;AAC/C,SAAS,2BAA2B;
|
|
1
|
+
{"version":3,"sources":["../../../../src/visualBuilder/utils/handleFieldMouseDown.ts"],"sourcesContent":["import { throttle } from \"lodash-es\";\nimport { sendFieldEvent } from \"../generators/generateOverlay\";\nimport {\n ALLOWED_INLINE_EDITABLE_FIELD,\n VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY,\n numericInputRegex,\n} from \"./constants\";\nimport { FieldDataType } from \"./types/index.types\";\nimport { VisualBuilderPostMessageEvents } from \"./types/postMessage.types\";\nimport { insertSpaceAtCursor } from \"./insertSpaceAtCursor\";\nimport { VisualBuilder } from \"..\";\n\nexport function handleFieldInput(e: Event): void {\n const event = e as InputEvent;\n const targetElement = event.target as HTMLElement;\n const fieldType = targetElement.getAttribute(\n VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY\n ) as FieldDataType | null;\n if (\n event.type === \"input\" &&\n ALLOWED_INLINE_EDITABLE_FIELD.includes(fieldType as FieldDataType)\n ) {\n if (\n !VisualBuilder.VisualBuilderGlobalState.value\n .focusFieldReceivedInput\n ) {\n VisualBuilder.VisualBuilderGlobalState.value.focusFieldReceivedInput =\n true;\n }\n throttledFieldSync();\n }\n}\nconst throttledFieldSync = throttle(() => {\n try {\n const visualBuilderContainer = document.querySelector(\n \".visual-builder__container\"\n ) as HTMLElement;\n if (!visualBuilderContainer) return;\n sendFieldEvent({\n visualBuilderContainer,\n eventType: VisualBuilderPostMessageEvents.SYNC_FIELD,\n });\n } catch (error) {\n console.error(\"Error in throttledFieldSync\", error);\n }\n}, 300);\n\nexport function handleFieldKeyDown(e: Event): void {\n const event = e as KeyboardEvent;\n const targetElement = event.target as HTMLElement;\n const fieldType = targetElement.getAttribute(\n VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY\n ) as FieldDataType | null;\n\n if (\n event\n .composedPath()\n .some(\n (element) =>\n element instanceof Element && element.tagName === \"BUTTON\"\n )\n ) {\n // custom space handling when a button is involved\n handleKeyDownOnButton(event);\n }\n if (fieldType === FieldDataType.NUMBER) {\n handleNumericFieldKeyDown(event);\n } else if (fieldType === FieldDataType.SINGLELINE) {\n handleSingleLineFieldKeyDown(event);\n }\n}\n\n// spaces do not work inside a button content-editable\n// this adds a space and moves the cursor ahead, the\n// button press event is also prevented, finally syncs the field\nfunction handleKeyDownOnButton(e: KeyboardEvent) {\n if (e.code === \"Space\" && e.target) {\n e.preventDefault();\n insertSpaceAtCursor(e.target as HTMLElement);\n throttledFieldSync();\n }\n}\n\nfunction handleSingleLineFieldKeyDown(e: KeyboardEvent) {\n if (e.code === \"Enter\") {\n e.preventDefault();\n }\n}\n\nfunction handleNumericFieldKeyDown(event: KeyboardEvent): void {\n const targetElement = event.target as HTMLElement;\n\n const allowedKeys = [\n \"Backspace\",\n \"Tab\",\n \"Enter\",\n \"End\",\n \"Home\",\n \"ArrowLeft\",\n \"ArrowRight\",\n \"Delete\",\n ];\n\n if (\n event.ctrlKey ||\n event.metaKey ||\n event.altKey ||\n allowedKeys.includes(event.code)\n ) {\n // Allow Ctrl, Cmd, Alt, and special keys\n return;\n }\n\n if (event.code.includes(\"Digit\")) {\n return;\n }\n\n const nonNumericAllowedCharacters = [\"-\", \".\", \"e\", \"E\"];\n\n if (!nonNumericAllowedCharacters.includes(event.key)) {\n event.preventDefault();\n return;\n }\n\n const selection = {\n startOffset: window.getSelection()?.getRangeAt(0).startOffset || 0,\n endOffset: window.getSelection()?.getRangeAt(0).endOffset || 0,\n };\n\n const existingInput = targetElement.textContent || \"\";\n const currentOutputArr = existingInput.split(\"\");\n currentOutputArr.splice(\n selection.startOffset,\n selection.endOffset - selection.startOffset,\n event.key\n );\n const currentInput = currentOutputArr.join(\"\");\n\n if (!numericInputRegex.test(currentInput)) {\n event.preventDefault();\n }\n}\n"],"mappings":";;;AAAA,SAAS,gBAAgB;AACzB,SAAS,sBAAsB;AAC/B;AAAA,EACI;AAAA,EACA;AAAA,EACA;AAAA,OACG;AACP,SAAS,qBAAqB;AAC9B,SAAS,sCAAsC;AAC/C,SAAS,2BAA2B;AACpC,SAAS,qBAAqB;AAEvB,SAAS,iBAAiB,GAAgB;AAC7C,QAAM,QAAQ;AACd,QAAM,gBAAgB,MAAM;AAC5B,QAAM,YAAY,cAAc;AAAA,IAC5B;AAAA,EACJ;AACA,MACI,MAAM,SAAS,WACf,8BAA8B,SAAS,SAA0B,GACnE;AACE,QACI,CAAC,cAAc,yBAAyB,MACnC,yBACP;AACE,oBAAc,yBAAyB,MAAM,0BACzC;AAAA,IACR;AACA,uBAAmB;AAAA,EACvB;AACJ;AACA,IAAM,qBAAqB,SAAS,MAAM;AACtC,MAAI;AACA,UAAM,yBAAyB,SAAS;AAAA,MACpC;AAAA,IACJ;AACA,QAAI,CAAC,uBAAwB;AAC7B,mBAAe;AAAA,MACX;AAAA,MACA,WAAW,+BAA+B;AAAA,IAC9C,CAAC;AAAA,EACL,SAAS,OAAO;AACZ,YAAQ,MAAM,+BAA+B,KAAK;AAAA,EACtD;AACJ,GAAG,GAAG;AAEC,SAAS,mBAAmB,GAAgB;AAC/C,QAAM,QAAQ;AACd,QAAM,gBAAgB,MAAM;AAC5B,QAAM,YAAY,cAAc;AAAA,IAC5B;AAAA,EACJ;AAEA,MACI,MACK,aAAa,EACb;AAAA,IACG,CAAC,YACG,mBAAmB,WAAW,QAAQ,YAAY;AAAA,EAC1D,GACN;AAEE,0BAAsB,KAAK;AAAA,EAC/B;AACA,MAAI,cAAc,cAAc,QAAQ;AACpC,8BAA0B,KAAK;AAAA,EACnC,WAAW,cAAc,cAAc,YAAY;AAC/C,iCAA6B,KAAK;AAAA,EACtC;AACJ;AAKA,SAAS,sBAAsB,GAAkB;AAC7C,MAAI,EAAE,SAAS,WAAW,EAAE,QAAQ;AAChC,MAAE,eAAe;AACjB,wBAAoB,EAAE,MAAqB;AAC3C,uBAAmB;AAAA,EACvB;AACJ;AAEA,SAAS,6BAA6B,GAAkB;AACpD,MAAI,EAAE,SAAS,SAAS;AACpB,MAAE,eAAe;AAAA,EACrB;AACJ;AAEA,SAAS,0BAA0B,OAA4B;AAC3D,QAAM,gBAAgB,MAAM;AAE5B,QAAM,cAAc;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AAEA,MACI,MAAM,WACN,MAAM,WACN,MAAM,UACN,YAAY,SAAS,MAAM,IAAI,GACjC;AAEE;AAAA,EACJ;AAEA,MAAI,MAAM,KAAK,SAAS,OAAO,GAAG;AAC9B;AAAA,EACJ;AAEA,QAAM,8BAA8B,CAAC,KAAK,KAAK,KAAK,GAAG;AAEvD,MAAI,CAAC,4BAA4B,SAAS,MAAM,GAAG,GAAG;AAClD,UAAM,eAAe;AACrB;AAAA,EACJ;AAEA,QAAM,YAAY;AAAA,IACd,aAAa,OAAO,aAAa,GAAG,WAAW,CAAC,EAAE,eAAe;AAAA,IACjE,WAAW,OAAO,aAAa,GAAG,WAAW,CAAC,EAAE,aAAa;AAAA,EACjE;AAEA,QAAM,gBAAgB,cAAc,eAAe;AACnD,QAAM,mBAAmB,cAAc,MAAM,EAAE;AAC/C,mBAAiB;AAAA,IACb,UAAU;AAAA,IACV,UAAU,YAAY,UAAU;AAAA,IAChC,MAAM;AAAA,EACV;AACA,QAAM,eAAe,iBAAiB,KAAK,EAAE;AAE7C,MAAI,CAAC,kBAAkB,KAAK,YAAY,GAAG;AACvC,UAAM,eAAe;AAAA,EACzB;AACJ;","names":[]}
|
|
@@ -47,6 +47,7 @@ var import_visualBuilderPostMessage = __toESM(require("./visualBuilderPostMessag
|
|
|
47
47
|
var import_isFieldMultiple = require("./isFieldMultiple.cjs");
|
|
48
48
|
var import_handleInlineEditableField = require("./handleInlineEditableField.cjs");
|
|
49
49
|
var import_pasteAsPlainText = require("./pasteAsPlainText.cjs");
|
|
50
|
+
var import_getEntryPermissionsCached = require("./getEntryPermissionsCached.cjs");
|
|
50
51
|
async function handleIndividualFields(eventDetails, elements) {
|
|
51
52
|
const { fieldMetadata, editableElement } = eventDetails;
|
|
52
53
|
const { visualBuilderContainer, lastEditedField, resizeObserver } = elements;
|
|
@@ -65,7 +66,16 @@ async function handleIndividualFields(eventDetails, elements) {
|
|
|
65
66
|
)
|
|
66
67
|
]);
|
|
67
68
|
const fieldType = (0, import_getFieldType.getFieldType)(fieldSchema);
|
|
68
|
-
const
|
|
69
|
+
const entryAcl = await (0, import_getEntryPermissionsCached.getEntryPermissionsCached)({
|
|
70
|
+
entryUid: entry_uid,
|
|
71
|
+
contentTypeUid: content_type_uid,
|
|
72
|
+
locale
|
|
73
|
+
});
|
|
74
|
+
const { isDisabled: disabled } = (0, import_isFieldDisabled.isFieldDisabled)(
|
|
75
|
+
fieldSchema,
|
|
76
|
+
eventDetails,
|
|
77
|
+
entryAcl
|
|
78
|
+
);
|
|
69
79
|
editableElement.setAttribute(
|
|
70
80
|
import_constants.VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY,
|
|
71
81
|
fieldType
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/visualBuilder/utils/handleIndividualFields.ts"],"sourcesContent":["import { VisualBuilder } from \"..\";\nimport { VisualBuilderCslpEventDetails } from \"../types/visualBuilder.types\";\nimport { VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY } from \"./constants\";\nimport { FieldSchemaMap } from \"./fieldSchemaMap\";\nimport { getFieldData } from \"./getFieldData\";\nimport { getFieldType } from \"./getFieldType\";\nimport { handleFieldInput, handleFieldKeyDown } from \"./handleFieldMouseDown\";\nimport { isFieldDisabled } from \"./isFieldDisabled\";\nimport {\n handleAddButtonsForMultiple,\n removeAddInstanceButtons,\n} from \"./multipleElementAddButton\";\nimport { VisualBuilderPostMessageEvents } from \"./types/postMessage.types\";\nimport visualBuilderPostMessage from \"./visualBuilderPostMessage\";\nimport { isFieldMultiple } from \"./isFieldMultiple\";\nimport { handleInlineEditableField } from \"./handleInlineEditableField\";\nimport { VisualBuilderEditContext } from \"./types/index.types\";\nimport { pasteAsPlainText } from \"./pasteAsPlainText\";\n\n/**\n * It handles all the fields based on their data type and its \"multiple\" property.\n * @param eventDetails The event details object that contain cslp and field metadata.\n * @param elements The elements object that contain the visual builder wrapper.\n */\nexport async function handleIndividualFields(\n eventDetails: VisualBuilderCslpEventDetails,\n elements: VisualBuilderEditContext\n): Promise<void> {\n const { fieldMetadata, editableElement } = eventDetails;\n const { visualBuilderContainer, lastEditedField, resizeObserver } =\n elements;\n const {\n content_type_uid,\n entry_uid,\n locale,\n fieldPath,\n fieldPathWithIndex,\n } = fieldMetadata;\n\n const [fieldSchema, expectedFieldData] = await Promise.all([\n FieldSchemaMap.getFieldSchema(content_type_uid, fieldPath),\n getFieldData(\n { content_type_uid, entry_uid, locale },\n fieldPathWithIndex\n ),\n ]);\n\n const fieldType = getFieldType(fieldSchema);\n\n const { isDisabled: disabled } = isFieldDisabled(fieldSchema
|
|
1
|
+
{"version":3,"sources":["../../../../src/visualBuilder/utils/handleIndividualFields.ts"],"sourcesContent":["import { VisualBuilder } from \"..\";\nimport { VisualBuilderCslpEventDetails } from \"../types/visualBuilder.types\";\nimport { VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY } from \"./constants\";\nimport { FieldSchemaMap } from \"./fieldSchemaMap\";\nimport { getFieldData } from \"./getFieldData\";\nimport { getFieldType } from \"./getFieldType\";\nimport { handleFieldInput, handleFieldKeyDown } from \"./handleFieldMouseDown\";\nimport { isFieldDisabled } from \"./isFieldDisabled\";\nimport {\n handleAddButtonsForMultiple,\n removeAddInstanceButtons,\n} from \"./multipleElementAddButton\";\nimport { VisualBuilderPostMessageEvents } from \"./types/postMessage.types\";\nimport visualBuilderPostMessage from \"./visualBuilderPostMessage\";\nimport { isFieldMultiple } from \"./isFieldMultiple\";\nimport { handleInlineEditableField } from \"./handleInlineEditableField\";\nimport { VisualBuilderEditContext } from \"./types/index.types\";\nimport { pasteAsPlainText } from \"./pasteAsPlainText\";\nimport { getEntryPermissionsCached } from \"./getEntryPermissionsCached\";\n\n/**\n * It handles all the fields based on their data type and its \"multiple\" property.\n * @param eventDetails The event details object that contain cslp and field metadata.\n * @param elements The elements object that contain the visual builder wrapper.\n */\nexport async function handleIndividualFields(\n eventDetails: VisualBuilderCslpEventDetails,\n elements: VisualBuilderEditContext\n): Promise<void> {\n const { fieldMetadata, editableElement } = eventDetails;\n const { visualBuilderContainer, lastEditedField, resizeObserver } =\n elements;\n const {\n content_type_uid,\n entry_uid,\n locale,\n fieldPath,\n fieldPathWithIndex,\n } = fieldMetadata;\n\n const [fieldSchema, expectedFieldData] = await Promise.all([\n FieldSchemaMap.getFieldSchema(content_type_uid, fieldPath),\n getFieldData(\n { content_type_uid, entry_uid, locale },\n fieldPathWithIndex\n ),\n ]);\n\n const fieldType = getFieldType(fieldSchema);\n\n const entryAcl = await getEntryPermissionsCached({\n entryUid: entry_uid,\n contentTypeUid: content_type_uid,\n locale,\n });\n const { isDisabled: disabled } = isFieldDisabled(\n fieldSchema,\n eventDetails,\n entryAcl\n );\n\n editableElement.setAttribute(\n VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY,\n fieldType\n );\n\n if (isFieldMultiple(fieldSchema)) {\n if (lastEditedField !== editableElement) {\n const addButtonLabel =\n fieldSchema.data_type === \"blocks\"\n ? // ? `Add ${fieldSchema.display_name ?? \"Modular Block\"}`\n \"Add Section\"\n : undefined;\n\n handleAddButtonsForMultiple(\n eventDetails,\n {\n editableElement: eventDetails.editableElement,\n visualBuilderContainer: visualBuilderContainer,\n resizeObserver: resizeObserver,\n },\n {\n fieldSchema,\n expectedFieldData,\n disabled,\n label: addButtonLabel,\n }\n );\n }\n }\n\n if (disabled) {\n return;\n }\n handleInlineEditableField({\n fieldType,\n fieldSchema,\n fieldMetadata,\n expectedFieldData,\n editableElement: editableElement as HTMLElement,\n elements,\n });\n}\n\nexport function cleanIndividualFieldResidual(elements: {\n overlayWrapper: HTMLDivElement;\n visualBuilderContainer: HTMLDivElement | null;\n focusedToolbar: HTMLDivElement | null;\n resizeObserver: ResizeObserver;\n}): void {\n const { overlayWrapper, visualBuilderContainer, focusedToolbar } = elements;\n\n removeAddInstanceButtons(\n {\n eventTarget: null,\n visualBuilderContainer: visualBuilderContainer,\n overlayWrapper: overlayWrapper,\n },\n true\n );\n\n const previousSelectedEditableDOM =\n VisualBuilder.VisualBuilderGlobalState.value\n .previousSelectedEditableDOM;\n if (previousSelectedEditableDOM) {\n previousSelectedEditableDOM.removeAttribute(\n VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY\n );\n previousSelectedEditableDOM.removeAttribute(\"contenteditable\");\n previousSelectedEditableDOM.removeEventListener(\n \"input\",\n handleFieldInput\n );\n previousSelectedEditableDOM.removeEventListener(\n \"keydown\",\n handleFieldKeyDown\n );\n\n previousSelectedEditableDOM.removeEventListener(\n \"paste\",\n pasteAsPlainText\n );\n // Note - this happens in two places, 1. hideOverlay and 2. here\n // TODO maybe see all usages of both functions and try to do it in one place\n elements.resizeObserver.unobserve(previousSelectedEditableDOM);\n }\n\n const pseudoEditableElement = visualBuilderContainer?.querySelector(\n \".visual-builder__pseudo-editable-element\"\n );\n if (pseudoEditableElement) {\n elements.resizeObserver.unobserve(pseudoEditableElement);\n pseudoEditableElement.removeEventListener(\"paste\", pasteAsPlainText);\n pseudoEditableElement.remove();\n if (previousSelectedEditableDOM) {\n (previousSelectedEditableDOM as HTMLElement).style.removeProperty(\n \"visibility\"\n );\n }\n }\n\n if (focusedToolbar) {\n focusedToolbar.innerHTML = \"\";\n const toolbarEvents = [\n VisualBuilderPostMessageEvents.DELETE_INSTANCE,\n VisualBuilderPostMessageEvents.UPDATE_DISCUSSION_ID,\n ];\n toolbarEvents.forEach((event) => {\n //@ts-expect-error - We are accessing private method here, but it is necessary to clean up the event listeners.\n if (visualBuilderPostMessage?.requestMessageHandlers?.has(event)) {\n //@ts-expect-error - We are accessing private method here, but it is necessary to clean up the event listeners.\n visualBuilderPostMessage?.unregisterEvent?.(event);\n }\n });\n }\n}\n"],"mappings":"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","names":["visualBuilderPostMessage"]}
|
|
@@ -17,6 +17,7 @@ import visualBuilderPostMessage from "./visualBuilderPostMessage.js";
|
|
|
17
17
|
import { isFieldMultiple } from "./isFieldMultiple.js";
|
|
18
18
|
import { handleInlineEditableField } from "./handleInlineEditableField.js";
|
|
19
19
|
import { pasteAsPlainText } from "./pasteAsPlainText.js";
|
|
20
|
+
import { getEntryPermissionsCached } from "./getEntryPermissionsCached.js";
|
|
20
21
|
async function handleIndividualFields(eventDetails, elements) {
|
|
21
22
|
const { fieldMetadata, editableElement } = eventDetails;
|
|
22
23
|
const { visualBuilderContainer, lastEditedField, resizeObserver } = elements;
|
|
@@ -35,7 +36,16 @@ async function handleIndividualFields(eventDetails, elements) {
|
|
|
35
36
|
)
|
|
36
37
|
]);
|
|
37
38
|
const fieldType = getFieldType(fieldSchema);
|
|
38
|
-
const
|
|
39
|
+
const entryAcl = await getEntryPermissionsCached({
|
|
40
|
+
entryUid: entry_uid,
|
|
41
|
+
contentTypeUid: content_type_uid,
|
|
42
|
+
locale
|
|
43
|
+
});
|
|
44
|
+
const { isDisabled: disabled } = isFieldDisabled(
|
|
45
|
+
fieldSchema,
|
|
46
|
+
eventDetails,
|
|
47
|
+
entryAcl
|
|
48
|
+
);
|
|
39
49
|
editableElement.setAttribute(
|
|
40
50
|
VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY,
|
|
41
51
|
fieldType
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/visualBuilder/utils/handleIndividualFields.ts"],"sourcesContent":["import { VisualBuilder } from \"..\";\nimport { VisualBuilderCslpEventDetails } from \"../types/visualBuilder.types\";\nimport { VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY } from \"./constants\";\nimport { FieldSchemaMap } from \"./fieldSchemaMap\";\nimport { getFieldData } from \"./getFieldData\";\nimport { getFieldType } from \"./getFieldType\";\nimport { handleFieldInput, handleFieldKeyDown } from \"./handleFieldMouseDown\";\nimport { isFieldDisabled } from \"./isFieldDisabled\";\nimport {\n handleAddButtonsForMultiple,\n removeAddInstanceButtons,\n} from \"./multipleElementAddButton\";\nimport { VisualBuilderPostMessageEvents } from \"./types/postMessage.types\";\nimport visualBuilderPostMessage from \"./visualBuilderPostMessage\";\nimport { isFieldMultiple } from \"./isFieldMultiple\";\nimport { handleInlineEditableField } from \"./handleInlineEditableField\";\nimport { VisualBuilderEditContext } from \"./types/index.types\";\nimport { pasteAsPlainText } from \"./pasteAsPlainText\";\n\n/**\n * It handles all the fields based on their data type and its \"multiple\" property.\n * @param eventDetails The event details object that contain cslp and field metadata.\n * @param elements The elements object that contain the visual builder wrapper.\n */\nexport async function handleIndividualFields(\n eventDetails: VisualBuilderCslpEventDetails,\n elements: VisualBuilderEditContext\n): Promise<void> {\n const { fieldMetadata, editableElement } = eventDetails;\n const { visualBuilderContainer, lastEditedField, resizeObserver } =\n elements;\n const {\n content_type_uid,\n entry_uid,\n locale,\n fieldPath,\n fieldPathWithIndex,\n } = fieldMetadata;\n\n const [fieldSchema, expectedFieldData] = await Promise.all([\n FieldSchemaMap.getFieldSchema(content_type_uid, fieldPath),\n getFieldData(\n { content_type_uid, entry_uid, locale },\n fieldPathWithIndex\n ),\n ]);\n\n const fieldType = getFieldType(fieldSchema);\n\n const { isDisabled: disabled } = isFieldDisabled(fieldSchema
|
|
1
|
+
{"version":3,"sources":["../../../../src/visualBuilder/utils/handleIndividualFields.ts"],"sourcesContent":["import { VisualBuilder } from \"..\";\nimport { VisualBuilderCslpEventDetails } from \"../types/visualBuilder.types\";\nimport { VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY } from \"./constants\";\nimport { FieldSchemaMap } from \"./fieldSchemaMap\";\nimport { getFieldData } from \"./getFieldData\";\nimport { getFieldType } from \"./getFieldType\";\nimport { handleFieldInput, handleFieldKeyDown } from \"./handleFieldMouseDown\";\nimport { isFieldDisabled } from \"./isFieldDisabled\";\nimport {\n handleAddButtonsForMultiple,\n removeAddInstanceButtons,\n} from \"./multipleElementAddButton\";\nimport { VisualBuilderPostMessageEvents } from \"./types/postMessage.types\";\nimport visualBuilderPostMessage from \"./visualBuilderPostMessage\";\nimport { isFieldMultiple } from \"./isFieldMultiple\";\nimport { handleInlineEditableField } from \"./handleInlineEditableField\";\nimport { VisualBuilderEditContext } from \"./types/index.types\";\nimport { pasteAsPlainText } from \"./pasteAsPlainText\";\nimport { getEntryPermissionsCached } from \"./getEntryPermissionsCached\";\n\n/**\n * It handles all the fields based on their data type and its \"multiple\" property.\n * @param eventDetails The event details object that contain cslp and field metadata.\n * @param elements The elements object that contain the visual builder wrapper.\n */\nexport async function handleIndividualFields(\n eventDetails: VisualBuilderCslpEventDetails,\n elements: VisualBuilderEditContext\n): Promise<void> {\n const { fieldMetadata, editableElement } = eventDetails;\n const { visualBuilderContainer, lastEditedField, resizeObserver } =\n elements;\n const {\n content_type_uid,\n entry_uid,\n locale,\n fieldPath,\n fieldPathWithIndex,\n } = fieldMetadata;\n\n const [fieldSchema, expectedFieldData] = await Promise.all([\n FieldSchemaMap.getFieldSchema(content_type_uid, fieldPath),\n getFieldData(\n { content_type_uid, entry_uid, locale },\n fieldPathWithIndex\n ),\n ]);\n\n const fieldType = getFieldType(fieldSchema);\n\n const entryAcl = await getEntryPermissionsCached({\n entryUid: entry_uid,\n contentTypeUid: content_type_uid,\n locale,\n });\n const { isDisabled: disabled } = isFieldDisabled(\n fieldSchema,\n eventDetails,\n entryAcl\n );\n\n editableElement.setAttribute(\n VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY,\n fieldType\n );\n\n if (isFieldMultiple(fieldSchema)) {\n if (lastEditedField !== editableElement) {\n const addButtonLabel =\n fieldSchema.data_type === \"blocks\"\n ? // ? `Add ${fieldSchema.display_name ?? \"Modular Block\"}`\n \"Add Section\"\n : undefined;\n\n handleAddButtonsForMultiple(\n eventDetails,\n {\n editableElement: eventDetails.editableElement,\n visualBuilderContainer: visualBuilderContainer,\n resizeObserver: resizeObserver,\n },\n {\n fieldSchema,\n expectedFieldData,\n disabled,\n label: addButtonLabel,\n }\n );\n }\n }\n\n if (disabled) {\n return;\n }\n handleInlineEditableField({\n fieldType,\n fieldSchema,\n fieldMetadata,\n expectedFieldData,\n editableElement: editableElement as HTMLElement,\n elements,\n });\n}\n\nexport function cleanIndividualFieldResidual(elements: {\n overlayWrapper: HTMLDivElement;\n visualBuilderContainer: HTMLDivElement | null;\n focusedToolbar: HTMLDivElement | null;\n resizeObserver: ResizeObserver;\n}): void {\n const { overlayWrapper, visualBuilderContainer, focusedToolbar } = elements;\n\n removeAddInstanceButtons(\n {\n eventTarget: null,\n visualBuilderContainer: visualBuilderContainer,\n overlayWrapper: overlayWrapper,\n },\n true\n );\n\n const previousSelectedEditableDOM =\n VisualBuilder.VisualBuilderGlobalState.value\n .previousSelectedEditableDOM;\n if (previousSelectedEditableDOM) {\n previousSelectedEditableDOM.removeAttribute(\n VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY\n );\n previousSelectedEditableDOM.removeAttribute(\"contenteditable\");\n previousSelectedEditableDOM.removeEventListener(\n \"input\",\n handleFieldInput\n );\n previousSelectedEditableDOM.removeEventListener(\n \"keydown\",\n handleFieldKeyDown\n );\n\n previousSelectedEditableDOM.removeEventListener(\n \"paste\",\n pasteAsPlainText\n );\n // Note - this happens in two places, 1. hideOverlay and 2. here\n // TODO maybe see all usages of both functions and try to do it in one place\n elements.resizeObserver.unobserve(previousSelectedEditableDOM);\n }\n\n const pseudoEditableElement = visualBuilderContainer?.querySelector(\n \".visual-builder__pseudo-editable-element\"\n );\n if (pseudoEditableElement) {\n elements.resizeObserver.unobserve(pseudoEditableElement);\n pseudoEditableElement.removeEventListener(\"paste\", pasteAsPlainText);\n pseudoEditableElement.remove();\n if (previousSelectedEditableDOM) {\n (previousSelectedEditableDOM as HTMLElement).style.removeProperty(\n \"visibility\"\n );\n }\n }\n\n if (focusedToolbar) {\n focusedToolbar.innerHTML = \"\";\n const toolbarEvents = [\n VisualBuilderPostMessageEvents.DELETE_INSTANCE,\n VisualBuilderPostMessageEvents.UPDATE_DISCUSSION_ID,\n ];\n toolbarEvents.forEach((event) => {\n //@ts-expect-error - We are accessing private method here, but it is necessary to clean up the event listeners.\n if (visualBuilderPostMessage?.requestMessageHandlers?.has(event)) {\n //@ts-expect-error - We are accessing private method here, but it is necessary to clean up the event listeners.\n visualBuilderPostMessage?.unregisterEvent?.(event);\n }\n });\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -36,6 +36,9 @@ module.exports = __toCommonJS(isFieldDisabled_exports);
|
|
|
36
36
|
var import_configManager = __toESM(require("../../configManager/configManager.cjs"), 1);
|
|
37
37
|
var import__ = require("../index.cjs");
|
|
38
38
|
var getDisableReason = (flags) => {
|
|
39
|
+
if (flags.updateRestrictDueToEntryUpdateRestriction) {
|
|
40
|
+
return "You do not have permission to edit this entry" /* EntryUpdateRestricted */;
|
|
41
|
+
}
|
|
39
42
|
if (flags.updateRestrictDueToRole) return "You have only read access to this field" /* ReadOnly */;
|
|
40
43
|
if (flags.updateRestrictDueToNonLocalizableFields)
|
|
41
44
|
return "Editing this field is restricted in localized entries" /* LocalizedEntry */;
|
|
@@ -49,7 +52,7 @@ var getDisableReason = (flags) => {
|
|
|
49
52
|
return "This field is not editable as it doesn't match the selected variant" /* DisabledVariant */;
|
|
50
53
|
return "" /* None */;
|
|
51
54
|
};
|
|
52
|
-
var isFieldDisabled = (fieldSchemaMap, eventFieldDetails) => {
|
|
55
|
+
var isFieldDisabled = (fieldSchemaMap, eventFieldDetails, entryPermissions) => {
|
|
53
56
|
const { editableElement, fieldMetadata } = eventFieldDetails;
|
|
54
57
|
const masterLocale = import_configManager.default.get().stackDetails.masterLocale || "en-us";
|
|
55
58
|
const { locale: cmsLocale, variant } = import__.VisualBuilder.VisualBuilderGlobalState.value;
|
|
@@ -69,6 +72,9 @@ var isFieldDisabled = (fieldSchemaMap, eventFieldDetails) => {
|
|
|
69
72
|
updateRestrictDueToAudienceMode: false,
|
|
70
73
|
updateRestrictDueToDisabledVariant: false
|
|
71
74
|
};
|
|
75
|
+
if (entryPermissions && !entryPermissions.update) {
|
|
76
|
+
flags.updateRestrictDueToEntryUpdateRestriction = true;
|
|
77
|
+
}
|
|
72
78
|
if (import__.VisualBuilder.VisualBuilderGlobalState.value.audienceMode && !editableElement.classList.contains("visual-builder__variant-field") && !editableElement.classList.contains("visual-builder__base-field")) {
|
|
73
79
|
if (editableElement.classList.contains(
|
|
74
80
|
"visual-builder__disabled-variant-field"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/visualBuilder/utils/isFieldDisabled.ts"],"sourcesContent":["import { VisualBuilderCslpEventDetails } from \"../types/visualBuilder.types\";\nimport Config from \"../../configManager/configManager\";\nimport { ISchemaFieldMap } from \"./types/index.types\";\nimport { VisualBuilder } from \"..\";\nimport { FieldDetails } from \"../components/FieldToolbar\";\n\nenum DisableReason {\n ReadOnly = \"You have only read access to this field\",\n LocalizedEntry = \"Editing this field is restricted in localized entries\",\n UnlinkedVariant = \"This field is not editable as it is not linked to the selected variant\",\n AudienceMode = \"Open an Experience from Audience widget to start editing\",\n DisabledVariant = \"This field is not editable as it doesn't match the selected variant\",\n UnlocalizedVariant = \"This field is not editable as it is not localized\",\n None = \"\",\n}\n\ninterface FieldDisableState {\n isDisabled: boolean;\n reason: DisableReason;\n}\n\nconst getDisableReason = (flags: Record<string, boolean>): DisableReason => {\n if (flags.updateRestrictDueToRole) return DisableReason.ReadOnly;\n if (flags.updateRestrictDueToNonLocalizableFields)\n return DisableReason.LocalizedEntry;\n if (flags.updateRestrictDueToUnlocalizedVariant)\n return DisableReason.UnlocalizedVariant;\n if (flags.updateRestrictDueToUnlinkVariant)\n return DisableReason.UnlinkedVariant;\n if (flags.updateRestrictDueToAudienceMode)\n return DisableReason.AudienceMode;\n if (flags.updateRestrictDueToDisabledVariant)\n return DisableReason.DisabledVariant;\n return DisableReason.None;\n};\n\nexport const isFieldDisabled = (\n fieldSchemaMap: ISchemaFieldMap,\n eventFieldDetails: FieldDetails\n): FieldDisableState => {\n const { editableElement, fieldMetadata } = eventFieldDetails;\n const masterLocale = Config.get().stackDetails.masterLocale || \"en-us\";\n const { locale: cmsLocale, variant } =\n VisualBuilder.VisualBuilderGlobalState.value;\n\n const flags = {\n updateRestrictDueToRole: Boolean(\n fieldSchemaMap?.field_metadata?.updateRestrict\n ),\n updateRestrictDueToUnlinkVariant: Boolean(\n fieldSchemaMap?.field_metadata?.isUnlinkedVariant\n ),\n updateRestrictDueToUnlocalizedVariant: Boolean(\n variant && fieldMetadata.locale !== cmsLocale\n ),\n updateRestrictDueToNonLocalizableFields: Boolean(\n fieldSchemaMap?.non_localizable &&\n masterLocale !== fieldMetadata.locale\n ),\n updateRestrictDueToAudienceMode: false,\n updateRestrictDueToDisabledVariant: false,\n };\n\n if (\n VisualBuilder.VisualBuilderGlobalState.value.audienceMode &&\n !editableElement.classList.contains(\"visual-builder__variant-field\") &&\n !editableElement.classList.contains(\"visual-builder__base-field\")\n ) {\n if (\n editableElement.classList.contains(\n \"visual-builder__disabled-variant-field\"\n )\n ) {\n flags.updateRestrictDueToDisabledVariant = true;\n } else {\n flags.updateRestrictDueToAudienceMode = true;\n }\n }\n\n const isDisabled = Object.values(flags).some(Boolean);\n const reason = getDisableReason(flags);\n\n return { isDisabled, reason };\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,2BAAmB;AAEnB,eAA8B;
|
|
1
|
+
{"version":3,"sources":["../../../../src/visualBuilder/utils/isFieldDisabled.ts"],"sourcesContent":["import { VisualBuilderCslpEventDetails } from \"../types/visualBuilder.types\";\nimport Config from \"../../configManager/configManager\";\nimport { ISchemaFieldMap } from \"./types/index.types\";\nimport { VisualBuilder } from \"..\";\nimport { FieldDetails } from \"../components/FieldToolbar\";\nimport { EntryPermissions } from \"./getEntryPermissions\";\n\nenum DisableReason {\n ReadOnly = \"You have only read access to this field\",\n LocalizedEntry = \"Editing this field is restricted in localized entries\",\n UnlinkedVariant = \"This field is not editable as it is not linked to the selected variant\",\n AudienceMode = \"Open an Experience from Audience widget to start editing\",\n DisabledVariant = \"This field is not editable as it doesn't match the selected variant\",\n UnlocalizedVariant = \"This field is not editable as it is not localized\",\n None = \"\",\n EntryUpdateRestricted = \"You do not have permission to edit this entry\",\n}\n\ninterface FieldDisableState {\n isDisabled: boolean;\n reason: DisableReason;\n}\n\nconst getDisableReason = (flags: Record<string, boolean>): DisableReason => {\n if (flags.updateRestrictDueToEntryUpdateRestriction) {\n return DisableReason.EntryUpdateRestricted;\n }\n if (flags.updateRestrictDueToRole) return DisableReason.ReadOnly;\n if (flags.updateRestrictDueToNonLocalizableFields)\n return DisableReason.LocalizedEntry;\n if (flags.updateRestrictDueToUnlocalizedVariant)\n return DisableReason.UnlocalizedVariant;\n if (flags.updateRestrictDueToUnlinkVariant)\n return DisableReason.UnlinkedVariant;\n if (flags.updateRestrictDueToAudienceMode)\n return DisableReason.AudienceMode;\n if (flags.updateRestrictDueToDisabledVariant)\n return DisableReason.DisabledVariant;\n return DisableReason.None;\n};\n\nexport const isFieldDisabled = (\n fieldSchemaMap: ISchemaFieldMap,\n eventFieldDetails: FieldDetails,\n entryPermissions?: EntryPermissions\n): FieldDisableState => {\n const { editableElement, fieldMetadata } = eventFieldDetails;\n const masterLocale = Config.get().stackDetails.masterLocale || \"en-us\";\n const { locale: cmsLocale, variant } =\n VisualBuilder.VisualBuilderGlobalState.value;\n\n const flags: Record<string, boolean> = {\n updateRestrictDueToRole: Boolean(\n fieldSchemaMap?.field_metadata?.updateRestrict\n ),\n updateRestrictDueToUnlinkVariant: Boolean(\n fieldSchemaMap?.field_metadata?.isUnlinkedVariant\n ),\n updateRestrictDueToUnlocalizedVariant: Boolean(\n variant && fieldMetadata.locale !== cmsLocale\n ),\n updateRestrictDueToNonLocalizableFields: Boolean(\n fieldSchemaMap?.non_localizable &&\n masterLocale !== fieldMetadata.locale\n ),\n updateRestrictDueToAudienceMode: false,\n updateRestrictDueToDisabledVariant: false,\n };\n\n if (entryPermissions && !entryPermissions.update) {\n flags.updateRestrictDueToEntryUpdateRestriction = true;\n }\n\n if (\n VisualBuilder.VisualBuilderGlobalState.value.audienceMode &&\n !editableElement.classList.contains(\"visual-builder__variant-field\") &&\n !editableElement.classList.contains(\"visual-builder__base-field\")\n ) {\n if (\n editableElement.classList.contains(\n \"visual-builder__disabled-variant-field\"\n )\n ) {\n flags.updateRestrictDueToDisabledVariant = true;\n } else {\n flags.updateRestrictDueToAudienceMode = true;\n }\n }\n\n const isDisabled = Object.values(flags).some(Boolean);\n const reason = getDisableReason(flags);\n\n return { isDisabled, reason };\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,2BAAmB;AAEnB,eAA8B;AAoB9B,IAAM,mBAAmB,CAAC,UAAkD;AACxE,MAAI,MAAM,2CAA2C;AACjD,WAAO;AAAA,EACX;AACA,MAAI,MAAM,wBAAyB,QAAO;AAC1C,MAAI,MAAM;AACN,WAAO;AACX,MAAI,MAAM;AACN,WAAO;AACX,MAAI,MAAM;AACN,WAAO;AACX,MAAI,MAAM;AACN,WAAO;AACX,MAAI,MAAM;AACN,WAAO;AACX,SAAO;AACX;AAEO,IAAM,kBAAkB,CAC3B,gBACA,mBACA,qBACoB;AACpB,QAAM,EAAE,iBAAiB,cAAc,IAAI;AAC3C,QAAM,eAAe,qBAAAA,QAAO,IAAI,EAAE,aAAa,gBAAgB;AAC/D,QAAM,EAAE,QAAQ,WAAW,QAAQ,IAC/B,uBAAc,yBAAyB;AAE3C,QAAM,QAAiC;AAAA,IACnC,yBAAyB;AAAA,MACrB,gBAAgB,gBAAgB;AAAA,IACpC;AAAA,IACA,kCAAkC;AAAA,MAC9B,gBAAgB,gBAAgB;AAAA,IACpC;AAAA,IACA,uCAAuC;AAAA,MACnC,WAAW,cAAc,WAAW;AAAA,IACxC;AAAA,IACA,yCAAyC;AAAA,MACrC,gBAAgB,mBACZ,iBAAiB,cAAc;AAAA,IACvC;AAAA,IACA,iCAAiC;AAAA,IACjC,oCAAoC;AAAA,EACxC;AAEA,MAAI,oBAAoB,CAAC,iBAAiB,QAAQ;AAC9C,UAAM,4CAA4C;AAAA,EACtD;AAEA,MACI,uBAAc,yBAAyB,MAAM,gBAC7C,CAAC,gBAAgB,UAAU,SAAS,+BAA+B,KACnE,CAAC,gBAAgB,UAAU,SAAS,4BAA4B,GAClE;AACE,QACI,gBAAgB,UAAU;AAAA,MACtB;AAAA,IACJ,GACF;AACE,YAAM,qCAAqC;AAAA,IAC/C,OAAO;AACH,YAAM,kCAAkC;AAAA,IAC5C;AAAA,EACJ;AAEA,QAAM,aAAa,OAAO,OAAO,KAAK,EAAE,KAAK,OAAO;AACpD,QAAM,SAAS,iBAAiB,KAAK;AAErC,SAAO,EAAE,YAAY,OAAO;AAChC;","names":["Config"]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ISchemaFieldMap } from './types/index.types.cjs';
|
|
2
2
|
import { FieldDetails } from '../components/FieldToolbar.cjs';
|
|
3
|
+
import { EntryPermissions } from './getEntryPermissions.cjs';
|
|
3
4
|
import '../../cms/types/contentTypeSchema.types.cjs';
|
|
4
5
|
import '../types/visualBuilder.types.cjs';
|
|
5
6
|
import '../../cslp/types/cslp.types.cjs';
|
|
@@ -11,12 +12,13 @@ declare enum DisableReason {
|
|
|
11
12
|
AudienceMode = "Open an Experience from Audience widget to start editing",
|
|
12
13
|
DisabledVariant = "This field is not editable as it doesn't match the selected variant",
|
|
13
14
|
UnlocalizedVariant = "This field is not editable as it is not localized",
|
|
14
|
-
None = ""
|
|
15
|
+
None = "",
|
|
16
|
+
EntryUpdateRestricted = "You do not have permission to edit this entry"
|
|
15
17
|
}
|
|
16
18
|
interface FieldDisableState {
|
|
17
19
|
isDisabled: boolean;
|
|
18
20
|
reason: DisableReason;
|
|
19
21
|
}
|
|
20
|
-
declare const isFieldDisabled: (fieldSchemaMap: ISchemaFieldMap, eventFieldDetails: FieldDetails) => FieldDisableState;
|
|
22
|
+
declare const isFieldDisabled: (fieldSchemaMap: ISchemaFieldMap, eventFieldDetails: FieldDetails, entryPermissions?: EntryPermissions) => FieldDisableState;
|
|
21
23
|
|
|
22
24
|
export { isFieldDisabled };
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ISchemaFieldMap } from './types/index.types.js';
|
|
2
2
|
import { FieldDetails } from '../components/FieldToolbar.js';
|
|
3
|
+
import { EntryPermissions } from './getEntryPermissions.js';
|
|
3
4
|
import '../../cms/types/contentTypeSchema.types.js';
|
|
4
5
|
import '../types/visualBuilder.types.js';
|
|
5
6
|
import '../../cslp/types/cslp.types.js';
|
|
@@ -11,12 +12,13 @@ declare enum DisableReason {
|
|
|
11
12
|
AudienceMode = "Open an Experience from Audience widget to start editing",
|
|
12
13
|
DisabledVariant = "This field is not editable as it doesn't match the selected variant",
|
|
13
14
|
UnlocalizedVariant = "This field is not editable as it is not localized",
|
|
14
|
-
None = ""
|
|
15
|
+
None = "",
|
|
16
|
+
EntryUpdateRestricted = "You do not have permission to edit this entry"
|
|
15
17
|
}
|
|
16
18
|
interface FieldDisableState {
|
|
17
19
|
isDisabled: boolean;
|
|
18
20
|
reason: DisableReason;
|
|
19
21
|
}
|
|
20
|
-
declare const isFieldDisabled: (fieldSchemaMap: ISchemaFieldMap, eventFieldDetails: FieldDetails) => FieldDisableState;
|
|
22
|
+
declare const isFieldDisabled: (fieldSchemaMap: ISchemaFieldMap, eventFieldDetails: FieldDetails, entryPermissions?: EntryPermissions) => FieldDisableState;
|
|
21
23
|
|
|
22
24
|
export { isFieldDisabled };
|
|
@@ -4,6 +4,9 @@ import "../../chunk-5WRI5ZAA.js";
|
|
|
4
4
|
import Config from "../../configManager/configManager.js";
|
|
5
5
|
import { VisualBuilder } from "../index.js";
|
|
6
6
|
var getDisableReason = (flags) => {
|
|
7
|
+
if (flags.updateRestrictDueToEntryUpdateRestriction) {
|
|
8
|
+
return "You do not have permission to edit this entry" /* EntryUpdateRestricted */;
|
|
9
|
+
}
|
|
7
10
|
if (flags.updateRestrictDueToRole) return "You have only read access to this field" /* ReadOnly */;
|
|
8
11
|
if (flags.updateRestrictDueToNonLocalizableFields)
|
|
9
12
|
return "Editing this field is restricted in localized entries" /* LocalizedEntry */;
|
|
@@ -17,7 +20,7 @@ var getDisableReason = (flags) => {
|
|
|
17
20
|
return "This field is not editable as it doesn't match the selected variant" /* DisabledVariant */;
|
|
18
21
|
return "" /* None */;
|
|
19
22
|
};
|
|
20
|
-
var isFieldDisabled = (fieldSchemaMap, eventFieldDetails) => {
|
|
23
|
+
var isFieldDisabled = (fieldSchemaMap, eventFieldDetails, entryPermissions) => {
|
|
21
24
|
const { editableElement, fieldMetadata } = eventFieldDetails;
|
|
22
25
|
const masterLocale = Config.get().stackDetails.masterLocale || "en-us";
|
|
23
26
|
const { locale: cmsLocale, variant } = VisualBuilder.VisualBuilderGlobalState.value;
|
|
@@ -37,6 +40,9 @@ var isFieldDisabled = (fieldSchemaMap, eventFieldDetails) => {
|
|
|
37
40
|
updateRestrictDueToAudienceMode: false,
|
|
38
41
|
updateRestrictDueToDisabledVariant: false
|
|
39
42
|
};
|
|
43
|
+
if (entryPermissions && !entryPermissions.update) {
|
|
44
|
+
flags.updateRestrictDueToEntryUpdateRestriction = true;
|
|
45
|
+
}
|
|
40
46
|
if (VisualBuilder.VisualBuilderGlobalState.value.audienceMode && !editableElement.classList.contains("visual-builder__variant-field") && !editableElement.classList.contains("visual-builder__base-field")) {
|
|
41
47
|
if (editableElement.classList.contains(
|
|
42
48
|
"visual-builder__disabled-variant-field"
|