@bit.rhplus/ui2.upload-files-modal 0.0.26 → 0.0.28

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/index.js CHANGED
@@ -1,24 +1,102 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  /* eslint-disable */
3
3
  import React from 'react';
4
4
  import DraggableModal from '@bit.rhplus/draggable-modal';
5
- import { Card, Progress, List, Tag, Button, Typography, Empty } from 'antd';
6
- import { CheckCircleOutlined, CloseCircleOutlined, SyncOutlined, FileTextOutlined, InboxOutlined, } from '@ant-design/icons';
5
+ import { Progress, List, Tag, Button, Empty, Space } from 'antd';
6
+ import { CheckCircleOutlined, CloseCircleOutlined, SyncOutlined, FileTextOutlined, InboxOutlined, EyeOutlined, DeleteOutlined, PlusOutlined, } from '@ant-design/icons';
7
7
  import prettyBytes from 'pretty-bytes';
8
8
  import useUploadFiles from './useUploadFiles';
9
- //zmeny
10
- const { Text } = Typography;
11
9
  const UploadFilesModal = React.forwardRef((props, ref) => {
12
10
  const { api, accessToken, folderPath = null, getContainer = () => document.body, } = props;
13
11
  const { uploadFiles, getUploadedFiles } = useUploadFiles(api, accessToken, folderPath);
14
12
  const [opened, setOpened] = React.useState(false);
15
13
  const [progressFiles, setProgressFiles] = React.useState({});
16
- const { files: uploadedFiles = [], current = 0, total = 0 } = progressFiles || {};
14
+ const [isUploading, setIsUploading] = React.useState(false);
15
+ const fileInputRef = React.useRef(null);
16
+ const { files: uploadedFiles = [] } = progressFiles || {};
17
17
  const onProgress = (progress) => setProgressFiles(progress);
18
- const handleFilesSelected = (selectedFiles) => {
18
+ const handleFilesSelected = (selectedFilesOrEvent) => {
19
+ let selectedFiles = selectedFilesOrEvent;
20
+ // Handle both File objects and event objects
21
+ if (selectedFilesOrEvent?.target?.files) {
22
+ selectedFiles = selectedFilesOrEvent.target.files;
23
+ }
24
+ if (!selectedFiles) {
25
+ return;
26
+ }
27
+ // Convert to array if needed
28
+ const newFiles = Array.isArray(selectedFiles)
29
+ ? selectedFiles
30
+ : Array.from(selectedFiles);
31
+ if (newFiles.length === 0) {
32
+ return;
33
+ }
19
34
  setOpened(true);
20
- uploadFiles(selectedFiles, onProgress);
35
+ // Add files to list with 'waiting' state - don't start upload yet
36
+ const filesToAdd = newFiles.map(f => ({
37
+ name: f.name,
38
+ size: f.size,
39
+ type: f.type,
40
+ state: 'waiting',
41
+ error: null,
42
+ fileObject: f,
43
+ }));
44
+ setProgressFiles(prev => ({
45
+ current: 0,
46
+ total: (prev.total || 0) + filesToAdd.length,
47
+ files: [...(prev.files || []), ...filesToAdd],
48
+ }));
49
+ };
50
+ const handleRemoveFile = (index) => {
51
+ setProgressFiles(prev => ({
52
+ ...prev,
53
+ files: prev.files.filter((_, i) => i !== index),
54
+ }));
55
+ };
56
+ const handleAddMoreFiles = () => {
57
+ fileInputRef.current?.click();
58
+ };
59
+ const handleFileInputChange = (e) => {
60
+ const files = e.target.files;
61
+ if (files && files.length > 0) {
62
+ handleFilesSelected(files);
63
+ }
64
+ // Reset input value so same file can be selected again
65
+ e.target.value = '';
66
+ };
67
+ const handleViewFile = (file) => {
68
+ if (file.state === 'success' && file.fileKey) {
69
+ // Open uploaded file from server
70
+ const baseUrl = window.location.origin;
71
+ const url = `${baseUrl}/api/files/${file.fileKey}`;
72
+ window.open(url, '_blank');
73
+ }
74
+ else if (file.fileObject) {
75
+ // Preview local file before upload
76
+ const url = URL.createObjectURL(file.fileObject);
77
+ window.open(url, '_blank');
78
+ // Cleanup after 60 seconds
79
+ setTimeout(() => URL.revokeObjectURL(url), 60000);
80
+ }
81
+ };
82
+ const handleStartUpload = async () => {
83
+ const filesToUpload = uploadedFiles
84
+ .filter(f => f.state === 'waiting')
85
+ .map(f => f.fileObject);
86
+ if (filesToUpload.length === 0)
87
+ return;
88
+ setIsUploading(true);
89
+ try {
90
+ await uploadFiles(filesToUpload, onProgress);
91
+ }
92
+ finally {
93
+ setIsUploading(false);
94
+ }
21
95
  };
96
+ // Determine if upload button should be disabled
97
+ const canUpload = uploadedFiles.length > 0
98
+ && uploadedFiles.some(f => f.state === 'waiting')
99
+ && !isUploading;
22
100
  React.useImperativeHandle(ref, () => ({
23
101
  handleFilesSelected,
24
102
  getUploadedFiles,
@@ -68,30 +146,28 @@ const UploadFilesModal = React.forwardRef((props, ref) => {
68
146
  return null;
69
147
  }
70
148
  };
71
- return (_jsx(DraggableModal, { open: opened, onCancel: () => setOpened(false), getContainer: getContainer, width: "700px", title: _jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: 8 }, children: [_jsx(InboxOutlined, { style: { fontSize: 20, color: '#1890ff' } }), _jsx("span", { children: "Nahr\u00E1v\u00E1n\u00ED soubor\u016F" }), stats.total > 0 && (_jsxs("span", { style: { fontSize: 12, fontWeight: 'normal', color: '#999' }, children: ["(", stats.success + stats.error, "/", stats.total, ")"] }))] }), footer: () => (_jsx("div", { style: { display: 'flex', justifyContent: 'flex-end', alignItems: 'center' }, children: _jsx(Button, { type: "primary", onClick: () => setOpened(false), children: "Zav\u0159\u00EDt" }) })), maskClosable: false, children: _jsxs("div", { style: { padding: '16px 0' }, children: [uploadedFiles.length > 0 && (_jsxs(Card, { size: "small", style: { marginBottom: 16 }, children: [_jsx("div", { style: { marginBottom: 8 }, children: _jsx(Text, { strong: true, children: "Celkov\u00FD pr\u016Fb\u011Bh" }) }), _jsx(Progress, { percent: overallProgress, strokeColor: {
72
- '0%': '#108ee9',
73
- '100%': '#87d068',
74
- }, status: stats.error > 0 && stats.success === 0 ? 'exception' : undefined }), _jsxs("div", { style: {
75
- marginTop: 12,
76
- display: 'grid',
77
- gridTemplateColumns: 'repeat(4, 1fr)',
78
- gap: 8,
79
- fontSize: 12,
80
- }, children: [_jsxs("div", { children: [_jsx("div", { style: { color: '#999' }, children: "Celkem" }), _jsx("div", { style: { fontWeight: 'bold', fontSize: 16 }, children: stats.total })] }), _jsxs("div", { children: [_jsx("div", { style: { color: '#52c41a' }, children: "\u00DAsp\u011B\u0161n\u00E9" }), _jsx("div", { style: { fontWeight: 'bold', fontSize: 16, color: '#52c41a' }, children: stats.success })] }), _jsxs("div", { children: [_jsx("div", { style: { color: '#ff4d4f' }, children: "Chyby" }), _jsx("div", { style: { fontWeight: 'bold', fontSize: 16, color: '#ff4d4f' }, children: stats.error })] }), _jsxs("div", { children: [_jsx("div", { style: { color: '#1890ff' }, children: "Prob\u00EDh\u00E1" }), _jsx("div", { style: { fontWeight: 'bold', fontSize: 16, color: '#1890ff' }, children: stats.loading })] })] })] })), uploadedFiles.length > 0 ? (_jsx(List, { dataSource: uploadedFiles, renderItem: (file) => (_jsx(List.Item, { style: {
81
- padding: '12px 16px',
82
- background: file.state === 'error' ? '#fff2f0' : '#fafafa',
83
- borderRadius: 4,
84
- marginBottom: 8,
85
- border: '1px solid',
86
- borderColor: file.state === 'error' ? '#ffccc7' : '#d9d9d9',
87
- }, children: _jsx(List.Item.Meta, { avatar: getStatusIcon(file.state), title: _jsxs("div", { style: {
88
- display: 'flex',
89
- justifyContent: 'space-between',
90
- alignItems: 'center',
91
- }, children: [_jsx("span", { style: {
92
- fontWeight: 500,
93
- color: file.state === 'error' ? '#ff4d4f' : '#262626',
94
- }, children: file.name }), getStatusTag(file.state)] }), description: _jsxs("div", { style: { display: 'flex', gap: 16, fontSize: 12, flexWrap: 'wrap' }, children: [_jsxs("span", { children: ["Velikost: ", prettyBytes(file.size)] }), _jsxs("span", { children: ["Typ: ", file.type || 'neznámý'] }), file.error && (_jsxs("span", { style: { color: '#ff4d4f', fontWeight: 500 }, children: ["Chyba: ", file.error] }))] }) }) })) })) : (_jsx(Empty, { image: Empty.PRESENTED_IMAGE_SIMPLE, description: "\u017D\u00E1dn\u00E9 soubory k nahr\u00E1n\u00ED" }))] }) }));
149
+ return (_jsx(DraggableModal, { open: opened, onCancel: () => setOpened(false), getContainer: getContainer, width: "700px", title: _jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: 8 }, children: [_jsx(InboxOutlined, { style: { fontSize: 20, color: '#1890ff' } }), _jsx("span", { children: "Nahr\u00E1v\u00E1n\u00ED soubor\u016F" }), stats.total > 0 && (_jsxs("span", { style: { fontSize: 12, fontWeight: 'normal', color: '#999' }, children: ["(", stats.success + stats.error, "/", stats.total, ")"] }))] }), footer: () => (_jsxs("div", { style: { display: 'flex', justifyContent: 'space-between', alignItems: 'center' }, children: [_jsx("div", {}), _jsxs(Space, { children: [_jsx(Button, { type: "primary", onClick: handleStartUpload, disabled: !canUpload, loading: isUploading, children: "Nahr\u00E1t soubory" }), _jsx(Button, { onClick: () => setOpened(false), children: "Zav\u0159\u00EDt" })] })] })), maskClosable: false, children: _jsxs("div", { style: { padding: '16px 0' }, children: [uploadedFiles.length > 0 && (_jsx("div", { style: { marginBottom: 16 }, children: _jsx(Progress, { percent: overallProgress, strokeColor: {
150
+ '0%': '#108ee9',
151
+ '100%': '#87d068',
152
+ }, status: stats.error > 0 && stats.success === 0 ? 'exception' : undefined }) })), uploadedFiles.length > 0 ? (_jsxs(_Fragment, { children: [_jsx(List, { dataSource: uploadedFiles, renderItem: (file, index) => (_jsx(List.Item, { style: {
153
+ padding: '12px 16px',
154
+ background: file.state === 'error' ? '#fff2f0' : '#fafafa',
155
+ borderRadius: 4,
156
+ marginBottom: 8,
157
+ border: '1px solid',
158
+ borderColor: file.state === 'error' ? '#ffccc7' : '#d9d9d9',
159
+ }, children: _jsx(List.Item.Meta, { avatar: getStatusIcon(file.state), title: _jsxs("div", { style: {
160
+ display: 'flex',
161
+ justifyContent: 'space-between',
162
+ alignItems: 'center',
163
+ gap: 8,
164
+ }, children: [_jsx("span", { style: {
165
+ fontWeight: 500,
166
+ color: file.state === 'error' ? '#ff4d4f' : '#262626',
167
+ flex: 1,
168
+ overflow: 'hidden',
169
+ textOverflow: 'ellipsis',
170
+ }, children: file.name }), _jsxs(Space, { size: "small", children: [getStatusTag(file.state), _jsx(Button, { type: "text", size: "small", icon: _jsx(EyeOutlined, {}), onClick: () => handleViewFile(file), title: "Zobrazit soubor" }), _jsx(Button, { type: "text", size: "small", danger: true, icon: _jsx(DeleteOutlined, {}), onClick: () => handleRemoveFile(index), title: "Odstranit soubor" })] })] }), description: _jsxs("div", { style: { display: 'flex', gap: 16, fontSize: 12, flexWrap: 'wrap' }, children: [_jsxs("span", { children: ["Velikost: ", prettyBytes(file.size)] }), _jsxs("span", { children: ["Typ: ", file.type || 'neznámý'] }), file.error && (_jsxs("span", { style: { color: '#ff4d4f', fontWeight: 500 }, children: ["Chyba: ", file.error] }))] }) }) })) }), _jsx(Button, { type: "dashed", block: true, icon: _jsx(PlusOutlined, {}), onClick: handleAddMoreFiles, style: { marginTop: 12 }, children: "P\u0159idat dal\u0161\u00ED soubor" }), _jsx("input", { ref: fileInputRef, type: "file", multiple: true, onChange: handleFileInputChange, style: { display: 'none' } })] })) : (_jsx(Empty, { image: Empty.PRESENTED_IMAGE_SIMPLE, description: "\u017D\u00E1dn\u00E9 soubory k nahr\u00E1n\u00ED" }))] }) }));
95
171
  });
