albinasoft-ui-package 1.1.35 → 1.1.36

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.
@@ -55,7 +55,6 @@ export interface CustomFileUploaderProps {
55
55
  * Eğer bu prop’un değeri değişirse uploader içini temizle
56
56
  */
57
57
  clearTrigger?: any;
58
- onUploadedListChange?: (uploadedFileNames: string[]) => void;
59
58
  }
60
59
  declare const CustomFileUploader: React.FC<CustomFileUploaderProps>;
61
60
  export default CustomFileUploader;
@@ -308,12 +308,7 @@ var CustomFileUploader = function (props) {
308
308
  };
309
309
  // Dosya kaldırma işlemi
310
310
  var handleRemoveFile = function (previewId) {
311
- var _a;
312
311
  var updatedPreviews = previews.filter(function (item) { return item.id !== previewId; });
313
- var uploadedList = updatedPreviews
314
- .filter(function (p) { return p.uploaded && p.serverFileName; })
315
- .map(function (p) { return p.serverFileName; });
316
- (_a = props.onUploadedListChange) === null || _a === void 0 ? void 0 : _a.call(props, uploadedList);
317
312
  setPreviews(updatedPreviews);
318
313
  updatePendingStatus(updatedPreviews);
319
314
  var itemToRemove = previews.find(function (item) { return item.id === previewId; });
@@ -323,96 +318,69 @@ var CustomFileUploader = function (props) {
323
318
  };
324
319
  // Dosyaları sunucuya yükleme işlemi
325
320
  var handleUpload = function () { return __awaiter(void 0, void 0, void 0, function () {
326
- var pendingItems, _loop_1, i;
321
+ var filesToUpload, formData, response, data, uploadedFileNames_1, errorData, error_1;
327
322
  return __generator(this, function (_a) {
328
323
  switch (_a.label) {
329
324
  case 0:
330
- pendingItems = previews.filter(function (item) { return !item.uploaded; });
331
- if (pendingItems.length === 0) {
325
+ filesToUpload = previews.filter(function (item) { return !item.uploaded; }).map(function (item) { return item.file; });
326
+ if (filesToUpload.length === 0) {
332
327
  react_toastify_1.toast.warning(finalTranslations.noFileSelectedWarning);
333
328
  return [2 /*return*/];
334
329
  }
335
- _loop_1 = function (i) {
336
- var item, formData, response, data, uploadedFileName_1, error_1;
337
- return __generator(this, function (_b) {
338
- switch (_b.label) {
339
- case 0:
340
- item = pendingItems[i];
341
- // isUploading = true olarak işaretle
342
- setPreviews(function (prev) {
343
- var updated = prev.map(function (p) {
344
- return p.id === item.id ? __assign(__assign({}, p), { isUploading: true }) : p;
345
- });
346
- updatePendingStatus(updated);
347
- return updated;
348
- });
349
- formData = new FormData();
350
- formData.append("file", item.file);
351
- _b.label = 1;
352
- case 1:
353
- _b.trys.push([1, 6, , 7]);
354
- return [4 /*yield*/, fetch(url, {
355
- method: "POST",
356
- body: formData,
357
- })];
358
- case 2:
359
- response = _b.sent();
360
- if (!response.ok) return [3 /*break*/, 4];
361
- return [4 /*yield*/, response.json()];
362
- case 3:
363
- data = _b.sent();
364
- if (data.responseCode === 200 && data.content && data.content.fileList.length > 0) {
365
- uploadedFileName_1 = data.content.fileList[0].fileName;
366
- setPreviews(function (prev) {
367
- var _a;
368
- var updated = prev.map(function (p) {
369
- return p.id === item.id
370
- ? __assign(__assign({}, p), { uploaded: true, isUploading: false, serverFileName: uploadedFileName_1 }) : p;
371
- });
372
- updatePendingStatus(updated);
373
- var uploadedList = updated
374
- .filter(function (p) { return p.uploaded && p.serverFileName; })
375
- .map(function (p) { return p.serverFileName; });
376
- (_a = props.onUploadedListChange) === null || _a === void 0 ? void 0 : _a.call(props, uploadedList);
377
- return updated;
378
- });
379
- }
380
- else {
381
- throw new Error("Sunucu hatası");
382
- }
383
- return [3 /*break*/, 5];
384
- case 4: throw new Error("HTTP hatası");
385
- case 5: return [3 /*break*/, 7];
386
- case 6:
387
- error_1 = _b.sent();
388
- console.error("Yükleme hatası:", error_1);
389
- react_toastify_1.toast.error("".concat(item.file.name, " y\u00FCklenemedi."));
390
- setPreviews(function (prev) {
391
- var updated = prev.map(function (p) {
392
- return p.id === item.id ? __assign(__assign({}, p), { isUploading: false }) : p;
393
- });
394
- updatePendingStatus(updated);
395
- return updated;
396
- });
397
- return [3 /*break*/, 7];
398
- case 7: return [2 /*return*/];
399
- }
400
- });
401
- };
402
- i = 0;
330
+ formData = new FormData();
331
+ filesToUpload.forEach(function (file) {
332
+ formData.append("file", file);
333
+ });
403
334
  _a.label = 1;
404
335
  case 1:
405
- if (!(i < pendingItems.length)) return [3 /*break*/, 4];
406
- return [5 /*yield**/, _loop_1(i)];
336
+ _a.trys.push([1, 7, , 8]);
337
+ return [4 /*yield*/, fetch(url, {
338
+ method: "POST",
339
+ body: formData,
340
+ })];
407
341
  case 2:
408
- _a.sent();
409
- _a.label = 3;
342
+ response = _a.sent();
343
+ if (!response.ok) return [3 /*break*/, 4];
344
+ return [4 /*yield*/, response.json()];
410
345
  case 3:
411
- i++;
412
- return [3 /*break*/, 1];
413
- case 4:
414
- react_toastify_1.toast.success(finalTranslations.uploadSuccessToast);
415
- return [2 /*return*/];
346
+ data = _a.sent();
347
+ if (data.responseCode === 200 &&
348
+ data.content &&
349
+ data.content.fileList &&
350
+ data.content.fileList.length > 0) {
351
+ uploadedFileNames_1 = data.content.fileList.map(function (item) { return item.fileName; });
352
+ if (onUploadComplete) {
353
+ onUploadComplete(uploadedFileNames_1);
354
+ }
355
+ setPreviews(function (prev) {
356
+ var updatedPreviews = prev.map(function (item, index) {
357
+ if (!item.uploaded) {
358
+ return __assign(__assign({}, item), { uploaded: true, serverFileName: uploadedFileNames_1[index] || item.file.name });
359
+ }
360
+ return item;
361
+ });
362
+ updatePendingStatus(updatedPreviews);
363
+ return updatedPreviews;
364
+ });
365
+ react_toastify_1.toast.success(finalTranslations.uploadSuccessToast);
366
+ }
367
+ else {
368
+ react_toastify_1.toast.error(finalTranslations.uploadErrorToast);
369
+ }
370
+ return [3 /*break*/, 6];
371
+ case 4: return [4 /*yield*/, response.json()];
372
+ case 5:
373
+ errorData = _a.sent();
374
+ console.error("API Hatası:", errorData);
375
+ react_toastify_1.toast.error(finalTranslations.uploadErrorToast);
376
+ _a.label = 6;
377
+ case 6: return [3 /*break*/, 8];
378
+ case 7:
379
+ error_1 = _a.sent();
380
+ console.error("API çağrısında hata:", error_1);
381
+ react_toastify_1.toast.error(finalTranslations.uploadErrorToast);
382
+ return [3 /*break*/, 8];
383
+ case 8: return [2 /*return*/];
416
384
  }
417
385
  });
418
386
  }); };
@@ -441,21 +409,7 @@ var CustomFileUploader = function (props) {
441
409
  e.stopPropagation();
442
410
  handleRemoveFile(item.id);
443
411
  }, title: finalTranslations.removeButtonTitle }, "\u00D7"),
