albinasoft-ui-package 1.0.60 → 1.0.62

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.
@@ -0,0 +1,34 @@
1
+ import React from "react";
2
+ export declare enum AllowedTypes {
3
+ IMAGE = "image",
4
+ FILE = "file",
5
+ ALL = "all"
6
+ }
7
+ export interface CustomFileUploaderProps {
8
+ /** Sunucuya dosyaların yükleneceği URL */
9
+ url: string;
10
+ /** Çoklu dosya seçimine izin verilsin mi? */
11
+ multi: boolean;
12
+ /** İzin verilen dosya türü */
13
+ allowedTypes: AllowedTypes;
14
+ /** Eğer multi true ise aynı anda seçilebilecek maksimum dosya sayısı */
15
+ maxFile: number;
16
+ /** Her bir dosya için maksimum boyut (byte cinsinden) */
17
+ maxSize: number;
18
+ /**
19
+ * Opsiyonel: Yükleme tamamlandığında dönen dosya isimlerini almak için callback.
20
+ */
21
+ onUploadComplete?: (uploadedFileNames: string[]) => void;
22
+ /**
23
+ * Opsiyonel: Yüklenmiş bir dosya kaldırıldığında, dosya adı bilgisini parent bileşene bildirmek için callback.
24
+ */
25
+ onRemoveUploaded?: (fileName: string) => void;
26
+ /** Opsiyonel: Yükleyici için gösterilecek label */
27
+ label?: string;
28
+ /**
29
+ * Opsiyonel: Pending (henüz yüklenmemiş) dosya sayısını parent'a iletecek callback.
30
+ */
31
+ onPendingChange?: (pendingFileCount: number) => void;
32
+ }
33
+ declare const CustomFileUploader: React.FC<CustomFileUploaderProps>;
34
+ export default CustomFileUploader;
@@ -0,0 +1,367 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ var desc = Object.getOwnPropertyDescriptor(m, k);
16
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
17
+ desc = { enumerable: true, get: function() { return m[k]; } };
18
+ }
19
+ Object.defineProperty(o, k2, desc);
20
+ }) : (function(o, m, k, k2) {
21
+ if (k2 === undefined) k2 = k;
22
+ o[k2] = m[k];
23
+ }));
24
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
25
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
26
+ }) : function(o, v) {
27
+ o["default"] = v;
28
+ });
29
+ var __importStar = (this && this.__importStar) || function (mod) {
30
+ if (mod && mod.__esModule) return mod;
31
+ var result = {};
32
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
33
+ __setModuleDefault(result, mod);
34
+ return result;
35
+ };
36
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
37
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
38
+ return new (P || (P = Promise))(function (resolve, reject) {
39
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
40
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
41
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
42
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
43
+ });
44
+ };
45
+ var __generator = (this && this.__generator) || function (thisArg, body) {
46
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
47
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
48
+ function verb(n) { return function (v) { return step([n, v]); }; }
49
+ function step(op) {
50
+ if (f) throw new TypeError("Generator is already executing.");
51
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
52
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
53
+ if (y = 0, t) op = [op[0] & 2, t.value];
54
+ switch (op[0]) {
55
+ case 0: case 1: t = op; break;
56
+ case 4: _.label++; return { value: op[1], done: false };
57
+ case 5: _.label++; y = op[1]; op = [0]; continue;
58
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
59
+ default:
60
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
61
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
62
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
63
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
64
+ if (t[2]) _.ops.pop();
65
+ _.trys.pop(); continue;
66
+ }
67
+ op = body.call(thisArg, _);
68
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
69
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
70
+ }
71
+ };
72
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
73
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
74
+ if (ar || !(i in from)) {
75
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
76
+ ar[i] = from[i];
77
+ }
78
+ }
79
+ return to.concat(ar || Array.prototype.slice.call(from));
80
+ };
81
+ Object.defineProperty(exports, "__esModule", { value: true });
82
+ exports.AllowedTypes = void 0;
83
+ // CustomFileUploader.tsx
84
+ var react_1 = __importStar(require("react"));
85
+ var react_toastify_1 = require("react-toastify");
86
+ var fa_1 = require("react-icons/fa");
87
+ // ====================
88
+ // Tip Tanımlamaları
89
+ // ====================
90
+ var AllowedTypes;
91
+ (function (AllowedTypes) {
92
+ AllowedTypes["IMAGE"] = "image";
93
+ AllowedTypes["FILE"] = "file";
94
+ AllowedTypes["ALL"] = "all";
95
+ })(AllowedTypes = exports.AllowedTypes || (exports.AllowedTypes = {}));
96
+ // ====================
97
+ // Stil Ayarları
98
+ // ====================
99
+ var dropAreaStyle = {
100
+ border: "2px dashed #007bff",
101
+ borderRadius: "5px",
102
+ padding: "20px",
103
+ textAlign: "center",
104
+ cursor: "pointer",
105
+ position: "relative",
106
+ minHeight: "150px",
107
+ };
108
+ var previewContainerStyle = {
109
+ display: "flex",
110
+ flexWrap: "wrap",
111
+ gap: "10px",
112
+ justifyContent: "center",
113
+ };
114
+ var previewItemStyle = {
115
+ position: "relative",
116
+ width: "100px",
117
+ height: "100px",
118
+ border: "1px solid #ccc",
119
+ overflow: "hidden",
120
+ };
121
+ var removeButtonStyle = {
122
+ position: "absolute",
123
+ top: "2px",
124
+ right: "2px",
125
+ background: "rgba(255,255,255,0.7)",
126
+ border: "none",
127
+ cursor: "pointer",
128
+ borderRadius: "50%",
129
+ zIndex: 2,
130
+ };
131
+ var tickOverlayStyle = {
132
+ position: "absolute",
133
+ bottom: "2px",
134
+ right: "2px",
135
+ backgroundColor: "rgba(0, 128, 0, 0.7)",
136
+ color: "white",
137
+ borderRadius: "50%",
138
+ width: "24px",
139
+ height: "24px",
140
+ display: "flex",
141
+ justifyContent: "center",
142
+ alignItems: "center",
143
+ zIndex: 2,
144
+ };
145
+ // Dosya ikonları
146
+ var fileTypeIcons = {
147
+ ".doc": react_1.default.createElement(fa_1.FaFileWord, null),
148
+ ".docx": react_1.default.createElement(fa_1.FaFileWord, null),
149
+ ".xls": react_1.default.createElement(fa_1.FaFileExcel, null),
150
+ ".xlsx": react_1.default.createElement(fa_1.FaFileExcel, null),
151
+ ".pdf": react_1.default.createElement(fa_1.FaFilePdf, null),
152
+ ".txt": react_1.default.createElement(fa_1.FaFilePdf, null),
153
+ };
154
+ var defaultFileIcon = react_1.default.createElement(fa_1.FaFile, null);
155
+ // İzin verilen resim uzantıları
156
+ var allowedImageExtensions = [".jpg", ".jpeg", ".png", ".gif", ".bmp", ".webp"];
157
+ // ====================
158
+ // Yardımcı Fonksiyonlar
159
+ // ====================
160
+ var getFileExtension = function (file) {
161
+ var dotIndex = file.name.lastIndexOf(".");
162
+ return dotIndex !== -1 ? file.name.substring(dotIndex).toLowerCase() : "";
163
+ };
164
+ var isImageFile = function (file) {
165
+ return allowedImageExtensions.includes(getFileExtension(file));
166
+ };
167
+ var isAllowedFileType = function (file, allowedTypes) {
168
+ if (allowedTypes === AllowedTypes.ALL)
169
+ return true;
170
+ if (allowedTypes === AllowedTypes.IMAGE)
171
+ return isImageFile(file);
172
+ if (allowedTypes === AllowedTypes.FILE)
173
+ return !isImageFile(file);
174
+ return false;
175
+ };
176
+ // ====================
177
+ // CustomFileUploader Bileşeni
178
+ // ====================
179
+ var CustomFileUploader = function (_a) {
180
+ var url = _a.url, multi = _a.multi, allowedTypes = _a.allowedTypes, maxFile = _a.maxFile, maxSize = _a.maxSize, onUploadComplete = _a.onUploadComplete, onRemoveUploaded = _a.onRemoveUploaded, label = _a.label, onPendingChange = _a.onPendingChange;
181
+ var _b = (0, react_1.useState)([]), previews = _b[0], setPreviews = _b[1];
182
+ var fileInputRef = (0, react_1.useRef)(null);
183
+ // Pending dosya sayısını parent'a iletecek yardımcı fonksiyon
184
+ var updatePendingStatus = function (previewsArray) {
185
+ if (onPendingChange) {
186
+ var pendingFileCount = previewsArray.filter(function (item) { return !item.uploaded; }).length;
187
+ onPendingChange(pendingFileCount);
188
+ }
189
+ };
190
+ // Dosyaları ekleme işlemi
191
+ var handleFiles = function (files) {
192
+ var filesArray = Array.from(files);
193
+ var currentCount = multi ? previews.length : (previews.length > 0 ? 1 : 0);
194
+ var availableSlots = multi ? maxFile - currentCount : (currentCount === 0 ? 1 : 0);
195
+ if (availableSlots <= 0) {
196
+ react_toastify_1.toast.warning("Dosya yükleme limitini doldurdunuz. Yeni dosya ekleyebilmek için mevcut dosyaları kaldırın.");
197
+ return;
198
+ }
199
+ var filesToAdd = filesArray.slice(0, availableSlots);
200
+ if (filesArray.length > availableSlots) {
201
+ react_toastify_1.toast.warning("Se\u00E7ilen dosya say\u0131s\u0131 limiti a\u015Ft\u0131. Sadece ilk ".concat(availableSlots, " dosya eklenecektir."));
202
+ }
203
+ var newPreviews = [];
204
+ filesToAdd.forEach(function (file, index) {
205
+ if (file.size > maxSize) {
206
+ react_toastify_1.toast.error("\"".concat(file.name, "\" dosyas\u0131 boyut limiti (").concat(maxSize, " byte) a\u015F\u0131yor."));
207
+ return;
208
+ }
209
+ if (!isAllowedFileType(file, allowedTypes)) {
210
+ react_toastify_1.toast.error("\"".concat(file.name, "\" dosyas\u0131 se\u00E7ilen dosya t\u00FCr\u00FCne uygun de\u011Fil."));
211
+ return;
212
+ }
213
+ var isImg = isImageFile(file);
214
+ var previewContent = isImg
215
+ ? URL.createObjectURL(file)
216
+ : fileTypeIcons[getFileExtension(file)] || defaultFileIcon;
217
+ newPreviews.push({
218
+ id: "".concat(file.name, "_").concat(file.lastModified, "_").concat(Date.now(), "_").concat(index),
219
+ file: file,
220
+ isImage: isImg,
221
+ previewContent: previewContent,
222
+ uploaded: false,
223
+ });
224
+ });
225
+ setPreviews(function (prev) {
226
+ var updatedPreviews = __spreadArray(__spreadArray([], prev, true), newPreviews, true);
227
+ updatePendingStatus(updatedPreviews);
228
+ return updatedPreviews;
229
+ });
230
+ };
231
+ // Dosya input değişiminde
232
+ var handleFileChange = function (e) {
233
+ if (e.target.files && e.target.files.length > 0) {
234
+ handleFiles(e.target.files);
235
+ }
236
+ };
237
+ // Drag & Drop olayları
238
+ var handleDrop = function (e) {
239
+ e.preventDefault();
240
+ if (e.dataTransfer.files && e.dataTransfer.files.length > 0) {
241
+ handleFiles(e.dataTransfer.files);
242
+ e.dataTransfer.clearData();
243
+ }
244
+ };
245
+ var handleDragOver = function (e) {
246
+ e.preventDefault();
247
+ };
248
+ // Dosya seçim alanına tıklayınca input'u tetikleyin
249
+ var handleAreaClick = function () {
250
+ var _a;
251
+ (_a = fileInputRef.current) === null || _a === void 0 ? void 0 : _a.click();
252
+ };
253
+ // Dosya kaldırma işlemi
254
+ var handleRemoveFile = function (previewId) {
255
+ var updatedPreviews = previews.filter(function (item) { return item.id !== previewId; });
256
+ setPreviews(updatedPreviews);
257
+ updatePendingStatus(updatedPreviews);
258
+ var itemToRemove = previews.find(function (item) { return item.id === previewId; });
259
+ if (itemToRemove && itemToRemove.uploaded && itemToRemove.serverFileName && onRemoveUploaded) {
260
+ onRemoveUploaded(itemToRemove.serverFileName);
261
+ }
262
+ };
263
+ // Dosyaları sunucuya yükleme işlemi
264
+ var handleUpload = function () { return __awaiter(void 0, void 0, void 0, function () {
265
+ var filesToUpload, formData, response, data, uploadedFileNames_1, errorData, error_1;
266
+ return __generator(this, function (_a) {
267
+ switch (_a.label) {
268
+ case 0:
269
+ filesToUpload = previews.filter(function (item) { return !item.uploaded; }).map(function (item) { return item.file; });
270
+ if (filesToUpload.length === 0) {
271
+ react_toastify_1.toast.warning("Önce en az bir dosya seçiniz.");
272
+ return [2 /*return*/];
273
+ }
274
+ formData = new FormData();
275
+ filesToUpload.forEach(function (file) {
276
+ formData.append("file", file);
277
+ });
278
+ _a.label = 1;
279
+ case 1:
280
+ _a.trys.push([1, 7, , 8]);
281
+ return [4 /*yield*/, fetch(url, {
282
+ method: "POST",
283
+ body: formData,
284
+ })];
285
+ case 2:
286
+ response = _a.sent();
287
+ if (!response.ok) return [3 /*break*/, 4];
288
+ return [4 /*yield*/, response.json()];
289
+ case 3:
290
+ data = _a.sent();
291
+ if (data.responseCode === 200 &&
292
+ data.content &&
293
+ data.content.fileList &&
294
+ data.content.fileList.length > 0) {
295
+ uploadedFileNames_1 = data.content.fileList.map(function (item) { return item.fileName; });
296
+ if (onUploadComplete) {
297
+ onUploadComplete(uploadedFileNames_1);
298
+ }
299
+ setPreviews(function (prev) {
300
+ var updatedPreviews = prev.map(function (item, index) {
301
+ if (!item.uploaded) {
302
+ return __assign(__assign({}, item), { uploaded: true, serverFileName: uploadedFileNames_1[index] || item.file.name });
303
+ }
304
+ return item;
305
+ });
306
+ updatePendingStatus(updatedPreviews);
307
+ return updatedPreviews;
308
+ });
309
+ react_toastify_1.toast.success("Dosyalar başarıyla yüklendi.");
310
+ }
311
+ else {
312
+ react_toastify_1.toast.error("Dosyalar yüklenirken bir hata oluştu.");
313
+ }
314
+ return [3 /*break*/, 6];
315
+ case 4: return [4 /*yield*/, response.json()];
316
+ case 5:
317
+ errorData = _a.sent();
318
+ console.error("API Hatası:", errorData);
319
+ react_toastify_1.toast.error("Dosyalar yüklenirken bir hata oluştu.");
320
+ _a.label = 6;
321
+ case 6: return [3 /*break*/, 8];
322
+ case 7:
323
+ error_1 = _a.sent();
324
+ console.error("API çağrısında hata:", error_1);
325
+ react_toastify_1.toast.error("Dosyalar yüklenirken bir hata oluştu.");
326
+ return [3 /*break*/, 8];
327
+ case 8: return [2 /*return*/];
328
+ }
329
+ });
330
+ }); };
331
+ return (react_1.default.createElement("div", { style: { width: "100%", height: "100%" } },
332
+ label && (react_1.default.createElement("div", { style: { marginBottom: "10px" } },
333
+ react_1.default.createElement("label", { style: { fontWeight: "bold" } }, label))),
334
+ react_1.default.createElement("div", { style: dropAreaStyle, onDrop: handleDrop, onDragOver: handleDragOver, onClick: handleAreaClick }, previews.length === 0 ? (react_1.default.createElement("div", null,
335
+ "Dosyalar\u0131 buraya s\u00FCr\u00FCkleyip b\u0131rak\u0131n veya t\u0131klayarak dosya se\u00E7in.",
336
+ multi
337
+ ? " (Maksimum ".concat(maxFile, " dosya se\u00E7ilebilir.)")
338
+ : " (Tek dosya seçilebilir.)")) : (react_1.default.createElement("div", { style: previewContainerStyle }, previews.map(function (item) { return (react_1.default.createElement("div", { key: item.id, style: { display: "flex", flexDirection: "column", alignItems: "center" } },
339
+ react_1.default.createElement("div", { style: previewItemStyle },
340
+ item.isImage ? (react_1.default.createElement("img", { src: item.previewContent, alt: "\u00D6nizleme ".concat(item.id), style: { width: "100%", height: "100%", objectFit: "cover" } })) : (react_1.default.createElement("div", { style: {
341
+ width: "100%",
342
+ height: "100%",
343
+ display: "flex",
344
+ justifyContent: "center",
345
+ alignItems: "center",
346
+ fontSize: "48px",
347
+ } }, item.previewContent)),
348
+ react_1.default.createElement("button", { type: "button" // Form submit'ini tetiklememek için
349
+ , style: removeButtonStyle, onClick: function (e) {
350
+ e.stopPropagation();
351
+ handleRemoveFile(item.id);
352
+ }, title: "Kald\u0131r" }, "\u00D7"),
353
+ item.uploaded && react_1.default.createElement("div", { style: tickOverlayStyle }, "\u2713")),
354
+ react_1.default.createElement("div", { style: {
355
+ marginTop: "4px",
356
+ fontSize: "12px",
357
+ textAlign: "center",
358
+ maxWidth: "100px",
359
+ overflow: "hidden",
360
+ textOverflow: "ellipsis",
361
+ whiteSpace: "nowrap",
362
+ }, title: item.file.name }, item.file.name))); })))),
363
+ react_1.default.createElement("input", { type: "file", multiple: multi, ref: fileInputRef, onChange: handleFileChange, style: { display: "none" } }),
364
+ previews.filter(function (item) { return !item.uploaded; }).length > 0 && (react_1.default.createElement("div", { style: { marginTop: "10px", textAlign: "center" } },
365
+ react_1.default.createElement("button", { type: "button", className: "btn btn-primary", onClick: handleUpload }, "Y\u00FCkle")))));
366
+ };
367
+ exports.default = CustomFileUploader;
@@ -1,5 +1,6 @@
1
1
  import React from "react";
