@payloadcms/ui 3.0.0-beta.121 → 3.0.0-beta.122

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/BulkUpload/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAGzC,OAAO,KAAK,MAAM,OAAO,CAAA;AAuDzB,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CACnC,CAAA;AAED,wBAAgB,gBAAgB,sBAa/B;AAED,KAAK,iBAAiB,GAAG;IACvB,cAAc,EAAE,MAAM,CAAA;IACtB,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,QAAQ,CAAA;IACtB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,SAAS,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,CAAA;IAC9D,iBAAiB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACzC,eAAe,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAA;IAC1C,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC,WAAW,EAAE,CAAC,QAAQ,EAAE,iBAAiB,CAAC,UAAU,CAAC,KAAK,IAAI,CAAA;IAC9D,YAAY,EAAE,CAAC,SAAS,EAAE,iBAAiB,CAAC,WAAW,CAAC,KAAK,IAAI,CAAA;CAClE,CAAA;AAeD,wBAAgB,kBAAkB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,qBA8CtF;AAED,eAAO,MAAM,aAAa,yBAAkC,CAAA;AAE5D,wBAAgB,uBAAuB,WAItC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/BulkUpload/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAIzC,OAAO,KAAK,MAAM,OAAO,CAAA;AA8DzB,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CACnC,CAAA;AAED,wBAAgB,gBAAgB,sBAa/B;AAED,KAAK,iBAAiB,GAAG;IACvB,cAAc,EAAE,MAAM,CAAA;IACtB,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,QAAQ,CAAA;IACtB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,SAAS,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,CAAA;IAC9D,iBAAiB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACzC,eAAe,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAA;IAC1C,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC,WAAW,EAAE,CAAC,QAAQ,EAAE,iBAAiB,CAAC,UAAU,CAAC,KAAK,IAAI,CAAA;IAC9D,YAAY,EAAE,CAAC,SAAS,EAAE,iBAAiB,CAAC,WAAW,CAAC,KAAK,IAAI,CAAA;CAClE,CAAA;AAeD,wBAAgB,kBAAkB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,qBA8CtF;AAED,eAAO,MAAM,aAAa,yBAAkC,CAAA;AAE5D,wBAAgB,uBAAuB,WAItC"}
@@ -3,9 +3,12 @@
3
3
  import { c as _c } from "react/compiler-runtime";
4
4
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
5
5
  import { useModal } from '@faceless-ui/modal';
6
+ import { validateMimeType } from 'payload/shared';
6
7
  import React from 'react';
8
+ import { toast } from 'sonner';
7
9
  import { useConfig } from '../../providers/Config/index.js';
8
10
  import { EditDepthProvider, useEditDepth } from '../../providers/EditDepth/index.js';
11
+ import { useTranslation } from '../../providers/Translation/index.js';
9
12
  import { Drawer } from '../Drawer/index.js';
10
13
  import { AddFilesView } from './AddFilesView/index.js';
11
14
  import { AddingFilesView } from './AddingFilesView/index.js';
