@payloadcms/ui 3.13.0 → 3.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/elements/PublishButton/index.d.ts.map +1 -1
- package/dist/elements/PublishButton/index.js +11 -4
- package/dist/elements/PublishButton/index.js.map +1 -1
- package/dist/elements/SaveButton/index.d.ts.map +1 -1
- package/dist/elements/SaveButton/index.js +12 -4
- package/dist/elements/SaveButton/index.js.map +1 -1
- package/dist/elements/SaveDraftButton/index.d.ts.map +1 -1
- package/dist/elements/SaveDraftButton/index.js +3 -2
- package/dist/elements/SaveDraftButton/index.js.map +1 -1
- package/dist/elements/Upload/index.d.ts.map +1 -1
- package/dist/elements/Upload/index.js +6 -2
- package/dist/elements/Upload/index.js.map +1 -1
- package/dist/exports/client/index.js +22 -22
- package/dist/exports/client/index.js.map +3 -3
- package/dist/exports/shared/index.js +2 -2
- package/dist/exports/shared/index.js.map +3 -3
- package/dist/fields/Upload/HasMany/index.d.ts.map +1 -1
- package/dist/fields/Upload/HasMany/index.js +6 -4
- package/dist/fields/Upload/HasMany/index.js.map +1 -1
- package/dist/fields/Upload/Input.d.ts.map +1 -1
- package/dist/fields/Upload/Input.js +166 -143
- package/dist/fields/Upload/Input.js.map +1 -1
- package/dist/fields/Upload/RelationshipContent/index.d.ts +1 -1
- package/dist/fields/Upload/RelationshipContent/index.d.ts.map +1 -1
- package/dist/fields/Upload/RelationshipContent/index.js +55 -45
- package/dist/fields/Upload/RelationshipContent/index.js.map +1 -1
- package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.d.ts +3 -0
- package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.d.ts.map +1 -1
- package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js +22 -24
- package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js.map +1 -1
- package/dist/forms/fieldSchemasToFormState/calculateDefaultValues/promise.d.ts.map +1 -1
- package/dist/forms/fieldSchemasToFormState/calculateDefaultValues/promise.js +14 -7
- package/dist/forms/fieldSchemasToFormState/calculateDefaultValues/promise.js.map +1 -1
- package/dist/forms/fieldSchemasToFormState/index.d.ts.map +1 -1
- package/dist/forms/fieldSchemasToFormState/index.js.map +1 -1
- package/dist/forms/fieldSchemasToFormState/iterateFields.d.ts.map +1 -1
- package/dist/forms/fieldSchemasToFormState/iterateFields.js +26 -3
- package/dist/forms/fieldSchemasToFormState/iterateFields.js.map +1 -1
- package/dist/providers/DocumentInfo/index.d.ts.map +1 -1
- package/dist/providers/DocumentInfo/index.js +6 -0
- package/dist/providers/DocumentInfo/index.js.map +1 -1
- package/dist/providers/DocumentInfo/types.d.ts +3 -0
- package/dist/providers/DocumentInfo/types.d.ts.map +1 -1
- package/dist/providers/DocumentInfo/types.js.map +1 -1
- package/dist/providers/ServerFunctions/index.d.ts +5 -2
- package/dist/providers/ServerFunctions/index.d.ts.map +1 -1
- package/dist/providers/ServerFunctions/index.js +1 -0
- package/dist/providers/ServerFunctions/index.js.map +1 -1
- package/dist/utilities/abortAndIgnore.d.ts +8 -0
- package/dist/utilities/abortAndIgnore.d.ts.map +1 -1
- package/dist/utilities/abortAndIgnore.js +11 -5
- package/dist/utilities/abortAndIgnore.js.map +1 -1
- package/dist/utilities/buildClientFieldSchemaMap/index.d.ts.map +1 -1
- package/dist/utilities/buildClientFieldSchemaMap/index.js +4 -6
- package/dist/utilities/buildClientFieldSchemaMap/index.js.map +1 -1
- package/dist/utilities/buildFieldSchemaMap/index.d.ts.map +1 -1
- package/dist/utilities/buildFieldSchemaMap/index.js +4 -6
- package/dist/utilities/buildFieldSchemaMap/index.js.map +1 -1
- package/dist/utilities/schedulePublishHandler.d.ts +1 -1
- package/dist/utilities/schedulePublishHandler.d.ts.map +1 -1
- package/dist/utilities/schedulePublishHandler.js +25 -4
- package/dist/utilities/schedulePublishHandler.js.map +1 -1
- package/dist/views/Edit/Auth/index.d.ts.map +1 -1
- package/dist/views/Edit/Auth/index.js +79 -90
- package/dist/views/Edit/Auth/index.js.map +1 -1
- package/dist/views/Edit/Auth/types.d.ts +0 -1
- package/dist/views/Edit/Auth/types.d.ts.map +1 -1
- package/dist/views/Edit/Auth/types.js.map +1 -1
- package/dist/views/Edit/index.d.ts.map +1 -1
- package/dist/views/Edit/index.js +2 -8
- package/dist/views/Edit/index.js.map +1 -1
- package/package.json +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/PublishButton/index.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAsB,MAAM,OAAO,CAAA;AAc1C,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/PublishButton/index.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAsB,MAAM,OAAO,CAAA;AAc1C,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAqMtD,CAAA"}
|
|
@@ -27,7 +27,8 @@ export const PublishButton = ({
|
|
|
27
27
|
hasPublishPermission,
|
|
28
28
|
setHasPublishedDoc,
|
|
29
29
|
setUnpublishedVersionCount,
|
|
30
|
-
unpublishedVersionCount
|
|
30
|
+
unpublishedVersionCount,
|
|
31
|
+
uploadStatus
|
|
31
32
|
} = useDocumentInfo();
|
|
32
33
|
const {
|
|
33
34
|
config
|
|
@@ -71,7 +72,7 @@ export const PublishButton = ({
|
|
|
71
72
|
}, [collectionSlug, globalSlug, config]);
|
|
72
73
|
const scheduledPublishEnabled = typeof entityConfig?.versions?.drafts === 'object' && entityConfig?.versions?.drafts.schedulePublish;
|
|
73
74
|
const hasNewerVersions = unpublishedVersionCount > 0;
|
|
74
|
-
const canPublish = hasPublishPermission && (modified || hasNewerVersions || !hasPublishedDoc);
|
|
75
|
+
const canPublish = hasPublishPermission && (modified || hasNewerVersions || !hasPublishedDoc) && uploadStatus !== 'uploading';
|
|
75
76
|
const operation = useOperation();
|
|
76
77
|
const forceDisable = operation === 'update' && !modified;
|
|
77
78
|
const saveDraft = useCallback(async () => {
|
|
@@ -111,6 +112,9 @@ export const PublishButton = ({
|
|
|
111
112
|
}
|
|
112
113
|
});
|
|
113
114
|
const publish = useCallback(() => {
|
|
115
|
+
if (uploadStatus === 'uploading') {
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
114
118
|
void submit({
|
|
115
119
|
overrides: {
|
|
116
120
|
_status: 'published'
|
|
@@ -118,8 +122,11 @@ export const PublishButton = ({
|
|
|
118
122
|
});
|
|
119
123
|
setUnpublishedVersionCount(0);
|
|
120
124
|
setHasPublishedDoc(true);
|
|
121
|
-
}, [setHasPublishedDoc, submit, setUnpublishedVersionCount]);
|
|
125
|
+
}, [setHasPublishedDoc, submit, setUnpublishedVersionCount, uploadStatus]);
|
|
122
126
|
const publishSpecificLocale = useCallback(locale => {
|
|
127
|
+
if (uploadStatus === 'uploading') {
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
123
130
|
const params = qs.stringify({
|
|
124
131
|
publishSpecificLocale: locale
|
|
125
132
|
});
|
|
@@ -131,7 +138,7 @@ export const PublishButton = ({
|
|
|
131
138
|
}
|
|
132
139
|
});
|
|
133
140
|
setHasPublishedDoc(true);
|
|
134
|
-
}, [api, collectionSlug, globalSlug, id, serverURL, setHasPublishedDoc, submit]);
|
|
141
|
+
}, [api, collectionSlug, globalSlug, id, serverURL, setHasPublishedDoc, submit, uploadStatus]);
|
|
135
142
|
if (!hasPublishPermission) {
|
|
136
143
|
return null;
|
|
137
144
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["useModal","qs","React","useCallback","useForm","useFormModified","FormSubmit","useHotkey","useConfig","useDocumentInfo","useEditDepth","useLocale","useOperation","useTranslation","PopupList","ScheduleDrawer","PublishButton","label","labelProp","id","collectionSlug","docConfig","globalSlug","hasPublishedDoc","hasPublishPermission","setHasPublishedDoc","setUnpublishedVersionCount","unpublishedVersionCount","config","submit","modified","editDepth","code","localeCode","isModalOpen","toggleModal","drawerSlug","localization","routes","api","serverURL","i18n","t","entityConfig","useMemo","collections","find","slug","globals","scheduledPublishEnabled","versions","drafts","schedulePublish","hasNewerVersions","canPublish","operation","forceDisable","saveDraft","search","action","method","overrides","_status","skipValidation","cmdCtrlKey","keyCodes","e","preventDefault","stopPropagation","autosave","publish","publishSpecificLocale","locale","params","stringify","_jsxs","Fragment","_jsx","buttonId","disabled","onClick","size","SubMenuPopupContent","close","ButtonGroup","Button","locales","map","formattedLabel","language","isActive","undefined","type"],"sources":["../../../src/elements/PublishButton/index.tsx"],"sourcesContent":["'use client'\n\nimport { useModal } from '@faceless-ui/modal'\nimport * as qs from 'qs-esm'\nimport React, { useCallback } from 'react'\n\nimport { useForm, useFormModified } from '../../forms/Form/context.js'\nimport { FormSubmit } from '../../forms/Submit/index.js'\nimport { useHotkey } from '../../hooks/useHotkey.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { useEditDepth } from '../../providers/EditDepth/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { useOperation } from '../../providers/Operation/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { PopupList } from '../Popup/index.js'\nimport { ScheduleDrawer } from './ScheduleDrawer/index.js'\n\nexport const PublishButton: React.FC<{ label?: string }> = ({ label: labelProp }) => {\n const {\n id,\n collectionSlug,\n docConfig,\n globalSlug,\n hasPublishedDoc,\n hasPublishPermission,\n setHasPublishedDoc,\n setUnpublishedVersionCount,\n unpublishedVersionCount,\n } = useDocumentInfo()\n\n const { config } = useConfig()\n const { submit } = useForm()\n const modified = useFormModified()\n const editDepth = useEditDepth()\n const { code: localeCode } = useLocale()\n const { isModalOpen, toggleModal } = useModal()\n\n const drawerSlug = `schedule-publish-${id}`\n\n const {\n localization,\n routes: { api },\n serverURL,\n } = config\n\n const { i18n, t } = useTranslation()\n const label = labelProp || t('version:publishChanges')\n\n const entityConfig = React.useMemo(() => {\n if (collectionSlug) {\n return config.collections.find(({ slug }) => slug === collectionSlug)\n }\n\n if (globalSlug) {\n return config.globals.find(({ slug }) => slug === globalSlug)\n }\n }, [collectionSlug, globalSlug, config])\n\n const scheduledPublishEnabled =\n typeof entityConfig?.versions?.drafts === 'object' &&\n entityConfig?.versions?.drafts.schedulePublish\n\n const hasNewerVersions = unpublishedVersionCount > 0\n const canPublish = hasPublishPermission && (modified || hasNewerVersions || !hasPublishedDoc)\n const operation = useOperation()\n\n const forceDisable = operation === 'update' && !modified\n\n const saveDraft = useCallback(async () => {\n if (forceDisable) {\n return\n }\n\n const search = `?locale=${localeCode}&depth=0&fallback-locale=null&draft=true`\n let action\n let method = 'POST'\n\n if (collectionSlug) {\n action = `${serverURL}${api}/${collectionSlug}${id ? `/${id}` : ''}${search}`\n if (id) {\n method = 'PATCH'\n }\n }\n\n if (globalSlug) {\n action = `${serverURL}${api}/globals/${globalSlug}${search}`\n }\n\n await submit({\n action,\n method,\n overrides: {\n _status: 'draft',\n },\n skipValidation: true,\n })\n }, [submit, collectionSlug, globalSlug, serverURL, api, localeCode, id, forceDisable])\n\n useHotkey({ cmdCtrlKey: true, editDepth, keyCodes: ['s'] }, (e) => {\n e.preventDefault()\n e.stopPropagation()\n\n if (saveDraft && docConfig.versions?.drafts && docConfig.versions?.drafts?.autosave) {\n void saveDraft()\n }\n })\n\n const publish = useCallback(() => {\n void submit({\n overrides: {\n _status: 'published',\n },\n })\n\n setUnpublishedVersionCount(0)\n setHasPublishedDoc(true)\n }, [setHasPublishedDoc, submit, setUnpublishedVersionCount])\n\n const publishSpecificLocale = useCallback(\n (locale) => {\n const params = qs.stringify({\n publishSpecificLocale: locale,\n })\n\n const action = `${serverURL}${api}${\n globalSlug ? `/globals/${globalSlug}` : `/${collectionSlug}/${id ? `${'/' + id}` : ''}`\n }${params ? '?' + params : ''}`\n\n void submit({\n action,\n overrides: {\n _status: 'published',\n },\n })\n\n setHasPublishedDoc(true)\n },\n [api, collectionSlug, globalSlug, id, serverURL, setHasPublishedDoc, submit],\n )\n\n if (!hasPublishPermission) {\n return null\n }\n\n return (\n <React.Fragment>\n <FormSubmit\n buttonId=\"action-save\"\n disabled={!canPublish}\n onClick={publish}\n size=\"medium\"\n SubMenuPopupContent={\n localization || scheduledPublishEnabled\n ? ({ close }) => {\n return (\n <React.Fragment>\n {scheduledPublishEnabled && (\n <PopupList.ButtonGroup key=\"schedule-publish\">\n <PopupList.Button onClick={() => [toggleModal(drawerSlug), close()]}>\n {t('version:schedulePublish')}\n </PopupList.Button>\n </PopupList.ButtonGroup>\n )}\n {localization\n ? localization.locales.map((locale) => {\n const formattedLabel =\n typeof locale.label === 'string'\n ? locale.label\n : locale.label && locale.label[i18n?.language]\n\n const isActive =\n typeof locale === 'string'\n ? locale === localeCode\n : locale.code === localeCode\n\n if (isActive) {\n return (\n <PopupList.ButtonGroup key={locale.code}>\n <PopupList.Button\n onClick={() => [publishSpecificLocale(locale.code), close()]}\n >\n {t('version:publishIn', {\n locale: formattedLabel || locale.code,\n })}\n </PopupList.Button>\n </PopupList.ButtonGroup>\n )\n }\n })\n : null}\n </React.Fragment>\n )\n }\n : undefined\n }\n type=\"button\"\n >\n {label}\n </FormSubmit>\n {scheduledPublishEnabled && isModalOpen(drawerSlug) && <ScheduleDrawer slug={drawerSlug} />}\n </React.Fragment>\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["useModal","qs","React","useCallback","useForm","useFormModified","FormSubmit","useHotkey","useConfig","useDocumentInfo","useEditDepth","useLocale","useOperation","useTranslation","PopupList","ScheduleDrawer","PublishButton","label","labelProp","id","collectionSlug","docConfig","globalSlug","hasPublishedDoc","hasPublishPermission","setHasPublishedDoc","setUnpublishedVersionCount","unpublishedVersionCount","uploadStatus","config","submit","modified","editDepth","code","localeCode","isModalOpen","toggleModal","drawerSlug","localization","routes","api","serverURL","i18n","t","entityConfig","useMemo","collections","find","slug","globals","scheduledPublishEnabled","versions","drafts","schedulePublish","hasNewerVersions","canPublish","operation","forceDisable","saveDraft","search","action","method","overrides","_status","skipValidation","cmdCtrlKey","keyCodes","e","preventDefault","stopPropagation","autosave","publish","publishSpecificLocale","locale","params","stringify","_jsxs","Fragment","_jsx","buttonId","disabled","onClick","size","SubMenuPopupContent","close","ButtonGroup","Button","locales","map","formattedLabel","language","isActive","undefined","type"],"sources":["../../../src/elements/PublishButton/index.tsx"],"sourcesContent":["'use client'\n\nimport { useModal } from '@faceless-ui/modal'\nimport * as qs from 'qs-esm'\nimport React, { useCallback } from 'react'\n\nimport { useForm, useFormModified } from '../../forms/Form/context.js'\nimport { FormSubmit } from '../../forms/Submit/index.js'\nimport { useHotkey } from '../../hooks/useHotkey.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { useEditDepth } from '../../providers/EditDepth/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { useOperation } from '../../providers/Operation/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { PopupList } from '../Popup/index.js'\nimport { ScheduleDrawer } from './ScheduleDrawer/index.js'\n\nexport const PublishButton: React.FC<{ label?: string }> = ({ label: labelProp }) => {\n const {\n id,\n collectionSlug,\n docConfig,\n globalSlug,\n hasPublishedDoc,\n hasPublishPermission,\n setHasPublishedDoc,\n setUnpublishedVersionCount,\n unpublishedVersionCount,\n uploadStatus,\n } = useDocumentInfo()\n\n const { config } = useConfig()\n const { submit } = useForm()\n const modified = useFormModified()\n const editDepth = useEditDepth()\n const { code: localeCode } = useLocale()\n const { isModalOpen, toggleModal } = useModal()\n\n const drawerSlug = `schedule-publish-${id}`\n\n const {\n localization,\n routes: { api },\n serverURL,\n } = config\n\n const { i18n, t } = useTranslation()\n const label = labelProp || t('version:publishChanges')\n\n const entityConfig = React.useMemo(() => {\n if (collectionSlug) {\n return config.collections.find(({ slug }) => slug === collectionSlug)\n }\n\n if (globalSlug) {\n return config.globals.find(({ slug }) => slug === globalSlug)\n }\n }, [collectionSlug, globalSlug, config])\n\n const scheduledPublishEnabled =\n typeof entityConfig?.versions?.drafts === 'object' &&\n entityConfig?.versions?.drafts.schedulePublish\n\n const hasNewerVersions = unpublishedVersionCount > 0\n const canPublish =\n hasPublishPermission &&\n (modified || hasNewerVersions || !hasPublishedDoc) &&\n uploadStatus !== 'uploading'\n const operation = useOperation()\n\n const forceDisable = operation === 'update' && !modified\n\n const saveDraft = useCallback(async () => {\n if (forceDisable) {\n return\n }\n\n const search = `?locale=${localeCode}&depth=0&fallback-locale=null&draft=true`\n let action\n let method = 'POST'\n\n if (collectionSlug) {\n action = `${serverURL}${api}/${collectionSlug}${id ? `/${id}` : ''}${search}`\n if (id) {\n method = 'PATCH'\n }\n }\n\n if (globalSlug) {\n action = `${serverURL}${api}/globals/${globalSlug}${search}`\n }\n\n await submit({\n action,\n method,\n overrides: {\n _status: 'draft',\n },\n skipValidation: true,\n })\n }, [submit, collectionSlug, globalSlug, serverURL, api, localeCode, id, forceDisable])\n\n useHotkey({ cmdCtrlKey: true, editDepth, keyCodes: ['s'] }, (e) => {\n e.preventDefault()\n e.stopPropagation()\n\n if (saveDraft && docConfig.versions?.drafts && docConfig.versions?.drafts?.autosave) {\n void saveDraft()\n }\n })\n\n const publish = useCallback(() => {\n if (uploadStatus === 'uploading') {\n return\n }\n\n void submit({\n overrides: {\n _status: 'published',\n },\n })\n\n setUnpublishedVersionCount(0)\n setHasPublishedDoc(true)\n }, [setHasPublishedDoc, submit, setUnpublishedVersionCount, uploadStatus])\n\n const publishSpecificLocale = useCallback(\n (locale) => {\n if (uploadStatus === 'uploading') {\n return\n }\n\n const params = qs.stringify({\n publishSpecificLocale: locale,\n })\n\n const action = `${serverURL}${api}${\n globalSlug ? `/globals/${globalSlug}` : `/${collectionSlug}/${id ? `${'/' + id}` : ''}`\n }${params ? '?' + params : ''}`\n\n void submit({\n action,\n overrides: {\n _status: 'published',\n },\n })\n\n setHasPublishedDoc(true)\n },\n [api, collectionSlug, globalSlug, id, serverURL, setHasPublishedDoc, submit, uploadStatus],\n )\n\n if (!hasPublishPermission) {\n return null\n }\n\n return (\n <React.Fragment>\n <FormSubmit\n buttonId=\"action-save\"\n disabled={!canPublish}\n onClick={publish}\n size=\"medium\"\n SubMenuPopupContent={\n localization || scheduledPublishEnabled\n ? ({ close }) => {\n return (\n <React.Fragment>\n {scheduledPublishEnabled && (\n <PopupList.ButtonGroup key=\"schedule-publish\">\n <PopupList.Button onClick={() => [toggleModal(drawerSlug), close()]}>\n {t('version:schedulePublish')}\n </PopupList.Button>\n </PopupList.ButtonGroup>\n )}\n {localization\n ? localization.locales.map((locale) => {\n const formattedLabel =\n typeof locale.label === 'string'\n ? locale.label\n : locale.label && locale.label[i18n?.language]\n\n const isActive =\n typeof locale === 'string'\n ? locale === localeCode\n : locale.code === localeCode\n\n if (isActive) {\n return (\n <PopupList.ButtonGroup key={locale.code}>\n <PopupList.Button\n onClick={() => [publishSpecificLocale(locale.code), close()]}\n >\n {t('version:publishIn', {\n locale: formattedLabel || locale.code,\n })}\n </PopupList.Button>\n </PopupList.ButtonGroup>\n )\n }\n })\n : null}\n </React.Fragment>\n )\n }\n : undefined\n }\n type=\"button\"\n >\n {label}\n </FormSubmit>\n {scheduledPublishEnabled && isModalOpen(drawerSlug) && <ScheduleDrawer slug={drawerSlug} />}\n </React.Fragment>\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/SaveButton/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAiB,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/SaveButton/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAiB,MAAM,OAAO,CAAA;AAUrC,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CA4CnD,CAAA"}
|
|
@@ -5,12 +5,16 @@ import React, { useRef } from 'react';
|
|
|
5
5
|
import { useForm, useFormModified } from '../../forms/Form/context.js';
|
|
6
6
|
import { FormSubmit } from '../../forms/Submit/index.js';
|
|
7
7
|
import { useHotkey } from '../../hooks/useHotkey.js';
|
|
8
|
+
import { useDocumentInfo } from '../../providers/DocumentInfo/index.js';
|
|
8
9
|
import { useEditDepth } from '../../providers/EditDepth/index.js';
|
|
9
10
|
import { useOperation } from '../../providers/Operation/index.js';
|
|
10
11
|
import { useTranslation } from '../../providers/Translation/index.js';
|
|
11
12
|
export const SaveButton = ({
|
|
12
13
|
label: labelProp
|
|
13
14
|
}) => {
|
|
15
|
+
const {
|
|
16
|
+
uploadStatus
|
|
17
|
+
} = useDocumentInfo();
|
|
14
18
|
const {
|
|
15
19
|
t
|
|
16
20
|
} = useTranslation();
|
|
@@ -22,7 +26,7 @@ export const SaveButton = ({
|
|
|
22
26
|
const ref = useRef(null);
|
|
23
27
|
const editDepth = useEditDepth();
|
|
24
28
|
const operation = useOperation();
|
|
25
|
-
const forceDisable = operation === 'update' && !modified;
|
|
29
|
+
const forceDisable = operation === 'update' && !modified || uploadStatus === 'uploading';
|
|
26
30
|
useHotkey({
|
|
27
31
|
cmdCtrlKey: true,
|
|
28
32
|
editDepth,
|
|
@@ -37,12 +41,16 @@ export const SaveButton = ({
|
|
|
37
41
|
ref.current.click();
|
|
38
42
|
}
|
|
39
43
|
});
|
|
44
|
+
const handleSubmit = () => {
|
|
45
|
+
if (uploadStatus === 'uploading') {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
return void submit();
|
|
49
|
+
};
|
|
40
50
|
return /*#__PURE__*/_jsx(FormSubmit, {
|
|
41
51
|
buttonId: "action-save",
|
|
42
52
|
disabled: forceDisable,
|
|
43
|
-
onClick:
|
|
44
|
-
return void submit();
|
|
45
|
-
},
|
|
53
|
+
onClick: handleSubmit,
|
|
46
54
|
ref: ref,
|
|
47
55
|
size: "medium",
|
|
48
56
|
type: "button",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["React","useRef","useForm","useFormModified","FormSubmit","useHotkey","useEditDepth","useOperation","useTranslation","SaveButton","label","labelProp","t","submit","modified","ref","editDepth","operation","forceDisable","cmdCtrlKey","keyCodes","e","preventDefault","stopPropagation","current","click","_jsx","buttonId","disabled","onClick","size","type"],"sources":["../../../src/elements/SaveButton/index.tsx"],"sourcesContent":["'use client'\n\nimport React, { useRef } from 'react'\n\nimport { useForm, useFormModified } from '../../forms/Form/context.js'\nimport { FormSubmit } from '../../forms/Submit/index.js'\nimport { useHotkey } from '../../hooks/useHotkey.js'\nimport { useEditDepth } from '../../providers/EditDepth/index.js'\nimport { useOperation } from '../../providers/Operation/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\n\nexport const SaveButton: React.FC<{ label?: string }> = ({ label: labelProp }) => {\n const { t } = useTranslation()\n const { submit } = useForm()\n const modified = useFormModified()\n const label = labelProp || t('general:save')\n const ref = useRef<HTMLButtonElement>(null)\n const editDepth = useEditDepth()\n const operation = useOperation()\n\n const forceDisable = operation === 'update' && !modified\n\n useHotkey({ cmdCtrlKey: true, editDepth, keyCodes: ['s'] }, (e) => {\n if (forceDisable) {\n // absorb the event\n }\n\n e.preventDefault()\n e.stopPropagation()\n if (ref?.current) {\n ref.current.click()\n }\n })\n\n return (\n <FormSubmit\n buttonId=\"action-save\"\n disabled={forceDisable}\n onClick={
|
|
1
|
+
{"version":3,"file":"index.js","names":["React","useRef","useForm","useFormModified","FormSubmit","useHotkey","useDocumentInfo","useEditDepth","useOperation","useTranslation","SaveButton","label","labelProp","uploadStatus","t","submit","modified","ref","editDepth","operation","forceDisable","cmdCtrlKey","keyCodes","e","preventDefault","stopPropagation","current","click","handleSubmit","_jsx","buttonId","disabled","onClick","size","type"],"sources":["../../../src/elements/SaveButton/index.tsx"],"sourcesContent":["'use client'\n\nimport React, { useRef } from 'react'\n\nimport { useForm, useFormModified } from '../../forms/Form/context.js'\nimport { FormSubmit } from '../../forms/Submit/index.js'\nimport { useHotkey } from '../../hooks/useHotkey.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { useEditDepth } from '../../providers/EditDepth/index.js'\nimport { useOperation } from '../../providers/Operation/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\n\nexport const SaveButton: React.FC<{ label?: string }> = ({ label: labelProp }) => {\n const { uploadStatus } = useDocumentInfo()\n const { t } = useTranslation()\n const { submit } = useForm()\n const modified = useFormModified()\n const label = labelProp || t('general:save')\n const ref = useRef<HTMLButtonElement>(null)\n const editDepth = useEditDepth()\n const operation = useOperation()\n\n const forceDisable = (operation === 'update' && !modified) || uploadStatus === 'uploading'\n\n useHotkey({ cmdCtrlKey: true, editDepth, keyCodes: ['s'] }, (e) => {\n if (forceDisable) {\n // absorb the event\n }\n\n e.preventDefault()\n e.stopPropagation()\n if (ref?.current) {\n ref.current.click()\n }\n })\n\n const handleSubmit = () => {\n if (uploadStatus === 'uploading') {\n return\n }\n\n return void submit()\n }\n\n return (\n <FormSubmit\n buttonId=\"action-save\"\n disabled={forceDisable}\n onClick={handleSubmit}\n ref={ref}\n size=\"medium\"\n type=\"button\"\n >\n {label}\n </FormSubmit>\n )\n}\n"],"mappings":"AAAA;;;AAEA,OAAOA,KAAA,IAASC,MAAM,QAAQ;AAE9B,SAASC,OAAO,EAAEC,eAAe,QAAQ;AACzC,SAASC,UAAU,QAAQ;AAC3B,SAASC,SAAS,QAAQ;AAC1B,SAASC,eAAe,QAAQ;AAChC,SAASC,YAAY,QAAQ;AAC7B,SAASC,YAAY,QAAQ;AAC7B,SAASC,cAAc,QAAQ;AAE/B,OAAO,MAAMC,UAAA,GAA2CA,CAAC;EAAEC,KAAA,EAAOC;AAAS,CAAE;EAC3E,MAAM;IAAEC;EAAY,CAAE,GAAGP,eAAA;EACzB,MAAM;IAAEQ;EAAC,CAAE,GAAGL,cAAA;EACd,MAAM;IAAEM;EAAM,CAAE,GAAGb,OAAA;EACnB,MAAMc,QAAA,GAAWb,eAAA;EACjB,MAAMQ,KAAA,GAAQC,SAAA,IAAaE,CAAA,CAAE;EAC7B,MAAMG,GAAA,GAAMhB,MAAA,CAA0B;EACtC,MAAMiB,SAAA,GAAYX,YAAA;EAClB,MAAMY,SAAA,GAAYX,YAAA;EAElB,MAAMY,YAAA,GAAeD,SAAC,KAAc,YAAY,CAACH,QAAA,IAAaH,YAAA,KAAiB;EAE/ER,SAAA,CAAU;IAAEgB,UAAA,EAAY;IAAMH,SAAA;IAAWI,QAAA,EAAU,CAAC;EAAK,GAAIC,CAAA;IAC3D,IAAIH,YAAA,EAAc;MAChB;IAAA;IAGFG,CAAA,CAAEC,cAAc;IAChBD,CAAA,CAAEE,eAAe;IACjB,IAAIR,GAAA,EAAKS,OAAA,EAAS;MAChBT,GAAA,CAAIS,OAAO,CAACC,KAAK;IACnB;EACF;EAEA,MAAMC,YAAA,GAAeA,CAAA;IACnB,IAAIf,YAAA,KAAiB,aAAa;MAChC;IACF;IAEA,OAAO,KAAKE,MAAA;EACd;EAEA,oBACEc,IAAA,CAACzB,UAAA;IACC0B,QAAA,EAAS;IACTC,QAAA,EAAUX,YAAA;IACVY,OAAA,EAASJ,YAAA;IACTX,GAAA,EAAKA,GAAA;IACLgB,IAAA,EAAK;IACLC,IAAA,EAAK;cAEJvB;;AAGP","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/SaveDraftButton/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA8B,MAAM,OAAO,CAAA;AAclD,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/SaveDraftButton/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA8B,MAAM,OAAO,CAAA;AAclD,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAyFnC,CAAA"}
|
|
@@ -25,7 +25,8 @@ export const SaveDraftButton = () => {
|
|
|
25
25
|
id,
|
|
26
26
|
collectionSlug,
|
|
27
27
|
globalSlug,
|
|
28
|
-
setUnpublishedVersionCount
|
|
28
|
+
setUnpublishedVersionCount,
|
|
29
|
+
uploadStatus
|
|
29
30
|
} = useDocumentInfo();
|
|
30
31
|
const modified = useFormModified();
|
|
31
32
|
const {
|
|
@@ -40,7 +41,7 @@ export const SaveDraftButton = () => {
|
|
|
40
41
|
submit
|
|
41
42
|
} = useForm();
|
|
42
43
|
const operation = useOperation();
|
|
43
|
-
const forceDisable = operation === 'update' && !modified;
|
|
44
|
+
const forceDisable = operation === 'update' && !modified || uploadStatus === 'uploading';
|
|
44
45
|
const saveDraft = useCallback(async () => {
|
|
45
46
|
if (forceDisable) {
|
|
46
47
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["React","useCallback","useRef","useForm","useFormModified","FormSubmit","useHotkey","useConfig","useDocumentInfo","useEditDepth","useLocale","useOperation","useTranslation","baseClass","SaveDraftButton","config","routes","api","serverURL","id","collectionSlug","globalSlug","setUnpublishedVersionCount","modified","code","locale","ref","editDepth","t","submit","operation","forceDisable","saveDraft","search","action","method","overrides","_status","skipValidation","count","cmdCtrlKey","keyCodes","e","preventDefault","stopPropagation","current","click","_jsx","buttonId","buttonStyle","className","disabled","onClick","size","type"],"sources":["../../../src/elements/SaveDraftButton/index.tsx"],"sourcesContent":["'use client'\n\nimport React, { useCallback, useRef } from 'react'\n\nimport { useForm, useFormModified } from '../../forms/Form/context.js'\nimport { FormSubmit } from '../../forms/Submit/index.js'\nimport { useHotkey } from '../../hooks/useHotkey.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { useEditDepth } from '../../providers/EditDepth/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { useOperation } from '../../providers/Operation/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\n\nconst baseClass = 'save-draft'\n\nexport const SaveDraftButton: React.FC = () => {\n const {\n config: {\n routes: { api },\n serverURL,\n },\n } = useConfig()\n const { id, collectionSlug, globalSlug, setUnpublishedVersionCount }
|
|
1
|
+
{"version":3,"file":"index.js","names":["React","useCallback","useRef","useForm","useFormModified","FormSubmit","useHotkey","useConfig","useDocumentInfo","useEditDepth","useLocale","useOperation","useTranslation","baseClass","SaveDraftButton","config","routes","api","serverURL","id","collectionSlug","globalSlug","setUnpublishedVersionCount","uploadStatus","modified","code","locale","ref","editDepth","t","submit","operation","forceDisable","saveDraft","search","action","method","overrides","_status","skipValidation","count","cmdCtrlKey","keyCodes","e","preventDefault","stopPropagation","current","click","_jsx","buttonId","buttonStyle","className","disabled","onClick","size","type"],"sources":["../../../src/elements/SaveDraftButton/index.tsx"],"sourcesContent":["'use client'\n\nimport React, { useCallback, useRef } from 'react'\n\nimport { useForm, useFormModified } from '../../forms/Form/context.js'\nimport { FormSubmit } from '../../forms/Submit/index.js'\nimport { useHotkey } from '../../hooks/useHotkey.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { useEditDepth } from '../../providers/EditDepth/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { useOperation } from '../../providers/Operation/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\n\nconst baseClass = 'save-draft'\n\nexport const SaveDraftButton: React.FC = () => {\n const {\n config: {\n routes: { api },\n serverURL,\n },\n } = useConfig()\n const { id, collectionSlug, globalSlug, setUnpublishedVersionCount, uploadStatus } =\n useDocumentInfo()\n const modified = useFormModified()\n const { code: locale } = useLocale()\n const ref = useRef<HTMLButtonElement>(null)\n const editDepth = useEditDepth()\n const { t } = useTranslation()\n const { submit } = useForm()\n const operation = useOperation()\n\n const forceDisable = (operation === 'update' && !modified) || uploadStatus === 'uploading'\n\n const saveDraft = useCallback(async () => {\n if (forceDisable) {\n return\n }\n\n const search = `?locale=${locale}&depth=0&fallback-locale=null&draft=true`\n let action\n let method = 'POST'\n\n if (collectionSlug) {\n action = `${serverURL}${api}/${collectionSlug}${id ? `/${id}` : ''}${search}`\n if (id) {\n method = 'PATCH'\n }\n }\n\n if (globalSlug) {\n action = `${serverURL}${api}/globals/${globalSlug}${search}`\n }\n\n await submit({\n action,\n method,\n overrides: {\n _status: 'draft',\n },\n skipValidation: true,\n })\n\n setUnpublishedVersionCount((count) => count + 1)\n }, [\n submit,\n collectionSlug,\n globalSlug,\n serverURL,\n api,\n locale,\n id,\n forceDisable,\n setUnpublishedVersionCount,\n ])\n\n useHotkey({ cmdCtrlKey: true, editDepth, keyCodes: ['s'] }, (e) => {\n if (forceDisable) {\n // absorb the event\n }\n\n e.preventDefault()\n e.stopPropagation()\n if (ref?.current) {\n ref.current.click()\n }\n })\n\n return (\n <FormSubmit\n buttonId=\"action-save-draft\"\n buttonStyle=\"secondary\"\n className={baseClass}\n disabled={forceDisable}\n onClick={() => {\n return void saveDraft()\n }}\n ref={ref}\n size=\"medium\"\n type=\"button\"\n >\n {t('version:saveDraft')}\n </FormSubmit>\n )\n}\n"],"mappings":"AAAA;;;AAEA,OAAOA,KAAA,IAASC,WAAW,EAAEC,MAAM,QAAQ;AAE3C,SAASC,OAAO,EAAEC,eAAe,QAAQ;AACzC,SAASC,UAAU,QAAQ;AAC3B,SAASC,SAAS,QAAQ;AAC1B,SAASC,SAAS,QAAQ;AAC1B,SAASC,eAAe,QAAQ;AAChC,SAASC,YAAY,QAAQ;AAC7B,SAASC,SAAS,QAAQ;AAC1B,SAASC,YAAY,QAAQ;AAC7B,SAASC,cAAc,QAAQ;AAE/B,MAAMC,SAAA,GAAY;AAElB,OAAO,MAAMC,eAAA,GAA4BA,CAAA;EACvC,MAAM;IACJC,MAAA,EAAQ;MACNC,MAAA,EAAQ;QAAEC;MAAG,CAAE;MACfC;IAAS;EACV,CACF,GAAGX,SAAA;EACJ,MAAM;IAAEY,EAAE;IAAEC,cAAc;IAAEC,UAAU;IAAEC,0BAA0B;IAAEC;EAAY,CAAE,GAChFf,eAAA;EACF,MAAMgB,QAAA,GAAWpB,eAAA;EACjB,MAAM;IAAEqB,IAAA,EAAMC;EAAM,CAAE,GAAGhB,SAAA;EACzB,MAAMiB,GAAA,GAAMzB,MAAA,CAA0B;EACtC,MAAM0B,SAAA,GAAYnB,YAAA;EAClB,MAAM;IAAEoB;EAAC,CAAE,GAAGjB,cAAA;EACd,MAAM;IAAEkB;EAAM,CAAE,GAAG3B,OAAA;EACnB,MAAM4B,SAAA,GAAYpB,YAAA;EAElB,MAAMqB,YAAA,GAAeD,SAAC,KAAc,YAAY,CAACP,QAAA,IAAaD,YAAA,KAAiB;EAE/E,MAAMU,SAAA,GAAYhC,WAAA,CAAY;IAC5B,IAAI+B,YAAA,EAAc;MAChB;IACF;IAEA,MAAME,MAAA,GAAS,WAAWR,MAAA,0CAAgD;IAC1E,IAAIS,MAAA;IACJ,IAAIC,MAAA,GAAS;IAEb,IAAIhB,cAAA,EAAgB;MAClBe,MAAA,GAAS,GAAGjB,SAAA,GAAYD,GAAA,IAAOG,cAAA,GAAiBD,EAAA,GAAK,IAAIA,EAAA,EAAI,GAAG,KAAKe,MAAA,EAAQ;MAC7E,IAAIf,EAAA,EAAI;QACNiB,MAAA,GAAS;MACX;IACF;IAEA,IAAIf,UAAA,EAAY;MACdc,MAAA,GAAS,GAAGjB,SAAA,GAAYD,GAAA,YAAeI,UAAA,GAAaa,MAAA,EAAQ;IAC9D;IAEA,MAAMJ,MAAA,CAAO;MACXK,MAAA;MACAC,MAAA;MACAC,SAAA,EAAW;QACTC,OAAA,EAAS;MACX;MACAC,cAAA,EAAgB;IAClB;IAEAjB,0BAAA,CAA4BkB,KAAA,IAAUA,KAAA,GAAQ;EAChD,GAAG,CACDV,MAAA,EACAV,cAAA,EACAC,UAAA,EACAH,SAAA,EACAD,GAAA,EACAS,MAAA,EACAP,EAAA,EACAa,YAAA,EACAV,0BAAA,CACD;EAEDhB,SAAA,CAAU;IAAEmC,UAAA,EAAY;IAAMb,SAAA;IAAWc,QAAA,EAAU,CAAC;EAAK,GAAIC,CAAA;IAC3D,IAAIX,YAAA,EAAc;MAChB;IAAA;IAGFW,CAAA,CAAEC,cAAc;IAChBD,CAAA,CAAEE,eAAe;IACjB,IAAIlB,GAAA,EAAKmB,OAAA,EAAS;MAChBnB,GAAA,CAAImB,OAAO,CAACC,KAAK;IACnB;EACF;EAEA,oBACEC,IAAA,CAAC3C,UAAA;IACC4C,QAAA,EAAS;IACTC,WAAA,EAAY;IACZC,SAAA,EAAWtC,SAAA;IACXuC,QAAA,EAAUpB,YAAA;IACVqB,OAAA,EAASA,CAAA;MACP,OAAO,KAAKpB,SAAA;IACd;IACAN,GAAA,EAAKA,GAAA;IACL2B,IAAA,EAAK;IACLC,IAAA,EAAK;cAEJ1B,CAAA,CAAE;;AAGT","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/Upload/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,yBAAyB,EAAe,MAAM,SAAS,CAAA;AAGhF,OAAO,KAAmD,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/Upload/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,yBAAyB,EAAe,MAAM,SAAS,CAAA;AAGhF,OAAO,KAAmD,MAAM,OAAO,CAAA;AAiBvE,OAAO,cAAc,CAAA;AAIrB,eAAO,MAAM,cAAc,gBAAgB,CAAA;AAC3C,eAAO,MAAM,eAAe,kBAAkB,CAAA;AAU9C,KAAK,iBAAiB,GAAG;IACvB,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,CAAA;IAC1C,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAA;IACnC,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAA;IACpC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAC1B,CAAA;AAED,eAAO,MAAM,aAAa,wEAKvB,iBAAiB,sBAgCnB,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,CAAA;IAC1C,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,CAAA;IACjC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,KAAK,IAAI,CAAA;IACzC,QAAQ,CAAC,YAAY,EAAE,yBAAyB,CAAC,QAAQ,CAAC,CAAA;CAC3D,CAAA;AAED,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,CAsTxC,CAAA"}
|
|
@@ -19,8 +19,8 @@ import { Dropzone } from '../Dropzone/index.js';
|
|
|
19
19
|
import { EditUpload } from '../EditUpload/index.js';
|
|
20
20
|
import { FileDetails } from '../FileDetails/index.js';
|
|
21
21
|
import { PreviewSizes } from '../PreviewSizes/index.js';
|
|
22
|
-
import { Thumbnail } from '../Thumbnail/index.js';
|
|
23
22
|
import './index.scss';
|
|
23
|
+
import { Thumbnail } from '../Thumbnail/index.js';
|
|
24
24
|
const baseClass = 'file-field';
|
|
25
25
|
export const editDrawerSlug = 'edit-upload';
|
|
26
26
|
export const sizePreviewSlug = 'preview-sizes';
|
|
@@ -111,7 +111,8 @@ export const Upload = props => {
|
|
|
111
111
|
} = useUploadEdits();
|
|
112
112
|
const {
|
|
113
113
|
docPermissions,
|
|
114
|
-
savedDocumentData
|
|
114
|
+
savedDocumentData,
|
|
115
|
+
setUploadStatus
|
|
115
116
|
} = useDocumentInfo();
|
|
116
117
|
const isFormSubmitting = useFormProcessing();
|
|
117
118
|
const {
|
|
@@ -173,6 +174,7 @@ export const Upload = props => {
|
|
|
173
174
|
}, [setModified, updateUploadEdits]);
|
|
174
175
|
const handleUrlSubmit = async () => {
|
|
175
176
|
if (fileUrl) {
|
|
177
|
+
setUploadStatus('uploading');
|
|
176
178
|
try {
|
|
177
179
|
const response = await fetch(fileUrl);
|
|
178
180
|
const data = await response.blob();
|
|
@@ -183,8 +185,10 @@ export const Upload = props => {
|
|
|
183
185
|
type: data.type
|
|
184
186
|
});
|
|
185
187
|
handleFileChange(file);
|
|
188
|
+
setUploadStatus('idle');
|
|
186
189
|
} catch (e_0) {
|
|
187
190
|
toast.error(e_0.message);
|
|
191
|
+
setUploadStatus('failed');
|
|
188
192
|
}
|
|
189
193
|
}
|
|
190
194
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["c","_c","isImage","React","useCallback","useEffect","useRef","useState","toast","FieldError","fieldBaseClass","useForm","useFormProcessing","useField","useDocumentInfo","EditDepthProvider","useTranslation","useUploadEdits","Button","Drawer","DrawerToggler","Dropzone","EditUpload","FileDetails","PreviewSizes","Thumbnail","baseClass","editDrawerSlug","sizePreviewSlug","validate","value","undefined","UploadActions","t0","$","customActions","enableAdjustments","enablePreviewSizes","mimeType","t","t1","t2","Symbol","for","bb0","fileTypeIsAdjustable","length","t3","map","_temp","_jsxs","className","children","Fragment","_jsx","slug","Upload","props","collectionSlug","initialState","onChange","uploadConfig","setModified","resetUploadEdits","updateUploadEdits","uploadEdits","docPermissions","savedDocumentData","isFormSubmitting","errorMessage","setValue","showError","path","fileSrc","setFileSrc","removedFile","setRemovedFile","filename","setFilename","name","showUrlInput","setShowUrlInput","fileUrl","setFileUrl","urlInputRef","inputRef","handleFileChange","newFile","File","URL","createObjectURL","renameFile","fileToChange","newName","type","lastModified","handleFileNameChange","e","updatedFileName","target","handleFileSelection","files","fileToUpload","handleFileRemoval","onEditsSave","args","handleUrlSubmit","response","fetch","data","blob","fileName","split","pop","file","error","message","current","canRemoveUpload","update","delete","hasImageSizes","imageSizes","hasResizeOptions","Boolean","resizeOptions","focalPointEnabled","focalPoint","crop","showCrop","showFocalPoint","acceptMimeTypes","mimeTypes","join","filter","customUploadActions","doc","handleRemove","imageCacheTag","updatedAt","buttonStyle","onClick","click","size","accept","hidden","ref","icon","iconStyle","round","tooltip","Header","url","initialCrop","initialFocalPoint","x","focalX","y","focalY","onSave","hoverTitle","title","label","CustomAction","i"],"sources":["../../../src/elements/Upload/index.tsx"],"sourcesContent":["'use client'\nimport type { FormState, SanitizedCollectionConfig, UploadEdits } from 'payload'\n\nimport { isImage } from 'payload/shared'\nimport React, { useCallback, useEffect, useRef, useState } from 'react'\nimport { toast } from 'sonner'\n\nimport { FieldError } from '../../fields/FieldError/index.js'\nimport { fieldBaseClass } from '../../fields/shared/index.js'\nimport { useForm, useFormProcessing } from '../../forms/Form/index.js'\nimport { useField } from '../../forms/useField/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { EditDepthProvider } from '../../providers/EditDepth/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { useUploadEdits } from '../../providers/UploadEdits/index.js'\nimport { Button } from '../Button/index.js'\nimport { Drawer, DrawerToggler } from '../Drawer/index.js'\nimport { Dropzone } from '../Dropzone/index.js'\nimport { EditUpload } from '../EditUpload/index.js'\nimport { FileDetails } from '../FileDetails/index.js'\nimport { PreviewSizes } from '../PreviewSizes/index.js'\nimport { Thumbnail } from '../Thumbnail/index.js'\nimport './index.scss'\n\nconst baseClass = 'file-field'\nexport const editDrawerSlug = 'edit-upload'\nexport const sizePreviewSlug = 'preview-sizes'\n\nconst validate = (value) => {\n if (!value && value !== undefined) {\n return 'A file is required.'\n }\n\n return true\n}\n\ntype UploadActionsArgs = {\n readonly customActions?: React.ReactNode[]\n readonly enableAdjustments: boolean\n readonly enablePreviewSizes: boolean\n readonly mimeType: string\n}\n\nexport const UploadActions = ({\n customActions,\n enableAdjustments,\n enablePreviewSizes,\n mimeType,\n}: UploadActionsArgs) => {\n const { t } = useTranslation()\n\n const fileTypeIsAdjustable = isImage(mimeType) && mimeType !== 'image/svg+xml'\n\n if (!fileTypeIsAdjustable && (!customActions || customActions.length === 0)) {\n return null\n }\n\n return (\n <div className={`${baseClass}__upload-actions`}>\n {fileTypeIsAdjustable && (\n <React.Fragment>\n {enablePreviewSizes && (\n <DrawerToggler className={`${baseClass}__previewSizes`} slug={sizePreviewSlug}>\n {t('upload:previewSizes')}\n </DrawerToggler>\n )}\n {enableAdjustments && (\n <DrawerToggler className={`${baseClass}__edit`} slug={editDrawerSlug}>\n {t('upload:editImage')}\n </DrawerToggler>\n )}\n </React.Fragment>\n )}\n\n {customActions &&\n customActions.map((CustomAction, i) => {\n return <React.Fragment key={i}>{CustomAction}</React.Fragment>\n })}\n </div>\n )\n}\n\nexport type UploadProps = {\n readonly collectionSlug: string\n readonly customActions?: React.ReactNode[]\n readonly initialState?: FormState\n readonly onChange?: (file?: File) => void\n readonly uploadConfig: SanitizedCollectionConfig['upload']\n}\n\nexport const Upload: React.FC<UploadProps> = (props) => {\n const { collectionSlug, customActions, initialState, onChange, uploadConfig } = props\n\n const { t } = useTranslation()\n const { setModified } = useForm()\n const { resetUploadEdits, updateUploadEdits, uploadEdits } = useUploadEdits()\n const { docPermissions, savedDocumentData } = useDocumentInfo()\n const isFormSubmitting = useFormProcessing()\n const { errorMessage, setValue, showError, value } = useField<File>({\n path: 'file',\n validate,\n })\n\n const [fileSrc, setFileSrc] = useState<null | string>(null)\n const [removedFile, setRemovedFile] = useState(false)\n const [filename, setFilename] = useState<string>(value?.name || '')\n const [showUrlInput, setShowUrlInput] = useState(false)\n const [fileUrl, setFileUrl] = useState<string>('')\n\n const urlInputRef = useRef<HTMLInputElement>(null)\n const inputRef = useRef<HTMLInputElement>(null)\n\n const handleFileChange = useCallback(\n (newFile: File) => {\n if (newFile instanceof File) {\n setFileSrc(URL.createObjectURL(newFile))\n }\n\n setValue(newFile)\n setShowUrlInput(false)\n\n if (typeof onChange === 'function') {\n onChange(newFile)\n }\n },\n [onChange, setValue],\n )\n\n const renameFile = (fileToChange: File, newName: string): File => {\n // Creating a new File object with updated properties\n const newFile = new File([fileToChange], newName, {\n type: fileToChange.type,\n lastModified: fileToChange.lastModified,\n })\n return newFile\n }\n\n const handleFileNameChange = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const updatedFileName = e.target.value\n\n if (value) {\n handleFileChange(renameFile(value, updatedFileName))\n setFilename(updatedFileName)\n }\n },\n [handleFileChange, value],\n )\n\n const handleFileSelection = useCallback(\n (files: FileList) => {\n const fileToUpload = files?.[0]\n handleFileChange(fileToUpload)\n },\n [handleFileChange],\n )\n\n const handleFileRemoval = useCallback(() => {\n setRemovedFile(true)\n handleFileChange(null)\n setFileSrc('')\n setFileUrl('')\n resetUploadEdits()\n setShowUrlInput(false)\n }, [handleFileChange, resetUploadEdits])\n\n const onEditsSave = useCallback(\n (args: UploadEdits) => {\n setModified(true)\n updateUploadEdits(args)\n },\n [setModified, updateUploadEdits],\n )\n\n const handleUrlSubmit = async () => {\n if (fileUrl) {\n try {\n const response = await fetch(fileUrl)\n const data = await response.blob()\n\n // Extract the file name from the URL\n const fileName = fileUrl.split('/').pop()\n\n // Create a new File object from the Blob data\n const file = new File([data], fileName, { type: data.type })\n handleFileChange(file)\n } catch (e) {\n toast.error(e.message)\n }\n }\n }\n\n useEffect(() => {\n if (initialState?.file?.value instanceof File) {\n setFileSrc(URL.createObjectURL(initialState.file.value))\n setRemovedFile(false)\n }\n }, [initialState])\n\n useEffect(() => {\n if (showUrlInput && urlInputRef.current) {\n // urlInputRef.current.focus() // Focus on the remote-url input field when showUrlInput is true\n }\n }, [showUrlInput])\n\n useEffect(() => {\n if (isFormSubmitting) {\n setRemovedFile(false)\n }\n }, [isFormSubmitting])\n\n const canRemoveUpload =\n docPermissions?.update && 'delete' in docPermissions && docPermissions?.delete\n\n const hasImageSizes = uploadConfig?.imageSizes?.length > 0\n const hasResizeOptions = Boolean(uploadConfig?.resizeOptions)\n // Explicity check if set to true, default is undefined\n const focalPointEnabled = uploadConfig?.focalPoint === true\n\n const { crop: showCrop = true, focalPoint = true } = uploadConfig\n\n const showFocalPoint = focalPoint && (hasImageSizes || hasResizeOptions || focalPointEnabled)\n\n const acceptMimeTypes = uploadConfig.mimeTypes?.join(', ')\n\n return (\n <div className={[fieldBaseClass, baseClass].filter(Boolean).join(' ')}>\n <FieldError message={errorMessage} showError={showError} />\n {savedDocumentData && savedDocumentData.filename && !removedFile && (\n <FileDetails\n collectionSlug={collectionSlug}\n customUploadActions={customActions}\n doc={savedDocumentData}\n enableAdjustments={showCrop || showFocalPoint}\n handleRemove={canRemoveUpload ? handleFileRemoval : undefined}\n hasImageSizes={hasImageSizes}\n imageCacheTag={savedDocumentData.updatedAt}\n uploadConfig={uploadConfig}\n />\n )}\n {(!savedDocumentData?.filename || removedFile) && (\n <div className={`${baseClass}__upload`}>\n {!value && !showUrlInput && (\n <Dropzone onChange={handleFileSelection}>\n <div className={`${baseClass}__dropzoneContent`}>\n <div className={`${baseClass}__dropzoneButtons`}>\n <Button\n buttonStyle=\"pill\"\n onClick={() => {\n if (inputRef.current) {\n inputRef.current.click()\n }\n }}\n size=\"small\"\n >\n {t('upload:selectFile')}\n </Button>\n <input\n accept={acceptMimeTypes}\n aria-hidden=\"true\"\n className={`${baseClass}__hidden-input`}\n hidden\n onChange={(e) => {\n if (e.target.files && e.target.files.length > 0) {\n handleFileSelection(e.target.files)\n }\n }}\n ref={inputRef}\n type=\"file\"\n />\n <span className={`${baseClass}__orText`}>{t('general:or')}</span>\n <Button\n buttonStyle=\"pill\"\n onClick={() => {\n setShowUrlInput(true)\n }}\n size=\"small\"\n >\n {t('upload:pasteURL')}\n </Button>\n </div>\n\n <p className={`${baseClass}__dragAndDropText`}>\n {t('general:or')} {t('upload:dragAndDrop')}\n </p>\n </div>\n </Dropzone>\n )}\n {showUrlInput && (\n <React.Fragment>\n <div className={`${baseClass}__remote-file-wrap`}>\n {/* eslint-disable-next-line jsx-a11y/control-has-associated-label */}\n <input\n className={`${baseClass}__remote-file`}\n onChange={(e) => {\n setFileUrl(e.target.value)\n }}\n ref={urlInputRef}\n type=\"text\"\n value={fileUrl}\n />\n <div className={`${baseClass}__add-file-wrap`}>\n <button\n className={`${baseClass}__add-file`}\n onClick={() => {\n void handleUrlSubmit()\n }}\n type=\"button\"\n >\n {t('upload:addFile')}\n </button>\n </div>\n </div>\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__remove`}\n icon=\"x\"\n iconStyle=\"with-border\"\n onClick={() => {\n setShowUrlInput(false)\n }}\n round\n tooltip={t('general:cancel')}\n />\n </React.Fragment>\n )}\n {value && fileSrc && (\n <React.Fragment>\n <div className={`${baseClass}__thumbnail-wrap`}>\n <Thumbnail\n collectionSlug={collectionSlug}\n fileSrc={isImage(value.type) ? fileSrc : null}\n />\n </div>\n <div className={`${baseClass}__file-adjustments`}>\n {/* eslint-disable-next-line jsx-a11y/control-has-associated-label */}\n <input\n className={`${baseClass}__filename`}\n onChange={handleFileNameChange}\n type=\"text\"\n value={filename || value.name}\n />\n <UploadActions\n customActions={customActions}\n enableAdjustments={showCrop || showFocalPoint}\n enablePreviewSizes={hasImageSizes && savedDocumentData?.filename && !removedFile}\n mimeType={value.type}\n />\n </div>\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__remove`}\n icon=\"x\"\n iconStyle=\"with-border\"\n onClick={handleFileRemoval}\n round\n tooltip={t('general:cancel')}\n />\n </React.Fragment>\n )}\n </div>\n )}\n {(value || savedDocumentData?.filename) && (\n <EditDepthProvider>\n <Drawer Header={null} slug={editDrawerSlug}>\n <EditUpload\n fileName={value?.name || savedDocumentData?.filename}\n fileSrc={savedDocumentData?.url || fileSrc}\n imageCacheTag={savedDocumentData?.updatedAt}\n initialCrop={uploadEdits?.crop ?? undefined}\n initialFocalPoint={{\n x: uploadEdits?.focalPoint?.x || savedDocumentData?.focalX || 50,\n y: uploadEdits?.focalPoint?.y || savedDocumentData?.focalY || 50,\n }}\n onSave={onEditsSave}\n showCrop={showCrop}\n showFocalPoint={showFocalPoint}\n />\n </Drawer>\n </EditDepthProvider>\n )}\n {savedDocumentData && hasImageSizes && (\n <Drawer\n className={`${baseClass}__previewDrawer`}\n hoverTitle\n slug={sizePreviewSlug}\n title={t('upload:sizesFor', { label: savedDocumentData.filename })}\n >\n <PreviewSizes\n doc={savedDocumentData}\n imageCacheTag={savedDocumentData.updatedAt}\n uploadConfig={uploadConfig}\n />\n </Drawer>\n )}\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["c","_c","isImage","React","useCallback","useEffect","useRef","useState","toast","FieldError","fieldBaseClass","useForm","useFormProcessing","useField","useDocumentInfo","EditDepthProvider","useTranslation","useUploadEdits","Button","Drawer","DrawerToggler","Dropzone","EditUpload","FileDetails","PreviewSizes","Thumbnail","baseClass","editDrawerSlug","sizePreviewSlug","validate","value","undefined","UploadActions","t0","$","customActions","enableAdjustments","enablePreviewSizes","mimeType","t","t1","t2","Symbol","for","bb0","fileTypeIsAdjustable","length","t3","map","_temp","_jsxs","className","children","Fragment","_jsx","slug","Upload","props","collectionSlug","initialState","onChange","uploadConfig","setModified","resetUploadEdits","updateUploadEdits","uploadEdits","docPermissions","savedDocumentData","setUploadStatus","isFormSubmitting","errorMessage","setValue","showError","path","fileSrc","setFileSrc","removedFile","setRemovedFile","filename","setFilename","name","showUrlInput","setShowUrlInput","fileUrl","setFileUrl","urlInputRef","inputRef","handleFileChange","newFile","File","URL","createObjectURL","renameFile","fileToChange","newName","type","lastModified","handleFileNameChange","e","updatedFileName","target","handleFileSelection","files","fileToUpload","handleFileRemoval","onEditsSave","args","handleUrlSubmit","response","fetch","data","blob","fileName","split","pop","file","error","message","current","canRemoveUpload","update","delete","hasImageSizes","imageSizes","hasResizeOptions","Boolean","resizeOptions","focalPointEnabled","focalPoint","crop","showCrop","showFocalPoint","acceptMimeTypes","mimeTypes","join","filter","customUploadActions","doc","handleRemove","imageCacheTag","updatedAt","buttonStyle","onClick","click","size","accept","hidden","ref","icon","iconStyle","round","tooltip","Header","url","initialCrop","initialFocalPoint","x","focalX","y","focalY","onSave","hoverTitle","title","label","CustomAction","i"],"sources":["../../../src/elements/Upload/index.tsx"],"sourcesContent":["'use client'\nimport type { FormState, SanitizedCollectionConfig, UploadEdits } from 'payload'\n\nimport { isImage } from 'payload/shared'\nimport React, { useCallback, useEffect, useRef, useState } from 'react'\nimport { toast } from 'sonner'\n\nimport { FieldError } from '../../fields/FieldError/index.js'\nimport { fieldBaseClass } from '../../fields/shared/index.js'\nimport { useForm, useFormProcessing } from '../../forms/Form/index.js'\nimport { useField } from '../../forms/useField/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { EditDepthProvider } from '../../providers/EditDepth/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { useUploadEdits } from '../../providers/UploadEdits/index.js'\nimport { Button } from '../Button/index.js'\nimport { Drawer, DrawerToggler } from '../Drawer/index.js'\nimport { Dropzone } from '../Dropzone/index.js'\nimport { EditUpload } from '../EditUpload/index.js'\nimport { FileDetails } from '../FileDetails/index.js'\nimport { PreviewSizes } from '../PreviewSizes/index.js'\nimport './index.scss'\nimport { Thumbnail } from '../Thumbnail/index.js'\n\nconst baseClass = 'file-field'\nexport const editDrawerSlug = 'edit-upload'\nexport const sizePreviewSlug = 'preview-sizes'\n\nconst validate = (value) => {\n if (!value && value !== undefined) {\n return 'A file is required.'\n }\n\n return true\n}\n\ntype UploadActionsArgs = {\n readonly customActions?: React.ReactNode[]\n readonly enableAdjustments: boolean\n readonly enablePreviewSizes: boolean\n readonly mimeType: string\n}\n\nexport const UploadActions = ({\n customActions,\n enableAdjustments,\n enablePreviewSizes,\n mimeType,\n}: UploadActionsArgs) => {\n const { t } = useTranslation()\n\n const fileTypeIsAdjustable = isImage(mimeType) && mimeType !== 'image/svg+xml'\n\n if (!fileTypeIsAdjustable && (!customActions || customActions.length === 0)) {\n return null\n }\n\n return (\n <div className={`${baseClass}__upload-actions`}>\n {fileTypeIsAdjustable && (\n <React.Fragment>\n {enablePreviewSizes && (\n <DrawerToggler className={`${baseClass}__previewSizes`} slug={sizePreviewSlug}>\n {t('upload:previewSizes')}\n </DrawerToggler>\n )}\n {enableAdjustments && (\n <DrawerToggler className={`${baseClass}__edit`} slug={editDrawerSlug}>\n {t('upload:editImage')}\n </DrawerToggler>\n )}\n </React.Fragment>\n )}\n\n {customActions &&\n customActions.map((CustomAction, i) => {\n return <React.Fragment key={i}>{CustomAction}</React.Fragment>\n })}\n </div>\n )\n}\n\nexport type UploadProps = {\n readonly collectionSlug: string\n readonly customActions?: React.ReactNode[]\n readonly initialState?: FormState\n readonly onChange?: (file?: File) => void\n readonly uploadConfig: SanitizedCollectionConfig['upload']\n}\n\nexport const Upload: React.FC<UploadProps> = (props) => {\n const { collectionSlug, customActions, initialState, onChange, uploadConfig } = props\n\n const { t } = useTranslation()\n const { setModified } = useForm()\n const { resetUploadEdits, updateUploadEdits, uploadEdits } = useUploadEdits()\n const { docPermissions, savedDocumentData, setUploadStatus } = useDocumentInfo()\n const isFormSubmitting = useFormProcessing()\n const { errorMessage, setValue, showError, value } = useField<File>({\n path: 'file',\n validate,\n })\n\n const [fileSrc, setFileSrc] = useState<null | string>(null)\n const [removedFile, setRemovedFile] = useState(false)\n const [filename, setFilename] = useState<string>(value?.name || '')\n const [showUrlInput, setShowUrlInput] = useState(false)\n const [fileUrl, setFileUrl] = useState<string>('')\n\n const urlInputRef = useRef<HTMLInputElement>(null)\n const inputRef = useRef<HTMLInputElement>(null)\n\n const handleFileChange = useCallback(\n (newFile: File) => {\n if (newFile instanceof File) {\n setFileSrc(URL.createObjectURL(newFile))\n }\n\n setValue(newFile)\n setShowUrlInput(false)\n\n if (typeof onChange === 'function') {\n onChange(newFile)\n }\n },\n [onChange, setValue],\n )\n\n const renameFile = (fileToChange: File, newName: string): File => {\n // Creating a new File object with updated properties\n const newFile = new File([fileToChange], newName, {\n type: fileToChange.type,\n lastModified: fileToChange.lastModified,\n })\n return newFile\n }\n\n const handleFileNameChange = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const updatedFileName = e.target.value\n\n if (value) {\n handleFileChange(renameFile(value, updatedFileName))\n setFilename(updatedFileName)\n }\n },\n [handleFileChange, value],\n )\n\n const handleFileSelection = useCallback(\n (files: FileList) => {\n const fileToUpload = files?.[0]\n handleFileChange(fileToUpload)\n },\n [handleFileChange],\n )\n\n const handleFileRemoval = useCallback(() => {\n setRemovedFile(true)\n handleFileChange(null)\n setFileSrc('')\n setFileUrl('')\n resetUploadEdits()\n setShowUrlInput(false)\n }, [handleFileChange, resetUploadEdits])\n\n const onEditsSave = useCallback(\n (args: UploadEdits) => {\n setModified(true)\n updateUploadEdits(args)\n },\n [setModified, updateUploadEdits],\n )\n\n const handleUrlSubmit = async () => {\n if (fileUrl) {\n setUploadStatus('uploading')\n try {\n const response = await fetch(fileUrl)\n const data = await response.blob()\n\n // Extract the file name from the URL\n const fileName = fileUrl.split('/').pop()\n\n // Create a new File object from the Blob data\n const file = new File([data], fileName, { type: data.type })\n handleFileChange(file)\n setUploadStatus('idle')\n } catch (e) {\n toast.error(e.message)\n setUploadStatus('failed')\n }\n }\n }\n\n useEffect(() => {\n if (initialState?.file?.value instanceof File) {\n setFileSrc(URL.createObjectURL(initialState.file.value))\n setRemovedFile(false)\n }\n }, [initialState])\n\n useEffect(() => {\n if (showUrlInput && urlInputRef.current) {\n // urlInputRef.current.focus() // Focus on the remote-url input field when showUrlInput is true\n }\n }, [showUrlInput])\n\n useEffect(() => {\n if (isFormSubmitting) {\n setRemovedFile(false)\n }\n }, [isFormSubmitting])\n\n const canRemoveUpload =\n docPermissions?.update && 'delete' in docPermissions && docPermissions?.delete\n\n const hasImageSizes = uploadConfig?.imageSizes?.length > 0\n const hasResizeOptions = Boolean(uploadConfig?.resizeOptions)\n // Explicity check if set to true, default is undefined\n const focalPointEnabled = uploadConfig?.focalPoint === true\n\n const { crop: showCrop = true, focalPoint = true } = uploadConfig\n\n const showFocalPoint = focalPoint && (hasImageSizes || hasResizeOptions || focalPointEnabled)\n\n const acceptMimeTypes = uploadConfig.mimeTypes?.join(', ')\n\n return (\n <div className={[fieldBaseClass, baseClass].filter(Boolean).join(' ')}>\n <FieldError message={errorMessage} showError={showError} />\n {savedDocumentData && savedDocumentData.filename && !removedFile && (\n <FileDetails\n collectionSlug={collectionSlug}\n customUploadActions={customActions}\n doc={savedDocumentData}\n enableAdjustments={showCrop || showFocalPoint}\n handleRemove={canRemoveUpload ? handleFileRemoval : undefined}\n hasImageSizes={hasImageSizes}\n imageCacheTag={savedDocumentData.updatedAt}\n uploadConfig={uploadConfig}\n />\n )}\n {(!savedDocumentData?.filename || removedFile) && (\n <div className={`${baseClass}__upload`}>\n {!value && !showUrlInput && (\n <Dropzone onChange={handleFileSelection}>\n <div className={`${baseClass}__dropzoneContent`}>\n <div className={`${baseClass}__dropzoneButtons`}>\n <Button\n buttonStyle=\"pill\"\n onClick={() => {\n if (inputRef.current) {\n inputRef.current.click()\n }\n }}\n size=\"small\"\n >\n {t('upload:selectFile')}\n </Button>\n <input\n accept={acceptMimeTypes}\n aria-hidden=\"true\"\n className={`${baseClass}__hidden-input`}\n hidden\n onChange={(e) => {\n if (e.target.files && e.target.files.length > 0) {\n handleFileSelection(e.target.files)\n }\n }}\n ref={inputRef}\n type=\"file\"\n />\n <span className={`${baseClass}__orText`}>{t('general:or')}</span>\n <Button\n buttonStyle=\"pill\"\n onClick={() => {\n setShowUrlInput(true)\n }}\n size=\"small\"\n >\n {t('upload:pasteURL')}\n </Button>\n </div>\n\n <p className={`${baseClass}__dragAndDropText`}>\n {t('general:or')} {t('upload:dragAndDrop')}\n </p>\n </div>\n </Dropzone>\n )}\n {showUrlInput && (\n <React.Fragment>\n <div className={`${baseClass}__remote-file-wrap`}>\n {/* eslint-disable-next-line jsx-a11y/control-has-associated-label */}\n <input\n className={`${baseClass}__remote-file`}\n onChange={(e) => {\n setFileUrl(e.target.value)\n }}\n ref={urlInputRef}\n type=\"text\"\n value={fileUrl}\n />\n <div className={`${baseClass}__add-file-wrap`}>\n <button\n className={`${baseClass}__add-file`}\n onClick={() => {\n void handleUrlSubmit()\n }}\n type=\"button\"\n >\n {t('upload:addFile')}\n </button>\n </div>\n </div>\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__remove`}\n icon=\"x\"\n iconStyle=\"with-border\"\n onClick={() => {\n setShowUrlInput(false)\n }}\n round\n tooltip={t('general:cancel')}\n />\n </React.Fragment>\n )}\n {value && fileSrc && (\n <React.Fragment>\n <div className={`${baseClass}__thumbnail-wrap`}>\n <Thumbnail\n collectionSlug={collectionSlug}\n fileSrc={isImage(value.type) ? fileSrc : null}\n />\n </div>\n <div className={`${baseClass}__file-adjustments`}>\n {/* eslint-disable-next-line jsx-a11y/control-has-associated-label */}\n <input\n className={`${baseClass}__filename`}\n onChange={handleFileNameChange}\n type=\"text\"\n value={filename || value.name}\n />\n <UploadActions\n customActions={customActions}\n enableAdjustments={showCrop || showFocalPoint}\n enablePreviewSizes={hasImageSizes && savedDocumentData?.filename && !removedFile}\n mimeType={value.type}\n />\n </div>\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__remove`}\n icon=\"x\"\n iconStyle=\"with-border\"\n onClick={handleFileRemoval}\n round\n tooltip={t('general:cancel')}\n />\n </React.Fragment>\n )}\n </div>\n )}\n {(value || savedDocumentData?.filename) && (\n <EditDepthProvider>\n <Drawer Header={null} slug={editDrawerSlug}>\n <EditUpload\n fileName={value?.name || savedDocumentData?.filename}\n fileSrc={savedDocumentData?.url || fileSrc}\n imageCacheTag={savedDocumentData?.updatedAt}\n initialCrop={uploadEdits?.crop ?? undefined}\n initialFocalPoint={{\n x: uploadEdits?.focalPoint?.x || savedDocumentData?.focalX || 50,\n y: uploadEdits?.focalPoint?.y || savedDocumentData?.focalY || 50,\n }}\n onSave={onEditsSave}\n showCrop={showCrop}\n showFocalPoint={showFocalPoint}\n />\n </Drawer>\n </EditDepthProvider>\n )}\n {savedDocumentData && hasImageSizes && (\n <Drawer\n className={`${baseClass}__previewDrawer`}\n hoverTitle\n slug={sizePreviewSlug}\n title={t('upload:sizesFor', { label: savedDocumentData.filename })}\n >\n <PreviewSizes\n doc={savedDocumentData}\n imageCacheTag={savedDocumentData.updatedAt}\n uploadConfig={uploadConfig}\n />\n </Drawer>\n )}\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
|