@strapi/content-manager 0.0.0-experimental.6b93a97ac754785f7894c17263d3b4fd5272454a → 0.0.0-experimental.6cc8ff695218d5a391739344d308dfb3683215c1

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 (133) hide show
  1. package/dist/admin/components/DragPreviews/RelationDragPreview.js +1 -1
  2. package/dist/admin/components/DragPreviews/RelationDragPreview.js.map +1 -1
  3. package/dist/admin/components/DragPreviews/RelationDragPreview.mjs +1 -1
  4. package/dist/admin/components/DragPreviews/RelationDragPreview.mjs.map +1 -1
  5. package/dist/admin/components/LeftMenu.js +34 -30
  6. package/dist/admin/components/LeftMenu.js.map +1 -1
  7. package/dist/admin/components/LeftMenu.mjs +36 -32
  8. package/dist/admin/components/LeftMenu.mjs.map +1 -1
  9. package/dist/admin/content-manager.js.map +1 -1
  10. package/dist/admin/content-manager.mjs.map +1 -1
  11. package/dist/admin/features/DocumentContext.js +71 -0
  12. package/dist/admin/features/DocumentContext.js.map +1 -0
  13. package/dist/admin/features/DocumentContext.mjs +49 -0
  14. package/dist/admin/features/DocumentContext.mjs.map +1 -0
  15. package/dist/admin/features/DocumentRBAC.js +7 -6
  16. package/dist/admin/features/DocumentRBAC.js.map +1 -1
  17. package/dist/admin/features/DocumentRBAC.mjs +7 -6
  18. package/dist/admin/features/DocumentRBAC.mjs.map +1 -1
  19. package/dist/admin/history/components/VersionInputRenderer.js.map +1 -1
  20. package/dist/admin/history/components/VersionInputRenderer.mjs.map +1 -1
  21. package/dist/admin/history/pages/History.js +9 -1
  22. package/dist/admin/history/pages/History.js.map +1 -1
  23. package/dist/admin/history/pages/History.mjs +9 -1
  24. package/dist/admin/history/pages/History.mjs.map +1 -1
  25. package/dist/admin/hooks/useDocumentActions.js +12 -3
  26. package/dist/admin/hooks/useDocumentActions.js.map +1 -1
  27. package/dist/admin/hooks/useDocumentActions.mjs +12 -3
  28. package/dist/admin/hooks/useDocumentActions.mjs.map +1 -1
  29. package/dist/admin/pages/EditView/EditViewPage.js +95 -84
  30. package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
  31. package/dist/admin/pages/EditView/EditViewPage.mjs +95 -84
  32. package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
  33. package/dist/admin/pages/EditView/components/DocumentActions.js +26 -11
  34. package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
  35. package/dist/admin/pages/EditView/components/DocumentActions.mjs +26 -11
  36. package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
  37. package/dist/admin/pages/EditView/components/DocumentStatus.js +1 -2
  38. package/dist/admin/pages/EditView/components/DocumentStatus.js.map +1 -1
  39. package/dist/admin/pages/EditView/components/DocumentStatus.mjs +1 -2
  40. package/dist/admin/pages/EditView/components/DocumentStatus.mjs.map +1 -1
  41. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js +2 -2
  42. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js.map +1 -1
  43. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs +2 -2
  44. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs.map +1 -1
  45. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js +4 -1
  46. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
  47. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs +4 -1
  48. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -1
  49. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +5 -3
  50. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
  51. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +5 -3
  52. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
  53. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js +17 -8
  54. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js.map +1 -1
  55. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs +17 -8
  56. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs.map +1 -1
  57. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +16 -1
  58. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
  59. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +17 -2
  60. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
  61. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js +3 -2
  62. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -1
  63. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs +3 -2
  64. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -1
  65. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +460 -0
  66. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -0
  67. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +438 -0
  68. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -0
  69. package/dist/admin/pages/EditView/components/FormInputs/{Relations.js → Relations/Relations.js} +65 -42
  70. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -0
  71. package/dist/admin/pages/EditView/components/FormInputs/{Relations.mjs → Relations/Relations.mjs} +66 -43
  72. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -0
  73. package/dist/admin/pages/EditView/components/FormLayout.js +20 -13
  74. package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
  75. package/dist/admin/pages/EditView/components/FormLayout.mjs +20 -13
  76. package/dist/admin/pages/EditView/components/FormLayout.mjs.map +1 -1
  77. package/dist/admin/pages/EditView/components/InputRenderer.js +35 -8
  78. package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
  79. package/dist/admin/pages/EditView/components/InputRenderer.mjs +18 -10
  80. package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -1
  81. package/dist/admin/pages/ListView/ListViewPage.js +41 -0
  82. package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
  83. package/dist/admin/pages/ListView/ListViewPage.mjs +42 -1
  84. package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
  85. package/dist/admin/pages/ListView/components/TableCells/Relations.js +0 -1
  86. package/dist/admin/pages/ListView/components/TableCells/Relations.js.map +1 -1
  87. package/dist/admin/pages/ListView/components/TableCells/Relations.mjs +0 -1
  88. package/dist/admin/pages/ListView/components/TableCells/Relations.mjs.map +1 -1
  89. package/dist/admin/preview/components/PreviewHeader.js +5 -77
  90. package/dist/admin/preview/components/PreviewHeader.js.map +1 -1
  91. package/dist/admin/preview/components/PreviewHeader.mjs +7 -78
  92. package/dist/admin/preview/components/PreviewHeader.mjs.map +1 -1
  93. package/dist/admin/preview/pages/Preview.js +47 -39
  94. package/dist/admin/preview/pages/Preview.js.map +1 -1
  95. package/dist/admin/preview/pages/Preview.mjs +48 -40
  96. package/dist/admin/preview/pages/Preview.mjs.map +1 -1
  97. package/dist/admin/services/documents.js +16 -0
  98. package/dist/admin/services/documents.js.map +1 -1
  99. package/dist/admin/services/documents.mjs +16 -0
  100. package/dist/admin/services/documents.mjs.map +1 -1
  101. package/dist/admin/src/content-manager.d.ts +2 -0
  102. package/dist/admin/src/features/DocumentContext.d.ts +53 -0
  103. package/dist/admin/src/features/DocumentRBAC.d.ts +3 -2
  104. package/dist/admin/src/hooks/useDocumentActions.d.ts +1 -1
  105. package/dist/admin/src/pages/EditView/components/DocumentActions.d.ts +1 -1
  106. package/dist/admin/src/pages/EditView/components/FormInputs/Relations/RelationModal.d.ts +8 -0
  107. package/dist/admin/src/pages/EditView/components/FormInputs/{Relations.d.ts → Relations/Relations.d.ts} +8 -2
  108. package/dist/admin/src/pages/EditView/components/FormLayout.d.ts +8 -3
  109. package/dist/admin/src/pages/EditView/components/InputRenderer.d.ts +7 -4
  110. package/dist/admin/src/preview/components/PreviewHeader.d.ts +1 -2
  111. package/dist/admin/src/preview/pages/Preview.d.ts +0 -2
  112. package/dist/admin/translations/en.json.js +3 -0
  113. package/dist/admin/translations/en.json.js.map +1 -1
  114. package/dist/admin/translations/en.json.mjs +3 -0
  115. package/dist/admin/translations/en.json.mjs.map +1 -1
  116. package/dist/admin/translations/zh-Hans.json.js +2 -1
  117. package/dist/admin/translations/zh-Hans.json.js.map +1 -1
  118. package/dist/admin/translations/zh-Hans.json.mjs +2 -1
  119. package/dist/admin/translations/zh-Hans.json.mjs.map +1 -1
  120. package/dist/server/src/index.d.ts +1 -0
  121. package/dist/server/src/index.d.ts.map +1 -1
  122. package/dist/server/src/services/data-mapper.d.ts +1 -0
  123. package/dist/server/src/services/data-mapper.d.ts.map +1 -1
  124. package/dist/server/src/services/index.d.ts +1 -0
  125. package/dist/server/src/services/index.d.ts.map +1 -1
  126. package/package.json +8 -8
  127. package/dist/admin/pages/EditView/components/FormInputs/Relations.js.map +0 -1
  128. package/dist/admin/pages/EditView/components/FormInputs/Relations.mjs.map +0 -1
  129. package/dist/admin/preview/components/PreviewContent.js +0 -25
  130. package/dist/admin/preview/components/PreviewContent.js.map +0 -1
  131. package/dist/admin/preview/components/PreviewContent.mjs +0 -23
  132. package/dist/admin/preview/components/PreviewContent.mjs.map +0 -1
  133. package/dist/admin/src/preview/components/PreviewContent.d.ts +0 -2
