@strapi/content-manager 5.16.0 → 5.17.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/dist/admin/history/components/VersionContent.js +24 -3
  2. package/dist/admin/history/components/VersionContent.js.map +1 -1
  3. package/dist/admin/history/components/VersionContent.mjs +25 -4
  4. package/dist/admin/history/components/VersionContent.mjs.map +1 -1
  5. package/dist/admin/pages/EditView/EditViewPage.js +11 -1
  6. package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
  7. package/dist/admin/pages/EditView/EditViewPage.mjs +11 -1
  8. package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
  9. package/dist/admin/pages/EditView/components/DocumentActions.js +33 -47
  10. package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
  11. package/dist/admin/pages/EditView/components/DocumentActions.mjs +34 -48
  12. package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
  13. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js +12 -1
  14. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
  15. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs +13 -2
  16. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -1
  17. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +13 -2
  18. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
  19. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +14 -3
  20. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
  21. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +18 -5
  22. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
  23. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +20 -7
  24. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
  25. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js +86 -118
  26. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.js.map +1 -1
  27. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs +86 -118
  28. package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/WysiwygNav.mjs.map +1 -1
  29. package/dist/admin/pages/EditView/components/FormLayout.js +27 -3
  30. package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
  31. package/dist/admin/pages/EditView/components/FormLayout.mjs +27 -3
  32. package/dist/admin/pages/EditView/components/FormLayout.mjs.map +1 -1
  33. package/dist/admin/pages/EditView/utils/data.js +103 -0
  34. package/dist/admin/pages/EditView/utils/data.js.map +1 -1
  35. package/dist/admin/pages/EditView/utils/data.mjs +103 -1
  36. package/dist/admin/pages/EditView/utils/data.mjs.map +1 -1
  37. package/dist/admin/src/pages/EditView/utils/data.d.ts +19 -1
  38. package/dist/admin/src/utils/validation.d.ts +1 -0
  39. package/dist/admin/utils/validation.js +16 -5
  40. package/dist/admin/utils/validation.js.map +1 -1
  41. package/dist/admin/utils/validation.mjs +16 -5
  42. package/dist/admin/utils/validation.mjs.map +1 -1
  43. package/package.json +5 -5
@@ -1,7 +1,7 @@
1
1
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
2
2
  import * as React from 'react';
3
3
  import { useNotification, useAPIErrorHandler, useQueryParams, useForm } from '@strapi/admin/strapi-admin';
4
- import { Menu, Flex, Button, VisuallyHidden, Dialog, Modal, Typography, Radio } from '@strapi/design-system';
4
+ import { Flex, Button, Menu, VisuallyHidden, Dialog, Modal, Typography, Radio } from '@strapi/design-system';
5
5
  import { More, Cross, WarningCircle } from '@strapi/icons';
6
6
  import mapValues from 'lodash/fp/mapValues';
7
7
  import get from 'lodash/get';
@@ -9,7 +9,6 @@ import merge from 'lodash/merge';
9
9
  import set from 'lodash/set';
10
10
  import { useIntl } from 'react-intl';
11
11
  import { useNavigate, useMatch, useParams } from 'react-router-dom';
12
- import { styled } from 'styled-components';
13
12
  import { PUBLISHED_AT_ATTRIBUTE_NAME } from '../../../constants/attributes.mjs';
14
13
  import { SINGLE_TYPES } from '../../../constants/collections.mjs';
15
14
  import { useDocumentRBAC } from '../../../features/DocumentRBAC.mjs';
@@ -21,6 +20,7 @@ import { LIST_PATH, CLONE_PATH } from '../../../router.mjs';
21
20
  import { useGetDraftRelationCountQuery as useLazyGetDraftRelationCountQuery, useUpdateDocumentMutation } from '../../../services/documents.mjs';
22
21
  import { isBaseQueryError, buildValidParams } from '../../../utils/api.mjs';
23
22
  import { getTranslation } from '../../../utils/translations.mjs';
23
+ import { handleInvisibleAttributes } from '../utils/data.mjs';
24
24
  import { useRelationModal } from './FormInputs/Relations/RelationModal.mjs';
25
25
 
26
26
  const connectRelationToParent = (parentDataToUpdate, fieldToConnect, data, fieldToConnectUID)=>{
@@ -153,11 +153,6 @@ const DocumentActionButton = (action)=>{
153
153
  ]
154
154
  });
