@strapi/content-manager 0.0.0-experimental.6d27139261823fc4b18da9f3c10b271d5010dbf0 → 0.0.0-experimental.702fcf7aec9be82c4485a8bd49e235293c37f022
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/dist/_chunks/{ComponentConfigurationPage-DyDkPajU.js → ComponentConfigurationPage-BaGEn2nd.js} +4 -4
- package/dist/_chunks/{ComponentConfigurationPage-DyDkPajU.js.map → ComponentConfigurationPage-BaGEn2nd.js.map} +1 -1
- package/dist/_chunks/{ComponentConfigurationPage-9lRmRdIr.mjs → ComponentConfigurationPage-EIYRzIr6.mjs} +4 -4
- package/dist/_chunks/{ComponentConfigurationPage-9lRmRdIr.mjs.map → ComponentConfigurationPage-EIYRzIr6.mjs.map} +1 -1
- package/dist/_chunks/{EditConfigurationPage-DValmA0m.js → EditConfigurationPage-BQGdJb6Z.js} +4 -4
- package/dist/_chunks/{EditConfigurationPage-DValmA0m.js.map → EditConfigurationPage-BQGdJb6Z.js.map} +1 -1
- package/dist/_chunks/{EditConfigurationPage-Bk893vVY.mjs → EditConfigurationPage-ByaNUj_q.mjs} +4 -4
- package/dist/_chunks/{EditConfigurationPage-Bk893vVY.mjs.map → EditConfigurationPage-ByaNUj_q.mjs.map} +1 -1
- package/dist/_chunks/{EditViewPage-DiNFdFqP.mjs → EditViewPage-BgeC8L9X.mjs} +50 -10
- package/dist/_chunks/EditViewPage-BgeC8L9X.mjs.map +1 -0
- package/dist/_chunks/{EditViewPage-Dk7Eaft4.js → EditViewPage-s_qVLiC6.js} +49 -9
- package/dist/_chunks/EditViewPage-s_qVLiC6.js.map +1 -0
- package/dist/_chunks/{Field-DH2OaqUP.js → Field-0AdG2t0D.js} +100 -46
- package/dist/_chunks/Field-0AdG2t0D.js.map +1 -0
- package/dist/_chunks/{Field-Dv_HTFTa.mjs → Field-DbpDop_h.mjs} +96 -42
- package/dist/_chunks/Field-DbpDop_h.mjs.map +1 -0
- package/dist/_chunks/{Form-B_dUDizM.js → Form-BpC9hWi-.js} +16 -8
- package/dist/_chunks/Form-BpC9hWi-.js.map +1 -0
- package/dist/_chunks/{Form-Dy6P4HgH.mjs → Form-Xb-u04dn.mjs} +16 -8
- package/dist/_chunks/Form-Xb-u04dn.mjs.map +1 -0
- package/dist/_chunks/{History-DrwsD1Vc.mjs → History-DLl10NEN.mjs} +42 -99
- package/dist/_chunks/History-DLl10NEN.mjs.map +1 -0
- package/dist/_chunks/{History-BT4w83Oa.js → History-sJ61vusJ.js} +40 -97
- package/dist/_chunks/History-sJ61vusJ.js.map +1 -0
- package/dist/_chunks/{ListConfigurationPage-CuYrMcW3.js → ListConfigurationPage-C00guBjQ.js} +5 -4
- package/dist/_chunks/ListConfigurationPage-C00guBjQ.js.map +1 -0
- package/dist/_chunks/{ListConfigurationPage-BxIP0jRy.mjs → ListConfigurationPage-mbZQmEZ3.mjs} +6 -5
- package/dist/_chunks/ListConfigurationPage-mbZQmEZ3.mjs.map +1 -0
- package/dist/_chunks/{ListViewPage-BvpwNur7.js → ListViewPage-DDVpN1ql.js} +53 -19
- package/dist/_chunks/ListViewPage-DDVpN1ql.js.map +1 -0
- package/dist/_chunks/{ListViewPage-5a1vw-OK.mjs → ListViewPage-iRJ5AUjS.mjs} +49 -15
- package/dist/_chunks/ListViewPage-iRJ5AUjS.mjs.map +1 -0
- package/dist/_chunks/{NoContentTypePage-UqEiWKkM.js → NoContentTypePage-BvkII4H4.js} +2 -2
- package/dist/_chunks/{NoContentTypePage-UqEiWKkM.js.map → NoContentTypePage-BvkII4H4.js.map} +1 -1
- package/dist/_chunks/{NoContentTypePage-Bm6tRcd3.mjs → NoContentTypePage-DI8VWkVK.mjs} +2 -2
- package/dist/_chunks/{NoContentTypePage-Bm6tRcd3.mjs.map → NoContentTypePage-DI8VWkVK.mjs.map} +1 -1
- package/dist/_chunks/{NoPermissionsPage-C_vGRo8Q.js → NoPermissionsPage-BZjHQTpb.js} +2 -2
- package/dist/_chunks/{NoPermissionsPage-C_vGRo8Q.js.map → NoPermissionsPage-BZjHQTpb.js.map} +1 -1
- package/dist/_chunks/{NoPermissionsPage-BHPqn_tQ.mjs → NoPermissionsPage-DckHN3oZ.mjs} +2 -2
- package/dist/_chunks/{NoPermissionsPage-BHPqn_tQ.mjs.map → NoPermissionsPage-DckHN3oZ.mjs.map} +1 -1
- package/dist/_chunks/Preview-BDOUHeaW.mjs +267 -0
- package/dist/_chunks/Preview-BDOUHeaW.mjs.map +1 -0
- package/dist/_chunks/Preview-CS2aV-BU.js +286 -0
- package/dist/_chunks/Preview-CS2aV-BU.js.map +1 -0
- package/dist/_chunks/{Relations-CznVF6LS.js → Relations-DEIQO39t.js} +71 -35
- package/dist/_chunks/Relations-DEIQO39t.js.map +1 -0
- package/dist/_chunks/{Relations-C7fPyh5P.mjs → Relations-J-8HC3zX.mjs} +72 -36
- package/dist/_chunks/Relations-J-8HC3zX.mjs.map +1 -0
- package/dist/_chunks/{en-CbaIuYoB.mjs → en-CfIXaZf9.mjs} +25 -13
- package/dist/_chunks/{en-CbaIuYoB.mjs.map → en-CfIXaZf9.mjs.map} +1 -1
- package/dist/_chunks/{en-otD_UBJi.js → en-DTWPCdTS.js} +25 -13
- package/dist/_chunks/{en-otD_UBJi.js.map → en-DTWPCdTS.js.map} +1 -1
- package/dist/_chunks/{es-EUonQTon.js → es-9K52xZIr.js} +2 -2
- package/dist/_chunks/{ja-CcFe8diO.js.map → es-9K52xZIr.js.map} +1 -1
- package/dist/_chunks/{es-CeXiYflN.mjs → es-D34tqjMw.mjs} +2 -2
- package/dist/_chunks/{es-CeXiYflN.mjs.map → es-D34tqjMw.mjs.map} +1 -1
- package/dist/_chunks/{fr-CD9VFbPM.mjs → fr--pg5jUbt.mjs} +13 -3
- package/dist/_chunks/{fr-CD9VFbPM.mjs.map → fr--pg5jUbt.mjs.map} +1 -1
- package/dist/_chunks/{fr-B7kGGg3E.js → fr-B2Kyv8Z9.js} +13 -3
- package/dist/_chunks/{fr-B7kGGg3E.js.map → fr-B2Kyv8Z9.js.map} +1 -1
- package/dist/_chunks/{index-BJ6uTqLL.mjs → index-DzTs9ga-.mjs} +1122 -911
- package/dist/_chunks/index-DzTs9ga-.mjs.map +1 -0
- package/dist/_chunks/{index-D9UmmBcM.js → index-uXHSvmlw.js} +1118 -906
- package/dist/_chunks/index-uXHSvmlw.js.map +1 -0
- package/dist/_chunks/{ja-CcFe8diO.js → ja-7sfIbjxE.js} +2 -2
- package/dist/_chunks/{es-EUonQTon.js.map → ja-7sfIbjxE.js.map} +1 -1
- package/dist/_chunks/{ja-CtsUxOvk.mjs → ja-BHqhDq4V.mjs} +2 -2
- package/dist/_chunks/{ja-CtsUxOvk.mjs.map → ja-BHqhDq4V.mjs.map} +1 -1
- package/dist/_chunks/{layout-uomiIGbG.mjs → layout-BhIZkPuB.mjs} +5 -4
- package/dist/_chunks/{layout-uomiIGbG.mjs.map → layout-BhIZkPuB.mjs.map} +1 -1
- package/dist/_chunks/{layout-kfu5Wtix.js → layout-zA_F2rU4.js} +5 -4
- package/dist/_chunks/{layout-kfu5Wtix.js.map → layout-zA_F2rU4.js.map} +1 -1
- package/dist/_chunks/{objects-gigeqt7s.js → objects-BcXOv6_9.js} +2 -4
- package/dist/_chunks/{objects-gigeqt7s.js.map → objects-BcXOv6_9.js.map} +1 -1
- package/dist/_chunks/{objects-mKMAmfec.mjs → objects-D6yBsdmx.mjs} +2 -4
- package/dist/_chunks/{objects-mKMAmfec.mjs.map → objects-D6yBsdmx.mjs.map} +1 -1
- package/dist/_chunks/{relations-DiDufGSA.mjs → relations-BoCufH_z.mjs} +6 -7
- package/dist/_chunks/relations-BoCufH_z.mjs.map +1 -0
- package/dist/_chunks/{relations-DKENrxko.js → relations-DnUyZQaL.js} +6 -7
- package/dist/_chunks/relations-DnUyZQaL.js.map +1 -0
- package/dist/_chunks/{usePrev-B9w_-eYc.js → useDebounce-CtcjDB3L.js} +14 -1
- package/dist/_chunks/useDebounce-CtcjDB3L.js.map +1 -0
- package/dist/_chunks/useDebounce-DmuSJIF3.mjs +29 -0
- package/dist/_chunks/useDebounce-DmuSJIF3.mjs.map +1 -0
- package/dist/admin/index.js +2 -1
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +4 -3
- package/dist/admin/src/exports.d.ts +1 -1
- package/dist/admin/src/hooks/useDocument.d.ts +32 -1
- package/dist/admin/src/pages/EditView/EditViewPage.d.ts +9 -1
- package/dist/admin/src/pages/EditView/components/DocumentStatus.d.ts +2 -2
- package/dist/admin/src/pages/EditView/components/Header.d.ts +11 -11
- package/dist/admin/src/preview/components/PreviewContent.d.ts +2 -0
- package/dist/admin/src/preview/components/PreviewHeader.d.ts +2 -0
- package/dist/admin/src/preview/components/PreviewSidePanel.d.ts +3 -0
- package/dist/admin/src/preview/constants.d.ts +1 -0
- package/dist/admin/src/preview/index.d.ts +4 -0
- package/dist/admin/src/preview/pages/Preview.d.ts +11 -0
- package/dist/admin/src/preview/routes.d.ts +3 -0
- package/dist/admin/src/preview/services/preview.d.ts +3 -0
- package/dist/admin/src/router.d.ts +1 -1
- package/dist/admin/src/services/documents.d.ts +3 -1
- package/dist/server/index.js +378 -162
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +378 -162
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/src/bootstrap.d.ts.map +1 -1
- package/dist/server/src/controllers/collection-types.d.ts.map +1 -1
- package/dist/server/src/controllers/index.d.ts.map +1 -1
- package/dist/server/src/controllers/relations.d.ts.map +1 -1
- package/dist/server/src/controllers/utils/metadata.d.ts +15 -1
- package/dist/server/src/controllers/utils/metadata.d.ts.map +1 -1
- package/dist/server/src/history/services/history.d.ts.map +1 -1
- package/dist/server/src/history/services/lifecycles.d.ts.map +1 -1
- package/dist/server/src/history/services/utils.d.ts +2 -3
- package/dist/server/src/history/services/utils.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +4 -4
- package/dist/server/src/preview/constants.d.ts +2 -0
- package/dist/server/src/preview/constants.d.ts.map +1 -0
- package/dist/server/src/preview/controllers/index.d.ts +2 -0
- package/dist/server/src/preview/controllers/index.d.ts.map +1 -0
- package/dist/server/src/preview/controllers/preview.d.ts +13 -0
- package/dist/server/src/preview/controllers/preview.d.ts.map +1 -0
- package/dist/server/src/preview/controllers/validation/preview.d.ts +6 -0
- package/dist/server/src/preview/controllers/validation/preview.d.ts.map +1 -0
- package/dist/server/src/preview/index.d.ts +4 -0
- package/dist/server/src/preview/index.d.ts.map +1 -0
- package/dist/server/src/preview/routes/index.d.ts +8 -0
- package/dist/server/src/preview/routes/index.d.ts.map +1 -0
- package/dist/server/src/preview/routes/preview.d.ts +4 -0
- package/dist/server/src/preview/routes/preview.d.ts.map +1 -0
- package/dist/server/src/preview/services/index.d.ts +15 -0
- package/dist/server/src/preview/services/index.d.ts.map +1 -0
- package/dist/server/src/preview/services/preview-config.d.ts +30 -0
- package/dist/server/src/preview/services/preview-config.d.ts.map +1 -0
- package/dist/server/src/preview/services/preview.d.ts +12 -0
- package/dist/server/src/preview/services/preview.d.ts.map +1 -0
- package/dist/server/src/preview/utils.d.ts +18 -0
- package/dist/server/src/preview/utils.d.ts.map +1 -0
- package/dist/server/src/routes/index.d.ts.map +1 -1
- package/dist/server/src/services/document-manager.d.ts.map +1 -1
- package/dist/server/src/services/document-metadata.d.ts +8 -8
- package/dist/server/src/services/document-metadata.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +4 -4
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/utils/configuration/index.d.ts +2 -2
- package/dist/server/src/services/utils/configuration/layouts.d.ts +2 -2
- package/dist/server/src/utils/index.d.ts +2 -0
- package/dist/server/src/utils/index.d.ts.map +1 -1
- package/dist/shared/contracts/collection-types.d.ts +3 -1
- package/dist/shared/contracts/collection-types.d.ts.map +1 -1
- package/dist/shared/contracts/index.d.ts +1 -0
- package/dist/shared/contracts/index.d.ts.map +1 -1
- package/dist/shared/contracts/preview.d.ts +27 -0
- package/dist/shared/contracts/preview.d.ts.map +1 -0
- package/dist/shared/index.js +4 -0
- package/dist/shared/index.js.map +1 -1
- package/dist/shared/index.mjs +4 -0
- package/dist/shared/index.mjs.map +1 -1
- package/package.json +14 -14
- package/dist/_chunks/EditViewPage-DiNFdFqP.mjs.map +0 -1
- package/dist/_chunks/EditViewPage-Dk7Eaft4.js.map +0 -1
- package/dist/_chunks/Field-DH2OaqUP.js.map +0 -1
- package/dist/_chunks/Field-Dv_HTFTa.mjs.map +0 -1
- package/dist/_chunks/Form-B_dUDizM.js.map +0 -1
- package/dist/_chunks/Form-Dy6P4HgH.mjs.map +0 -1
- package/dist/_chunks/History-BT4w83Oa.js.map +0 -1
- package/dist/_chunks/History-DrwsD1Vc.mjs.map +0 -1
- package/dist/_chunks/ListConfigurationPage-BxIP0jRy.mjs.map +0 -1
- package/dist/_chunks/ListConfigurationPage-CuYrMcW3.js.map +0 -1
- package/dist/_chunks/ListViewPage-5a1vw-OK.mjs.map +0 -1
- package/dist/_chunks/ListViewPage-BvpwNur7.js.map +0 -1
- package/dist/_chunks/Relations-C7fPyh5P.mjs.map +0 -1
- package/dist/_chunks/Relations-CznVF6LS.js.map +0 -1
- package/dist/_chunks/index-BJ6uTqLL.mjs.map +0 -1
- package/dist/_chunks/index-D9UmmBcM.js.map +0 -1
- package/dist/_chunks/relations-DKENrxko.js.map +0 -1
- package/dist/_chunks/relations-DiDufGSA.mjs.map +0 -1
- package/dist/_chunks/usePrev-B9w_-eYc.js.map +0 -1
- package/dist/_chunks/usePrev-DH6iah0A.mjs +0 -16
- package/dist/_chunks/usePrev-DH6iah0A.mjs.map +0 -1
- package/strapi-server.js +0 -3
@@ -7,8 +7,8 @@ const designSystem = require("@strapi/design-system");
|
|
7
7
|
const reactIntl = require("react-intl");
|
8
8
|
const reactRouterDom = require("react-router-dom");
|
9
9
|
const styledComponents = require("styled-components");
|
10
|
-
const index = require("./index-
|
11
|
-
const Field = require("./Field-
|
10
|
+
const index = require("./index-uXHSvmlw.js");
|
11
|
+
const Field = require("./Field-0AdG2t0D.js");
|
12
12
|
function _interopNamespace(e) {
|
13
13
|
if (e && e.__esModule)
|
14
14
|
return e;
|
@@ -31,11 +31,20 @@ const React__namespace = /* @__PURE__ */ _interopNamespace(React);
|
|
31
31
|
const useOnce = (effect) => React__namespace.useEffect(effect, emptyDeps);
|
32
32
|
const emptyDeps = [];
|
33
33
|
const FormLayout = ({ layout }) => {
|
34
|
+
const { formatMessage } = reactIntl.useIntl();
|
35
|
+
const { model } = index.useDoc();
|
34
36
|
return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { direction: "column", alignItems: "stretch", gap: 6, children: layout.map((panel, index2) => {
|
35
37
|
if (panel.some((row) => row.some((field) => field.type === "dynamiczone"))) {
|
36
38
|
const [row] = panel;
|
37
39
|
const [field] = row;
|
38
|
-
|
40
|
+
const fieldWithTranslatedLabel = {
|
41
|
+
...field,
|
42
|
+
label: formatMessage({
|
43
|
+
id: `content-manager.content-types.${model}.${field.name}`,
|
44
|
+
defaultMessage: field.label
|
45
|
+
})
|
46
|
+
};
|
47
|
+
return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Root, { gap: 4, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Item, { col: 12, s: 12, xs: 12, direction: "column", alignItems: "stretch", children: /* @__PURE__ */ jsxRuntime.jsx(Field.MemoizedInputRenderer, { ...fieldWithTranslatedLabel }) }) }, field.name);
|
39
48
|
}
|
40
49
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
41
50
|
designSystem.Box,
|
@@ -49,6 +58,13 @@ const FormLayout = ({ layout }) => {
|
|
49
58
|
paddingBottom: 6,
|
50
59
|
borderColor: "neutral150",
|
51
60
|
children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { direction: "column", alignItems: "stretch", gap: 6, children: panel.map((row, gridRowIndex) => /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Root, { gap: 4, children: row.map(({ size, ...field }) => {
|
61
|
+
const fieldWithTranslatedLabel = {
|
62
|
+
...field,
|
63
|
+
label: formatMessage({
|
64
|
+
id: `content-manager.content-types.${model}.${field.name}`,
|
65
|
+
defaultMessage: field.label
|
66
|
+
})
|
67
|
+
};
|
52
68
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
53
69
|
designSystem.Grid.Item,
|
54
70
|
{
|
@@ -57,7 +73,7 @@ const FormLayout = ({ layout }) => {
|
|
57
73
|
xs: 12,
|
58
74
|
direction: "column",
|
59
75
|
alignItems: "stretch",
|
60
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(Field.MemoizedInputRenderer, { ...
|
76
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(Field.MemoizedInputRenderer, { ...fieldWithTranslatedLabel })
|
61
77
|
},
|
62
78
|
field.name
|
63
79
|
);
|
@@ -87,7 +103,8 @@ const EditViewPage = () => {
|
|
87
103
|
components,
|
88
104
|
collectionType,
|
89
105
|
id,
|
90
|
-
model
|
106
|
+
model,
|
107
|
+
hasError
|
91
108
|
} = index.useDoc();
|
92
109
|
const hasDraftAndPublished = schema?.options?.draftAndPublish ?? false;
|
93
110
|
useOnce(() => {
|
@@ -118,6 +135,9 @@ const EditViewPage = () => {
|
|
118
135
|
const form = document?.id ? document : Field.createDefaultForm(schema, components);
|
119
136
|
return Field.transformDocument(schema, components)(form);
|
120
137
|
}, [document, isCreatingDocument, isSingleType, schema, components]);
|
138
|
+
if (hasError) {
|
139
|
+
return /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Error, {});
|
140
|
+
}
|
121
141
|
if (isLoading && !document?.documentId) {
|
122
142
|
return /* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Loading, {});
|
123
143
|
}
|
@@ -129,16 +149,35 @@ const EditViewPage = () => {
|
|
129
149
|
setQuery({ status: status2 }, "push", true);
|
130
150
|
}
|
131
151
|
};
|
132
|
-
|
152
|
+
let documentTitle = "Untitled";
|
153
|
+
if (mainField !== "id" && document?.[mainField]) {
|
154
|
+
documentTitle = document[mainField];
|
155
|
+
} else if (isSingleType && schema?.info.displayName) {
|
156
|
+
documentTitle = schema.info.displayName;
|
157
|
+
}
|
158
|
+
const validateSync = (values, options) => {
|
159
|
+
const yupSchema = index.createYupSchema(schema?.attributes, components, {
|
160
|
+
status,
|
161
|
+
...options
|
162
|
+
});
|
163
|
+
return yupSchema.validateSync(values, { abortEarly: false });
|
164
|
+
};
|
133
165
|
return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Main, { paddingLeft: 10, paddingRight: 10, children: [
|
134
|
-
/* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Title, { children:
|
166
|
+
/* @__PURE__ */ jsxRuntime.jsx(strapiAdmin.Page.Title, { children: documentTitle }),
|
135
167
|
/* @__PURE__ */ jsxRuntime.jsx(
|
136
168
|
strapiAdmin.Form,
|
137
169
|
{
|
138
170
|
disabled: hasDraftAndPublished && status === "published",
|
139
171
|
initialValues,
|
140
172
|
method: isCreatingDocument ? "POST" : "PUT",
|
141
|
-
|
173
|
+
validate: (values, options) => {
|
174
|
+
const yupSchema = index.createYupSchema(schema?.attributes, components, {
|
175
|
+
status,
|
176
|
+
...options
|
177
|
+
});
|
178
|
+
return yupSchema.validate(values, { abortEarly: false });
|
179
|
+
},
|
180
|
+
initialErrors: location?.state?.forceValidation ? validateSync(initialValues, {}) : {},
|
142
181
|
children: ({ resetForm }) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
143
182
|
/* @__PURE__ */ jsxRuntime.jsx(
|
144
183
|
index.Header,
|
@@ -230,4 +269,5 @@ const ProtectedEditViewPage = () => {
|
|
230
269
|
};
|
231
270
|
exports.EditViewPage = EditViewPage;
|
232
271
|
exports.ProtectedEditViewPage = ProtectedEditViewPage;
|
233
|
-
|
272
|
+
exports.getDocumentStatus = getDocumentStatus;
|
273
|
+
//# sourceMappingURL=EditViewPage-s_qVLiC6.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"EditViewPage-s_qVLiC6.js","sources":["../../admin/src/hooks/useOnce.ts","../../admin/src/pages/EditView/components/FormLayout.tsx","../../admin/src/pages/EditView/EditViewPage.tsx"],"sourcesContent":["/* eslint-disable react-hooks/exhaustive-deps */\nimport * as React from 'react';\n\nexport const useOnce = (effect: React.EffectCallback) => React.useEffect(effect, emptyDeps);\n\nconst emptyDeps: React.DependencyList = [];\n","import { Box, Flex, Grid } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { useDoc } from '../../../hooks/useDocument';\nimport { EditLayout } from '../../../hooks/useDocumentLayout';\n\nimport { InputRenderer } from './InputRenderer';\n\ninterface FormLayoutProps extends Pick<EditLayout, 'layout'> {}\n\nconst FormLayout = ({ layout }: FormLayoutProps) => {\n const { formatMessage } = useIntl();\n const { model } = useDoc();\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {layout.map((panel, index) => {\n if (panel.some((row) => row.some((field) => field.type === 'dynamiczone'))) {\n const [row] = panel;\n const [field] = row;\n\n const fieldWithTranslatedLabel = {\n ...field,\n label: formatMessage({\n id: `content-manager.content-types.${model}.${field.name}`,\n defaultMessage: field.label,\n }),\n };\n\n return (\n <Grid.Root key={field.name} gap={4}>\n <Grid.Item col={12} s={12} xs={12} direction=\"column\" alignItems=\"stretch\">\n <InputRenderer {...fieldWithTranslatedLabel} />\n </Grid.Item>\n </Grid.Root>\n );\n }\n\n return (\n <Box\n key={index}\n hasRadius\n background=\"neutral0\"\n shadow=\"tableShadow\"\n paddingLeft={6}\n paddingRight={6}\n paddingTop={6}\n paddingBottom={6}\n borderColor=\"neutral150\"\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {panel.map((row, gridRowIndex) => (\n <Grid.Root key={gridRowIndex} gap={4}>\n {row.map(({ size, ...field }) => {\n const fieldWithTranslatedLabel = {\n ...field,\n label: formatMessage({\n id: `content-manager.content-types.${model}.${field.name}`,\n defaultMessage: field.label,\n }),\n };\n return (\n <Grid.Item\n col={size}\n key={field.name}\n s={12}\n xs={12}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <InputRenderer {...fieldWithTranslatedLabel} />\n </Grid.Item>\n );\n })}\n </Grid.Root>\n ))}\n </Flex>\n </Box>\n );\n })}\n </Flex>\n );\n};\n\nexport { FormLayout, FormLayoutProps };\n","import * as React from 'react';\n\nimport {\n Page,\n Blocker,\n Form,\n useRBAC,\n useNotification,\n useQueryParams,\n} from '@strapi/admin/strapi-admin';\nimport { Grid, Main, Tabs } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { useLocation, useParams } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { SINGLE_TYPES } from '../../constants/collections';\nimport { PERMISSIONS } from '../../constants/plugin';\nimport { DocumentRBAC, useDocumentRBAC } from '../../features/DocumentRBAC';\nimport { type UseDocument, useDoc } from '../../hooks/useDocument';\nimport { useDocumentLayout } from '../../hooks/useDocumentLayout';\nimport { useLazyComponents } from '../../hooks/useLazyComponents';\nimport { useOnce } from '../../hooks/useOnce';\nimport { getTranslation } from '../../utils/translations';\nimport { createYupSchema } from '../../utils/validation';\n\nimport { FormLayout } from './components/FormLayout';\nimport { Header } from './components/Header';\nimport { Panels } from './components/Panels';\nimport { transformDocument } from './utils/data';\nimport { createDefaultForm } from './utils/forms';\n\n/* -------------------------------------------------------------------------------------------------\n * EditViewPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst EditViewPage = () => {\n const location = useLocation();\n const [\n {\n query: { status },\n },\n setQuery,\n ] = useQueryParams<{ status: 'draft' | 'published' }>({\n status: 'draft',\n });\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n\n const {\n document,\n meta,\n isLoading: isLoadingDocument,\n schema,\n components,\n collectionType,\n id,\n model,\n hasError,\n } = useDoc();\n\n const hasDraftAndPublished = schema?.options?.draftAndPublish ?? false;\n\n useOnce(() => {\n /**\n * We only ever want to fire the notification once otherwise\n * whenever the app re-renders it'll pop up regardless of\n * what we do because the state comes from react-router-dom\n */\n if (location?.state && 'error' in location.state) {\n toggleNotification({\n type: 'danger',\n message: location.state.error,\n timeout: 5000,\n });\n }\n });\n\n const isLoadingActionsRBAC = useDocumentRBAC('EditViewPage', (state) => state.isLoading);\n\n const isSingleType = collectionType === SINGLE_TYPES;\n\n /**\n * single-types don't current have an id, but because they're a singleton\n * we can simply use the update operation to continuously update the same\n * document with varying params.\n */\n const isCreatingDocument = !id && !isSingleType;\n\n const {\n isLoading: isLoadingLayout,\n edit: {\n layout,\n settings: { mainField },\n },\n } = useDocumentLayout(model);\n\n const { isLazyLoading } = useLazyComponents([]);\n\n const isLoading = isLoadingActionsRBAC || isLoadingDocument || isLoadingLayout || isLazyLoading;\n\n /**\n * Here we prepare the form for editing, we need to:\n * - remove prohibited fields from the document (passwords | ADD YOURS WHEN THERES A NEW ONE)\n * - swap out count objects on relations for empty arrays\n * - set __temp_key__ on array objects for drag & drop\n *\n * We also prepare the form for new documents, so we need to:\n * - set default values on fields\n */\n const initialValues = React.useMemo(() => {\n if ((!document && !isCreatingDocument && !isSingleType) || !schema) {\n return undefined;\n }\n\n /**\n * Check that we have an ID so we know the\n * document has been created in some way.\n */\n const form = document?.id ? document : createDefaultForm(schema, components);\n\n return transformDocument(schema, components)(form);\n }, [document, isCreatingDocument, isSingleType, schema, components]);\n\n if (hasError) {\n return <Page.Error />;\n }\n\n if (isLoading && !document?.documentId) {\n return <Page.Loading />;\n }\n\n if (!initialValues) {\n return <Page.Error />;\n }\n\n const handleTabChange = (status: string) => {\n if (status === 'published' || status === 'draft') {\n setQuery({ status }, 'push', true);\n }\n };\n\n /**\n * We look to see what the mainField is from the configuration, if it's an id\n * we don't use it because it's a uuid format and not very user friendly.\n * Instead, we display the schema name for single-type documents\n * or \"Untitled\".\n */\n let documentTitle = 'Untitled';\n if (mainField !== 'id' && document?.[mainField]) {\n documentTitle = document[mainField];\n } else if (isSingleType && schema?.info.displayName) {\n documentTitle = schema.info.displayName;\n }\n\n const validateSync = (values: Record<string, unknown>, options: Record<string, string>) => {\n const yupSchema = createYupSchema(schema?.attributes, components, {\n status,\n ...options,\n });\n\n return yupSchema.validateSync(values, { abortEarly: false });\n };\n\n return (\n <Main paddingLeft={10} paddingRight={10}>\n <Page.Title>{documentTitle}</Page.Title>\n <Form\n disabled={hasDraftAndPublished && status === 'published'}\n initialValues={initialValues}\n method={isCreatingDocument ? 'POST' : 'PUT'}\n validate={(values: Record<string, unknown>, options: Record<string, string>) => {\n const yupSchema = createYupSchema(schema?.attributes, components, {\n status,\n ...options,\n });\n\n return yupSchema.validate(values, { abortEarly: false });\n }}\n initialErrors={location?.state?.forceValidation ? validateSync(initialValues, {}) : {}}\n >\n {({ resetForm }) => (\n <>\n <Header\n isCreating={isCreatingDocument}\n status={hasDraftAndPublished ? getDocumentStatus(document, meta) : undefined}\n title={documentTitle}\n />\n <Tabs.Root variant=\"simple\" value={status} onValueChange={handleTabChange}>\n <Tabs.List\n aria-label={formatMessage({\n id: getTranslation('containers.edit.tabs.label'),\n defaultMessage: 'Document status',\n })}\n >\n {hasDraftAndPublished ? (\n <>\n <StatusTab value=\"draft\">\n {formatMessage({\n id: getTranslation('containers.edit.tabs.draft'),\n defaultMessage: 'draft',\n })}\n </StatusTab>\n <StatusTab\n disabled={!meta || meta.availableStatus.length === 0}\n value=\"published\"\n >\n {formatMessage({\n id: getTranslation('containers.edit.tabs.published'),\n defaultMessage: 'published',\n })}\n </StatusTab>\n </>\n ) : null}\n </Tabs.List>\n <Grid.Root paddingTop={8} gap={4}>\n <Grid.Item col={9} s={12} direction=\"column\" alignItems=\"stretch\">\n <Tabs.Content value=\"draft\">\n <FormLayout layout={layout} />\n </Tabs.Content>\n <Tabs.Content value=\"published\">\n <FormLayout layout={layout} />\n </Tabs.Content>\n </Grid.Item>\n <Grid.Item col={3} s={12} direction=\"column\" alignItems=\"stretch\">\n <Panels />\n </Grid.Item>\n </Grid.Root>\n </Tabs.Root>\n <Blocker\n // We reset the form to the published version to avoid errors like – https://strapi-inc.atlassian.net/browse/CONTENT-2284\n onProceed={resetForm}\n />\n </>\n )}\n </Form>\n </Main>\n );\n};\n\nconst StatusTab = styled(Tabs.Trigger)`\n text-transform: uppercase;\n`;\n\n/**\n * @internal\n * @description Returns the status of the document where its latest state takes priority,\n * this typically will be \"published\" unless a user has edited their draft in which we should\n * display \"modified\".\n */\nconst getDocumentStatus = (\n document: ReturnType<UseDocument>['document'],\n meta: ReturnType<UseDocument>['meta']\n): 'draft' | 'published' | 'modified' => {\n const docStatus = document?.status;\n const statuses = meta?.availableStatus ?? [];\n\n /**\n * Creating an entry\n */\n if (!docStatus) {\n return 'draft';\n }\n\n /**\n * We're viewing a draft, but the document could have a published version\n */\n if (docStatus === 'draft' && statuses.find((doc) => doc.publishedAt !== null)) {\n return 'published';\n }\n\n return docStatus;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedEditViewPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedEditViewPage = () => {\n const { slug = '' } = useParams<{\n slug: string;\n }>();\n const {\n permissions = [],\n isLoading,\n error,\n } = useRBAC(\n PERMISSIONS.map((action) => ({\n action,\n subject: slug,\n }))\n );\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n if (error || !slug) {\n return <Page.Error />;\n }\n\n return (\n <Page.Protect permissions={permissions}>\n {({ permissions }) => (\n <DocumentRBAC permissions={permissions}>\n <EditViewPage />\n </DocumentRBAC>\n )}\n </Page.Protect>\n );\n};\n\nexport { EditViewPage, ProtectedEditViewPage, getDocumentStatus };\n"],"names":["React","useIntl","useDoc","jsx","Flex","index","Grid","InputRenderer","Box","useLocation","useQueryParams","useNotification","useDocumentRBAC","SINGLE_TYPES","useDocumentLayout","useLazyComponents","createDefaultForm","transformDocument","Page","status","createYupSchema","jsxs","Main","Form","Fragment","Header","Tabs","getTranslation","Panels","Blocker","styled","useParams","useRBAC","PERMISSIONS","permissions","DocumentRBAC"],"mappings":"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"}
|
@@ -5,19 +5,19 @@ const strapiAdmin = require("@strapi/admin/strapi-admin");
|
|
5
5
|
const designSystem = require("@strapi/design-system");
|
6
6
|
const pipe$1 = require("lodash/fp/pipe");
|
7
7
|
const reactIntl = require("react-intl");
|
8
|
-
const index = require("./index-
|
8
|
+
const index = require("./index-uXHSvmlw.js");
|
9
9
|
const fractionalIndexing = require("fractional-indexing");
|
10
|
-
const Relations = require("./Relations-
|
10
|
+
const Relations = require("./Relations-DEIQO39t.js");
|
11
11
|
const Icons = require("@strapi/icons");
|
12
12
|
const styledComponents = require("styled-components");
|
13
13
|
const ComponentIcon = require("./ComponentIcon-BXdiCGQp.js");
|
14
14
|
const reactDndHtml5Backend = require("react-dnd-html5-backend");
|
15
15
|
const useDragAndDrop = require("./useDragAndDrop-J0TUUbR6.js");
|
16
|
-
const objects = require("./objects-
|
16
|
+
const objects = require("./objects-BcXOv6_9.js");
|
17
17
|
const slate = require("slate");
|
18
18
|
const slateHistory = require("slate-history");
|
19
19
|
const slateReact = require("slate-react");
|
20
|
-
const
|
20
|
+
const useDebounce = require("./useDebounce-CtcjDB3L.js");
|
21
21
|
const Toolbar = require("@radix-ui/react-toolbar");
|
22
22
|
const reactRouterDom = require("react-router-dom");
|
23
23
|
const CodeMirror = require("codemirror5");
|
@@ -768,7 +768,7 @@ const ImageDialog = () => {
|
|
768
768
|
const nodeImage = {
|
769
769
|
...expectedImage,
|
770
770
|
alternativeText: expectedImage.alternativeText || expectedImage.name,
|
771
|
-
url:
|
771
|
+
url: useDebounce.prefixFileUrlWithBackendUrl(image.url)
|
772
772
|
};
|
773
773
|
return nodeImage;
|
774
774
|
});
|
@@ -1783,6 +1783,7 @@ const DragItem = styledComponents.styled(designSystem.Flex)`
|
|
1783
1783
|
}
|
1784
1784
|
`;
|
1785
1785
|
const DragIconButton = styledComponents.styled(designSystem.IconButton)`
|
1786
|
+
user-select: none;
|
1786
1787
|
display: flex;
|
1787
1788
|
align-items: center;
|
1788
1789
|
justify-content: center;
|
@@ -1911,6 +1912,7 @@ const DragAndDropElement = ({
|
|
1911
1912
|
DragIconButton,
|
1912
1913
|
{
|
1913
1914
|
tag: "div",
|
1915
|
+
contentEditable: false,
|
1914
1916
|
role: "button",
|
1915
1917
|
tabIndex: 0,
|
1916
1918
|
withTooltip: false,
|
@@ -2668,7 +2670,7 @@ const Initializer = ({ disabled, name: name2, onClick }) => {
|
|
2668
2670
|
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { justifyContent: "center", children: /* @__PURE__ */ jsxRuntime.jsx(CircleIcon, {}) }),
|
2669
2671
|
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { justifyContent: "center", children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textColor: "primary600", variant: "pi", fontWeight: "bold", children: formatMessage({
|
2670
2672
|
id: index.getTranslation("components.empty-repeatable"),
|
2671
|
-
defaultMessage: "No entry yet. Click
|
2673
|
+
defaultMessage: "No entry yet. Click to add one."
|
2672
2674
|
}) }) })
|
2673
2675
|
] })
|
2674
2676
|
}
|
@@ -2690,6 +2692,7 @@ const NonRepeatableComponent = ({
|
|
2690
2692
|
children,
|
2691
2693
|
layout
|
2692
2694
|
}) => {
|
2695
|
+
const { formatMessage } = reactIntl.useIntl();
|
2693
2696
|
const { value } = strapiAdmin.useField(name2);
|
2694
2697
|
const level = Relations.useComponent("NonRepeatableComponent", (state) => state.level);
|
2695
2698
|
const isNested = level > 0;
|
@@ -2706,6 +2709,10 @@ const NonRepeatableComponent = ({
|
|
2706
2709
|
children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { direction: "column", alignItems: "stretch", gap: 6, children: layout.map((row, index2) => {
|
2707
2710
|
return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Root, { gap: 4, children: row.map(({ size, ...field }) => {
|
2708
2711
|
const completeFieldName = `${name2}.${field.name}`;
|
2712
|
+
const translatedLabel = formatMessage({
|
2713
|
+
id: `content-manager.components.${attribute.component}.${field.name}`,
|
2714
|
+
defaultMessage: field.label
|
2715
|
+
});
|
2709
2716
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
2710
2717
|
designSystem.Grid.Item,
|
2711
2718
|
{
|
@@ -2714,7 +2721,7 @@ const NonRepeatableComponent = ({
|
|
2714
2721
|
xs: 12,
|
2715
2722
|
direction: "column",
|
2716
2723
|
alignItems: "stretch",
|
2717
|
-
children: children({ ...field, name: completeFieldName })
|
2724
|
+
children: children({ ...field, label: translatedLabel, name: completeFieldName })
|
2718
2725
|
},
|
2719
2726
|
completeFieldName
|
2720
2727
|
);
|
@@ -2736,13 +2743,34 @@ const RepeatableComponent = ({
|
|
2736
2743
|
const { search: searchString } = reactRouterDom.useLocation();
|
2737
2744
|
const search = React__namespace.useMemo(() => new URLSearchParams(searchString), [searchString]);
|
2738
2745
|
const { components } = index.useDoc();
|
2739
|
-
const {
|
2746
|
+
const {
|
2747
|
+
value = [],
|
2748
|
+
error,
|
2749
|
+
rawError
|
2750
|
+
} = strapiAdmin.useField(name2);
|
2740
2751
|
const addFieldRow = strapiAdmin.useForm("RepeatableComponent", (state) => state.addFieldRow);
|
2741
2752
|
const moveFieldRow = strapiAdmin.useForm("RepeatableComponent", (state) => state.moveFieldRow);
|
2742
2753
|
const removeFieldRow = strapiAdmin.useForm("RepeatableComponent", (state) => state.removeFieldRow);
|
2743
2754
|
const { max = Infinity } = attribute;
|
2744
2755
|
const [collapseToOpen, setCollapseToOpen] = React__namespace.useState("");
|
2745
2756
|
const [liveText, setLiveText] = React__namespace.useState("");
|
2757
|
+
React__namespace.useEffect(() => {
|
2758
|
+
const hasNestedErrors = rawError && Array.isArray(rawError) && rawError.length > 0;
|
2759
|
+
const hasNestedValue = value && Array.isArray(value) && value.length > 0;
|
2760
|
+
if (hasNestedErrors && hasNestedValue) {
|
2761
|
+
const errorOpenItems = rawError.map((_, idx) => {
|
2762
|
+
return value[idx] ? value[idx].__temp_key__ : null;
|
2763
|
+
}).filter((value2) => !!value2);
|
2764
|
+
if (errorOpenItems && errorOpenItems.length > 0) {
|
2765
|
+
setCollapseToOpen((collapseToOpen2) => {
|
2766
|
+
if (!errorOpenItems.includes(collapseToOpen2)) {
|
2767
|
+
return errorOpenItems[0];
|
2768
|
+
}
|
2769
|
+
return collapseToOpen2;
|
2770
|
+
});
|
2771
|
+
}
|
2772
|
+
}
|
2773
|
+
}, [rawError, value]);
|
2746
2774
|
const componentTmpKeyWithFocussedField = React__namespace.useMemo(() => {
|
2747
2775
|
if (search.has("field")) {
|
2748
2776
|
const fieldParam = search.get("field");
|
@@ -2757,7 +2785,7 @@ const RepeatableComponent = ({
|
|
2757
2785
|
}
|
2758
2786
|
return void 0;
|
2759
2787
|
}, [search, name2, value]);
|
2760
|
-
const prevValue =
|
2788
|
+
const prevValue = useDebounce.usePrev(value);
|
2761
2789
|
React__namespace.useEffect(() => {
|
2762
2790
|
if (prevValue && prevValue.length < value.length) {
|
2763
2791
|
setCollapseToOpen(value[value.length - 1].__temp_key__);
|
@@ -2895,6 +2923,10 @@ const RepeatableComponent = ({
|
|
2895
2923
|
children: layout.map((row, index22) => {
|
2896
2924
|
return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Root, { gap: 4, children: row.map(({ size, ...field }) => {
|
2897
2925
|
const completeFieldName = `${nameWithIndex}.${field.name}`;
|
2926
|
+
const translatedLabel = formatMessage({
|
2927
|
+
id: `content-manager.components.${attribute.component}.${field.name}`,
|
2928
|
+
defaultMessage: field.label
|
2929
|
+
});
|
2898
2930
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
2899
2931
|
designSystem.Grid.Item,
|
2900
2932
|
{
|
@@ -2903,7 +2935,11 @@ const RepeatableComponent = ({
|
|
2903
2935
|
xs: 12,
|
2904
2936
|
direction: "column",
|
2905
2937
|
alignItems: "stretch",
|
2906
|
-
children: children({
|
2938
|
+
children: children({
|
2939
|
+
...field,
|
2940
|
+
label: translatedLabel,
|
2941
|
+
name: completeFieldName
|
2942
|
+
})
|
2907
2943
|
},
|
2908
2944
|
completeFieldName
|
2909
2945
|
);
|
@@ -3290,18 +3326,6 @@ const NotAllowedInput = ({ hint, label, required, name: name2 }) => {
|
|
3290
3326
|
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Field.Hint, {})
|
3291
3327
|
] });
|
3292
3328
|
};
|
3293
|
-
function useDebounce(value, delay) {
|
3294
|
-
const [debouncedValue, setDebouncedValue] = React.useState(value);
|
3295
|
-
React.useEffect(() => {
|
3296
|
-
const handler = setTimeout(() => {
|
3297
|
-
setDebouncedValue(value);
|
3298
|
-
}, delay);
|
3299
|
-
return () => {
|
3300
|
-
clearTimeout(handler);
|
3301
|
-
};
|
3302
|
-
}, [value, delay]);
|
3303
|
-
return debouncedValue;
|
3304
|
-
}
|
3305
3329
|
const uidApi = index.contentManagerApi.injectEndpoints({
|
3306
3330
|
endpoints: (builder) => ({
|
3307
3331
|
getDefaultUID: builder.query({
|
@@ -3353,7 +3377,7 @@ const UIDInput = React__namespace.forwardRef(
|
|
3353
3377
|
const [showRegenerate, setShowRegenerate] = React__namespace.useState(false);
|
3354
3378
|
const isCloning = reactRouterDom.useMatch(index.CLONE_PATH) !== null;
|
3355
3379
|
const field = strapiAdmin.useField(name2);
|
3356
|
-
const debouncedValue = useDebounce(field.value, 300);
|
3380
|
+
const debouncedValue = useDebounce.useDebounce(field.value, 300);
|
3357
3381
|
const hasChanged = debouncedValue !== field.initialValue;
|
3358
3382
|
const { toggleNotification } = strapiAdmin.useNotification();
|
3359
3383
|
const { _unstableFormatAPIError: formatAPIError } = strapiAdmin.useAPIErrorHandler();
|
@@ -4910,7 +4934,7 @@ const Wysiwyg = React__namespace.forwardRef(
|
|
4910
4934
|
const handleSelectAssets = (files) => {
|
4911
4935
|
const formattedFiles = files.map((f) => ({
|
4912
4936
|
alt: f.alternativeText || f.name,
|
4913
|
-
url:
|
4937
|
+
url: useDebounce.prefixFileUrlWithBackendUrl(f.url),
|
4914
4938
|
mime: f.mime
|
4915
4939
|
}));
|
4916
4940
|
insertFile(editorRef, formattedFiles);
|
@@ -4969,15 +4993,19 @@ const Wysiwyg = React__namespace.forwardRef(
|
|
4969
4993
|
);
|
4970
4994
|
const MemoizedWysiwyg = React__namespace.memo(Wysiwyg);
|
4971
4995
|
const InputRenderer = ({ visible, hint: providedHint, ...props }) => {
|
4972
|
-
const { id } = index.useDoc();
|
4996
|
+
const { id, document: document2, collectionType } = index.useDoc();
|
4973
4997
|
const isFormDisabled = strapiAdmin.useForm("InputRenderer", (state) => state.disabled);
|
4974
4998
|
const isInDynamicZone = useDynamicZone("isInDynamicZone", (state) => state.isInDynamicZone);
|
4975
4999
|
const canCreateFields = index.useDocumentRBAC("InputRenderer", (rbac) => rbac.canCreateFields);
|
4976
5000
|
const canReadFields = index.useDocumentRBAC("InputRenderer", (rbac) => rbac.canReadFields);
|
4977
5001
|
const canUpdateFields = index.useDocumentRBAC("InputRenderer", (rbac) => rbac.canUpdateFields);
|
4978
5002
|
const canUserAction = index.useDocumentRBAC("InputRenderer", (rbac) => rbac.canUserAction);
|
4979
|
-
|
4980
|
-
|
5003
|
+
let idToCheck = id;
|
5004
|
+
if (collectionType === index.SINGLE_TYPES) {
|
5005
|
+
idToCheck = document2?.documentId;
|
5006
|
+
}
|
5007
|
+
const editableFields = idToCheck ? canUpdateFields : canCreateFields;
|
5008
|
+
const readableFields = idToCheck ? canReadFields : canCreateFields;
|
4981
5009
|
const canUserReadField = canUserAction(props.name, readableFields, props.type);
|
4982
5010
|
const canUserEditField = canUserAction(props.name, editableFields, props.type);
|
4983
5011
|
const fields = strapiAdmin.useStrapiApp("InputRenderer", (app) => app.fields);
|
@@ -4988,6 +5016,7 @@ const InputRenderer = ({ visible, hint: providedHint, ...props }) => {
|
|
4988
5016
|
const {
|
4989
5017
|
edit: { components }
|
4990
5018
|
} = index.useDocLayout();
|
5019
|
+
const field = strapiAdmin.useField(props.name);
|
4991
5020
|
if (!visible) {
|
4992
5021
|
return null;
|
4993
5022
|
}
|
@@ -4998,7 +5027,7 @@ const InputRenderer = ({ visible, hint: providedHint, ...props }) => {
|
|
4998
5027
|
if (attributeHasCustomFieldProperty(props.attribute)) {
|
4999
5028
|
const CustomInput = lazyComponentStore[props.attribute.customField];
|
5000
5029
|
if (CustomInput) {
|
5001
|
-
return /* @__PURE__ */ jsxRuntime.jsx(CustomInput, { ...props, hint, disabled: fieldIsDisabled });
|
5030
|
+
return /* @__PURE__ */ jsxRuntime.jsx(CustomInput, { ...props, ...field, hint, disabled: fieldIsDisabled });
|
5002
5031
|
}
|
5003
5032
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
5004
5033
|
strapiAdmin.InputRenderer,
|
@@ -5159,6 +5188,14 @@ const DynamicComponent = ({
|
|
5159
5188
|
React__namespace.useEffect(() => {
|
5160
5189
|
dragPreviewRef(reactDndHtml5Backend.getEmptyImage(), { captureDraggingState: false });
|
5161
5190
|
}, [dragPreviewRef, index$1]);
|
5191
|
+
const accordionValue = React__namespace.useId();
|
5192
|
+
const { value = [], rawError } = strapiAdmin.useField(`${name2}.${index$1}`);
|
5193
|
+
const [collapseToOpen, setCollapseToOpen] = React__namespace.useState("");
|
5194
|
+
React__namespace.useEffect(() => {
|
5195
|
+
if (rawError && value) {
|
5196
|
+
setCollapseToOpen(accordionValue);
|
5197
|
+
}
|
5198
|
+
}, [rawError, value, accordionValue]);
|
5162
5199
|
const composedBoxRefs = designSystem.useComposedRefs(boxRef, dropRef);
|
5163
5200
|
const accordionActions = disabled ? null : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
5164
5201
|
/* @__PURE__ */ jsxRuntime.jsx(
|
@@ -5224,10 +5261,9 @@ const DynamicComponent = ({
|
|
5224
5261
|
] })
|
5225
5262
|
] });
|
5226
5263
|
const accordionTitle = title ? `${displayName} ${title}` : displayName;
|
5227
|
-
const accordionValue = React__namespace.useId();
|
5228
5264
|
return /* @__PURE__ */ jsxRuntime.jsxs(ComponentContainer, { tag: "li", width: "100%", children: [
|
5229
5265
|
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { justifyContent: "center", children: /* @__PURE__ */ jsxRuntime.jsx(Rectangle, { background: "neutral200" }) }),
|
5230
|
-
/* @__PURE__ */ jsxRuntime.jsx(StyledBox, { ref: composedBoxRefs, hasRadius: true, children: isDragging ? /* @__PURE__ */ jsxRuntime.jsx(Preview, {}) : /* @__PURE__ */ jsxRuntime.jsx(designSystem.Accordion.Root, { children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Accordion.Item, { value: accordionValue, children: [
|
5266
|
+
/* @__PURE__ */ jsxRuntime.jsx(StyledBox, { ref: composedBoxRefs, hasRadius: true, children: isDragging ? /* @__PURE__ */ jsxRuntime.jsx(Preview, {}) : /* @__PURE__ */ jsxRuntime.jsx(designSystem.Accordion.Root, { value: collapseToOpen, onValueChange: setCollapseToOpen, children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Accordion.Item, { value: accordionValue, children: [
|
5231
5267
|
/* @__PURE__ */ jsxRuntime.jsxs(designSystem.Accordion.Header, { children: [
|
5232
5268
|
/* @__PURE__ */ jsxRuntime.jsx(
|
5233
5269
|
designSystem.Accordion.Trigger,
|
@@ -5238,21 +5274,39 @@ const DynamicComponent = ({
|
|
5238
5274
|
),
|
5239
5275
|
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Accordion.Actions, { children: accordionActions })
|
5240
5276
|
] }),
|
5241
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Accordion.Content, { children: /* @__PURE__ */ jsxRuntime.jsx(AccordionContentRadius, { background: "neutral0", children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { paddingLeft: 6, paddingRight: 6, paddingTop: 6, paddingBottom: 6, children:
|
5242
|
-
|
5243
|
-
|
5244
|
-
|
5245
|
-
|
5246
|
-
|
5247
|
-
|
5248
|
-
|
5249
|
-
|
5250
|
-
|
5251
|
-
|
5252
|
-
|
5253
|
-
|
5254
|
-
|
5255
|
-
|
5277
|
+
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Accordion.Content, { children: /* @__PURE__ */ jsxRuntime.jsx(AccordionContentRadius, { background: "neutral0", children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { paddingLeft: 6, paddingRight: 6, paddingTop: 6, paddingBottom: 6, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Root, { gap: 4, children: components[componentUid]?.layout?.map((row, rowInd) => /* @__PURE__ */ jsxRuntime.jsx(
|
5278
|
+
designSystem.Grid.Item,
|
5279
|
+
{
|
5280
|
+
col: 12,
|
5281
|
+
s: 12,
|
5282
|
+
xs: 12,
|
5283
|
+
direction: "column",
|
5284
|
+
alignItems: "stretch",
|
5285
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Grid.Root, { gap: 4, children: row.map(({ size, ...field }) => {
|
5286
|
+
const fieldName = `${name2}.${index$1}.${field.name}`;
|
5287
|
+
const fieldWithTranslatedLabel = {
|
5288
|
+
...field,
|
5289
|
+
label: formatMessage({
|
5290
|
+
id: `content-manager.components.${componentUid}.${field.name}`,
|
5291
|
+
defaultMessage: field.label
|
5292
|
+
})
|
5293
|
+
};
|
5294
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
5295
|
+
designSystem.Grid.Item,
|
5296
|
+
{
|
5297
|
+
col: size,
|
5298
|
+
s: 12,
|
5299
|
+
xs: 12,
|
5300
|
+
direction: "column",
|
5301
|
+
alignItems: "stretch",
|
5302
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(MemoizedInputRenderer, { ...fieldWithTranslatedLabel, name: fieldName })
|
5303
|
+
},
|
5304
|
+
fieldName
|
5305
|
+
);
|
5306
|
+
}) })
|
5307
|
+
},
|
5308
|
+
rowInd
|
5309
|
+
)) }) }) }) })
|
5256
5310
|
] }) }) })
|
5257
5311
|
] });
|
5258
5312
|
};
|
@@ -5558,4 +5612,4 @@ exports.transformDocument = transformDocument;
|
|
5558
5612
|
exports.useDynamicZone = useDynamicZone;
|
5559
5613
|
exports.useFieldHint = useFieldHint;
|
5560
5614
|
exports.useLazyComponents = useLazyComponents;
|
5561
|
-
//# sourceMappingURL=Field-
|
5615
|
+
//# sourceMappingURL=Field-0AdG2t0D.js.map
|