@@ -7,6 +7,7 @@ import { useLocation, useParams } from 'react-router-dom';
7
7
  import { styled } from 'styled-components';
8
8
  import { SINGLE_TYPES } from '../../constants/collections.mjs';
9
9
  import { PERMISSIONS } from '../../constants/plugin.mjs';
10
+ import { DocumentContextProvider } from '../../features/DocumentContext.mjs';
10
11
  import { useDocumentRBAC, DocumentRBAC } from '../../features/DocumentRBAC.mjs';
11
12
  import { useDoc } from '../../hooks/useDocument.mjs';
12
13
  import { useDocumentLayout } from '../../hooks/useDocumentLayout.mjs';
@@ -27,7 +28,8 @@ import { Panels } from './components/Panels.mjs';
27
28
  });
28
29
  const { formatMessage } = useIntl();
29
30
  const { toggleNotification } = useNotification();
30
- const { document, meta, isLoading: isLoadingDocument, schema, components, collectionType, id, model, hasError, getTitle, getInitialFormValues } = useDoc();
31
+ const doc = useDoc();
32
+ const { document, meta, isLoading: isLoadingDocument, schema, components, collectionType, id, model, hasError, getTitle, getInitialFormValues } = doc;
31
33
  const hasDraftAndPublished = schema?.options?.draftAndPublish ?? false;
