@payloadcms/ui 3.0.0-beta.45 → 3.0.0-beta.47
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/DocumentDrawer/DrawerContent.js +1 -1
- package/dist/elements/DocumentDrawer/DrawerContent.js.map +1 -1
- package/dist/elements/DuplicateDocument/index.d.ts.map +1 -1
- package/dist/elements/DuplicateDocument/index.js +2 -2
- package/dist/elements/DuplicateDocument/index.js.map +1 -1
- package/dist/elements/SortColumn/index.d.ts.map +1 -1
- package/dist/elements/SortColumn/index.js +7 -11
- package/dist/elements/SortColumn/index.js.map +1 -1
- package/dist/elements/Thumbnail/index.d.ts.map +1 -1
- package/dist/elements/Thumbnail/index.js +2 -2
- package/dist/elements/Thumbnail/index.js.map +1 -1
- package/dist/elements/Upload/index.d.ts.map +1 -1
- package/dist/elements/Upload/index.js +4 -9
- package/dist/elements/Upload/index.js.map +1 -1
- package/dist/elements/Upload/index.scss +0 -11
- package/dist/fields/Relationship/index.d.ts.map +1 -1
- package/dist/fields/Relationship/index.js +14 -6
- package/dist/fields/Relationship/index.js.map +1 -1
- package/dist/fields/Relationship/types.d.ts +1 -2
- package/dist/fields/Relationship/types.d.ts.map +1 -1
- package/dist/fields/Relationship/types.js.map +1 -1
- package/dist/forms/Form/fieldReducer.js +5 -3
- package/dist/forms/Form/fieldReducer.js.map +1 -1
- package/dist/forms/Form/types.d.ts +1 -2
- package/dist/forms/Form/types.d.ts.map +1 -1
- package/dist/forms/Form/types.js.map +1 -1
- package/dist/graphics/Account/index.d.ts +0 -1
- package/dist/graphics/Account/index.d.ts.map +1 -1
- package/dist/graphics/Account/index.js +5 -1
- package/dist/graphics/Account/index.js.map +1 -1
- package/dist/providers/ComponentMap/buildComponentMap/fields.d.ts.map +1 -1
- package/dist/providers/ComponentMap/buildComponentMap/fields.js +1 -0
- package/dist/providers/ComponentMap/buildComponentMap/fields.js.map +1 -1
- package/dist/providers/FormQueryParams/index.d.ts.map +1 -1
- package/dist/providers/FormQueryParams/index.js +8 -6
- package/dist/providers/FormQueryParams/index.js.map +1 -1
- package/dist/providers/ListQuery/index.d.ts +8 -0
- package/dist/providers/ListQuery/index.d.ts.map +1 -1
- package/dist/providers/ListQuery/index.js +2 -1
- package/dist/providers/ListQuery/index.js.map +1 -1
- package/package.json +4 -4
- package/dist/scss/toastify.scss +0 -58
|
@@ -30,7 +30,7 @@ export const DocumentDrawerContent = ({ id: existingDocID, Header, collectionSlu
|
|
|
30
30
|
const { componentMap } = useComponentMap();
|
|
31
31
|
const { Edit } = componentMap[`${collectionSlug ? 'collections' : 'globals'}`][collectionSlug];
|
|
32
32
|
const isEditing = Boolean(docID);
|
|
33
|
-
const apiURL = docID ? `${serverURL}${apiRoute}/${collectionSlug}/${docID}?locale=${locale.code}` : null;
|
|
33
|
+
const apiURL = docID ? `${serverURL}${apiRoute}/${collectionSlug}/${docID}${locale?.code ? `?locale=${locale.code}` : ''}` : null;
|
|
34
34
|
const action = `${serverURL}${apiRoute}/${collectionSlug}${isEditing ? `/${docID}` : ''}?${formattedQueryParams}`;
|
|
35
35
|
useEffect(()=>{
|
|
36
36
|
setIsOpen(Boolean(modalState[drawerSlug]?.isOpen));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/elements/DocumentDrawer/DrawerContent.tsx"],"sourcesContent":["'use client'\n\nimport { useModal } from '@faceless-ui/modal'\nimport queryString from 'qs'\nimport React, { useCallback, useEffect, useState } from 'react'\nimport { toast } from 'sonner'\n\nimport type { DocumentDrawerProps } from './types.js'\n\nimport { useRelatedCollections } from '../../fields/Relationship/AddNew/useRelatedCollections.js'\nimport { X } from '../../icons/X/index.js'\nimport { useComponentMap } from '../../providers/ComponentMap/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { DocumentInfoProvider, useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { useFormQueryParams } from '../../providers/FormQueryParams/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { Gutter } from '../Gutter/index.js'\nimport { IDLabel } from '../IDLabel/index.js'\nimport { RenderTitle } from '../RenderTitle/index.js'\nimport { baseClass } from './index.js'\n\nexport const DocumentDrawerContent: React.FC<DocumentDrawerProps> = ({\n id: existingDocID,\n Header,\n collectionSlug,\n drawerSlug,\n onSave: onSaveFromProps,\n}) => {\n const config = useConfig()\n\n const {\n routes: { api: apiRoute },\n serverURL,\n } = config\n\n const { closeModal, modalState, toggleModal } = useModal()\n const locale = useLocale()\n const { t } = useTranslation()\n const [docID, setDocID] = useState(existingDocID)\n const [isOpen, setIsOpen] = useState(false)\n const [collectionConfig] = useRelatedCollections(collectionSlug)\n const { formQueryParams } = useFormQueryParams()\n const formattedQueryParams = queryString.stringify(formQueryParams)\n\n const { componentMap } = useComponentMap()\n\n const { Edit } = componentMap[`${collectionSlug ? 'collections' : 'globals'}`][collectionSlug]\n const isEditing = Boolean(docID)\n const apiURL = docID\n ? `${serverURL}${apiRoute}/${collectionSlug}/${docID}?locale=${locale.code}`\n : null\n const action = `${serverURL}${apiRoute}/${collectionSlug}${\n isEditing ? `/${docID}` : ''\n }?${formattedQueryParams}`\n\n useEffect(() => {\n setIsOpen(Boolean(modalState[drawerSlug]?.isOpen))\n }, [modalState, drawerSlug])\n\n const onLoadError = React.useCallback(\n (data) => {\n if (isOpen) {\n closeModal(drawerSlug)\n toast.error(data.errors?.[0].message || t('error:unspecific'))\n }\n },\n [closeModal, drawerSlug, isOpen, t],\n )\n\n const onSave = useCallback<DocumentDrawerProps['onSave']>(\n (args) => {\n setDocID(args.doc.id)\n if (typeof onSaveFromProps === 'function') {\n void onSaveFromProps({\n ...args,\n collectionConfig,\n })\n }\n },\n [onSaveFromProps, collectionConfig],\n )\n\n return (\n <DocumentInfoProvider\n BeforeDocument={\n <Gutter className={`${baseClass}__header`}>\n <div className={`${baseClass}__header-content`}>\n <h2 className={`${baseClass}__header-text`}>\n {Header || <RenderTitle element=\"span\" />}\n </h2>\n {/* TODO: the `button` HTML element breaks CSS transitions on the drawer for some reason...\n i.e. changing to a `div` element will fix the animation issue but will break accessibility\n */}\n <button\n aria-label={t('general:close')}\n className={`${baseClass}__header-close`}\n onClick={() => toggleModal(drawerSlug)}\n type=\"button\"\n >\n <X />\n </button>\n </div>\n <DocumentTitle />\n </Gutter>\n }\n action={action}\n apiURL={apiURL}\n collectionSlug={collectionConfig.slug}\n disableActions\n disableLeaveWithoutSaving\n id={docID}\n isEditing={isEditing}\n onLoadError={onLoadError}\n onSave={onSave}\n >\n {Edit}\n </DocumentInfoProvider>\n )\n}\n\nconst DocumentTitle: React.FC = () => {\n const { id, title } = useDocumentInfo()\n return id && id !== title ? <IDLabel id={id.toString()} /> : null\n}\n"],"names":["useModal","queryString","React","useCallback","useEffect","useState","toast","useRelatedCollections","X","useComponentMap","useConfig","DocumentInfoProvider","useDocumentInfo","useFormQueryParams","useLocale","useTranslation","Gutter","IDLabel","RenderTitle","baseClass","DocumentDrawerContent","id","existingDocID","Header","collectionSlug","drawerSlug","onSave","onSaveFromProps","config","routes","api","apiRoute","serverURL","closeModal","modalState","toggleModal","locale","t","docID","setDocID","isOpen","setIsOpen","collectionConfig","formQueryParams","formattedQueryParams","stringify","componentMap","Edit","isEditing","Boolean","apiURL","code","action","onLoadError","data","error","errors","message","args","doc","BeforeDocument","className","div","h2","element","button","aria-label","onClick","type","DocumentTitle","slug","disableActions","disableLeaveWithoutSaving","title","toString"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA;;AAEA,SAASA,QAAQ,QAAQ,qBAAoB;AAC7C,OAAOC,iBAAiB,KAAI;AAC5B,OAAOC,SAASC,WAAW,EAAEC,SAAS,EAAEC,QAAQ,QAAQ,QAAO;AAC/D,SAASC,KAAK,QAAQ,SAAQ;AAI9B,SAASC,qBAAqB,QAAQ,4DAA2D;AACjG,SAASC,CAAC,QAAQ,yBAAwB;AAC1C,SAASC,eAAe,QAAQ,wCAAuC;AACvE,SAASC,SAAS,QAAQ,kCAAiC;AAC3D,SAASC,oBAAoB,EAAEC,eAAe,QAAQ,wCAAuC;AAC7F,SAASC,kBAAkB,QAAQ,2CAA0C;AAC7E,SAASC,SAAS,QAAQ,kCAAiC;AAC3D,SAASC,cAAc,QAAQ,uCAAsC;AACrE,SAASC,MAAM,QAAQ,qBAAoB;AAC3C,SAASC,OAAO,QAAQ,sBAAqB;AAC7C,SAASC,WAAW,QAAQ,0BAAyB;AACrD,SAASC,SAAS,QAAQ,aAAY;AAEtC,OAAO,MAAMC,wBAAuD,CAAC,EACnEC,IAAIC,aAAa,EACjBC,MAAM,EACNC,cAAc,EACdC,UAAU,EACVC,QAAQC,eAAe,EACxB;IACC,MAAMC,SAASlB;IAEf,MAAM,EACJmB,QAAQ,EAAEC,KAAKC,QAAQ,EAAE,EACzBC,SAAS,EACV,GAAGJ;IAEJ,MAAM,EAAEK,UAAU,EAAEC,UAAU,EAAEC,WAAW,EAAE,GAAGnC;IAChD,MAAMoC,SAAStB;IACf,MAAM,EAAEuB,CAAC,EAAE,GAAGtB;IACd,MAAM,CAACuB,OAAOC,SAAS,GAAGlC,SAASiB;IACnC,MAAM,CAACkB,QAAQC,UAAU,GAAGpC,SAAS;IACrC,MAAM,CAACqC,iBAAiB,GAAGnC,sBAAsBiB;IACjD,MAAM,EAAEmB,eAAe,EAAE,GAAG9B;IAC5B,MAAM+B,uBAAuB3C,YAAY4C,SAAS,CAACF;IAEnD,MAAM,EAAEG,YAAY,EAAE,GAAGrC;IAEzB,MAAM,EAAEsC,IAAI,EAAE,GAAGD,YAAY,CAAC,CAAC,EAAEtB,iBAAiB,gBAAgB,UAAU,CAAC,CAAC,CAACA,eAAe;IAC9F,MAAMwB,YAAYC,QAAQX;IAC1B,MAAMY,SAASZ,QACX,CAAC,EAAEN,UAAU,EAAED,SAAS,CAAC,EAAEP,eAAe,CAAC,EAAEc,MAAM,QAAQ,
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/DocumentDrawer/DrawerContent.tsx"],"sourcesContent":["'use client'\n\nimport { useModal } from '@faceless-ui/modal'\nimport queryString from 'qs'\nimport React, { useCallback, useEffect, useState } from 'react'\nimport { toast } from 'sonner'\n\nimport type { DocumentDrawerProps } from './types.js'\n\nimport { useRelatedCollections } from '../../fields/Relationship/AddNew/useRelatedCollections.js'\nimport { X } from '../../icons/X/index.js'\nimport { useComponentMap } from '../../providers/ComponentMap/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { DocumentInfoProvider, useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { useFormQueryParams } from '../../providers/FormQueryParams/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { Gutter } from '../Gutter/index.js'\nimport { IDLabel } from '../IDLabel/index.js'\nimport { RenderTitle } from '../RenderTitle/index.js'\nimport { baseClass } from './index.js'\n\nexport const DocumentDrawerContent: React.FC<DocumentDrawerProps> = ({\n id: existingDocID,\n Header,\n collectionSlug,\n drawerSlug,\n onSave: onSaveFromProps,\n}) => {\n const config = useConfig()\n\n const {\n routes: { api: apiRoute },\n serverURL,\n } = config\n\n const { closeModal, modalState, toggleModal } = useModal()\n const locale = useLocale()\n const { t } = useTranslation()\n const [docID, setDocID] = useState(existingDocID)\n const [isOpen, setIsOpen] = useState(false)\n const [collectionConfig] = useRelatedCollections(collectionSlug)\n const { formQueryParams } = useFormQueryParams()\n const formattedQueryParams = queryString.stringify(formQueryParams)\n\n const { componentMap } = useComponentMap()\n\n const { Edit } = componentMap[`${collectionSlug ? 'collections' : 'globals'}`][collectionSlug]\n const isEditing = Boolean(docID)\n const apiURL = docID\n ? `${serverURL}${apiRoute}/${collectionSlug}/${docID}${locale?.code ? `?locale=${locale.code}` : ''}`\n : null\n const action = `${serverURL}${apiRoute}/${collectionSlug}${\n isEditing ? `/${docID}` : ''\n }?${formattedQueryParams}`\n\n useEffect(() => {\n setIsOpen(Boolean(modalState[drawerSlug]?.isOpen))\n }, [modalState, drawerSlug])\n\n const onLoadError = React.useCallback(\n (data) => {\n if (isOpen) {\n closeModal(drawerSlug)\n toast.error(data.errors?.[0].message || t('error:unspecific'))\n }\n },\n [closeModal, drawerSlug, isOpen, t],\n )\n\n const onSave = useCallback<DocumentDrawerProps['onSave']>(\n (args) => {\n setDocID(args.doc.id)\n if (typeof onSaveFromProps === 'function') {\n void onSaveFromProps({\n ...args,\n collectionConfig,\n })\n }\n },\n [onSaveFromProps, collectionConfig],\n )\n\n return (\n <DocumentInfoProvider\n BeforeDocument={\n <Gutter className={`${baseClass}__header`}>\n <div className={`${baseClass}__header-content`}>\n <h2 className={`${baseClass}__header-text`}>\n {Header || <RenderTitle element=\"span\" />}\n </h2>\n {/* TODO: the `button` HTML element breaks CSS transitions on the drawer for some reason...\n i.e. changing to a `div` element will fix the animation issue but will break accessibility\n */}\n <button\n aria-label={t('general:close')}\n className={`${baseClass}__header-close`}\n onClick={() => toggleModal(drawerSlug)}\n type=\"button\"\n >\n <X />\n </button>\n </div>\n <DocumentTitle />\n </Gutter>\n }\n action={action}\n apiURL={apiURL}\n collectionSlug={collectionConfig.slug}\n disableActions\n disableLeaveWithoutSaving\n id={docID}\n isEditing={isEditing}\n onLoadError={onLoadError}\n onSave={onSave}\n >\n {Edit}\n </DocumentInfoProvider>\n )\n}\n\nconst DocumentTitle: React.FC = () => {\n const { id, title } = useDocumentInfo()\n return id && id !== title ? <IDLabel id={id.toString()} /> : null\n}\n"],"names":["useModal","queryString","React","useCallback","useEffect","useState","toast","useRelatedCollections","X","useComponentMap","useConfig","DocumentInfoProvider","useDocumentInfo","useFormQueryParams","useLocale","useTranslation","Gutter","IDLabel","RenderTitle","baseClass","DocumentDrawerContent","id","existingDocID","Header","collectionSlug","drawerSlug","onSave","onSaveFromProps","config","routes","api","apiRoute","serverURL","closeModal","modalState","toggleModal","locale","t","docID","setDocID","isOpen","setIsOpen","collectionConfig","formQueryParams","formattedQueryParams","stringify","componentMap","Edit","isEditing","Boolean","apiURL","code","action","onLoadError","data","error","errors","message","args","doc","BeforeDocument","className","div","h2","element","button","aria-label","onClick","type","DocumentTitle","slug","disableActions","disableLeaveWithoutSaving","title","toString"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/DuplicateDocument/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAA;AAK9D,OAAO,KAAgC,MAAM,OAAO,CAAA;AAWpD,OAAO,cAAc,CAAA;AAIrB,MAAM,MAAM,KAAK,GAAG;IAClB,EAAE,EAAE,MAAM,CAAA;IACV,aAAa,EAAE,yBAAyB,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAA;IAC9D,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/DuplicateDocument/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAA;AAK9D,OAAO,KAAgC,MAAM,OAAO,CAAA;AAWpD,OAAO,cAAc,CAAA;AAIrB,MAAM,MAAM,KAAK,GAAG;IAClB,EAAE,EAAE,MAAM,CAAA;IACV,aAAa,EAAE,yBAAyB,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAA;IAC9D,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CA2G7C,CAAA"}
|
|
@@ -31,7 +31,7 @@ export const DuplicateDocument = ({ id, slug, singularLabel })=>{
|
|
|
31
31
|
toggleModal(modalSlug);
|
|
32
32
|
return;
|
|
33
33
|
}
|
|
34
|
-
await requests.post(`${serverURL}${api}/${slug}/${id}/duplicate?locale=${locale.code}`, {
|
|
34
|
+
await requests.post(`${serverURL}${api}/${slug}/${id}/duplicate${locale?.code ? `?locale=${locale.code}` : ''}`, {
|
|
35
35
|
body: JSON.stringify({}),
|
|
36
36
|
headers: {
|
|
37
37
|
'Accept-Language': i18n.language,
|
|
@@ -45,7 +45,7 @@ export const DuplicateDocument = ({ id, slug, singularLabel })=>{
|
|
|
45
45
|
label: getTranslation(singularLabel, i18n)
|
|
46
46
|
}));
|
|
47
47
|
setModified(false);
|
|
48
|
-
router.push(`${admin}/collections/${slug}/${doc.id}?locale=${locale.code}`);
|
|
48
|
+
router.push(`${admin}/collections/${slug}/${doc.id}${locale?.code ? `?locale=${locale.code}` : ''}`);
|
|
49
49
|
} else {
|
|
50
50
|
toast.error(errors?.[0].message || message || t('error:unspecific', {
|
|
51
51
|
label: getTranslation(singularLabel, i18n)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/elements/DuplicateDocument/index.tsx"],"sourcesContent":["'use client'\n\nimport type { SanitizedCollectionConfig } from 'payload/types'\n\nimport { Modal, useModal } from '@faceless-ui/modal'\nimport { getTranslation } from '@payloadcms/translations'\nimport { useRouter } from 'next/navigation.js'\nimport React, { useCallback, useState } from 'react'\nimport { toast } from 'sonner'\n\nimport { useForm, useFormModified } from '../../forms/Form/context.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { MinimalTemplate } from '../../templates/Minimal/index.js'\nimport { requests } from '../../utilities/api.js'\nimport { Button } from '../Button/index.js'\nimport { PopupList } from '../Popup/index.js'\nimport './index.scss'\n\nconst baseClass = 'duplicate'\n\nexport type Props = {\n id: string\n singularLabel: SanitizedCollectionConfig['labels']['singular']\n slug: string\n}\n\nexport const DuplicateDocument: React.FC<Props> = ({ id, slug, singularLabel }) => {\n const router = useRouter()\n const modified = useFormModified()\n const { toggleModal } = useModal()\n const locale = useLocale()\n const { setModified } = useForm()\n const {\n routes: { api },\n serverURL,\n } = useConfig()\n const {\n routes: { admin },\n } = useConfig()\n const [hasClicked, setHasClicked] = useState<boolean>(false)\n const { i18n, t } = useTranslation()\n\n const modalSlug = `duplicate-${id}`\n\n const handleClick = useCallback(\n async (override = false) => {\n setHasClicked(true)\n\n if (modified && !override) {\n toggleModal(modalSlug)\n return\n }\n await requests\n .post(`${serverURL}${api}/${slug}/${id}/duplicate?locale=${locale.code}
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/DuplicateDocument/index.tsx"],"sourcesContent":["'use client'\n\nimport type { SanitizedCollectionConfig } from 'payload/types'\n\nimport { Modal, useModal } from '@faceless-ui/modal'\nimport { getTranslation } from '@payloadcms/translations'\nimport { useRouter } from 'next/navigation.js'\nimport React, { useCallback, useState } from 'react'\nimport { toast } from 'sonner'\n\nimport { useForm, useFormModified } from '../../forms/Form/context.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { MinimalTemplate } from '../../templates/Minimal/index.js'\nimport { requests } from '../../utilities/api.js'\nimport { Button } from '../Button/index.js'\nimport { PopupList } from '../Popup/index.js'\nimport './index.scss'\n\nconst baseClass = 'duplicate'\n\nexport type Props = {\n id: string\n singularLabel: SanitizedCollectionConfig['labels']['singular']\n slug: string\n}\n\nexport const DuplicateDocument: React.FC<Props> = ({ id, slug, singularLabel }) => {\n const router = useRouter()\n const modified = useFormModified()\n const { toggleModal } = useModal()\n const locale = useLocale()\n const { setModified } = useForm()\n const {\n routes: { api },\n serverURL,\n } = useConfig()\n const {\n routes: { admin },\n } = useConfig()\n const [hasClicked, setHasClicked] = useState<boolean>(false)\n const { i18n, t } = useTranslation()\n\n const modalSlug = `duplicate-${id}`\n\n const handleClick = useCallback(\n async (override = false) => {\n setHasClicked(true)\n\n if (modified && !override) {\n toggleModal(modalSlug)\n return\n }\n await requests\n .post(\n `${serverURL}${api}/${slug}/${id}/duplicate${locale?.code ? `?locale=${locale.code}` : ''}`,\n {\n body: JSON.stringify({}),\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n credentials: 'include',\n },\n },\n )\n .then(async (res) => {\n const { doc, errors, message } = await res.json()\n if (res.status < 400) {\n toast.success(\n message ||\n t('general:successfullyDuplicated', { label: getTranslation(singularLabel, i18n) }),\n )\n setModified(false)\n router.push(\n `${admin}/collections/${slug}/${doc.id}${locale?.code ? `?locale=${locale.code}` : ''}`,\n )\n } else {\n toast.error(\n errors?.[0].message ||\n message ||\n t('error:unspecific', { label: getTranslation(singularLabel, i18n) }),\n )\n }\n })\n },\n [\n locale,\n modified,\n serverURL,\n api,\n slug,\n id,\n i18n,\n toggleModal,\n modalSlug,\n t,\n singularLabel,\n setModified,\n router,\n admin,\n ],\n )\n\n const confirm = useCallback(async () => {\n setHasClicked(false)\n await handleClick(true)\n }, [handleClick])\n\n return (\n <React.Fragment>\n <PopupList.Button id=\"action-duplicate\" onClick={() => handleClick(false)}>\n {t('general:duplicate')}\n </PopupList.Button>\n {modified && hasClicked && (\n <Modal className={`${baseClass}__modal`} slug={modalSlug}>\n <MinimalTemplate className={`${baseClass}__modal-template`}>\n <h1>{t('general:confirmDuplication')}</h1>\n <p>{t('general:unsavedChangesDuplicate')}</p>\n <Button\n buttonStyle=\"secondary\"\n id=\"confirm-cancel\"\n onClick={() => toggleModal(modalSlug)}\n type=\"button\"\n >\n {t('general:cancel')}\n </Button>\n <Button id=\"confirm-duplicate\" onClick={confirm}>\n {t('general:duplicateWithoutSaving')}\n </Button>\n </MinimalTemplate>\n </Modal>\n )}\n </React.Fragment>\n )\n}\n"],"names":["Modal","useModal","getTranslation","useRouter","React","useCallback","useState","toast","useForm","useFormModified","useConfig","useLocale","useTranslation","MinimalTemplate","requests","Button","PopupList","baseClass","DuplicateDocument","id","slug","singularLabel","router","modified","toggleModal","locale","setModified","routes","api","serverURL","admin","hasClicked","setHasClicked","i18n","t","modalSlug","handleClick","override","post","code","body","JSON","stringify","headers","language","credentials","then","res","doc","errors","message","json","status","success","label","push","error","confirm","Fragment","onClick","className","h1","p","buttonStyle","type"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/SortColumn/index.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/SortColumn/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAsB,MAAM,OAAO,CAAA;AAE1C,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,KAAK,CAAC,SAAS,CAAA;IACtB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,KAAK,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAA;IAC1B,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAM9C,OAAO,cAAc,CAAA;AAIrB,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAyDhD,CAAA"}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
// TODO: abstract the `next/navigation` dependency out from this component
|
|
4
|
-
import { useRouter } from 'next/navigation.js';
|
|
5
4
|
import React, { useCallback } from 'react';
|
|
6
5
|
import { Chevron } from '../../icons/Chevron/index.js';
|
|
6
|
+
import { useListQuery } from '../../providers/ListQuery/index.js';
|
|
7
7
|
import { useSearchParams } from '../../providers/SearchParams/index.js';
|
|
8
8
|
import { useTranslation } from '../../providers/Translation/index.js';
|
|
9
9
|
const baseClass = 'sort-column';
|
|
10
10
|
export const SortColumn = (props)=>{
|
|
11
11
|
const { name, Label, disable = false, label } = props;
|
|
12
|
-
const { searchParams
|
|
13
|
-
const
|
|
12
|
+
const { searchParams } = useSearchParams();
|
|
13
|
+
const { refineListData } = useListQuery();
|
|
14
14
|
const { t } = useTranslation();
|
|
15
15
|
const { sort } = searchParams;
|
|
16
16
|
const desc = `-${name}`;
|
|
@@ -24,15 +24,11 @@ export const SortColumn = (props)=>{
|
|
|
24
24
|
];
|
|
25
25
|
if (sort === desc) descClasses.push(`${baseClass}--active`);
|
|
26
26
|
const setSort = useCallback((newSort)=>{
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
},
|
|
31
|
-
replace: true
|
|
32
|
-
}));
|
|
27
|
+
refineListData({
|
|
28
|
+
sort: newSort
|
|
29
|
+
});
|
|
33
30
|
}, [
|
|
34
|
-
|
|
35
|
-
stringifyParams
|
|
31
|
+
refineListData
|
|
36
32
|
]);
|
|
37
33
|
return /*#__PURE__*/ _jsxs("div", {
|
|
38
34
|
className: baseClass,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/elements/SortColumn/index.tsx"],"sourcesContent":["'use client'\n// TODO: abstract the `next/navigation` dependency out from this component\nimport
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/SortColumn/index.tsx"],"sourcesContent":["'use client'\n// TODO: abstract the `next/navigation` dependency out from this component\nimport React, { useCallback } from 'react'\n\nexport type SortColumnProps = {\n Label: React.ReactNode\n disable?: boolean\n label?: FieldBase['label']\n name: string\n}\n\nimport type { FieldBase } from 'payload/types'\n\nimport { Chevron } from '../../icons/Chevron/index.js'\nimport { useListQuery } from '../../providers/ListQuery/index.js'\nimport { useSearchParams } from '../../providers/SearchParams/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport './index.scss'\n\nconst baseClass = 'sort-column'\n\nexport const SortColumn: React.FC<SortColumnProps> = (props) => {\n const { name, Label, disable = false, label } = props\n const { searchParams } = useSearchParams()\n const { refineListData } = useListQuery()\n const { t } = useTranslation()\n\n const { sort } = searchParams\n\n const desc = `-${name}`\n const asc = name\n\n const ascClasses = [`${baseClass}__asc`]\n if (sort === asc) ascClasses.push(`${baseClass}--active`)\n\n const descClasses = [`${baseClass}__desc`]\n if (sort === desc) descClasses.push(`${baseClass}--active`)\n\n const setSort = useCallback(\n (newSort) => {\n refineListData({\n sort: newSort,\n })\n },\n [refineListData],\n )\n\n return (\n <div className={baseClass}>\n <span className={`${baseClass}__label`}>{Label}</span>\n {!disable && (\n <div className={`${baseClass}__buttons`}>\n <button\n aria-label={t('general:sortByLabelDirection', {\n direction: t('general:ascending'),\n label,\n })}\n className={[...ascClasses, `${baseClass}__button`].filter(Boolean).join(' ')}\n onClick={() => setSort(asc)}\n type=\"button\"\n >\n <Chevron direction=\"up\" />\n </button>\n <button\n aria-label={t('general:sortByLabelDirection', {\n direction: t('general:descending'),\n label,\n })}\n className={[...descClasses, `${baseClass}__button`].filter(Boolean).join(' ')}\n onClick={() => setSort(desc)}\n type=\"button\"\n >\n <Chevron />\n </button>\n </div>\n )}\n </div>\n )\n}\n"],"names":["React","useCallback","Chevron","useListQuery","useSearchParams","useTranslation","baseClass","SortColumn","props","name","Label","disable","label","searchParams","refineListData","t","sort","desc","asc","ascClasses","push","descClasses","setSort","newSort","div","className","span","button","aria-label","direction","filter","Boolean","join","onClick","type"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA;;AACA,0EAA0E;AAC1E,OAAOA,SAASC,WAAW,QAAQ,QAAO;AAW1C,SAASC,OAAO,QAAQ,+BAA8B;AACtD,SAASC,YAAY,QAAQ,qCAAoC;AACjE,SAASC,eAAe,QAAQ,wCAAuC;AACvE,SAASC,cAAc,QAAQ,uCAAsC;AAGrE,MAAMC,YAAY;AAElB,OAAO,MAAMC,aAAwC,CAACC;IACpD,MAAM,EAAEC,IAAI,EAAEC,KAAK,EAAEC,UAAU,KAAK,EAAEC,KAAK,EAAE,GAAGJ;IAChD,MAAM,EAAEK,YAAY,EAAE,GAAGT;IACzB,MAAM,EAAEU,cAAc,EAAE,GAAGX;IAC3B,MAAM,EAAEY,CAAC,EAAE,GAAGV;IAEd,MAAM,EAAEW,IAAI,EAAE,GAAGH;IAEjB,MAAMI,OAAO,CAAC,CAAC,EAAER,KAAK,CAAC;IACvB,MAAMS,MAAMT;IAEZ,MAAMU,aAAa;QAAC,CAAC,EAAEb,UAAU,KAAK,CAAC;KAAC;IACxC,IAAIU,SAASE,KAAKC,WAAWC,IAAI,CAAC,CAAC,EAAEd,UAAU,QAAQ,CAAC;IAExD,MAAMe,cAAc;QAAC,CAAC,EAAEf,UAAU,MAAM,CAAC;KAAC;IAC1C,IAAIU,SAASC,MAAMI,YAAYD,IAAI,CAAC,CAAC,EAAEd,UAAU,QAAQ,CAAC;IAE1D,MAAMgB,UAAUrB,YACd,CAACsB;QACCT,eAAe;YACbE,MAAMO;QACR;IACF,GACA;QAACT;KAAe;IAGlB,qBACE,MAACU;QAAIC,WAAWnB;;0BACd,KAACoB;gBAAKD,WAAW,CAAC,EAAEnB,UAAU,OAAO,CAAC;0BAAGI;;YACxC,CAACC,yBACA,MAACa;gBAAIC,WAAW,CAAC,EAAEnB,UAAU,SAAS,CAAC;;kCACrC,KAACqB;wBACCC,cAAYb,EAAE,gCAAgC;4BAC5Cc,WAAWd,EAAE;4BACbH;wBACF;wBACAa,WAAW;+BAAIN;4BAAY,CAAC,EAAEb,UAAU,QAAQ,CAAC;yBAAC,CAACwB,MAAM,CAACC,SAASC,IAAI,CAAC;wBACxEC,SAAS,IAAMX,QAAQJ;wBACvBgB,MAAK;kCAEL,cAAA,KAAChC;4BAAQ2B,WAAU;;;kCAErB,KAACF;wBACCC,cAAYb,EAAE,gCAAgC;4BAC5Cc,WAAWd,EAAE;4BACbH;wBACF;wBACAa,WAAW;+BAAIJ;4BAAa,CAAC,EAAEf,UAAU,QAAQ,CAAC;yBAAC,CAACwB,MAAM,CAACC,SAASC,IAAI,CAAC;wBACzEC,SAAS,IAAMX,QAAQL;wBACvBiB,MAAK;kCAEL,cAAA,KAAChC;;;;;;AAMb,EAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/Thumbnail/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,cAAc,CAAA;AAIrB,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAA;AAK9D,MAAM,MAAM,cAAc,GAAG;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAA;IAC9C,YAAY,CAAC,EAAE,yBAAyB,CAAC,QAAQ,CAAC,CAAA;CACnD,CAAA;AASD,eAAO,MAAM,mBAAmB;;;;;CAA2C,CAAA;AAE3E,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/Thumbnail/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,cAAc,CAAA;AAIrB,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAA;AAK9D,MAAM,MAAM,cAAc,GAAG;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAA;IAC9C,YAAY,CAAC,EAAE,yBAAyB,CAAC,QAAQ,CAAC,CAAA;CACnD,CAAA;AASD,eAAO,MAAM,mBAAmB;;;;;CAA2C,CAAA;AAE3E,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CAkC9C,CAAA"}
|
|
@@ -12,7 +12,7 @@ const ThumbnailContext = /*#__PURE__*/ React.createContext({
|
|
|
12
12
|
});
|
|
13
13
|
export const useThumbnailContext = ()=>React.useContext(ThumbnailContext);
|
|
14
14
|
export const Thumbnail = (props)=>{
|
|
15
|
-
const { className = '', doc: { filename } = {}, fileSrc, size } = props;
|
|
15
|
+
const { className = '', doc: { filename } = {}, fileSrc, imageCacheTag, size } = props;
|
|
16
16
|
const [fileExists, setFileExists] = React.useState(undefined);
|
|
17
17
|
const classNames = [
|
|
18
18
|
baseClass,
|
|
@@ -43,7 +43,7 @@ export const Thumbnail = (props)=>{
|
|
|
43
43
|
}),
|
|
44
44
|
fileExists && /*#__PURE__*/ _jsx("img", {
|
|
45
45
|
alt: filename,
|
|
46
|
-
src: fileSrc
|
|
46
|
+
src: `${fileSrc}${imageCacheTag ? `?${imageCacheTag}` : ''}`
|
|
47
47
|
}),
|
|
48
48
|
fileExists === false && /*#__PURE__*/ _jsx(File, {})
|
|
49
49
|
]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/elements/Thumbnail/index.tsx"],"sourcesContent":["'use client'\nimport React from 'react'\n\nimport './index.scss'\n\nconst baseClass = 'thumbnail'\n\nimport type { SanitizedCollectionConfig } from 'payload/types'\n\nimport { File } from '../../graphics/File/index.js'\nimport { ShimmerEffect } from '../ShimmerEffect/index.js'\n\nexport type ThumbnailProps = {\n className?: string\n collectionSlug?: string\n doc?: Record<string, unknown>\n fileSrc?: string\n imageCacheTag?: string\n size?: 'expand' | 'large' | 'medium' | 'small'\n uploadConfig?: SanitizedCollectionConfig['upload']\n}\n\nconst ThumbnailContext = React.createContext({\n className: '',\n filename: '',\n size: 'medium',\n src: '',\n})\n\nexport const useThumbnailContext = () => React.useContext(ThumbnailContext)\n\nexport const Thumbnail: React.FC<ThumbnailProps> = (props) => {\n const { className = '', doc: { filename } = {}, fileSrc, size } = props\n const [fileExists, setFileExists] = React.useState(undefined)\n\n const classNames = [baseClass, `${baseClass}--size-${size || 'medium'}`, className].join(' ')\n\n React.useEffect(() => {\n if (!fileSrc) {\n setFileExists(false)\n return\n }\n\n const img = new Image()\n img.src = fileSrc\n img.onload = () => {\n setFileExists(true)\n }\n img.onerror = () => {\n setFileExists(false)\n }\n }, [fileSrc])\n\n return (\n <div className={classNames}>\n {fileExists === undefined && <ShimmerEffect height=\"100%\" />}\n {fileExists && <img
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/Thumbnail/index.tsx"],"sourcesContent":["'use client'\nimport React from 'react'\n\nimport './index.scss'\n\nconst baseClass = 'thumbnail'\n\nimport type { SanitizedCollectionConfig } from 'payload/types'\n\nimport { File } from '../../graphics/File/index.js'\nimport { ShimmerEffect } from '../ShimmerEffect/index.js'\n\nexport type ThumbnailProps = {\n className?: string\n collectionSlug?: string\n doc?: Record<string, unknown>\n fileSrc?: string\n imageCacheTag?: string\n size?: 'expand' | 'large' | 'medium' | 'small'\n uploadConfig?: SanitizedCollectionConfig['upload']\n}\n\nconst ThumbnailContext = React.createContext({\n className: '',\n filename: '',\n size: 'medium',\n src: '',\n})\n\nexport const useThumbnailContext = () => React.useContext(ThumbnailContext)\n\nexport const Thumbnail: React.FC<ThumbnailProps> = (props) => {\n const { className = '', doc: { filename } = {}, fileSrc, imageCacheTag, size } = props\n const [fileExists, setFileExists] = React.useState(undefined)\n\n const classNames = [baseClass, `${baseClass}--size-${size || 'medium'}`, className].join(' ')\n\n React.useEffect(() => {\n if (!fileSrc) {\n setFileExists(false)\n return\n }\n\n const img = new Image()\n img.src = fileSrc\n img.onload = () => {\n setFileExists(true)\n }\n img.onerror = () => {\n setFileExists(false)\n }\n }, [fileSrc])\n\n return (\n <div className={classNames}>\n {fileExists === undefined && <ShimmerEffect height=\"100%\" />}\n {fileExists && (\n <img\n alt={filename as string}\n src={`${fileSrc}${imageCacheTag ? `?${imageCacheTag}` : ''}`}\n />\n )}\n {fileExists === false && <File />}\n </div>\n )\n}\n"],"names":["React","baseClass","File","ShimmerEffect","ThumbnailContext","createContext","className","filename","size","src","useThumbnailContext","useContext","Thumbnail","props","doc","fileSrc","imageCacheTag","fileExists","setFileExists","useState","undefined","classNames","join","useEffect","img","Image","onload","onerror","div","height","alt"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA;;AACA,OAAOA,WAAW,QAAO;AAIzB,MAAMC,YAAY;AAIlB,SAASC,IAAI,QAAQ,+BAA8B;AACnD,SAASC,aAAa,QAAQ,4BAA2B;AAYzD,MAAMC,iCAAmBJ,MAAMK,aAAa,CAAC;IAC3CC,WAAW;IACXC,UAAU;IACVC,MAAM;IACNC,KAAK;AACP;AAEA,OAAO,MAAMC,sBAAsB,IAAMV,MAAMW,UAAU,CAACP,kBAAiB;AAE3E,OAAO,MAAMQ,YAAsC,CAACC;IAClD,MAAM,EAAEP,YAAY,EAAE,EAAEQ,KAAK,EAAEP,QAAQ,EAAE,GAAG,CAAC,CAAC,EAAEQ,OAAO,EAAEC,aAAa,EAAER,IAAI,EAAE,GAAGK;IACjF,MAAM,CAACI,YAAYC,cAAc,GAAGlB,MAAMmB,QAAQ,CAACC;IAEnD,MAAMC,aAAa;QAACpB;QAAW,CAAC,EAAEA,UAAU,OAAO,EAAEO,QAAQ,SAAS,CAAC;QAAEF;KAAU,CAACgB,IAAI,CAAC;IAEzFtB,MAAMuB,SAAS,CAAC;QACd,IAAI,CAACR,SAAS;YACZG,cAAc;YACd;QACF;QAEA,MAAMM,MAAM,IAAIC;QAChBD,IAAIf,GAAG,GAAGM;QACVS,IAAIE,MAAM,GAAG;YACXR,cAAc;QAChB;QACAM,IAAIG,OAAO,GAAG;YACZT,cAAc;QAChB;IACF,GAAG;QAACH;KAAQ;IAEZ,qBACE,MAACa;QAAItB,WAAWe;;YACbJ,eAAeG,2BAAa,KAACjB;gBAAc0B,QAAO;;YAClDZ,4BACC,KAACO;gBACCM,KAAKvB;gBACLE,KAAK,CAAC,EAAEM,QAAQ,EAAEC,gBAAgB,CAAC,CAAC,EAAEA,cAAc,CAAC,GAAG,GAAG,CAAC;;YAG/DC,eAAe,uBAAS,KAACf;;;AAGhC,EAAC"}
|
|
@@ -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,eAAe,CAAA;AAGzE,OAAO,KAA2C,MAAM,OAAO,CAAA;AAiB/D,OAAO,cAAc,CAAA;AAGrB,eAAO,MAAM,cAAc,gBAAgB,CAAA;AAC3C,eAAO,MAAM,eAAe,kBAAkB,CAAA;AAU9C,eAAO,MAAM,aAAa;;;uBAgBzB,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,cAAc,EAAE,MAAM,CAAA;IACtB,YAAY,CAAC,EAAE,SAAS,CAAA;IACxB,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,KAAK,IAAI,CAAA;IAChC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,yBAAyB,CAAC,QAAQ,CAAC,CAAA;CAClD,CAAA;AAED,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,
|
|
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,eAAe,CAAA;AAGzE,OAAO,KAA2C,MAAM,OAAO,CAAA;AAiB/D,OAAO,cAAc,CAAA;AAGrB,eAAO,MAAM,cAAc,gBAAgB,CAAA;AAC3C,eAAO,MAAM,eAAe,kBAAkB,CAAA;AAU9C,eAAO,MAAM,aAAa;;;uBAgBzB,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,cAAc,EAAE,MAAM,CAAA;IACtB,YAAY,CAAC,EAAE,SAAS,CAAA;IACxB,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,KAAK,IAAI,CAAA;IAChC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,yBAAyB,CAAC,QAAQ,CAAC,CAAA;CAClD,CAAA;AAED,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,CA8LxC,CAAA"}
|
|
@@ -4,7 +4,7 @@ import { isImage } from 'payload/utilities';
|
|
|
4
4
|
import React, { useCallback, useEffect, useState } from 'react';
|
|
5
5
|
import { fieldBaseClass } from '../../fields/shared/index.js';
|
|
6
6
|
import { FieldError } from '../../forms/FieldError/index.js';
|
|
7
|
-
import { useForm
|
|
7
|
+
import { useForm } from '../../forms/Form/context.js';
|
|
8
8
|
import { useField } from '../../forms/useField/index.js';
|
|
9
9
|
import { useDocumentInfo } from '../../providers/DocumentInfo/index.js';
|
|
10
10
|
import { useFormQueryParams } from '../../providers/FormQueryParams/index.js';
|
|
@@ -46,7 +46,6 @@ export const UploadActions = ({ canEdit, showSizePreviews })=>{
|
|
|
46
46
|
};
|
|
47
47
|
export const Upload = (props)=>{
|
|
48
48
|
const { collectionSlug, initialState, onChange, updatedAt, uploadConfig } = props;
|
|
49
|
-
const submitted = useFormSubmitted();
|
|
50
49
|
const [replacingFile, setReplacingFile] = useState(false);
|
|
51
50
|
const [fileSrc, setFileSrc] = useState(null);
|
|
52
51
|
const { t } = useTranslation();
|
|
@@ -94,10 +93,6 @@ export const Upload = (props)=>{
|
|
|
94
93
|
x: crop.x || 0,
|
|
95
94
|
y: crop.y || 0
|
|
96
95
|
});
|
|
97
|
-
const zoomScale = 100 / Math.min(crop.width, crop.height);
|
|
98
|
-
document.documentElement.style.setProperty('--file-details-thumbnail--zoom', `${zoomScale}`);
|
|
99
|
-
document.documentElement.style.setProperty('--file-details-thumbnail--top-offset', `${zoomScale * (50 - crop.height / 2 - crop.y)}%`);
|
|
100
|
-
document.documentElement.style.setProperty('--file-details-thumbnail--left-offset', `${zoomScale * (50 - crop.width / 2 - crop.x)}%`);
|
|
101
96
|
setModified(true);
|
|
102
97
|
dispatchFormQueryParams({
|
|
103
98
|
type: 'SET',
|
|
@@ -144,7 +139,6 @@ export const Upload = (props)=>{
|
|
|
144
139
|
const focalPointEnabled = uploadConfig?.focalPoint === true;
|
|
145
140
|
const { crop: showCrop = true, focalPoint = true } = uploadConfig;
|
|
146
141
|
const showFocalPoint = focalPoint && (hasImageSizes || hasResizeOptions || focalPointEnabled);
|
|
147
|
-
const lastSubmittedTime = submitted ? new Date().toISOString() : null;
|
|
148
142
|
return /*#__PURE__*/ _jsxs("div", {
|
|
149
143
|
className: [
|
|
150
144
|
fieldBaseClass,
|
|
@@ -161,7 +155,7 @@ export const Upload = (props)=>{
|
|
|
161
155
|
doc: doc,
|
|
162
156
|
handleRemove: canRemoveUpload ? handleFileRemoval : undefined,
|
|
163
157
|
hasImageSizes: hasImageSizes,
|
|
164
|
-
imageCacheTag:
|
|
158
|
+
imageCacheTag: doc.updatedAt,
|
|
165
159
|
uploadConfig: uploadConfig
|
|
166
160
|
}),
|
|
167
161
|
(!doc.filename || replacingFile) && /*#__PURE__*/ _jsxs("div", {
|
|
@@ -215,7 +209,7 @@ export const Upload = (props)=>{
|
|
|
215
209
|
children: /*#__PURE__*/ _jsx(EditUpload, {
|
|
216
210
|
fileName: value?.name || doc?.filename,
|
|
217
211
|
fileSrc: fileSrc || doc?.url,
|
|
218
|
-
imageCacheTag:
|
|
212
|
+
imageCacheTag: doc.updatedAt,
|
|
219
213
|
initialCrop: formQueryParams?.uploadEdits?.crop ?? {},
|
|
220
214
|
initialFocalPoint: {
|
|
221
215
|
x: formQueryParams?.uploadEdits?.focalPoint.x || doc.focalX || 50,
|
|
@@ -235,6 +229,7 @@ export const Upload = (props)=>{
|
|
|
235
229
|
}),
|
|
236
230
|
children: /*#__PURE__*/ _jsx(PreviewSizes, {
|
|
237
231
|
doc: doc,
|
|
232
|
+
imageCacheTag: doc.updatedAt,
|
|
238
233
|
uploadConfig: uploadConfig
|
|
239
234
|
})
|
|
240
235
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/elements/Upload/index.tsx"],"sourcesContent":["'use client'\nimport type { FormState, SanitizedCollectionConfig } from 'payload/types'\n\nimport { isImage } from 'payload/utilities'\nimport React, { useCallback, useEffect, useState } from 'react'\n\nimport { fieldBaseClass } from '../../fields/shared/index.js'\nimport { FieldError } from '../../forms/FieldError/index.js'\nimport { useForm, useFormSubmitted } from '../../forms/Form/context.js'\nimport { useField } from '../../forms/useField/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { useFormQueryParams } from '../../providers/FormQueryParams/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { reduceFieldsToValues } from '../../utilities/reduceFieldsToValues.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\nexport const UploadActions = ({ canEdit, showSizePreviews }) => {\n const { t } = useTranslation()\n return (\n <div className={`${baseClass}__file-mutation`}>\n {showSizePreviews && (\n <DrawerToggler className={`${baseClass}__previewSizes`} slug={sizePreviewSlug}>\n {t('upload:previewSizes')}\n </DrawerToggler>\n )}\n {canEdit && (\n <DrawerToggler className={`${baseClass}__edit`} slug={editDrawerSlug}>\n {t('upload:editImage')}\n </DrawerToggler>\n )}\n </div>\n )\n}\n\nexport type UploadProps = {\n collectionSlug: string\n initialState?: FormState\n onChange?: (file?: File) => void\n updatedAt?: string\n uploadConfig: SanitizedCollectionConfig['upload']\n}\n\nexport const Upload: React.FC<UploadProps> = (props) => {\n const { collectionSlug, initialState, onChange, updatedAt, uploadConfig } = props\n\n const submitted = useFormSubmitted()\n const [replacingFile, setReplacingFile] = useState(false)\n const [fileSrc, setFileSrc] = useState<null | string>(null)\n const { t } = useTranslation()\n const { setModified } = useForm()\n const { dispatchFormQueryParams, formQueryParams } = useFormQueryParams()\n const [doc, setDoc] = useState(reduceFieldsToValues(initialState || {}, true))\n const { docPermissions } = useDocumentInfo()\n const { errorMessage, setValue, showError, value } = useField<File>({\n path: 'file',\n validate,\n })\n const [crop, setCrop] = useState({ x: 0, y: 0 })\n\n const handleFileNameChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const updatedFileName = e.target.value\n if (value) {\n const fileValue = value\n // Creating a new File object with updated properties\n const newFile = new File([fileValue], updatedFileName, { type: fileValue.type })\n setValue(newFile) // Updating the state with the new File object\n }\n }\n\n const handleFileSelection = React.useCallback(\n (files: FileList) => {\n const fileToUpload = files?.[0]\n setValue(fileToUpload)\n },\n [setValue],\n )\n\n const handleFileRemoval = useCallback(() => {\n setReplacingFile(true)\n setValue(null)\n setFileSrc('')\n }, [setValue])\n\n const onEditsSave = React.useCallback(\n ({ crop, focalPosition }) => {\n setCrop({\n x: crop.x || 0,\n y: crop.y || 0,\n })\n const zoomScale = 100 / Math.min(crop.width, crop.height)\n\n document.documentElement.style.setProperty('--file-details-thumbnail--zoom', `${zoomScale}`)\n document.documentElement.style.setProperty(\n '--file-details-thumbnail--top-offset',\n `${zoomScale * (50 - crop.height / 2 - crop.y)}%`,\n )\n document.documentElement.style.setProperty(\n '--file-details-thumbnail--left-offset',\n `${zoomScale * (50 - crop.width / 2 - crop.x)}%`,\n )\n setModified(true)\n dispatchFormQueryParams({\n type: 'SET',\n params: {\n uploadEdits:\n crop || focalPosition\n ? {\n crop: crop || null,\n focalPoint: focalPosition ? focalPosition : null,\n }\n : null,\n },\n })\n },\n [dispatchFormQueryParams, setModified],\n )\n\n useEffect(() => {\n setDoc(reduceFieldsToValues(initialState || {}, true))\n setReplacingFile(false)\n }, [initialState])\n\n useEffect(() => {\n if (value instanceof File) {\n const fileReader = new FileReader()\n fileReader.onload = (e) => {\n const imgSrc = e.target?.result\n\n if (typeof imgSrc === 'string') {\n setFileSrc(imgSrc)\n }\n }\n fileReader.readAsDataURL(value)\n }\n\n if (typeof onChange === 'function') {\n onChange(value)\n }\n }, [value, onChange, updatedAt])\n\n const canRemoveUpload =\n docPermissions?.update?.permission &&\n 'delete' in docPermissions &&\n docPermissions?.delete?.permission\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 lastSubmittedTime = submitted ? new Date().toISOString() : null\n\n return (\n <div className={[fieldBaseClass, baseClass].filter(Boolean).join(' ')}>\n <FieldError message={errorMessage} showError={showError} />\n {doc.filename && !replacingFile && (\n <FileDetails\n canEdit={showCrop || showFocalPoint}\n collectionSlug={collectionSlug}\n doc={doc}\n handleRemove={canRemoveUpload ? handleFileRemoval : undefined}\n hasImageSizes={hasImageSizes}\n imageCacheTag={lastSubmittedTime}\n uploadConfig={uploadConfig}\n />\n )}\n {(!doc.filename || replacingFile) && (\n <div className={`${baseClass}__upload`}>\n {!value && (\n <Dropzone\n className={`${baseClass}__dropzone`}\n mimeTypes={uploadConfig?.mimeTypes}\n onChange={handleFileSelection}\n />\n )}\n\n {value && (\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 <input\n className={`${baseClass}__filename`}\n onChange={handleFileNameChange}\n type=\"text\"\n value={value.name}\n />\n\n {isImage(value.type) && value.type !== 'image/svg+xml' && (\n <UploadActions\n canEdit={showCrop || showFocalPoint}\n showSizePreviews={hasImageSizes && doc.filename && !replacingFile}\n />\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 || doc.filename) && (\n <Drawer Header={null} slug={editDrawerSlug}>\n <EditUpload\n fileName={value?.name || doc?.filename}\n fileSrc={fileSrc || doc?.url}\n imageCacheTag={lastSubmittedTime}\n initialCrop={formQueryParams?.uploadEdits?.crop ?? {}}\n initialFocalPoint={{\n x: formQueryParams?.uploadEdits?.focalPoint.x || doc.focalX || 50,\n y: formQueryParams?.uploadEdits?.focalPoint.y || doc.focalY || 50,\n }}\n onSave={onEditsSave}\n showCrop={showCrop}\n showFocalPoint={showFocalPoint}\n />\n </Drawer>\n )}\n {doc && hasImageSizes && (\n <Drawer\n className={`${baseClass}__previewDrawer`}\n hoverTitle\n slug={sizePreviewSlug}\n title={t('upload:sizesFor', { label: doc?.filename })}\n >\n <PreviewSizes doc={doc} uploadConfig={uploadConfig} />\n </Drawer>\n )}\n </div>\n )\n}\n"],"names":["isImage","React","useCallback","useEffect","useState","fieldBaseClass","FieldError","useForm","useFormSubmitted","useField","useDocumentInfo","useFormQueryParams","useTranslation","reduceFieldsToValues","Button","Drawer","DrawerToggler","Dropzone","EditUpload","FileDetails","PreviewSizes","Thumbnail","baseClass","editDrawerSlug","sizePreviewSlug","validate","value","undefined","UploadActions","canEdit","showSizePreviews","t","div","className","slug","Upload","props","collectionSlug","initialState","onChange","updatedAt","uploadConfig","submitted","replacingFile","setReplacingFile","fileSrc","setFileSrc","setModified","dispatchFormQueryParams","formQueryParams","doc","setDoc","docPermissions","errorMessage","setValue","showError","path","crop","setCrop","x","y","handleFileNameChange","e","updatedFileName","target","fileValue","newFile","File","type","handleFileSelection","files","fileToUpload","handleFileRemoval","onEditsSave","focalPosition","zoomScale","Math","min","width","height","document","documentElement","style","setProperty","params","uploadEdits","focalPoint","fileReader","FileReader","onload","imgSrc","result","readAsDataURL","canRemoveUpload","update","permission","delete","hasImageSizes","imageSizes","length","hasResizeOptions","Boolean","resizeOptions","focalPointEnabled","showCrop","showFocalPoint","lastSubmittedTime","Date","toISOString","filter","join","message","filename","handleRemove","imageCacheTag","mimeTypes","Fragment","input","name","buttonStyle","icon","iconStyle","onClick","round","tooltip","Header","fileName","url","initialCrop","initialFocalPoint","focalX","focalY","onSave","hoverTitle","title","label"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/Upload/index.tsx"],"sourcesContent":["'use client'\nimport type { FormState, SanitizedCollectionConfig } from 'payload/types'\n\nimport { isImage } from 'payload/utilities'\nimport React, { useCallback, useEffect, useState } from 'react'\n\nimport { fieldBaseClass } from '../../fields/shared/index.js'\nimport { FieldError } from '../../forms/FieldError/index.js'\nimport { useForm } from '../../forms/Form/context.js'\nimport { useField } from '../../forms/useField/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { useFormQueryParams } from '../../providers/FormQueryParams/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { reduceFieldsToValues } from '../../utilities/reduceFieldsToValues.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\nexport const UploadActions = ({ canEdit, showSizePreviews }) => {\n const { t } = useTranslation()\n return (\n <div className={`${baseClass}__file-mutation`}>\n {showSizePreviews && (\n <DrawerToggler className={`${baseClass}__previewSizes`} slug={sizePreviewSlug}>\n {t('upload:previewSizes')}\n </DrawerToggler>\n )}\n {canEdit && (\n <DrawerToggler className={`${baseClass}__edit`} slug={editDrawerSlug}>\n {t('upload:editImage')}\n </DrawerToggler>\n )}\n </div>\n )\n}\n\nexport type UploadProps = {\n collectionSlug: string\n initialState?: FormState\n onChange?: (file?: File) => void\n updatedAt?: string\n uploadConfig: SanitizedCollectionConfig['upload']\n}\n\nexport const Upload: React.FC<UploadProps> = (props) => {\n const { collectionSlug, initialState, onChange, updatedAt, uploadConfig } = props\n\n const [replacingFile, setReplacingFile] = useState(false)\n const [fileSrc, setFileSrc] = useState<null | string>(null)\n const { t } = useTranslation()\n const { setModified } = useForm()\n const { dispatchFormQueryParams, formQueryParams } = useFormQueryParams()\n const [doc, setDoc] = useState(reduceFieldsToValues(initialState || {}, true))\n const { docPermissions } = useDocumentInfo()\n const { errorMessage, setValue, showError, value } = useField<File>({\n path: 'file',\n validate,\n })\n const [crop, setCrop] = useState({ x: 0, y: 0 })\n\n const handleFileNameChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const updatedFileName = e.target.value\n if (value) {\n const fileValue = value\n // Creating a new File object with updated properties\n const newFile = new File([fileValue], updatedFileName, { type: fileValue.type })\n setValue(newFile) // Updating the state with the new File object\n }\n }\n\n const handleFileSelection = React.useCallback(\n (files: FileList) => {\n const fileToUpload = files?.[0]\n setValue(fileToUpload)\n },\n [setValue],\n )\n\n const handleFileRemoval = useCallback(() => {\n setReplacingFile(true)\n setValue(null)\n setFileSrc('')\n }, [setValue])\n\n const onEditsSave = React.useCallback(\n ({ crop, focalPosition }) => {\n setCrop({\n x: crop.x || 0,\n y: crop.y || 0,\n })\n\n setModified(true)\n dispatchFormQueryParams({\n type: 'SET',\n params: {\n uploadEdits:\n crop || focalPosition\n ? {\n crop: crop || null,\n focalPoint: focalPosition ? focalPosition : null,\n }\n : null,\n },\n })\n },\n [dispatchFormQueryParams, setModified],\n )\n\n useEffect(() => {\n setDoc(reduceFieldsToValues(initialState || {}, true))\n setReplacingFile(false)\n }, [initialState])\n\n useEffect(() => {\n if (value instanceof File) {\n const fileReader = new FileReader()\n fileReader.onload = (e) => {\n const imgSrc = e.target?.result\n\n if (typeof imgSrc === 'string') {\n setFileSrc(imgSrc)\n }\n }\n fileReader.readAsDataURL(value)\n }\n\n if (typeof onChange === 'function') {\n onChange(value)\n }\n }, [value, onChange, updatedAt])\n\n const canRemoveUpload =\n docPermissions?.update?.permission &&\n 'delete' in docPermissions &&\n docPermissions?.delete?.permission\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 return (\n <div className={[fieldBaseClass, baseClass].filter(Boolean).join(' ')}>\n <FieldError message={errorMessage} showError={showError} />\n {doc.filename && !replacingFile && (\n <FileDetails\n canEdit={showCrop || showFocalPoint}\n collectionSlug={collectionSlug}\n doc={doc}\n handleRemove={canRemoveUpload ? handleFileRemoval : undefined}\n hasImageSizes={hasImageSizes}\n imageCacheTag={doc.updatedAt}\n uploadConfig={uploadConfig}\n />\n )}\n {(!doc.filename || replacingFile) && (\n <div className={`${baseClass}__upload`}>\n {!value && (\n <Dropzone\n className={`${baseClass}__dropzone`}\n mimeTypes={uploadConfig?.mimeTypes}\n onChange={handleFileSelection}\n />\n )}\n\n {value && (\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 <input\n className={`${baseClass}__filename`}\n onChange={handleFileNameChange}\n type=\"text\"\n value={value.name}\n />\n\n {isImage(value.type) && value.type !== 'image/svg+xml' && (\n <UploadActions\n canEdit={showCrop || showFocalPoint}\n showSizePreviews={hasImageSizes && doc.filename && !replacingFile}\n />\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 || doc.filename) && (\n <Drawer Header={null} slug={editDrawerSlug}>\n <EditUpload\n fileName={value?.name || doc?.filename}\n fileSrc={fileSrc || doc?.url}\n imageCacheTag={doc.updatedAt}\n initialCrop={formQueryParams?.uploadEdits?.crop ?? {}}\n initialFocalPoint={{\n x: formQueryParams?.uploadEdits?.focalPoint.x || doc.focalX || 50,\n y: formQueryParams?.uploadEdits?.focalPoint.y || doc.focalY || 50,\n }}\n onSave={onEditsSave}\n showCrop={showCrop}\n showFocalPoint={showFocalPoint}\n />\n </Drawer>\n )}\n {doc && hasImageSizes && (\n <Drawer\n className={`${baseClass}__previewDrawer`}\n hoverTitle\n slug={sizePreviewSlug}\n title={t('upload:sizesFor', { label: doc?.filename })}\n >\n <PreviewSizes doc={doc} imageCacheTag={doc.updatedAt} uploadConfig={uploadConfig} />\n </Drawer>\n )}\n </div>\n )\n}\n"],"names":["isImage","React","useCallback","useEffect","useState","fieldBaseClass","FieldError","useForm","useField","useDocumentInfo","useFormQueryParams","useTranslation","reduceFieldsToValues","Button","Drawer","DrawerToggler","Dropzone","EditUpload","FileDetails","PreviewSizes","Thumbnail","baseClass","editDrawerSlug","sizePreviewSlug","validate","value","undefined","UploadActions","canEdit","showSizePreviews","t","div","className","slug","Upload","props","collectionSlug","initialState","onChange","updatedAt","uploadConfig","replacingFile","setReplacingFile","fileSrc","setFileSrc","setModified","dispatchFormQueryParams","formQueryParams","doc","setDoc","docPermissions","errorMessage","setValue","showError","path","crop","setCrop","x","y","handleFileNameChange","e","updatedFileName","target","fileValue","newFile","File","type","handleFileSelection","files","fileToUpload","handleFileRemoval","onEditsSave","focalPosition","params","uploadEdits","focalPoint","fileReader","FileReader","onload","imgSrc","result","readAsDataURL","canRemoveUpload","update","permission","delete","hasImageSizes","imageSizes","length","hasResizeOptions","Boolean","resizeOptions","focalPointEnabled","showCrop","showFocalPoint","filter","join","message","filename","handleRemove","imageCacheTag","mimeTypes","Fragment","input","name","buttonStyle","icon","iconStyle","onClick","round","tooltip","Header","fileName","url","initialCrop","initialFocalPoint","focalX","focalY","onSave","hoverTitle","title","label"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
@@ -30,17 +30,6 @@
|
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
.file-details {
|
|
34
|
-
img {
|
|
35
|
-
position: relative;
|
|
36
|
-
min-width: 100%;
|
|
37
|
-
height: 100%;
|
|
38
|
-
transform: scale(var(--file-details-thumbnail--zoom));
|
|
39
|
-
top: var(--file-details-thumbnail--top-offset);
|
|
40
|
-
left: var(--file-details-thumbnail--left-offset);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
|
|
44
33
|
&__remove {
|
|
45
34
|
margin: calc($baseline * 1.5) $baseline $baseline 0;
|
|
46
35
|
place-self: flex-start;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/fields/Relationship/index.tsx"],"names":[],"mappings":"AAMA,OAAO,KAA+D,MAAM,OAAO,CAAA;AAGnF,OAAO,KAAK,EAAsB,sBAAsB,EAAS,MAAM,YAAY,CAAA;AAkBnF,OAAO,cAAc,CAAA;AASrB,OAAO,EAAE,sBAAsB,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/fields/Relationship/index.tsx"],"names":[],"mappings":"AAMA,OAAO,KAA+D,MAAM,OAAO,CAAA;AAGnF,OAAO,KAAK,EAAsB,sBAAsB,EAAS,MAAM,YAAY,CAAA;AAkBnF,OAAO,cAAc,CAAA;AASrB,OAAO,EAAE,sBAAsB,EAAE,CAAA;AA6jBjC,eAAO,MAAM,YAAY,kCAAmC,CAAA"}
|
|
@@ -126,11 +126,15 @@ const RelationshipField = (props)=>{
|
|
|
126
126
|
if (relationFilterOption && typeof relationFilterOption !== 'boolean') {
|
|
127
127
|
query.where.and.push(relationFilterOption);
|
|
128
128
|
}
|
|
129
|
-
const response = await fetch(`${serverURL}${api}/${relation}
|
|
129
|
+
const response = await fetch(`${serverURL}${api}/${relation}`, {
|
|
130
|
+
body: qs.stringify(query),
|
|
130
131
|
credentials: 'include',
|
|
131
132
|
headers: {
|
|
132
|
-
'Accept-Language': i18n.language
|
|
133
|
-
|
|
133
|
+
'Accept-Language': i18n.language,
|
|
134
|
+
'Content-Type': 'application/x-www-form-urlencoded',
|
|
135
|
+
'X-HTTP-Method-Override': 'GET'
|
|
136
|
+
},
|
|
137
|
+
method: 'POST'
|
|
134
138
|
});
|
|
135
139
|
if (response.ok) {
|
|
136
140
|
const data = await response.json();
|
|
@@ -237,11 +241,15 @@ const RelationshipField = (props)=>{
|
|
|
237
241
|
}
|
|
238
242
|
};
|
|
239
243
|
if (!errorLoading) {
|
|
240
|
-
const response = await fetch(`${serverURL}${api}/${relation}
|
|
244
|
+
const response = await fetch(`${serverURL}${api}/${relation}`, {
|
|
245
|
+
body: qs.stringify(query),
|
|
241
246
|
credentials: 'include',
|
|
242
247
|
headers: {
|
|
243
|
-
'Accept-Language': i18n.language
|
|
244
|
-
|
|
248
|
+
'Accept-Language': i18n.language,
|
|
249
|
+
'Content-Type': 'application/x-www-form-urlencoded',
|
|
250
|
+
'X-HTTP-Method-Override': 'GET'
|
|
251
|
+
},
|
|
252
|
+
method: 'POST'
|
|
245
253
|
});
|
|
246
254
|
const collection = collections.find((coll)=>coll.slug === relation);
|
|
247
255
|
let docs = [];
|