155
155
  };
156
- const MenuItem = styled(Menu.Item)`
157
- &:hover {
158
- background: ${({ theme, isVariantDanger, isDisabled })=>isVariantDanger && !isDisabled ? theme.colors.danger100 : 'neutral'};
159
- }
160
- `;
161
156
  const DocumentActionsMenu = ({ actions, children, label, variant = 'tertiary' })=>{
162
157
  const [isOpen, setIsOpen] = React.useState(false);
163
158
  const [dialogId, setDialogId] = React.useState(null);
@@ -219,27 +214,19 @@ const DocumentActionsMenu = ({ actions, children, label, variant = 'tertiary' })
219
214
  popoverPlacement: "bottom-end",
220
215
  children: [
221
216
  actions.map((action)=>{
222
- return /*#__PURE__*/ jsx(MenuItem, {
217
+ return /*#__PURE__*/ jsx(Menu.Item, {
223
218
  disabled: action.disabled,
224
219
  /* @ts-expect-error – TODO: this is an error in the DS where it is most likely a synthetic event, not regular. */ onSelect: handleClick(action),
225
220
  display: "block",
226
- isVariantDanger: action.variant === 'danger',
227
- isDisabled: action.disabled,
221
+ variant: action.variant === 'danger' ? action.variant : 'default',
222
+ startIcon: action.icon,
228
223
  children: /*#__PURE__*/ jsx(Flex, {
229
224
  justifyContent: "space-between",
230
225
  gap: 4,
231
- children: /*#__PURE__*/ jsxs(Flex, {
232
- color: !action.disabled ? convertActionVariantToColor(action.variant) : 'inherit',
226
+ children: /*#__PURE__*/ jsx(Flex, {
233
227
  gap: 2,
234
228
  tag: "span",
235
- children: [
236
- /*#__PURE__*/ jsx(Flex, {
237
- tag: "span",
238
- color: !action.disabled ? convertActionVariantToIconColor(action.variant) : 'inherit',
239
- children: action.icon
240
- }),
241
- action.label
242
- ]
229
+ children: action.label
243
230
  })
244
231
  })
245
232
  }, action.id);
@@ -267,30 +254,6 @@ const DocumentActionsMenu = ({ actions, children, label, variant = 'tertiary' })
267
254
  ]
268
255
  });
269
256
  };
270
- const convertActionVariantToColor = (variant = 'secondary')=>{
271
- switch(variant){
272
- case 'danger':
273
- return 'danger600';
274
- case 'secondary':
275
- return undefined;
276
- case 'success':
277
- return 'success600';
278
- default:
279
- return 'primary600';
280
- }
281
- };
282
- const convertActionVariantToIconColor = (variant = 'secondary')=>{
283
- switch(variant){
284
- case 'danger':
285
- return 'danger600';
286
- case 'secondary':
287
- return 'neutral500';
288
- case 'success':
289
- return 'success600';
290
- default:
291
- return 'primary600';
292
- }
293
- };
294
257
  const DocumentActionConfirmDialog = ({ onClose, onCancel, onConfirm, title, content, isOpen, variant = 'secondary', loading })=>{
295
258
  const { formatMessage } = useIntl();
296
259
  const handleClose = async ()=>{
@@ -413,6 +376,7 @@ const transformData = (data)=>{
413
376
  const setErrors = useForm('PublishAction', (state)=>state.setErrors);
414
377
  const formValues = useForm('PublishAction', ({ values })=>values);
415
378
  const resetForm = useForm('PublishAction', ({ resetForm })=>resetForm);
379
+ const { currentDocument: { components } } = useDocumentContext('PublishAction');
416
380
  // need to discriminate if the publish is coming from a relation modal or in the edit view
417
381
  const relationContext = useRelationModal('PublishAction', ()=>true, false);
418
382
  const fromRelationModal = relationContext != undefined;
@@ -551,12 +515,16 @@ const transformData = (data)=>{
551
515
  }
552
516
  return;
553
517
  }
518
+ const { data } = handleInvisibleAttributes(transformData(formValues), {
519
+ schema,
520
+ components
521
+ });
554
522
  const res = await publish({
555
523
  collectionType,
556
524
  model,
557
525
  documentId,
558
526
  params: currentDocumentMeta.params
559
- }, transformData(formValues));
527
+ }, data);
560
528
  // Reset form if successful
561
529
  if ('data' in res) {
562
530
  resetForm();
@@ -690,12 +658,14 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType })=>{
690
658
  const isCloning = cloneMatch !== null;
691
659
  const { formatMessage } = useIntl();
692
660
  const { create, update, clone, isLoading } = useDocumentActions();
661
+ const { currentDocument: { components } } = useDocumentContext('UpdateAction');
693
662
  const [{ rawQuery }] = useQueryParams();
694
663
  const onPreview = usePreviewContext('UpdateAction', (state)=>state.onPreview, false);
695
664
  const { getInitialFormValues } = useDoc();
696
665
  const isSubmitting = useForm('UpdateAction', ({ isSubmitting })=>isSubmitting);
697
666
  const modified = useForm('UpdateAction', ({ modified })=>modified);
698
667
  const setSubmitting = useForm('UpdateAction', ({ setSubmitting })=>setSubmitting);
668
+ const initialValues = useForm('UpdateAction', ({ initialValues })=>initialValues);
699
669
  const document = useForm('UpdateAction', ({ values })=>values);
700
670
  const validate = useForm('UpdateAction', (state)=>state.validate);
701
671
  const setErrors = useForm('UpdateAction', (state)=>state.setErrors);
@@ -703,6 +673,7 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType })=>{
703
673
  const dispatch = useRelationModal('UpdateAction', (state)=>state.dispatch);
704
674
  // need to discriminate if the update is coming from a relation modal or in the edit view
705
675
  const relationContext = useRelationModal('UpdateAction', ()=>true, false);
676
+ const relationalModalSchema = useRelationModal('UpdateAction', (state)=>state.currentDocument.schema, false);
706
677
  const fieldToConnect = useRelationModal('UpdateAction', (state)=>state.state.fieldToConnect, false);
707
678
  const fieldToConnectUID = useRelationModal('PublishAction', (state)=>state.state.fieldToConnectUID, false);
708
679
  const documentHistory = useRelationModal('UpdateAction', (state)=>state.state.documentHistory, false);
@@ -720,6 +691,7 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType })=>{
720
691
  }, {
721
692
  skip: !parentDocumentMetaToUpdate
722
693
  });