32
34
  useOnce(()=>{
33
35
  /**
@@ -82,98 +84,107 @@ import { Panels } from './components/Panels.mjs';
82
84
  /*#__PURE__*/ jsx(Page.Title, {
83
85
  children: getTitle(mainField)
84
86
  }),
85
- /*#__PURE__*/ jsx(Form, {
86
- disabled: hasDraftAndPublished && status === 'published',
87
- initialValues: initialValues,
88
- method: isCreatingDocument ? 'POST' : 'PUT',
89
- validate: (values, options)=>{
90
- const yupSchema = createYupSchema(schema?.attributes, components, {
91
- status,
92
- ...options
93
- });
94
- return yupSchema.validate(values, {
95
- abortEarly: false
96
- });
87
+ /*#__PURE__*/ jsx(DocumentContextProvider, {
88
+ initialDocument: {
89
+ documentId: id,
90
+ model,
91
+ collectionType
97
92
  },
98
- initialErrors: location?.state?.forceValidation ? validateSync(initialValues, {}) : {},
99
- children: ({ resetForm })=>/*#__PURE__*/ jsxs(Fragment, {
100
- children: [
101
- /*#__PURE__*/ jsx(Header, {
102
- isCreating: isCreatingDocument,
103
- status: hasDraftAndPublished ? getDocumentStatus(document, meta) : undefined,
104
- title: getTitle(mainField)
105
- }),
106
- /*#__PURE__*/ jsxs(Tabs.Root, {
107
- variant: "simple",
108
- value: status,
109
- onValueChange: handleTabChange,
110
- children: [
111
- /*#__PURE__*/ jsx(Tabs.List, {
112
- "aria-label": formatMessage({
113
- id: getTranslation('containers.edit.tabs.label'),
114
- defaultMessage: 'Document status'
115
- }),
116
- children: hasDraftAndPublished ? /*#__PURE__*/ jsxs(Fragment, {
117
- children: [
118
- /*#__PURE__*/ jsx(StatusTab, {
119
- value: "draft",
120
- children: formatMessage({
121
- id: getTranslation('containers.edit.tabs.draft'),
122
- defaultMessage: 'draft'
123
- })
124
- }),
125
- /*#__PURE__*/ jsx(StatusTab, {
126
- disabled: !meta || meta.availableStatus.length === 0,
127
- value: "published",
128
- children: formatMessage({
129
- id: getTranslation('containers.edit.tabs.published'),
130
- defaultMessage: 'published'
131
- })
132
- })
133
- ]
134
- }) : null
135
- }),
136
- /*#__PURE__*/ jsxs(Grid.Root, {
137
- paddingTop: 8,
138
- gap: 4,
139
- children: [
140
- /*#__PURE__*/ jsxs(Grid.Item, {
141
- col: 9,
142
- s: 12,
143
- direction: "column",
144
- alignItems: "stretch",
93
+ children: /*#__PURE__*/ jsx(Form, {
94
+ disabled: hasDraftAndPublished && status === 'published',
95
+ initialValues: initialValues,
96
+ method: isCreatingDocument ? 'POST' : 'PUT',
97
+ validate: (values, options)=>{
98
+ const yupSchema = createYupSchema(schema?.attributes, components, {
99
+ status,
100
+ ...options
101
+ });
102
+ return yupSchema.validate(values, {
103
+ abortEarly: false
104
+ });
105
+ },
106
+ initialErrors: location?.state?.forceValidation ? validateSync(initialValues, {}) : {},
107
+ children: ({ resetForm })=>/*#__PURE__*/ jsxs(Fragment, {
108
+ children: [
109
+ /*#__PURE__*/ jsx(Header, {
110
+ isCreating: isCreatingDocument,
111
+ status: hasDraftAndPublished ? getDocumentStatus(document, meta) : undefined,
112
+ title: getTitle(mainField)
113
+ }),
114
+ /*#__PURE__*/ jsxs(Tabs.Root, {
115
+ variant: "simple",
116
+ value: status,
117
+ onValueChange: handleTabChange,
118
+ children: [
119
+ /*#__PURE__*/ jsx(Tabs.List, {
120
+ "aria-label": formatMessage({
121
+ id: getTranslation('containers.edit.tabs.label'),
122
+ defaultMessage: 'Document status'
123
+ }),
124
+ children: hasDraftAndPublished ? /*#__PURE__*/ jsxs(Fragment, {
145
125
  children: [
146
- /*#__PURE__*/ jsx(Tabs.Content, {
126
+ /*#__PURE__*/ jsx(StatusTab, {
147
127
  value: "draft",
148
- children: /*#__PURE__*/ jsx(FormLayout, {
149
- layout: layout
128
+ children: formatMessage({
129
+ id: getTranslation('containers.edit.tabs.draft'),
130
+ defaultMessage: 'draft'
150
131
  })
151
132
  }),
152
- /*#__PURE__*/ jsx(Tabs.Content, {
133
+ /*#__PURE__*/ jsx(StatusTab, {
134
+ disabled: !meta || meta.availableStatus.length === 0,
153
135
  value: "published",
154
- children: /*#__PURE__*/ jsx(FormLayout, {
155
- layout: layout
136
+ children: formatMessage({
137
+ id: getTranslation('containers.edit.tabs.published'),
138
+ defaultMessage: 'published'
156
139
  })
157
140
  })
158
141
  ]
159
- }),
160
- /*#__PURE__*/ jsx(Grid.Item, {
161
- col: 3,
162
- s: 12,
163
- direction: "column",
164
- alignItems: "stretch",
165
- children: /*#__PURE__*/ jsx(Panels, {})
166
- })
167
- ]
168
- })
169
- ]
170
- }),
171
- /*#__PURE__*/ jsx(Blocker, {
172
- // We reset the form to the published version to avoid errors like – https://strapi-inc.atlassian.net/browse/CONTENT-2284
173
- onProceed: resetForm
174
- })
175
- ]
176
- })
142
+ }) : null
143
+ }),
144
+ /*#__PURE__*/ jsxs(Grid.Root, {
145
+ paddingTop: 8,
146
+ gap: 4,
147
+ children: [
148
+ /*#__PURE__*/ jsxs(Grid.Item, {
149
+ col: 9,
150
+ s: 12,
151
+ direction: "column",
152
+ alignItems: "stretch",
153
+ children: [
154
+ /*#__PURE__*/ jsx(Tabs.Content, {
155
+ value: "draft",
156
+ children: /*#__PURE__*/ jsx(FormLayout, {
157
+ layout: layout,
158
+ document: doc
159
+ })
160
+ }),
161
+ /*#__PURE__*/ jsx(Tabs.Content, {
162
+ value: "published",
163
+ children: /*#__PURE__*/ jsx(FormLayout, {
164
+ layout: layout,
165
+ document: doc
166
+ })
167
+ })
168
+ ]
169
+ }),
170
+ /*#__PURE__*/ jsx(Grid.Item, {
171
+ col: 3,
172
+ s: 12,
173
+ direction: "column",
174
+ alignItems: "stretch",
175
+ children: /*#__PURE__*/ jsx(Panels, {})
176
+ })
177
+ ]
178
+ })
179
+ ]
180
+ }),
181
+ /*#__PURE__*/ jsx(Blocker, {
182
+ // We reset the form to the published version to avoid errors like – https://strapi-inc.atlassian.net/browse/CONTENT-2284
183
+ onProceed: resetForm
184
+ })
185
+ ]
186
+ })
187
+ })
177
188
  })
178
189
  ]
179
190
  });
@@ -1 +1 @@
1
- {"version":3,"file":"EditViewPage.mjs","sources":["../../../../admin/src/pages/EditView/EditViewPage.tsx"],"sourcesContent":["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';\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 getTitle,\n getInitialFormValues,\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 const initialValues = getInitialFormValues(isCreatingDocument);\n\n if (isLoading && !document?.documentId) {\n return <Page.Loading />;\n }\n\n if (!initialValues || hasError) {\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 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>{getTitle(mainField)}</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={getTitle(mainField)}\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":["EditViewPage","location","useLocation","query","status","setQuery","useQueryParams","formatMessage","useIntl","toggleNotification","useNotification","document","meta","isLoading","isLoadingDocument","schema","components","collectionType","id","model","hasError","getTitle","getInitialFormValues","useDoc","hasDraftAndPublished","options","draftAndPublish","useOnce","state","type","message","error","timeout","isLoadingActionsRBAC","useDocumentRBAC","isSingleType","SINGLE_TYPES","isCreatingDocument","isLoadingLayout","edit","layout","settings","mainField","useDocumentLayout","isLazyLoading","useLazyComponents","initialValues","documentId","_jsx","Page","Loading","Error","handleTabChange","validateSync","values","yupSchema","createYupSchema","attributes","abortEarly","_jsxs","Main","paddingLeft","paddingRight","Title","Form","disabled","method","validate","initialErrors","forceValidation","resetForm","_Fragment","Header","isCreating","getDocumentStatus","undefined","title","Tabs","Root","variant","value","onValueChange","List","aria-label","getTranslation","defaultMessage","StatusTab","availableStatus","length","Grid","paddingTop","gap","Item","col","s","direction","alignItems","Content","FormLayout","Panels","Blocker","onProceed","styled","Trigger","docStatus","statuses","find","doc","publishedAt","ProtectedEditViewPage","slug","useParams","permissions","useRBAC","PERMISSIONS","map","action","subject","Protect","DocumentRBAC"],"mappings":";;;;;;;;;;;;;;;;;;;;AA6BA;;AAEkG,2GAE5FA,YAAe,GAAA,IAAA;AACnB,IAAA,MAAMC,QAAWC,GAAAA,WAAAA,EAAAA;IACjB,MAAM,CACJ,EACEC,KAAAA,EAAO,EAAEC,MAAM,EAAE,EAClB,EACDC,QACD,CAAA,GAAGC,cAAkD,CAAA;QACpDF,MAAQ,EAAA;AACV,KAAA,CAAA;IACA,MAAM,EAAEG,aAAa,EAAE,GAAGC,OAAAA,EAAAA;IAC1B,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,eAAAA,EAAAA;IAE/B,MAAM,EACJC,QAAQ,EACRC,IAAI,EACJC,WAAWC,iBAAiB,EAC5BC,MAAM,EACNC,UAAU,EACVC,cAAc,EACdC,EAAE,EACFC,KAAK,EACLC,QAAQ,EACRC,QAAQ,EACRC,oBAAoB,EACrB,GAAGC,MAAAA,EAAAA;IAEJ,MAAMC,oBAAAA,GAAuBT,MAAQU,EAAAA,OAAAA,EAASC,eAAmB,IAAA,KAAA;IAEjEC,OAAQ,CAAA,IAAA;AACN;;;;AAIC,QACD,IAAI1B,QAAU2B,EAAAA,KAAAA,IAAS,OAAW3B,IAAAA,QAAAA,CAAS2B,KAAK,EAAE;YAChDnB,kBAAmB,CAAA;gBACjBoB,IAAM,EAAA,QAAA;gBACNC,OAAS7B,EAAAA,QAAAA,CAAS2B,KAAK,CAACG,KAAK;gBAC7BC,OAAS,EAAA;AACX,aAAA,CAAA;AACF;AACF,KAAA,CAAA;AAEA,IAAA,MAAMC,uBAAuBC,eAAgB,CAAA,cAAA,EAAgB,CAACN,KAAAA,GAAUA,MAAMf,SAAS,CAAA;AAEvF,IAAA,MAAMsB,eAAelB,cAAmBmB,KAAAA,YAAAA;AAExC;;;;AAIC,MACD,MAAMC,kBAAAA,GAAqB,CAACnB,EAAAA,IAAM,CAACiB,YAAAA;AAEnC,IAAA,MAAM,EACJtB,SAAAA,EAAWyB,eAAe,EAC1BC,MAAM,EACJC,MAAM,EACNC,QAAAA,EAAU,EAAEC,SAAS,EAAE,EACxB,EACF,GAAGC,iBAAkBxB,CAAAA,KAAAA,CAAAA;AAEtB,IAAA,MAAM,EAAEyB,aAAa,EAAE,GAAGC,kBAAkB,EAAE,CAAA;IAE9C,MAAMhC,SAAAA,GAAYoB,oBAAwBnB,IAAAA,iBAAAA,IAAqBwB,eAAmBM,IAAAA,aAAAA;AAElF,IAAA,MAAME,gBAAgBxB,oBAAqBe,CAAAA,kBAAAA,CAAAA;IAE3C,IAAIxB,SAAAA,IAAa,CAACF,QAAAA,EAAUoC,UAAY,EAAA;QACtC,qBAAOC,GAAA,CAACC,KAAKC,OAAO,EAAA,EAAA,CAAA;AACtB;IAEA,IAAI,CAACJ,iBAAiB1B,QAAU,EAAA;QAC9B,qBAAO4B,GAAA,CAACC,KAAKE,KAAK,EAAA,EAAA,CAAA;AACpB;AAEA,IAAA,MAAMC,kBAAkB,CAAChD,MAAAA,GAAAA;QACvB,IAAIA,MAAAA,KAAW,WAAeA,IAAAA,MAAAA,KAAW,OAAS,EAAA;YAChDC,QAAS,CAAA;AAAED,gBAAAA;AAAO,aAAA,EAAG,MAAQ,EAAA,IAAA,CAAA;AAC/B;AACF,KAAA;IAEA,MAAMiD,YAAAA,GAAe,CAACC,MAAiC7B,EAAAA,OAAAA,GAAAA;AACrD,QAAA,MAAM8B,SAAYC,GAAAA,eAAAA,CAAgBzC,MAAQ0C,EAAAA,UAAAA,EAAYzC,UAAY,EAAA;AAChEZ,YAAAA,MAAAA;AACA,YAAA,GAAGqB;AACL,SAAA,CAAA;QAEA,OAAO8B,SAAAA,CAAUF,YAAY,CAACC,MAAQ,EAAA;YAAEI,UAAY,EAAA;AAAM,SAAA,CAAA;AAC5D,KAAA;AAEA,IAAA,qBACEC,IAACC,CAAAA,IAAAA,EAAAA;QAAKC,WAAa,EAAA,EAAA;QAAIC,YAAc,EAAA,EAAA;;AACnC,0BAAAd,GAAA,CAACC,KAAKc,KAAK,EAAA;0BAAE1C,QAASqB,CAAAA,SAAAA;;0BACtBM,GAACgB,CAAAA,IAAAA,EAAAA;AACCC,gBAAAA,QAAAA,EAAUzC,wBAAwBpB,MAAW,KAAA,WAAA;gBAC7C0C,aAAeA,EAAAA,aAAAA;AACfoB,gBAAAA,MAAAA,EAAQ7B,qBAAqB,MAAS,GAAA,KAAA;AACtC8B,gBAAAA,QAAAA,EAAU,CAACb,MAAiC7B,EAAAA,OAAAA,GAAAA;AAC1C,oBAAA,MAAM8B,SAAYC,GAAAA,eAAAA,CAAgBzC,MAAQ0C,EAAAA,UAAAA,EAAYzC,UAAY,EAAA;AAChEZ,wBAAAA,MAAAA;AACA,wBAAA,GAAGqB;AACL,qBAAA,CAAA;oBAEA,OAAO8B,SAAAA,CAAUY,QAAQ,CAACb,MAAQ,EAAA;wBAAEI,UAAY,EAAA;AAAM,qBAAA,CAAA;AACxD,iBAAA;AACAU,gBAAAA,aAAAA,EAAenE,UAAU2B,KAAOyC,EAAAA,eAAAA,GAAkBhB,aAAaP,aAAe,EAAA,MAAM,EAAC;0BAEpF,CAAC,EAAEwB,SAAS,EAAE,iBACbX,IAAA,CAAAY,QAAA,EAAA;;0CACEvB,GAACwB,CAAAA,MAAAA,EAAAA;gCACCC,UAAYpC,EAAAA,kBAAAA;gCACZjC,MAAQoB,EAAAA,oBAAAA,GAAuBkD,iBAAkB/D,CAAAA,QAAAA,EAAUC,IAAQ+D,CAAAA,GAAAA,SAAAA;AACnEC,gCAAAA,KAAAA,EAAOvD,QAASqB,CAAAA,SAAAA;;AAElB,0CAAAiB,IAAA,CAACkB,KAAKC,IAAI,EAAA;gCAACC,OAAQ,EAAA,QAAA;gCAASC,KAAO5E,EAAAA,MAAAA;gCAAQ6E,aAAe7B,EAAAA,eAAAA;;AACxD,kDAAAJ,GAAA,CAAC6B,KAAKK,IAAI,EAAA;AACRC,wCAAAA,YAAAA,EAAY5E,aAAc,CAAA;AACxBW,4CAAAA,EAAAA,EAAIkE,cAAe,CAAA,4BAAA,CAAA;4CACnBC,cAAgB,EAAA;AAClB,yCAAA,CAAA;kDAEC7D,oBACC,iBAAAmC,IAAA,CAAAY,QAAA,EAAA;;8DACEvB,GAACsC,CAAAA,SAAAA,EAAAA;oDAAUN,KAAM,EAAA,OAAA;8DACdzE,aAAc,CAAA;AACbW,wDAAAA,EAAAA,EAAIkE,cAAe,CAAA,4BAAA,CAAA;wDACnBC,cAAgB,EAAA;AAClB,qDAAA;;8DAEFrC,GAACsC,CAAAA,SAAAA,EAAAA;AACCrB,oDAAAA,QAAAA,EAAU,CAACrD,IAAQA,IAAAA,IAAAA,CAAK2E,eAAe,CAACC,MAAM,KAAK,CAAA;oDACnDR,KAAM,EAAA,WAAA;8DAELzE,aAAc,CAAA;AACbW,wDAAAA,EAAAA,EAAIkE,cAAe,CAAA,gCAAA,CAAA;wDACnBC,cAAgB,EAAA;AAClB,qDAAA;;;AAGF,yCAAA,CAAA,GAAA;;AAEN,kDAAA1B,IAAA,CAAC8B,KAAKX,IAAI,EAAA;wCAACY,UAAY,EAAA,CAAA;wCAAGC,GAAK,EAAA,CAAA;;AAC7B,0DAAAhC,IAAA,CAAC8B,KAAKG,IAAI,EAAA;gDAACC,GAAK,EAAA,CAAA;gDAAGC,CAAG,EAAA,EAAA;gDAAIC,SAAU,EAAA,QAAA;gDAASC,UAAW,EAAA,SAAA;;AACtD,kEAAAhD,GAAA,CAAC6B,KAAKoB,OAAO,EAAA;wDAACjB,KAAM,EAAA,OAAA;AAClB,wDAAA,QAAA,gBAAAhC,GAACkD,CAAAA,UAAAA,EAAAA;4DAAW1D,MAAQA,EAAAA;;;AAEtB,kEAAAQ,GAAA,CAAC6B,KAAKoB,OAAO,EAAA;wDAACjB,KAAM,EAAA,WAAA;AAClB,wDAAA,QAAA,gBAAAhC,GAACkD,CAAAA,UAAAA,EAAAA;4DAAW1D,MAAQA,EAAAA;;;;;AAGxB,0DAAAQ,GAAA,CAACyC,KAAKG,IAAI,EAAA;gDAACC,GAAK,EAAA,CAAA;gDAAGC,CAAG,EAAA,EAAA;gDAAIC,SAAU,EAAA,QAAA;gDAASC,UAAW,EAAA,SAAA;AACtD,gDAAA,QAAA,gBAAAhD,GAACmD,CAAAA,MAAAA,EAAAA,EAAAA;;;;;;0CAIPnD,GAACoD,CAAAA,OAAAA,EAAAA;;gCAECC,SAAW/B,EAAAA;;;;;;;AAOzB;AAEA,MAAMgB,SAAYgB,GAAAA,MAAAA,CAAOzB,IAAK0B,CAAAA,OAAO,CAAC;;AAEtC,CAAC;AAED;;;;;IAMA,MAAM7B,iBAAoB,GAAA,CACxB/D,QACAC,EAAAA,IAAAA,GAAAA;AAEA,IAAA,MAAM4F,YAAY7F,QAAUP,EAAAA,MAAAA;IAC5B,MAAMqG,QAAAA,GAAW7F,IAAM2E,EAAAA,eAAAA,IAAmB,EAAE;AAE5C;;MAGA,IAAI,CAACiB,SAAW,EAAA;QACd,OAAO,OAAA;AACT;AAEA;;MAGA,IAAIA,SAAc,KAAA,OAAA,IAAWC,QAASC,CAAAA,IAAI,CAAC,CAACC,GAAQA,GAAAA,GAAAA,CAAIC,WAAW,KAAK,IAAO,CAAA,EAAA;QAC7E,OAAO,WAAA;AACT;IAEA,OAAOJ,SAAAA;AACT;AAEA;;AAEkG,2GAE5FK,qBAAwB,GAAA,IAAA;AAC5B,IAAA,MAAM,EAAEC,IAAAA,GAAO,EAAE,EAAE,GAAGC,SAAAA,EAAAA;AAGtB,IAAA,MAAM,EACJC,WAAAA,GAAc,EAAE,EAChBnG,SAAS,EACTkB,KAAK,EACN,GAAGkF,QACFC,WAAYC,CAAAA,GAAG,CAAC,CAACC,UAAY;AAC3BA,YAAAA,MAAAA;YACAC,OAASP,EAAAA;SACX,CAAA,CAAA,CAAA;AAGF,IAAA,IAAIjG,SAAW,EAAA;QACb,qBAAOmC,GAAA,CAACC,KAAKC,OAAO,EAAA,EAAA,CAAA;AACtB;IAEA,IAAInB,KAAAA,IAAS,CAAC+E,IAAM,EAAA;QAClB,qBAAO9D,GAAA,CAACC,KAAKE,KAAK,EAAA,EAAA,CAAA;AACpB;IAEA,qBACEH,GAAA,CAACC,KAAKqE,OAAO,EAAA;QAACN,WAAaA,EAAAA,WAAAA;AACxB,QAAA,QAAA,EAAA,CAAC,EAAEA,WAAW,EAAE,iBACfhE,GAACuE,CAAAA,YAAAA,EAAAA;gBAAaP,WAAaA,EAAAA,WAAAA;AACzB,gBAAA,QAAA,gBAAAhE,GAAChD,CAAAA,YAAAA,EAAAA,EAAAA;;;AAKX;;;;"}
1
+ {"version":3,"file":"EditViewPage.mjs","sources":["../../../../admin/src/pages/EditView/EditViewPage.tsx"],"sourcesContent":["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 { DocumentContextProvider } from '../../features/DocumentContext';\nimport { DocumentRBAC, useDocumentRBAC } from '../../features/DocumentRBAC';\nimport { useDoc, type UseDocument } 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';\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 doc = useDoc();\n const {\n document,\n meta,\n isLoading: isLoadingDocument,\n schema,\n components,\n collectionType,\n id,\n model,\n hasError,\n getTitle,\n getInitialFormValues,\n } = doc;\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 const initialValues = getInitialFormValues(isCreatingDocument);\n\n if (isLoading && !document?.documentId) {\n return <Page.Loading />;\n }\n\n if (!initialValues || hasError) {\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 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>{getTitle(mainField)}</Page.Title>\n <DocumentContextProvider\n initialDocument={{\n documentId: id!,\n model,\n collectionType,\n }}\n >\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={getTitle(mainField)}\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} document={doc} />\n </Tabs.Content>\n <Tabs.Content value=\"published\">\n <FormLayout layout={layout} document={doc} />\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 </DocumentContextProvider>\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":["EditViewPage","location","useLocation","query","status","setQuery","useQueryParams","formatMessage","useIntl","toggleNotification","useNotification","doc","useDoc","document","meta","isLoading","isLoadingDocument","schema","components","collectionType","id","model","hasError","getTitle","getInitialFormValues","hasDraftAndPublished","options","draftAndPublish","useOnce","state","type","message","error","timeout","isLoadingActionsRBAC","useDocumentRBAC","isSingleType","SINGLE_TYPES","isCreatingDocument","isLoadingLayout","edit","layout","settings","mainField","useDocumentLayout","isLazyLoading","useLazyComponents","initialValues","documentId","_jsx","Page","Loading","Error","handleTabChange","validateSync","values","yupSchema","createYupSchema","attributes","abortEarly","_jsxs","Main","paddingLeft","paddingRight","Title","DocumentContextProvider","initialDocument","Form","disabled","method","validate","initialErrors","forceValidation","resetForm","_Fragment","Header","isCreating","getDocumentStatus","undefined","title","Tabs","Root","variant","value","onValueChange","List","aria-label","getTranslation","defaultMessage","StatusTab","availableStatus","length","Grid","paddingTop","gap","Item","col","s","direction","alignItems","Content","FormLayout","Panels","Blocker","onProceed","styled","Trigger","docStatus","statuses","find","publishedAt","ProtectedEditViewPage","slug","useParams","permissions","useRBAC","PERMISSIONS","map","action","subject","Protect","DocumentRBAC"],"mappings":"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"}
@@ -11,6 +11,7 @@ var reactRouterDom = require('react-router-dom');
11
11
  var styledComponents = require('styled-components');
12
12
  var attributes = require('../../../constants/attributes.js');
13
13
  var collections = require('../../../constants/collections.js');
14
+ var DocumentContext = require('../../../features/DocumentContext.js');
14
15
  var DocumentRBAC = require('../../../features/DocumentRBAC.js');
15
16
  var useDocument = require('../../../hooks/useDocument.js');
16
17
  var useDocumentActions = require('../../../hooks/useDocumentActions.js');
@@ -370,8 +371,8 @@ const transformData = (data)=>{
370
371
  };
371
372
  /* -------------------------------------------------------------------------------------------------
372
373
  * DocumentActionComponents
373
- * -----------------------------------------------------------------------------------------------*/ const PublishAction = ({ activeTab, documentId, model, collectionType, meta, document, onPreview })=>{
374
- const { schema } = useDocument.useDoc();
374
+ * -----------------------------------------------------------------------------------------------*/ const PublishAction = ({ activeTab, documentId, model, collectionType, meta, document, onPreview, fromPreview = false, fromRelationModal = false })=>{
375
+ const schema = DocumentContext.useDocumentContext('PublishAction', (state)=>state.document.schema);
375
376
  const navigate = reactRouterDom.useNavigate();
376
377
  const { toggleNotification } = strapiAdmin.useNotification();
377
378
  const { _unstableFormatValidationErrors: formatValidationErrors } = strapiAdmin.useAPIErrorHandler();
@@ -380,7 +381,7 @@ const transformData = (data)=>{
380
381
  const { id } = reactRouterDom.useParams();
381
382
  const { formatMessage } = reactIntl.useIntl();
382
383
  const canPublish = DocumentRBAC.useDocumentRBAC('PublishAction', ({ canPublish })=>canPublish);
383
- const { publish, isLoading } = useDocumentActions.useDocumentActions();
384
+ const { publish, isLoading } = useDocumentActions.useDocumentActions(fromPreview, fromRelationModal);
384
385
  const [countDraftRelations, { isLoading: isLoadingDraftRelations, isError: isErrorDraftRelations }] = documents.useGetDraftRelationCountQuery();
385
386
  const [localCountOfDraftRelations, setLocalCountOfDraftRelations] = React__namespace.useState(0);
386
387
  const [serverCountOfDraftRelations, setServerCountOfDraftRelations] = React__namespace.useState(0);
@@ -394,6 +395,8 @@ const transformData = (data)=>{
394
395
  const validate = strapiAdmin.useForm('PublishAction', (state)=>state.validate);
395
396
  const setErrors = strapiAdmin.useForm('PublishAction', (state)=>state.setErrors);
396
397
  const formValues = strapiAdmin.useForm('PublishAction', ({ values })=>values);
398
+ const rootDocumentMeta = DocumentContext.useDocumentContext('PublishAction', (state)=>state.rootDocumentMeta);
399
+ const currentDocumentMeta = DocumentContext.useDocumentContext('PublishAction', (state)=>state.meta);
397
400
  React__namespace.useEffect(()=>{
398
401
  if (isErrorDraftRelations) {
399
402
  toggleNotification({
@@ -496,11 +499,12 @@ const transformData = (data)=>{
496
499
  });
497
500
  return;
498
501
  }
502
+ const isPublishingRelation = rootDocumentMeta.documentId !== currentDocumentMeta.documentId;
499
503
  const res = await publish({
500
504
  collectionType,
501
505
  model,
502
506
  documentId,
503
- params
507
+ params: isPublishingRelation ? currentDocumentMeta.params : params
504
508
  }, transformData(formValues));
505
509
  if ('data' in res && collectionType !== collections.SINGLE_TYPES) {
506
510
  /**
@@ -530,7 +534,8 @@ const transformData = (data)=>{
530
534
  loading: isLoading,
531
535
  position: [
532
536
  'panel',
533
- 'preview'
537
+ 'preview',
538
+ 'relation-modal'
534
539
  ],
535
540
  /**
536
541
  * Disabled when:
@@ -571,16 +576,17 @@ const transformData = (data)=>{
571
576
  PublishAction.type = 'publish';
572
577
  PublishAction.position = [
573
578
  'panel',
574
- 'preview'
579
+ 'preview',
580
+ 'relation-modal'
575
581
  ];
576
- const UpdateAction = ({ activeTab, documentId, model, collectionType, onPreview })=>{
582
+ const UpdateAction = ({ activeTab, documentId, model, collectionType, onPreview, fromPreview = false, fromRelationModal = false })=>{
577
583
  const navigate = reactRouterDom.useNavigate();
578
584
  const { toggleNotification } = strapiAdmin.useNotification();
579
585
  const { _unstableFormatValidationErrors: formatValidationErrors } = strapiAdmin.useAPIErrorHandler();
580
586
  const cloneMatch = reactRouterDom.useMatch(router.CLONE_PATH);
581
587
  const isCloning = cloneMatch !== null;
582
588
  const { formatMessage } = reactIntl.useIntl();
583
- const { create, update, clone, isLoading } = useDocumentActions.useDocumentActions();
589
+ const { create, update, clone, isLoading } = useDocumentActions.useDocumentActions(fromPreview, fromRelationModal);
584
590
  const [{ query, rawQuery }] = strapiAdmin.useQueryParams();
585
591
  const params = React__namespace.useMemo(()=>api.buildValidParams(query), [
586
592
  query
@@ -592,6 +598,8 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType, onPreview
592
598
  const validate = strapiAdmin.useForm('UpdateAction', (state)=>state.validate);
593
599
  const setErrors = strapiAdmin.useForm('UpdateAction', (state)=>state.setErrors);
594
600
  const resetForm = strapiAdmin.useForm('PublishAction', ({ resetForm })=>resetForm);
601
+ const rootDocumentMeta = DocumentContext.useDocumentContext('UpdateAction', (state)=>state.rootDocumentMeta);
602
+ const currentDocumentMeta = DocumentContext.useDocumentContext('UpdateAction', (state)=>state.meta);
595
603
  const handleUpdate = React__namespace.useCallback(async ()=>{
596
604
  setSubmitting(true);
597
605
  try {
@@ -628,11 +636,12 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType, onPreview
628
636
  setErrors(formatValidationErrors(res.error));
629
637
  }
630
638
  } else if (documentId || collectionType === collections.SINGLE_TYPES) {
639
+ const isEditingRelation = rootDocumentMeta.documentId !== currentDocumentMeta.documentId;
631
640
  const res = await update({
632
641
  collectionType,
633
642
  model,
634
643
  documentId,
635
- params
644
+ params: isEditingRelation ? currentDocumentMeta.params : params
636
645
  }, transformData(document));
637
646
  if ('error' in res && api.isBaseQueryError(res.error) && res.error.name === 'ValidationError') {
638
647
  setErrors(formatValidationErrors(res.error));
@@ -667,6 +676,8 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType, onPreview
667
676
  cloneMatch?.params.origin,
668
677
  collectionType,
669
678
  create,
679
+ currentDocumentMeta.documentId,
680
+ currentDocumentMeta.params,
670
681
  document,
671
682
  documentId,
672
683
  formatMessage,
@@ -675,9 +686,11 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType, onPreview
675
686
  model,
676
687
  modified,
677
688
  navigate,
689
+ onPreview,
678
690
  params,
679
691
  rawQuery,
680
692
  resetForm,
693
+ rootDocumentMeta.documentId,
681
694
  setErrors,
682
695
  setSubmitting,
683
696
  toggleNotification,
@@ -714,14 +727,16 @@ const UpdateAction = ({ activeTab, documentId, model, collectionType, onPreview
714
727
  onClick: handleUpdate,
715
728
  position: [
716
729
  'panel',
717
- 'preview'
730
+ 'preview',
731
+ 'relation-modal'
718
732
  ]
719
733
  };
720
734
  };
721
735
  UpdateAction.type = 'update';
722
736
  UpdateAction.position = [
723
737
  'panel',
724
- 'preview'
738
+ 'preview',
739
+ 'relation-modal'
725
740
  ];
726
741
  const UNPUBLISH_DRAFT_OPTIONS = {
727
742
  KEEP: 'keep',