2
2
  import { TreeNode } from "./CustomTreeView";
3
+ import { AllowedTypes } from "./CustomFileUploader";
3
4
  declare enum ElementType {
4
5
  INPUT = "input",
5
6
  TEXTAREA = "textarea",
@@ -12,7 +13,8 @@ declare enum ElementType {
12
13
  RICHTEXTBOX = "richtextbox",
13
14
  TREEVIEW = "treeview",
14
15
  BUTTON = "button",
15
- AUTOCOMPLETEINPUT = "autocompleteinput"
16
+ AUTOCOMPLETEINPUT = "autocompleteinput",
17
+ FILEUPLOADER = "fileuploader"
16
18
  }
17
19
  interface InputElement {
18
20
  id?: string;
@@ -157,7 +159,24 @@ interface AutoCompleteInputElement {
157
159
  fetchOptions: (query: string) => string[];
158
160
  onSelect: (value: string) => void;
159
161
  }
160
- type FormElement = InputElement | TextareaElement | CheckboxElement | RadioButtonElement | SelectElement | DateTimePickerElement | TextElement | DividerElement | RichTextboxElement | TreeViewElement | ButtonElement | AutoCompleteInputElement;
162
+ interface FileUploaderElement {
163
+ id: string;
164
+ type: ElementType.FILEUPLOADER;
165
+ label?: string;
166
+ url: string;
167
+ multi: boolean;
168
+ allowedTypes: AllowedTypes;
169
+ maxFile: number;
170
+ maxSize: number;
171
+ onUploadComplete: (uploadedFileNames: string[]) => void;
172
+ onRemoveUploaded: (fileName: string) => void;
173
+ onPendingChange: (pendingFileCount: number) => void;
174
+ rowId?: number;
175
+ colId?: number;
176
+ innerRowId?: number;
177
+ colClass?: string;
178
+ }
179
+ type FormElement = InputElement | TextareaElement | CheckboxElement | RadioButtonElement | SelectElement | DateTimePickerElement | TextElement | DividerElement | RichTextboxElement | TreeViewElement | ButtonElement | AutoCompleteInputElement | FileUploaderElement;
161
180
  interface CustomFormProps {
162
181
  elements: FormElement[];
163
182
  innerRowCustomClass?: string;
@@ -88,6 +88,7 @@ var CustomDivider_1 = __importDefault(require("./CustomDivider"));
88
88
  var CustomRichTextbox_1 = __importDefault(require("./CustomRichTextbox"));
89
89
  var CustomTreeView_1 = __importDefault(require("./CustomTreeView"));
90
90
  var CustomAutocompleteInput_1 = __importDefault(require("./CustomAutocompleteInput"));
91
+ var CustomFileUploader_1 = __importDefault(require("./CustomFileUploader"));
91
92
  var ElementType;
92
93
  (function (ElementType) {
93
94
  ElementType["INPUT"] = "input";
@@ -102,6 +103,7 @@ var ElementType;
102
103
  ElementType["TREEVIEW"] = "treeview";
103
104
  ElementType["BUTTON"] = "button";
104
105
  ElementType["AUTOCOMPLETEINPUT"] = "autocompleteinput";
106
+ ElementType["FILEUPLOADER"] = "fileuploader";
105
107
  })(ElementType || (ElementType = {}));
106
108
  exports.ElementType = ElementType;
107
109
  var CustomForm = function (_a) {
@@ -207,7 +209,10 @@ var CustomForm = function (_a) {
207
209
  var colId = _a[0], innerRows = _a[1];
208
210
  return (react_1.default.createElement("div", { className: "col", key: "col-".concat(rowId, "-").concat(colId) }, Object.entries(innerRows).map(function (_a) {
209
211
  var innerRowId = _a[0], elements = _a[1];
210
- return (react_1.default.createElement("div", { className: "row ".concat(innerRowCustomClass), key: "inner-row-".concat(rowId, "-").concat(colId, "-").concat(innerRowId) }, elements.map(function (element) { return (react_1.default.createElement("div", { className: element.colClass || "col-12", key: element.id }, element.type === ElementType.TEXT ? (react_1.default.createElement(CustomText_1.default, __assign({}, element))) : element.type === ElementType.INPUT ? (react_1.default.createElement(CustomInput_1.default, __assign({}, element))) : element.type === ElementType.TEXTAREA ? (react_1.default.createElement(CustomTextarea_1.default, __assign({}, element))) : element.type === ElementType.CHECKBOX ? (react_1.default.createElement(CustomCheckbox_1.default, __assign({}, element))) : element.type === ElementType.RADIO ? (react_1.default.createElement(CustomRadioButton_1.default, __assign({}, element))) : element.type === ElementType.SELECT ? (react_1.default.createElement(CustomSelect_1.default, __assign({}, element))) : element.type === ElementType.DATETIMEPICKER ? (react_1.default.createElement(CustomDateTimePicker_1.default, __assign({}, element))) : element.type === ElementType.DIVIDER ? (react_1.default.createElement(CustomDivider_1.default, __assign({}, element))) : element.type === ElementType.RICHTEXTBOX ? (react_1.default.createElement(CustomRichTextbox_1.default, __assign({}, element))) : element.type === ElementType.TREEVIEW ? (react_1.default.createElement(CustomTreeView_1.default, __assign({}, element))) : element.type === ElementType.BUTTON ? (react_1.default.createElement(CustomButton_1.default, __assign({}, element, { isLoading: isLoading }))) : element.type === ElementType.AUTOCOMPLETEINPUT ? (react_1.default.createElement(CustomAutocompleteInput_1.default, __assign({}, element))) : null)); })));
212
+ return (react_1.default.createElement("div", { className: "row ".concat(innerRowCustomClass), key: "inner-row-".concat(rowId, "-").concat(colId, "-").concat(innerRowId) }, elements.map(function (element) { return (react_1.default.createElement("div", { className: element.colClass || "col-12", key: element.id }, element.type === ElementType.TEXT ? (react_1.default.createElement(CustomText_1.default, __assign({}, element))) : element.type === ElementType.INPUT ? (react_1.default.createElement(CustomInput_1.default, __assign({}, element))) : element.type === ElementType.TEXTAREA ? (react_1.default.createElement(CustomTextarea_1.default, __assign({}, element))) : element.type === ElementType.CHECKBOX ? (react_1.default.createElement(CustomCheckbox_1.default, __assign({}, element))) : element.type === ElementType.RADIO ? (react_1.default.createElement(CustomRadioButton_1.default, __assign({}, element))) : element.type === ElementType.SELECT ? (react_1.default.createElement(CustomSelect_1.default, __assign({}, element))) : element.type === ElementType.DATETIMEPICKER ? (react_1.default.createElement(CustomDateTimePicker_1.default, __assign({}, element))) : element.type === ElementType.DIVIDER ? (react_1.default.createElement(CustomDivider_1.default, __assign({}, element))) : element.type === ElementType.RICHTEXTBOX ? (react_1.default.createElement(CustomRichTextbox_1.default, __assign({}, element))) : element.type === ElementType.TREEVIEW ? (react_1.default.createElement(CustomTreeView_1.default, __assign({}, element))) : element.type === ElementType.BUTTON ? (react_1.default.createElement(CustomButton_1.default, __assign({}, element, { isLoading: isLoading }))) : element.type === ElementType.AUTOCOMPLETEINPUT ? (react_1.default.createElement(CustomAutocompleteInput_1.default, __assign({}, element))) : element.type === ElementType.FILEUPLOADER ? (
213
+ // FILEUPLOADER elemanı için CustomFileUploader'ı render ediyoruz
214
+ react_1.default.createElement(react_1.default.Fragment, null,
215
+ react_1.default.createElement(CustomFileUploader_1.default, { url: element.url, multi: element.multi, allowedTypes: element.allowedTypes, maxFile: element.maxFile, maxSize: element.maxSize, onUploadComplete: element.onUploadComplete, onRemoveUploaded: element.onRemoveUploaded, onPendingChange: element.onPendingChange, label: element.label }))) : null)); })));
211
216
  })));
212
217
  })));
213
218
  }),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "albinasoft-ui-package",
3
- "version": "1.0.60",
3
+ "version": "1.0.62",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "scripts": {