@@ -27,18 +30,25 @@ function DrawerContent() {
27
30
  const {
28
31
  config
29
32
  } = useConfig();
33
+ const {
34
+ t
35
+ } = useTranslation();
30
36
  const uploadCollection = config.collections.find(col => col.slug === collectionSlug);
31
37
  const uploadConfig = uploadCollection.upload;
32
38
  const uploadMimeTypes = uploadConfig.mimeTypes;
33
39
  const onDrop = React.useCallback(acceptedFiles => {
34
40
  const fileTransfer = new DataTransfer();
35
41
  for (const candidateFile of acceptedFiles) {
36
- if (uploadMimeTypes === undefined || uploadMimeTypes.length === 0 || uploadMimeTypes?.includes(candidateFile.type)) {
42
+ if (uploadMimeTypes === undefined || uploadMimeTypes.length === 0 || validateMimeType(candidateFile.type, uploadMimeTypes)) {
37
43
  fileTransfer.items.add(candidateFile);
38
44
  }
39
45
  }
40
- void addFiles(fileTransfer.files);
41
- }, [addFiles, uploadMimeTypes]);
46
+ if (fileTransfer.files.length === 0) {
47
+ toast.error(t('error:invalidFileType'));
48
+ } else {
49
+ void addFiles(fileTransfer.files);
50
+ }
51
+ }, [addFiles, t, uploadMimeTypes]);
42
52
  if (!collectionSlug) {
43
53
  return null;
44
54
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","useModal","React","useConfig","EditDepthProvider","useEditDepth","Drawer","AddFilesView","AddingFilesView","FormsManagerProvider","useFormsManager","drawerSlug","DrawerContent","addFiles","forms","isInitializing","closeModal","collectionSlug","useBulkUpload","config","uploadCollection","collections","find","col","slug","uploadConfig","upload","uploadMimeTypes","mimeTypes","onDrop","useCallback","acceptedFiles","fileTransfer","DataTransfer","candidateFile","undefined","length","includes","type","items","add","files","_jsx","acceptMimeTypes","join","onCancel","BulkUploadDrawer","$","currentDepth","t0","t1","depth","children","gutter","Header","Context","createContext","initialFiles","maxFiles","onSuccess","setCollectionSlug","setInitialFiles","setMaxFiles","setOnCancel","setOnSuccess","BulkUploadProvider","collection","setCollection","useState","onSuccessFunction","setOnSuccessFunction","onCancelFunction","setOnCancelFunction","useBulkUploadDrawerSlug","Symbol","for","t2","t3","t4","docIDs","errorCount","t5","Provider","value","_jsxs","Fragment","useContext"],"sources":["../../../src/elements/BulkUpload/index.tsx"],"sourcesContent":["'use client'\n\nimport type { JsonObject } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport React from 'react'\n\nimport { useConfig } from '../../providers/Config/index.js'\nimport { EditDepthProvider, useEditDepth } from '../../providers/EditDepth/index.js'\nimport { Drawer } from '../Drawer/index.js'\nimport { AddFilesView } from './AddFilesView/index.js'\nimport { AddingFilesView } from './AddingFilesView/index.js'\nimport { FormsManagerProvider, useFormsManager } from './FormsManager/index.js'\n\nconst drawerSlug = 'bulk-upload-drawer-slug'\n\nfunction DrawerContent() {\n const { addFiles, forms, isInitializing } = useFormsManager()\n const { closeModal } = useModal()\n const { collectionSlug, drawerSlug } = useBulkUpload()\n const { config } = useConfig()\n\n const uploadCollection = config.collections.find((col) => col.slug === collectionSlug)\n const uploadConfig = uploadCollection.upload\n const uploadMimeTypes = uploadConfig.mimeTypes\n\n const onDrop = React.useCallback(\n (acceptedFiles: FileList) => {\n const fileTransfer = new DataTransfer()\n for (const candidateFile of acceptedFiles) {\n if (\n uploadMimeTypes === undefined ||\n uploadMimeTypes.length === 0 ||\n uploadMimeTypes?.includes(candidateFile.type)\n ) {\n fileTransfer.items.add(candidateFile)\n }\n }\n void addFiles(fileTransfer.files)\n },\n [addFiles, uploadMimeTypes],\n )\n\n if (!collectionSlug) {\n return null\n }\n\n if (!forms.length && !isInitializing) {\n return (\n <AddFilesView\n acceptMimeTypes={uploadMimeTypes?.join(', ')}\n onCancel={() => closeModal(drawerSlug)}\n onDrop={onDrop}\n />\n )\n } else {\n return <AddingFilesView />\n }\n}\n\nexport type BulkUploadProps = {\n readonly children: React.ReactNode\n}\n\nexport function BulkUploadDrawer() {\n const currentDepth = useEditDepth()\n const { drawerSlug } = useBulkUpload()\n\n return (\n <EditDepthProvider depth={currentDepth || 1}>\n <Drawer gutter={false} Header={null} slug={drawerSlug}>\n <FormsManagerProvider>\n <DrawerContent />\n </FormsManagerProvider>\n </Drawer>\n </EditDepthProvider>\n )\n}\n\ntype BulkUploadContext = {\n collectionSlug: string\n drawerSlug: string\n initialFiles: FileList\n maxFiles: number\n onCancel: () => void\n onSuccess: (newDocs: JsonObject[], errorCount: number) => void\n setCollectionSlug: (slug: string) => void\n setInitialFiles: (files: FileList) => void\n setMaxFiles: (maxFiles: number) => void\n setOnCancel: (onCancel: BulkUploadContext['onCancel']) => void\n setOnSuccess: (onSuccess: BulkUploadContext['onSuccess']) => void\n}\n\nconst Context = React.createContext<BulkUploadContext>({\n collectionSlug: '',\n drawerSlug: '',\n initialFiles: undefined,\n maxFiles: undefined,\n onCancel: () => null,\n onSuccess: () => null,\n setCollectionSlug: () => null,\n setInitialFiles: () => null,\n setMaxFiles: () => null,\n setOnCancel: () => null,\n setOnSuccess: () => null,\n})\nexport function BulkUploadProvider({ children }: { readonly children: React.ReactNode }) {\n const [collection, setCollection] = React.useState<string>()\n const [onSuccessFunction, setOnSuccessFunction] = React.useState<BulkUploadContext['onSuccess']>()\n const [onCancelFunction, setOnCancelFunction] = React.useState<BulkUploadContext['onCancel']>()\n const [initialFiles, setInitialFiles] = React.useState<FileList>(undefined)\n const [maxFiles, setMaxFiles] = React.useState<number>(undefined)\n const drawerSlug = useBulkUploadDrawerSlug()\n\n const setCollectionSlug: BulkUploadContext['setCollectionSlug'] = (slug) => {\n setCollection(slug)\n }\n\n const setOnSuccess: BulkUploadContext['setOnSuccess'] = (onSuccess) => {\n setOnSuccessFunction(() => onSuccess)\n }\n\n return (\n <Context.Provider\n value={{\n collectionSlug: collection,\n drawerSlug,\n initialFiles,\n maxFiles,\n onCancel: () => {\n if (typeof onCancelFunction === 'function') {\n onCancelFunction()\n }\n },\n onSuccess: (docIDs, errorCount) => {\n if (typeof onSuccessFunction === 'function') {\n onSuccessFunction(docIDs, errorCount)\n }\n },\n setCollectionSlug,\n setInitialFiles,\n setMaxFiles,\n setOnCancel: setOnCancelFunction,\n setOnSuccess,\n }}\n >\n <React.Fragment>\n {children}\n <BulkUploadDrawer />\n </React.Fragment>\n </Context.Provider>\n )\n}\n\nexport const useBulkUpload = () => React.useContext(Context)\n\nexport function useBulkUploadDrawerSlug() {\n const depth = useEditDepth()\n\n return `${drawerSlug}-${depth || 1}`\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","useModal","validateMimeType","React","toast","useConfig","EditDepthProvider","useEditDepth","useTranslation","Drawer","AddFilesView","AddingFilesView","FormsManagerProvider","useFormsManager","drawerSlug","DrawerContent","addFiles","forms","isInitializing","closeModal","collectionSlug","useBulkUpload","config","t","uploadCollection","collections","find","col","slug","uploadConfig","upload","uploadMimeTypes","mimeTypes","onDrop","useCallback","acceptedFiles","fileTransfer","DataTransfer","candidateFile","undefined","length","type","items","add","files","error","_jsx","acceptMimeTypes","join","onCancel","BulkUploadDrawer","$","currentDepth","t0","t1","depth","children","gutter","Header","Context","createContext","initialFiles","maxFiles","onSuccess","setCollectionSlug","setInitialFiles","setMaxFiles","setOnCancel","setOnSuccess","BulkUploadProvider","collection","setCollection","useState","onSuccessFunction","setOnSuccessFunction","onCancelFunction","setOnCancelFunction","useBulkUploadDrawerSlug","Symbol","for","t2","t3","t4","docIDs","errorCount","t5","Provider","value","_jsxs","Fragment","useContext"],"sources":["../../../src/elements/BulkUpload/index.tsx"],"sourcesContent":["'use client'\n\nimport type { JsonObject } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { validateMimeType } from 'payload/shared'\nimport React from 'react'\nimport { toast } from 'sonner'\n\nimport { useConfig } from '../../providers/Config/index.js'\nimport { EditDepthProvider, useEditDepth } from '../../providers/EditDepth/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { Drawer } from '../Drawer/index.js'\nimport { AddFilesView } from './AddFilesView/index.js'\nimport { AddingFilesView } from './AddingFilesView/index.js'\nimport { FormsManagerProvider, useFormsManager } from './FormsManager/index.js'\n\nconst drawerSlug = 'bulk-upload-drawer-slug'\n\nfunction DrawerContent() {\n const { addFiles, forms, isInitializing } = useFormsManager()\n const { closeModal } = useModal()\n const { collectionSlug, drawerSlug } = useBulkUpload()\n const { config } = useConfig()\n const { t } = useTranslation()\n\n const uploadCollection = config.collections.find((col) => col.slug === collectionSlug)\n const uploadConfig = uploadCollection.upload\n const uploadMimeTypes = uploadConfig.mimeTypes\n\n const onDrop = React.useCallback(\n (acceptedFiles: FileList) => {\n const fileTransfer = new DataTransfer()\n for (const candidateFile of acceptedFiles) {\n if (\n uploadMimeTypes === undefined ||\n uploadMimeTypes.length === 0 ||\n validateMimeType(candidateFile.type, uploadMimeTypes)\n ) {\n fileTransfer.items.add(candidateFile)\n }\n }\n if (fileTransfer.files.length === 0) {\n toast.error(t('error:invalidFileType'))\n } else {\n void addFiles(fileTransfer.files)\n }\n },\n [addFiles, t, uploadMimeTypes],\n )\n\n if (!collectionSlug) {\n return null\n }\n\n if (!forms.length && !isInitializing) {\n return (\n <AddFilesView\n acceptMimeTypes={uploadMimeTypes?.join(', ')}\n onCancel={() => closeModal(drawerSlug)}\n onDrop={onDrop}\n />\n )\n } else {\n return <AddingFilesView />\n }\n}\n\nexport type BulkUploadProps = {\n readonly children: React.ReactNode\n}\n\nexport function BulkUploadDrawer() {\n const currentDepth = useEditDepth()\n const { drawerSlug } = useBulkUpload()\n\n return (\n <EditDepthProvider depth={currentDepth || 1}>\n <Drawer gutter={false} Header={null} slug={drawerSlug}>\n <FormsManagerProvider>\n <DrawerContent />\n </FormsManagerProvider>\n </Drawer>\n </EditDepthProvider>\n )\n}\n\ntype BulkUploadContext = {\n collectionSlug: string\n drawerSlug: string\n initialFiles: FileList\n maxFiles: number\n onCancel: () => void\n onSuccess: (newDocs: JsonObject[], errorCount: number) => void\n setCollectionSlug: (slug: string) => void\n setInitialFiles: (files: FileList) => void\n setMaxFiles: (maxFiles: number) => void\n setOnCancel: (onCancel: BulkUploadContext['onCancel']) => void\n setOnSuccess: (onSuccess: BulkUploadContext['onSuccess']) => void\n}\n\nconst Context = React.createContext<BulkUploadContext>({\n collectionSlug: '',\n drawerSlug: '',\n initialFiles: undefined,\n maxFiles: undefined,\n onCancel: () => null,\n onSuccess: () => null,\n setCollectionSlug: () => null,\n setInitialFiles: () => null,\n setMaxFiles: () => null,\n setOnCancel: () => null,\n setOnSuccess: () => null,\n})\nexport function BulkUploadProvider({ children }: { readonly children: React.ReactNode }) {\n const [collection, setCollection] = React.useState<string>()\n const [onSuccessFunction, setOnSuccessFunction] = React.useState<BulkUploadContext['onSuccess']>()\n const [onCancelFunction, setOnCancelFunction] = React.useState<BulkUploadContext['onCancel']>()\n const [initialFiles, setInitialFiles] = React.useState<FileList>(undefined)\n const [maxFiles, setMaxFiles] = React.useState<number>(undefined)\n const drawerSlug = useBulkUploadDrawerSlug()\n\n const setCollectionSlug: BulkUploadContext['setCollectionSlug'] = (slug) => {\n setCollection(slug)\n }\n\n const setOnSuccess: BulkUploadContext['setOnSuccess'] = (onSuccess) => {\n setOnSuccessFunction(() => onSuccess)\n }\n\n return (\n <Context.Provider\n value={{\n collectionSlug: collection,\n drawerSlug,\n initialFiles,\n maxFiles,\n onCancel: () => {\n if (typeof onCancelFunction === 'function') {\n onCancelFunction()\n }\n },\n onSuccess: (docIDs, errorCount) => {\n if (typeof onSuccessFunction === 'function') {\n onSuccessFunction(docIDs, errorCount)\n }\n },\n setCollectionSlug,\n setInitialFiles,\n setMaxFiles,\n setOnCancel: setOnCancelFunction,\n setOnSuccess,\n }}\n >\n <React.Fragment>\n {children}\n <BulkUploadDrawer />\n </React.Fragment>\n </Context.Provider>\n )\n}\n\nexport const useBulkUpload = () => React.useContext(Context)\n\nexport function useBulkUploadDrawerSlug() {\n const depth = useEditDepth()\n\n return `${drawerSlug}-${depth || 1}`\n}\n"],"mappings":"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","ignoreList":[]}
@@ -21,6 +21,7 @@
21
21
  display: flex;
22
22
  flex-direction: column;
23
23
  gap: var(--base);
24
+ max-width: base(36);
24
25
 
25
26
  > * {
26
27
  margin: 0;