444
- item.uploaded && react_1.default.createElement("div", { style: tickOverlayStyle }, "\u2713"),
445
- item.isUploading && (react_1.default.createElement("div", { style: {
446
- position: "absolute",
447
- top: "0",
448
- left: "0",
449
- width: "100%",
450
- height: "100%",
451
- backgroundColor: "rgba(255,255,255,0.6)",
452
- display: "flex",
453
- justifyContent: "center",
454
- alignItems: "center",
455
- zIndex: 3,
456
- } },
457
- react_1.default.createElement("div", { className: "spinner-border text-primary", role: "status", style: { width: "24px", height: "24px" } },
458
- react_1.default.createElement("span", { className: "visually-hidden" }, "Y\u00FCkleniyor..."))))),
412
+ item.uploaded && react_1.default.createElement("div", { style: tickOverlayStyle }, "\u2713")),
459
413
  react_1.default.createElement("div", { style: {
460
414
  marginTop: "4px",
461
415
  fontSize: "12px",
@@ -219,7 +219,6 @@ interface CustomFormProps {
219
219
  handleCancel?: () => void;
220
220
  showConfirmButton?: boolean;
221
221
  showCancelButton?: boolean;
222
- pendingFileCounts?: Record<string, number>;
223
222
  }
224
223
  declare const CustomForm: React.FC<CustomFormProps>;
225
224
  export { CustomForm, ElementType };
@@ -69,15 +69,6 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
69
69
  if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
70
70
  }
71
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
72
  var __importDefault = (this && this.__importDefault) || function (mod) {
82
73
  return (mod && mod.__esModule) ? mod : { "default": mod };
83
74
  };
@@ -125,15 +116,10 @@ var CustomForm = function (_a) {
125
116
  cancelLabel = _c === void 0 ? "Cancel" : _c, // Varsayılan değer
126
117
  handleCancel = _a.handleCancel, _d = _a.showConfirmButton, showConfirmButton = _d === void 0 ? true : _d, // Varsayılan olarak görünür
127
118
  _e = _a.showCancelButton, // Varsayılan olarak görünür
128
- showCancelButton = _e === void 0 ? false : _e, // Varsayılan olarak görünür
129
- pendingFileCounts = _a.pendingFileCounts;
119
+ showCancelButton = _e === void 0 ? false : _e;
130
120
  var formRef = (0, react_1.useRef)(null);
131
121
  var _f = (0, react_1.useState)(false), isLoading = _f[0], setIsLoading = _f[1];
132
122
  var _g = (0, react_1.useState)(false), submitted = _g[0], setSubmitted = _g[1];
133
- var _h = (0, react_1.useState)([]), uploadedFiles = _h[0], setUploadedFiles = _h[1];
134
- var _j = (0, react_1.useState)([]), uploadedFileNames = _j[0], setUploadedFileNames = _j[1];
135
- var isUploadingAnyFile = Object.values(pendingFileCounts || {}).some(function (count) { return count > 0; });
136
- var disableConfirmButton = isLoading || isUploadingAnyFile;
137
123
  var handleConfirm = function (e) { return __awaiter(void 0, void 0, void 0, function () {
138
124
  var form, customSelectValid, isValid, formValues_1, error_1;
139
125
  return __generator(this, function (_a) {
@@ -198,9 +184,6 @@ var CustomForm = function (_a) {
198
184
  formValues_1[element.id] = element.value;
199
185
  }
200
186
  });
201
- formValues_1.uploadedFiles = uploadedFiles;
202
- formValues_1["__uploadedFileNames"] = uploadedFileNames;
203
- formValues_1["fileNames"] = uploadedFileNames;
204
187
  return [4 /*yield*/, onSubmit(formValues_1)];
205
188
  case 2:
206
189
  _a.sent();
@@ -245,18 +228,14 @@ var CustomForm = function (_a) {
245
228
  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, { submitted: submitted }))) : element.type === ElementType.SIMPLESELECT ? (react_1.default.createElement(CustomSimpleSelect_1.default, __assign({}, element, { value: Array.isArray(element.value) ? element.value[0] || "" : "", onChange: function (val) { return element.onChange(val); } }))) : element.type === ElementType.DATETIMEPICKER ? (react_1.default.createElement(CustomDateTimePicker_1.default, __assign({}, element, { submitted: submitted }))) : 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.PHONE ? (react_1.default.createElement(CustomPhoneInput_1.default, __assign({}, element))) : element.type === ElementType.FILEUPLOADER ? (
246
229
  // FILEUPLOADER elemanı için CustomFileUploader'ı render ediyoruz
247
230
  react_1.default.createElement(react_1.default.Fragment, null,
248
- react_1.default.createElement(CustomFileUploader_1.default, { url: element.url, multi: element.multi, allowedTypes: element.allowedTypes, maxFile: element.maxFile, maxSize: element.maxSize, onUploadComplete: function (fileNames) {
249
- var _a, _b;
250
- setUploadedFileNames(function (prev) { return __spreadArray(__spreadArray([], prev, true), fileNames, true); });
251
- (_b = (_a = element).onUploadComplete) === null || _b === void 0 ? void 0 : _b.call(_a, fileNames); // Orijinal fonksiyonu da tetikle
252
- }, onRemoveUploaded: element.onRemoveUploaded, onPendingChange: element.onPendingChange, clearTrigger: element.clearTrigger, label: element.label, translations: element.translations, onUploadedListChange: setUploadedFiles }))) : null)); })));
231
+ 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, clearTrigger: element.clearTrigger, label: element.label, translations: element.translations }))) : null)); })));
253
232
  })));
254
233
  })));
255
234
  }),
256
235
  (showConfirmButton || showCancelButton) && (react_1.default.createElement("div", { className: "card-footer mt-3" },
257
236
  react_1.default.createElement("div", { className: "form-actions mt-3", style: { display: "flex", justifyContent: "flex-end", gap: "10px" } },
258
237
  showCancelButton && (react_1.default.createElement(CustomButton_1.default, { label: cancelLabel, className: "btn btn-secondary", onClick: handleCancel || (function () { }), isLoading: isLoading })),
259
- showConfirmButton && (react_1.default.createElement(CustomButton_1.default, { label: confirmLabel, className: "btn btn-primary", onClick: handleConfirm, isLoading: isLoading, disabled: disableConfirmButton })))))));
238
+ showConfirmButton && (react_1.default.createElement(CustomButton_1.default, { label: confirmLabel, className: "btn btn-primary", onClick: handleConfirm, isLoading: isLoading })))))));
260
239
  };
261
240
  exports.CustomForm = CustomForm;
262
241
  exports.default = CustomForm;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "albinasoft-ui-package",
3
- "version": "1.1.35",
3
+ "version": "1.1.36",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "scripts": {