96
172
  UploadFilesModal.displayName = 'UploadFilesModal';
97
173
  export default UploadFilesModal;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.jsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.jsx"],"names":[],"mappings":"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"}
package/index.jsx CHANGED
@@ -1,20 +1,20 @@
1
1
  /* eslint-disable */
2
2
  import React from 'react';
3
3
  import DraggableModal from '@bit.rhplus/draggable-modal';
4
- import { Card, Progress, List, Tag, Button, Typography, Empty } from 'antd';
4
+ import { Progress, List, Tag, Button, Empty, Space } from 'antd';
5
5
  import {
6
6
  CheckCircleOutlined,
7
7
  CloseCircleOutlined,
8
8
  SyncOutlined,
9
9
  FileTextOutlined,
10
10
  InboxOutlined,
11
+ EyeOutlined,
12
+ DeleteOutlined,
13
+ PlusOutlined,
11
14
  } from '@ant-design/icons';
12
15
  import prettyBytes from 'pretty-bytes';
13
16
  import useUploadFiles from './useUploadFiles';
14
17
 
15
- //zmeny
16
- const { Text } = Typography;
17
-
18
18
  const UploadFilesModal = React.forwardRef((props, ref) => {
19
19
  const {
20
20
  api,
@@ -26,16 +26,107 @@ const UploadFilesModal = React.forwardRef((props, ref) => {
26
26
  const { uploadFiles, getUploadedFiles } = useUploadFiles(api, accessToken, folderPath);
27
27
  const [opened, setOpened] = React.useState(false);
28
28
  const [progressFiles, setProgressFiles] = React.useState({});
29
+ const [isUploading, setIsUploading] = React.useState(false);
30
+ const fileInputRef = React.useRef(null);
29
31
 
30
- const { files: uploadedFiles = [], current = 0, total = 0 } = progressFiles || {};
32
+ const { files: uploadedFiles = [] } = progressFiles || {};
31
33
 
32
34
  const onProgress = (progress) => setProgressFiles(progress);
33
35
 
34
- const handleFilesSelected = (selectedFiles) => {
36
+ const handleFilesSelected = (selectedFilesOrEvent) => {
37
+ let selectedFiles = selectedFilesOrEvent;
38
+
39
+ // Handle both File objects and event objects
40
+ if (selectedFilesOrEvent?.target?.files) {
41
+ selectedFiles = selectedFilesOrEvent.target.files;
42
+ }
43
+
44
+ if (!selectedFiles) {
45
+ return;
46
+ }
47
+
48
+ // Convert to array if needed
49
+ const newFiles = Array.isArray(selectedFiles)
50
+ ? selectedFiles
51
+ : Array.from(selectedFiles);
52
+
53
+ if (newFiles.length === 0) {
54
+ return;
55
+ }
56
+
35
57
  setOpened(true);
36
- uploadFiles(selectedFiles, onProgress);
58
+ // Add files to list with 'waiting' state - don't start upload yet
59
+ const filesToAdd = newFiles.map(f => ({
60
+ name: f.name,
61
+ size: f.size,
62
+ type: f.type,
63
+ state: 'waiting',
64
+ error: null,
65
+ fileObject: f,
66
+ }));
67
+
68
+ setProgressFiles(prev => ({
69
+ current: 0,
70
+ total: (prev.total || 0) + filesToAdd.length,
71
+ files: [...(prev.files || []), ...filesToAdd],
72
+ }));
73
+ };
74
+
75
+ const handleRemoveFile = (index) => {
76
+ setProgressFiles(prev => ({
77
+ ...prev,
78
+ files: prev.files.filter((_, i) => i !== index),
79
+ }));
80
+ };
81
+
82
+ const handleAddMoreFiles = () => {
83
+ fileInputRef.current?.click();
84
+ };
85
+
86
+ const handleFileInputChange = (e) => {
87
+ const files = e.target.files;
88
+ if (files && files.length > 0) {
89
+ handleFilesSelected(files);
90
+ }
91
+ // Reset input value so same file can be selected again
92
+ e.target.value = '';
93
+ };
94
+
95
+ const handleViewFile = (file) => {
96
+ if (file.state === 'success' && file.fileKey) {
97
+ // Open uploaded file from server
98
+ const baseUrl = window.location.origin;
99
+ const url = `${baseUrl}/api/files/${file.fileKey}`;
100
+ window.open(url, '_blank');
101
+ } else if (file.fileObject) {
102
+ // Preview local file before upload
103
+ const url = URL.createObjectURL(file.fileObject);
104
+ window.open(url, '_blank');
105
+ // Cleanup after 60 seconds
106
+ setTimeout(() => URL.revokeObjectURL(url), 60000);
107
+ }
108
+ };
109
+
110
+ const handleStartUpload = async () => {
111
+ const filesToUpload = uploadedFiles
112
+ .filter(f => f.state === 'waiting')
113
+ .map(f => f.fileObject);
114
+
115
+ if (filesToUpload.length === 0) return;
116
+
117
+ setIsUploading(true);
118
+ try {
119
+ await uploadFiles(filesToUpload, onProgress);
120
+ } finally {
121
+ setIsUploading(false);
122
+ }
37
123
  };
38
124
 
125
+ // Determine if upload button should be disabled
126
+ const canUpload = uploadedFiles.length > 0
127
+ && uploadedFiles.some(f => f.state === 'waiting')
128
+ && !isUploading;
129
+
39
130
  React.useImperativeHandle(ref, () => ({
40
131
  handleFilesSelected,
41
132
  getUploadedFiles,
@@ -127,21 +218,29 @@ const UploadFilesModal = React.forwardRef((props, ref) => {
127
218
  </div>
128
219
  }
129
220
  footer={() => (
130
- <div style={{ display: 'flex', justifyContent: 'flex-end', alignItems: 'center' }}>
131
- <Button type="primary" onClick={() => setOpened(false)}>
132
- Zavřít
133
- </Button>
221
+ <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>
222
+ <div />
223
+ <Space>
224
+ <Button
225
+ type="primary"
226
+ onClick={handleStartUpload}
227
+ disabled={!canUpload}
228
+ loading={isUploading}
229
+ >
230
+ Nahrát soubory
231
+ </Button>
232
+ <Button onClick={() => setOpened(false)}>
233
+ Zavřít
234
+ </Button>
235
+ </Space>
134
236
  </div>
135
237
  )}
136
238
  maskClosable={false}
137
239
  >
138
240
  <div style={{ padding: '16px 0' }}>
139
- {/* Overall Progress */}
241
+ {/* Overall Progress - Minimized */}
140
242
  {uploadedFiles.length > 0 && (
141
- <Card size="small" style={{ marginBottom: 16 }}>
142
- <div style={{ marginBottom: 8 }}>
143
- <Text strong>Celkový průběh</Text>
144
- </div>
243
+ <div style={{ marginBottom: 16 }}>
145
244
  <Progress
146
245
  percent={overallProgress}
147
246
  strokeColor={{
@@ -150,92 +249,100 @@ const UploadFilesModal = React.forwardRef((props, ref) => {
150
249
  }}
151
250
  status={stats.error > 0 && stats.success === 0 ? 'exception' : undefined}
152
251
  />
153
- <div
154
- style={{
155
- marginTop: 12,
156
- display: 'grid',
157
- gridTemplateColumns: 'repeat(4, 1fr)',
158
- gap: 8,
159
- fontSize: 12,
160
- }}
161
- >
162
- <div>
163
- <div style={{ color: '#999' }}>Celkem</div>
164
- <div style={{ fontWeight: 'bold', fontSize: 16 }}>{stats.total}</div>
165
- </div>
166
- <div>
167
- <div style={{ color: '#52c41a' }}>Úspěšné</div>
168
- <div style={{ fontWeight: 'bold', fontSize: 16, color: '#52c41a' }}>
169
- {stats.success}
170
- </div>
171
- </div>
172
- <div>
173
- <div style={{ color: '#ff4d4f' }}>Chyby</div>
174
- <div style={{ fontWeight: 'bold', fontSize: 16, color: '#ff4d4f' }}>
175
- {stats.error}
176
- </div>
177
- </div>
178
- <div>
179
- <div style={{ color: '#1890ff' }}>Probíhá</div>
180
- <div style={{ fontWeight: 'bold', fontSize: 16, color: '#1890ff' }}>
181
- {stats.loading}
182
- </div>
183
- </div>
184
- </div>
185
- </Card>
252
+ </div>
186
253
  )}
187
254
 
188
255
  {/* File List */}
189
256
  {uploadedFiles.length > 0 ? (
190
- <List
191
- dataSource={uploadedFiles}
192
- renderItem={(file) => (
193
- <List.Item
194
- style={{
195
- padding: '12px 16px',
196
- background: file.state === 'error' ? '#fff2f0' : '#fafafa',
197
- borderRadius: 4,
198
- marginBottom: 8,
199
- border: '1px solid',
200
- borderColor: file.state === 'error' ? '#ffccc7' : '#d9d9d9',
201
- }}
202
- >
203
- <List.Item.Meta
204
- avatar={getStatusIcon(file.state)}
205
- title={
206
- <div
207
- style={{
208
- display: 'flex',
209
- justifyContent: 'space-between',
210
- alignItems: 'center',
211
- }}
212
- >
213
- <span
257
+ <>
258
+ <List
259
+ dataSource={uploadedFiles}
260
+ renderItem={(file, index) => (
261
+ <List.Item
262
+ style={{
263
+ padding: '12px 16px',
264
+ background: file.state === 'error' ? '#fff2f0' : '#fafafa',
265
+ borderRadius: 4,
266
+ marginBottom: 8,
267
+ border: '1px solid',
268
+ borderColor: file.state === 'error' ? '#ffccc7' : '#d9d9d9',
269
+ }}
270
+ >
271
+ <List.Item.Meta
272
+ avatar={getStatusIcon(file.state)}
273
+ title={
274
+ <div
214
275
  style={{
215
- fontWeight: 500,
216
- color: file.state === 'error' ? '#ff4d4f' : '#262626',
276
+ display: 'flex',
277
+ justifyContent: 'space-between',
278
+ alignItems: 'center',
279
+ gap: 8,
217
280
  }}
218
281
  >
219
- {file.name}
220
- </span>
221
- {getStatusTag(file.state)}
222
- </div>
223
- }
224
- description={
225
- <div style={{ display: 'flex', gap: 16, fontSize: 12, flexWrap: 'wrap' }}>
226
- <span>Velikost: {prettyBytes(file.size)}</span>
227
- <span>Typ: {file.type || 'neznámý'}</span>
228
- {file.error && (
229
- <span style={{ color: '#ff4d4f', fontWeight: 500 }}>
230
- Chyba: {file.error}
282
+ <span
283
+ style={{
284
+ fontWeight: 500,
285
+ color: file.state === 'error' ? '#ff4d4f' : '#262626',
286
+ flex: 1,
287
+ overflow: 'hidden',
288
+ textOverflow: 'ellipsis',
289
+ }}
290
+ >
291
+ {file.name}
231
292
  </span>
232
- )}
233
- </div>
234
- }
235
- />
236
- </List.Item>
237
- )}
238
- />
293
+ <Space size="small">
294
+ {getStatusTag(file.state)}
295
+ <Button
296
+ type="text"
297
+ size="small"
298
+ icon={<EyeOutlined />}
299
+ onClick={() => handleViewFile(file)}
300
+ title="Zobrazit soubor"
301
+ />
302
+ <Button
303
+ type="text"
304
+ size="small"
305
+ danger
306
+ icon={<DeleteOutlined />}
307
+ onClick={() => handleRemoveFile(index)}
308
+ title="Odstranit soubor"
309
+ />
310
+ </Space>
311
+ </div>
312
+ }
313
+ description={
314
+ <div style={{ display: 'flex', gap: 16, fontSize: 12, flexWrap: 'wrap' }}>
315
+ <span>Velikost: {prettyBytes(file.size)}</span>
316
+ <span>Typ: {file.type || 'neznámý'}</span>
317
+ {file.error && (
318
+ <span style={{ color: '#ff4d4f', fontWeight: 500 }}>
319
+ Chyba: {file.error}
320
+ </span>
321
+ )}
322
+ </div>
323
+ }
324
+ />
325
+ </List.Item>
326
+ )}
327
+ />
328
+ {/* Add more files button */}
329
+ <Button
330
+ type="dashed"
331
+ block
332
+ icon={<PlusOutlined />}
333
+ onClick={handleAddMoreFiles}
334
+ style={{ marginTop: 12 }}
335
+ >
336
+ Přidat další soubor
337
+ </Button>
338
+ <input
339
+ ref={fileInputRef}
340
+ type="file"
341
+ multiple
342
+ onChange={handleFileInputChange}
343
+ style={{ display: 'none' }}
344
+ />
345
+ </>
239
346
  ) : (
240
347
  <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} description="Žádné soubory k nahrání" />
241
348
  )}
package/package.json CHANGED
@@ -1,19 +1,19 @@
1
1
  {
2
2
  "name": "@bit.rhplus/ui2.upload-files-modal",
3
- "version": "0.0.26",
3
+ "version": "0.0.28",
4
4
  "homepage": "https://bit.cloud/remote-scope/ui2/upload-files-modal",
5
5
  "main": "dist/index.js",
6
6
  "componentId": {
7
7
  "scope": "remote-scope",
8
8
  "name": "ui2/upload-files-modal",
9
- "version": "0.0.26"
9
+ "version": "0.0.28"
10
10
  },
11
11
  "dependencies": {
12
12
  "@ant-design/icons": "^5.4.0",
13
13
  "antd": "^5.20.6",
14
14
  "pretty-bytes": "^6.1.1",
15
15
  "@bit.rhplus/draggable-modal": "0.0.12",
16
- "@bit.rhplus/data": "0.0.76"
16
+ "@bit.rhplus/data": "0.0.78"
17
17
  },
18
18
  "devDependencies": {
19
19
  "@teambit/react.react-env": "1.0.132"