@tecsinapse/cortex-react 1.15.0-beta.11 → 1.15.0-beta.13

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.
@@ -17,7 +17,7 @@ const Manager = ({
17
17
  uploadProgressText = "Upload(s) in progress",
18
18
  onClose
19
19
  }) => {
20
- const { min, setMin, regularFiles, folderFiles } = useManagerHelpers.useManagerHelpers({
20
+ const { min, setMin, regularFiles, folderFiles, totalLength, setFolders } = useManagerHelpers.useManagerHelpers({
21
21
  files
22
22
  });
23
23
  return reactDom.createPortal(
@@ -54,7 +54,7 @@ const Manager = ({
54
54
  className: clsx.clsx("w-full h-auto max-h-[300px] gap-mili", {
55
55
  hidden: min,
56
56
  "flex flex-col": !min,
57
- "pb-kilo overflow-scroll pr-deca": (files ?? []).length > 3
57
+ "pb-kilo overflow-scroll pr-deca": totalLength > 3
58
58
  }),
59
59
  children: [
60
60
  regularFiles.length > 0 ? regularFiles.map((file, index) => /* @__PURE__ */ jsxRuntime.jsx(
@@ -67,7 +67,7 @@ const Manager = ({
67
67
  },
68
68
  file.uid
69
69
  )) : null,
70
- folderFiles.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx(Upload.FolderList, { files: folderFiles }) : null
70
+ folderFiles.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx(Upload.FolderList, { files: folderFiles, setFolders }) : null
71
71
  ]
72
72
  }
73
73
  )
@@ -116,7 +116,7 @@ const Folder = ({ name, subItems }) => {
116
116
  /* @__PURE__ */ jsxRuntime.jsx(ProgressBar.ProgressBar, { intent, infinite: loading })
117
117
  ] });
118
118
  };
119
- const FolderList = ({ files }) => {
119
+ const FolderList = ({ files, setFolders }) => {
120
120
  const folders = React.useMemo(() => {
121
121
  const segments = {};
122
122
  files.forEach((file) => {
@@ -127,6 +127,7 @@ const FolderList = ({ files }) => {
127
127
  });
128
128
  return segments;
129
129
  }, [files]);
130
+ setFolders(Object.entries(folders));
130
131
  return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: Object.entries(folders).map(([name, children], index) => /* @__PURE__ */ jsxRuntime.jsx(Folder, { name, subItems: children }, index)) });
131
132
  };
132
133
 
@@ -33,7 +33,8 @@ const useFileUpload = ({
33
33
  files,
34
34
  setFiles,
35
35
  isOpen: isManagerOpen,
36
- setIsOpen: setIsManagerOpen
36
+ setIsOpen: setIsManagerOpen,
37
+ uploadFiles
37
38
  } = ManagerContext.useManager();
38
39
  const [duplicates, setDuplicates] = React.useState([]);
39
40
  const [isOpen, setIsOpen] = React.useState(false);
@@ -83,31 +84,17 @@ const useFileUpload = ({
83
84
  uid: uuid.v4(),
84
85
  isFolder
85
86
  }));
86
- try {
87
- setFiles((prevFiles) => [...prevFiles, ...newFiles]);
88
- if (onAccept) {
89
- const updatedFiles = await onAccept(newFiles);
90
- setFiles((prevFiles) => updateFiles(prevFiles, updatedFiles));
91
- }
92
- } catch (e) {
93
- const updatedFiles = newFiles.map((f) => ({
94
- ...f,
95
- status: types.FileStatus.ERROR
96
- }));
97
- setFiles((prevFiles) => updateFiles(prevFiles, updatedFiles));
98
- }
87
+ uploadFiles({ onAccept, newFiles, updateFiles });
99
88
  };
100
89
  React.useEffect(() => {
101
90
  if (hasManager) {
102
91
  showManager?.({
103
- files,
104
92
  onClose: closeManager,
105
93
  onDelete: handleRemoveFile,
106
- open: isManagerOpen,
107
94
  uploadProgressText
108
95
  });
109
96
  }
110
- }, [isManagerOpen, files, handleRemoveFile, closeManager]);
97
+ }, [handleRemoveFile, closeManager]);
111
98
  const addMimeTypes = (key, acc) => {
112
99
  types.AcceptSpecificMap[key].forEach((mimeType) => {
113
100
  acc[mimeType] = [];
@@ -6,6 +6,7 @@ const useManagerHelpers = ({
6
6
  files
7
7
  }) => {
8
8
  const [min, setMin] = React.useState(false);
9
+ const [folders, setFolders] = React.useState();
9
10
  const folderFiles = React.useMemo(
10
11
  () => files?.filter((file) => file.isFolder) ?? [],
11
12
  [files]
@@ -14,11 +15,14 @@ const useManagerHelpers = ({
14
15
  () => files?.filter((file) => !file.isFolder) ?? [],
15
16
  [files]
16
17
  );
18
+ const totalLength = (regularFiles ?? []).length + (folders ?? []).length;
17
19
  return {
18
20
  min,
19
21
  setMin,
20
22
  folderFiles,
21
- regularFiles
23
+ regularFiles,
24
+ totalLength,
25
+ setFolders
22
26
  };
23
27
  };
24
28
 
@@ -3,22 +3,112 @@
3
3
  var jsxRuntime = require('react/jsx-runtime');
4
4
  var React = require('react');
5
5
  var Manager = require('../components/Uploader/Manager.js');
6
+ require('clsx');
7
+ require('../components/Accordion/context.js');
8
+ require('react-icons/lia');
9
+ require('@internationalized/date');
10
+ require('../components/Badge.js');
11
+ require('react-icons/md');
12
+ require('../components/Card.js');
13
+ require('../components/Button.js');
14
+ require('react-aria');
15
+ require('react-stately');
16
+ require('./MenubarContext.js');
17
+ require('./SnackbarProvider.js');
18
+ require('./CalendarProvider.js');
19
+ require('../components/Popover/Context.js');
20
+ require('react-dropzone');
21
+ require('uuid');
22
+ var types = require('../components/Uploader/types.js');
23
+ require('@floating-ui/react');
24
+ require('currency.js');
25
+ require('../components/Calendar/CalendarCell.js');
26
+ require('@tecsinapse/cortex-core');
27
+ require('react-icons/fa');
28
+ require('react-icons/io');
29
+ require('embla-carousel-react');
30
+ require('embla-carousel-autoplay');
31
+ require('../components/Checkbox.js');
32
+ require('../components/ColorPicker.js');
33
+ require('../components/DatePicker/DateSegment.js');
34
+ require('../components/DatePicker/DatePickerInputBase.js');
35
+ require('../components/GroupButton.js');
36
+ require('../components/Hint.js');
37
+ require('../components/Input/Box.js');
38
+ require('../components/Input/Face.js');
39
+ require('../components/Input/Left.js');
40
+ require('../components/Input/Mask.js');
41
+ require('../components/Input/Right.js');
42
+ require('../components/Input/Root.js');
43
+ require('../components/Input/Search.js');
44
+ require('../components/Menubar/Left.js');
45
+ require('../styles/menubar.js');
46
+ require('../components/Menubar/Right.js');
47
+ require('../components/Menubar/Dropdown.js');
48
+ require('../components/Menubar/MostUsed.js');
49
+ require('../components/Menubar/MostUsedItem.js');
50
+ require('../components/Menubar/Header.js');
51
+ require('../components/Menubar/Item.js');
52
+ require('./CategoriesContext.js');
53
+ require('../components/Menubar/SubItem.js');
54
+ require('../components/Modal.js');
55
+ require('../components/ProgressBar/Progress.js');
56
+ require('../components/RadioButton.js');
57
+ require('../components/Select/GroupedOptions.js');
58
+ require('../components/Select/context.js');
59
+ require('../components/Select/MultiGroupedOptions.js');
60
+ require('../components/Select/MultiOptions.js');
61
+ require('../components/Select/Options.js');
62
+ require('../components/Select/Trigger.js');
63
+ require('../components/Snackbar/BaseSnackbar.js');
64
+ require('../styles/stepNodeVariants.js');
65
+ require('../components/Tag.js');
66
+ require('../components/TextArea/Box.js');
67
+ require('../components/TextArea/Face.js');
68
+ require('../components/TextArea/Left.js');
69
+ require('../components/TextArea/Right.js');
70
+ require('../components/TextArea/Root.js');
71
+ require('../components/TimePicker/TimeFieldInput.js');
72
+ require('../components/Toggle.js');
73
+ require('../components/Tooltip.js');
74
+ require('react-icons/hi2');
75
+ require('react-icons/fa6');
76
+ require('react-dom');
6
77
 
7
78
  const ManagerContext = React.createContext(null);
8
79
  const ManagerProvider = ({ children }) => {
9
80
  const [props, setProps] = React.useState({});
10
81
  const [files, setFiles] = React.useState([]);
11
82
  const [isOpen, setIsOpen] = React.useState(false);
83
+ const uploadFiles = async ({
84
+ onAccept,
85
+ newFiles,
86
+ updateFiles
87
+ }) => {
88
+ try {
89
+ setFiles((prevFiles) => [...prevFiles, ...newFiles]);
90
+ if (onAccept) {
91
+ const updatedFiles = await onAccept(newFiles);
92
+ setFiles((prevFiles) => updateFiles(prevFiles, updatedFiles));
93
+ }
94
+ } catch (e) {
95
+ const updatedFiles = newFiles.map((f) => ({
96
+ ...f,
97
+ status: types.FileStatus.ERROR
98
+ }));
99
+ setFiles((prevFiles) => updateFiles(prevFiles, updatedFiles));
100
+ }
101
+ };
12
102
  const showManager = (_props) => {
13
103
  setProps(_props);
14
104
  };
15
105
  return /* @__PURE__ */ jsxRuntime.jsxs(
16
106
  ManagerContext.Provider,
17
107
  {
18
- value: { showManager, files, setFiles, isOpen, setIsOpen },
108
+ value: { showManager, files, setFiles, isOpen, setIsOpen, uploadFiles },
19
109
  children: [
20
110
  children,
21
- /* @__PURE__ */ jsxRuntime.jsx(Manager.Manager, { ...props })
111
+ /* @__PURE__ */ jsxRuntime.jsx(Manager.Manager, { files, open: isOpen, ...props })
22
112
  ]
23
113
  }
24
114
  );
@@ -15,7 +15,7 @@ const Manager = ({
15
15
  uploadProgressText = "Upload(s) in progress",
16
16
  onClose
17
17
  }) => {
18
- const { min, setMin, regularFiles, folderFiles } = useManagerHelpers({
18
+ const { min, setMin, regularFiles, folderFiles, totalLength, setFolders } = useManagerHelpers({
19
19
  files
20
20
  });
21
21
  return createPortal(
@@ -52,7 +52,7 @@ const Manager = ({
52
52
  className: clsx("w-full h-auto max-h-[300px] gap-mili", {
53
53
  hidden: min,
54
54
  "flex flex-col": !min,
55
- "pb-kilo overflow-scroll pr-deca": (files ?? []).length > 3
55
+ "pb-kilo overflow-scroll pr-deca": totalLength > 3
56
56
  }),
57
57
  children: [
58
58
  regularFiles.length > 0 ? regularFiles.map((file, index) => /* @__PURE__ */ jsx(
@@ -65,7 +65,7 @@ const Manager = ({
65
65
  },
66
66
  file.uid
67
67
  )) : null,
68
- folderFiles.length > 0 ? /* @__PURE__ */ jsx(FolderList, { files: folderFiles }) : null
68
+ folderFiles.length > 0 ? /* @__PURE__ */ jsx(FolderList, { files: folderFiles, setFolders }) : null
69
69
  ]
70
70
  }
71
71
  )
@@ -114,7 +114,7 @@ const Folder = ({ name, subItems }) => {
114
114
  /* @__PURE__ */ jsx(ProgressBar, { intent, infinite: loading })
115
115
  ] });
116
116
  };
117
- const FolderList = ({ files }) => {
117
+ const FolderList = ({ files, setFolders }) => {
118
118
  const folders = useMemo(() => {
119
119
  const segments = {};
120
120
  files.forEach((file) => {
@@ -125,6 +125,7 @@ const FolderList = ({ files }) => {
125
125
  });
126
126
  return segments;
127
127
  }, [files]);
128
+ setFolders(Object.entries(folders));
128
129
  return /* @__PURE__ */ jsx(Fragment, { children: Object.entries(folders).map(([name, children], index) => /* @__PURE__ */ jsx(Folder, { name, subItems: children }, index)) });
129
130
  };
130
131
 
@@ -31,7 +31,8 @@ const useFileUpload = ({
31
31
  files,
32
32
  setFiles,
33
33
  isOpen: isManagerOpen,
34
- setIsOpen: setIsManagerOpen
34
+ setIsOpen: setIsManagerOpen,
35
+ uploadFiles
35
36
  } = useManager();
36
37
  const [duplicates, setDuplicates] = useState([]);
37
38
  const [isOpen, setIsOpen] = useState(false);
@@ -81,31 +82,17 @@ const useFileUpload = ({
81
82
  uid: v4(),
82
83
  isFolder
83
84
  }));
84
- try {
85
- setFiles((prevFiles) => [...prevFiles, ...newFiles]);
86
- if (onAccept) {
87
- const updatedFiles = await onAccept(newFiles);
88
- setFiles((prevFiles) => updateFiles(prevFiles, updatedFiles));
89
- }
90
- } catch (e) {
91
- const updatedFiles = newFiles.map((f) => ({
92
- ...f,
93
- status: FileStatus.ERROR
94
- }));
95
- setFiles((prevFiles) => updateFiles(prevFiles, updatedFiles));
96
- }
85
+ uploadFiles({ onAccept, newFiles, updateFiles });
97
86
  };
98
87
  useEffect(() => {
99
88
  if (hasManager) {
100
89
  showManager?.({
101
- files,
102
90
  onClose: closeManager,
103
91
  onDelete: handleRemoveFile,
104
- open: isManagerOpen,
105
92
  uploadProgressText
106
93
  });
107
94
  }
108
- }, [isManagerOpen, files, handleRemoveFile, closeManager]);
95
+ }, [handleRemoveFile, closeManager]);
109
96
  const addMimeTypes = (key, acc) => {
110
97
  AcceptSpecificMap[key].forEach((mimeType) => {
111
98
  acc[mimeType] = [];
@@ -4,6 +4,7 @@ const useManagerHelpers = ({
4
4
  files
5
5
  }) => {
6
6
  const [min, setMin] = useState(false);
7
+ const [folders, setFolders] = useState();
7
8
  const folderFiles = useMemo(
8
9
  () => files?.filter((file) => file.isFolder) ?? [],
9
10
  [files]
@@ -12,11 +13,14 @@ const useManagerHelpers = ({
12
13
  () => files?.filter((file) => !file.isFolder) ?? [],
13
14
  [files]
14
15
  );
16
+ const totalLength = (regularFiles ?? []).length + (folders ?? []).length;
15
17
  return {
16
18
  min,
17
19
  setMin,
18
20
  folderFiles,
19
- regularFiles
21
+ regularFiles,
22
+ totalLength,
23
+ setFolders
20
24
  };
21
25
  };
22
26
 
@@ -1,22 +1,112 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import { createContext, useState, useContext } from 'react';
3
3
  import { Manager } from '../components/Uploader/Manager.js';
4
+ import 'clsx';
5
+ import '../components/Accordion/context.js';
6
+ import 'react-icons/lia';
7
+ import '@internationalized/date';
8
+ import '../components/Badge.js';
9
+ import 'react-icons/md';
10
+ import '../components/Card.js';
11
+ import '../components/Button.js';
12
+ import 'react-aria';
13
+ import 'react-stately';
14
+ import './MenubarContext.js';
15
+ import './SnackbarProvider.js';
16
+ import './CalendarProvider.js';
17
+ import '../components/Popover/Context.js';
18
+ import 'react-dropzone';
19
+ import 'uuid';
20
+ import { FileStatus } from '../components/Uploader/types.js';
21
+ import '@floating-ui/react';
22
+ import 'currency.js';
23
+ import '../components/Calendar/CalendarCell.js';
24
+ import '@tecsinapse/cortex-core';
25
+ import 'react-icons/fa';
26
+ import 'react-icons/io';
27
+ import 'embla-carousel-react';
28
+ import 'embla-carousel-autoplay';
29
+ import '../components/Checkbox.js';
30
+ import '../components/ColorPicker.js';
31
+ import '../components/DatePicker/DateSegment.js';
32
+ import '../components/DatePicker/DatePickerInputBase.js';
33
+ import '../components/GroupButton.js';
34
+ import '../components/Hint.js';
35
+ import '../components/Input/Box.js';
36
+ import '../components/Input/Face.js';
37
+ import '../components/Input/Left.js';
38
+ import '../components/Input/Mask.js';
39
+ import '../components/Input/Right.js';
40
+ import '../components/Input/Root.js';
41
+ import '../components/Input/Search.js';
42
+ import '../components/Menubar/Left.js';
43
+ import '../styles/menubar.js';
44
+ import '../components/Menubar/Right.js';
45
+ import '../components/Menubar/Dropdown.js';
46
+ import '../components/Menubar/MostUsed.js';
47
+ import '../components/Menubar/MostUsedItem.js';
48
+ import '../components/Menubar/Header.js';
49
+ import '../components/Menubar/Item.js';
50
+ import './CategoriesContext.js';
51
+ import '../components/Menubar/SubItem.js';
52
+ import '../components/Modal.js';
53
+ import '../components/ProgressBar/Progress.js';
54
+ import '../components/RadioButton.js';
55
+ import '../components/Select/GroupedOptions.js';
56
+ import '../components/Select/context.js';
57
+ import '../components/Select/MultiGroupedOptions.js';
58
+ import '../components/Select/MultiOptions.js';
59
+ import '../components/Select/Options.js';
60
+ import '../components/Select/Trigger.js';
61
+ import '../components/Snackbar/BaseSnackbar.js';
62
+ import '../styles/stepNodeVariants.js';
63
+ import '../components/Tag.js';
64
+ import '../components/TextArea/Box.js';
65
+ import '../components/TextArea/Face.js';
66
+ import '../components/TextArea/Left.js';
67
+ import '../components/TextArea/Right.js';
68
+ import '../components/TextArea/Root.js';
69
+ import '../components/TimePicker/TimeFieldInput.js';
70
+ import '../components/Toggle.js';
71
+ import '../components/Tooltip.js';
72
+ import 'react-icons/hi2';
73
+ import 'react-icons/fa6';
74
+ import 'react-dom';
4
75
 
5
76
  const ManagerContext = createContext(null);
6
77
  const ManagerProvider = ({ children }) => {
7
78
  const [props, setProps] = useState({});
8
79
  const [files, setFiles] = useState([]);
9
80
  const [isOpen, setIsOpen] = useState(false);
81
+ const uploadFiles = async ({
82
+ onAccept,
83
+ newFiles,
84
+ updateFiles
85
+ }) => {
86
+ try {
87
+ setFiles((prevFiles) => [...prevFiles, ...newFiles]);
88
+ if (onAccept) {
89
+ const updatedFiles = await onAccept(newFiles);
90
+ setFiles((prevFiles) => updateFiles(prevFiles, updatedFiles));
91
+ }
92
+ } catch (e) {
93
+ const updatedFiles = newFiles.map((f) => ({
94
+ ...f,
95
+ status: FileStatus.ERROR
96
+ }));
97
+ setFiles((prevFiles) => updateFiles(prevFiles, updatedFiles));
98
+ }
99
+ };
10
100
  const showManager = (_props) => {
11
101
  setProps(_props);
12
102
  };
13
103
  return /* @__PURE__ */ jsxs(
14
104
  ManagerContext.Provider,
15
105
  {
16
- value: { showManager, files, setFiles, isOpen, setIsOpen },
106
+ value: { showManager, files, setFiles, isOpen, setIsOpen, uploadFiles },
17
107
  children: [
18
108
  children,
19
- /* @__PURE__ */ jsx(Manager, { ...props })
109
+ /* @__PURE__ */ jsx(Manager, { files, open: isOpen, ...props })
20
110
  ]
21
111
  }
22
112
  );
@@ -1,4 +1,4 @@
1
1
  import { FileProps, FolderListProps, FolderProps } from './types';
2
2
  export declare const File: <T>({ file, index, onDelete, showDelete, }: FileProps<T>) => import("react/jsx-runtime").JSX.Element;
3
3
  export declare const Folder: ({ name, subItems }: FolderProps) => import("react/jsx-runtime").JSX.Element;
4
- export declare const FolderList: <T>({ files }: FolderListProps<T>) => import("react/jsx-runtime").JSX.Element;
4
+ export declare const FolderList: <T>({ files, setFolders }: FolderListProps<T>) => import("react/jsx-runtime").JSX.Element;
@@ -24,6 +24,13 @@ export interface FolderProps {
24
24
  }
25
25
  export interface FolderListProps<T> {
26
26
  files: FileUpload<T>[];
27
+ setFolders: React.Dispatch<React.SetStateAction<[
28
+ string,
29
+ {
30
+ status: string;
31
+ path: string;
32
+ }[]
33
+ ][] | undefined>>;
27
34
  }
28
35
  export interface FilesProps<T> {
29
36
  files: FileUpload<T>[];
@@ -8,7 +8,7 @@ interface UseFileUploadOptions<T> {
8
8
  VIDEO?: (typeof AcceptSpecificMap.VIDEO)[number][];
9
9
  TEXT?: (typeof AcceptSpecificMap.TEXT)[number][];
10
10
  };
11
- onAccept?: (files: FileUpload<T>[]) => Promise<FileUpload<T>[]>;
11
+ onAccept?: (files: FileUpload<T | unknown>[]) => Promise<FileUpload<T>[]>;
12
12
  onFileRejected?: (fileRejections: FileRejection[], event: DropEvent) => void;
13
13
  maxSize?: number;
14
14
  allowMultiple?: boolean;
@@ -6,4 +6,9 @@ export declare const useManagerHelpers: <T>({ files, }: {
6
6
  setMin: import("react").Dispatch<import("react").SetStateAction<boolean>>;
7
7
  folderFiles: FileUpload<T>[];
8
8
  regularFiles: FileUpload<T>[];
9
+ totalLength: number;
10
+ setFolders: import("react").Dispatch<import("react").SetStateAction<[string, {
11
+ status: string;
12
+ path: string;
13
+ }[]][] | undefined>>;
9
14
  };
@@ -1,11 +1,17 @@
1
1
  import { ReactNode } from 'react';
2
2
  import { FileUpload, ManagerProps } from '../components';
3
+ interface UploadFilesProps<T> {
4
+ onAccept?: (files: FileUpload<T>[]) => Promise<FileUpload<T>[]>;
5
+ newFiles: FileUpload<T>[];
6
+ updateFiles: any;
7
+ }
3
8
  interface ManagerContextProps<T> {
4
9
  showManager: (props: ManagerProps<unknown>) => void;
5
10
  files: FileUpload<T>[];
6
11
  setFiles: React.Dispatch<React.SetStateAction<FileUpload<unknown>[]>>;
7
12
  isOpen: boolean;
8
13
  setIsOpen: React.Dispatch<React.SetStateAction<boolean>>;
14
+ uploadFiles: (props: UploadFilesProps<T>) => void;
9
15
  }
10
16
  export declare const ManagerProvider: ({ children }: {
11
17
  children: ReactNode;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tecsinapse/cortex-react",
3
- "version": "1.15.0-beta.11",
3
+ "version": "1.15.0-beta.13",
4
4
  "description": "React components based in @tecsinapse/cortex-core",
5
5
  "license": "MIT",
6
6
  "main": "dist/esm/index.js",
@@ -48,5 +48,5 @@
48
48
  "react-icons": ">=5.2.0",
49
49
  "tailwind": ">=3.3.0"
50
50
  },
51
- "gitHead": "eaf3ff909acf671349c31b4b9f2e070cf07d0f0e"
51
+ "gitHead": "fcf96ee7829502dc73a02e3e9b26d9f729a1298e"
52
52
  }