694
+ const { schema } = useDoc();
723
695
  const handleUpdate = React.useCallback(async ()=>{
724
696
  setSubmitting(true);
725
697
  try {
@@ -756,22 +728,32 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType })=>{
756
728
  setErrors(formatValidationErrors(res.error));
757
729
  }
758
730
  } else if (documentId || collectionType === SINGLE_TYPES) {
731
+ const { data } = handleInvisibleAttributes(transformData(document), {
732
+ schema: fromRelationModal ? relationalModalSchema : schema,
733
+ initialValues,
734
+ components
735
+ });
759
736
  const res = await update({
760
737
  collectionType,
761
738
  model,
762
739
  documentId,
763
740
  params: currentDocumentMeta.params
764
- }, transformData(document));
741
+ }, data);
765
742
  if ('error' in res && isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
766
743
  setErrors(formatValidationErrors(res.error));
767
744
  } else {
768
745
  resetForm();
769
746
  }
770
747
  } else {
748
+ const { data } = handleInvisibleAttributes(transformData(document), {
749
+ schema: fromRelationModal ? relationalModalSchema : schema,
750
+ initialValues,
751
+ components
752
+ });
771
753
  const res = await create({
772
754
  model,
773
755
  params: currentDocumentMeta.params
774
- }, transformData(document));
756
+ }, data);
775
757
  if ('data' in res && collectionType !== SINGLE_TYPES) {
776
758
  if (fromRelationModal) {
777
759
  const createdRelation = {
@@ -872,7 +854,11 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType })=>{
872
854
  fieldToConnectUID,
873
855
  updateDocumentMutation,
874
856
  formatAPIError,
875
- onPreview
857
+ onPreview,
858
+ initialValues,
859
+ schema,
860
+ components,
861
+ relationalModalSchema
876
862
  ]);
877
863
  // Auto-save on CMD+S or CMD+Enter on macOS, and CTRL+S or CTRL+Enter on Windows/Linux
878
864
  React.useEffect(()=>{