albinasoft-ui-package 1.1.34 → 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.
@@ -318,91 +318,69 @@ var CustomFileUploader = function (props) {
318
318
  };
319
319
  // Dosyaları sunucuya yükleme işlemi
320
320
  var handleUpload = function () { return __awaiter(void 0, void 0, void 0, function () {
321
- var pendingItems, _loop_1, i;
321
+ var filesToUpload, formData, response, data, uploadedFileNames_1, errorData, error_1;
322
322
  return __generator(this, function (_a) {
323
323
  switch (_a.label) {
324
324
  case 0:
325
- pendingItems = previews.filter(function (item) { return !item.uploaded; });
326
- if (pendingItems.length === 0) {
325
+ filesToUpload = previews.filter(function (item) { return !item.uploaded; }).map(function (item) { return item.file; });
326
+ if (filesToUpload.length === 0) {
327
327
  react_toastify_1.toast.warning(finalTranslations.noFileSelectedWarning);
328
328
  return [2 /*return*/];
329
329
  }
330
- _loop_1 = function (i) {
331
- var item, formData, response, data, uploadedFileName_1, error_1;
332
- return __generator(this, function (_b) {
333
- switch (_b.label) {
334
- case 0:
335
- item = pendingItems[i];
336
- // isUploading = true olarak işaretle
337
- setPreviews(function (prev) {
338
- var updated = prev.map(function (p) {
339
- return p.id === item.id ? __assign(__assign({}, p), { isUploading: true }) : p;
340
- });
341
- updatePendingStatus(updated);
342
- return updated;
343
- });
344
- formData = new FormData();
345
- formData.append("file", item.file);
346
- _b.label = 1;
347
- case 1:
348
- _b.trys.push([1, 6, , 7]);
349
- return [4 /*yield*/, fetch(url, {
350
- method: "POST",
351
- body: formData,
352
- })];
353
- case 2:
354
- response = _b.sent();
355
- if (!response.ok) return [3 /*break*/, 4];
356
- return [4 /*yield*/, response.json()];
357
- case 3:
358
- data = _b.sent();
359
- if (data.responseCode === 200 && data.content && data.content.fileList.length > 0) {
360
- uploadedFileName_1 = data.content.fileList[0].fileName;
361
- setPreviews(function (prev) {
362
- var updated = prev.map(function (p) {
363
- return p.id === item.id
364
- ? __assign(__assign({}, p), { uploaded: true, isUploading: false, serverFileName: uploadedFileName_1 }) : p;
365
- });
366
- updatePendingStatus(updated);
367
- return updated;
368
- });
369
- }
370
- else {
371
- throw new Error("Sunucu hatası");
372
- }
373
- return [3 /*break*/, 5];
374
- case 4: throw new Error("HTTP hatası");
375
- case 5: return [3 /*break*/, 7];
376
- case 6:
377
- error_1 = _b.sent();
378
- console.error("Yükleme hatası:", error_1);
379
- react_toastify_1.toast.error("".concat(item.file.name, " y\u00FCklenemedi."));
380
- setPreviews(function (prev) {
381
- var updated = prev.map(function (p) {
382
- return p.id === item.id ? __assign(__assign({}, p), { isUploading: false }) : p;
383
- });
384
- updatePendingStatus(updated);
385
- return updated;
386
- });
387
- return [3 /*break*/, 7];
388
- case 7: return [2 /*return*/];
389
- }
390
- });
391
- };
392
- i = 0;
330
+ formData = new FormData();
331
+ filesToUpload.forEach(function (file) {
332
+ formData.append("file", file);
333
+ });
393
334
  _a.label = 1;
394
335
  case 1:
395
- if (!(i < pendingItems.length)) return [3 /*break*/, 4];
396
- 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
+ })];
397
341
  case 2:
398
- _a.sent();
399
- _a.label = 3;
342
+ response = _a.sent();
343
+ if (!response.ok) return [3 /*break*/, 4];
344
+ return [4 /*yield*/, response.json()];
400
345
  case 3:
401
- i++;
402
- return [3 /*break*/, 1];
403
- case 4:
404
- react_toastify_1.toast.success(finalTranslations.uploadSuccessToast);
405
- 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*/];
406
384
  }
407
385
  });
408
386
  }); };
@@ -431,21 +409,7 @@ var CustomFileUploader = function (props) {
431
409
  e.stopPropagation();
432
410
  handleRemoveFile(item.id);
433
411
  }, title: finalTranslations.removeButtonTitle }, "\u00D7"),
434
- item.uploaded && react_1.default.createElement("div", { style: tickOverlayStyle }, "\u2713"),
435
- item.isUploading && (react_1.default.createElement("div", { style: {
436
- position: "absolute",
437
- top: "0",
438
- left: "0",
439
- width: "100%",
440
- height: "100%",
441
- backgroundColor: "rgba(255,255,255,0.6)",
442
- display: "flex",
443
- justifyContent: "center",
444
- alignItems: "center",
445
- zIndex: 3,
446
- } },
447
- react_1.default.createElement("div", { className: "spinner-border text-primary", role: "status", style: { width: "24px", height: "24px" } },
448
- react_1.default.createElement("span", { className: "visually-hidden" }, "Y\u00FCkleniyor..."))))),
412
+ item.uploaded && react_1.default.createElement("div", { style: tickOverlayStyle }, "\u2713")),
449
413
  react_1.default.createElement("div", { style: {
450
414
  marginTop: "4px",
451
415
  fontSize: "12px",
@@ -7,6 +7,7 @@ declare enum ElementType {
7
7
  CHECKBOX = "checkbox",
8
8
  RADIO = "radio",
9
9
  SELECT = "select",
10
+ SIMPLESELECT = "simpleselect",
10
11
  DATETIMEPICKER = "datetimepicker",
11
12
  TEXT = "text",
12
13
  DIVIDER = "divider",
@@ -83,6 +84,23 @@ interface SelectElement {
83
84
  colClass?: string;
84
85
  onChange: (value: string | string[]) => void;
85
86
  }
87
+ interface SimpleSelectElement {
88
+ required: boolean;
89
+ id?: string;
90
+ type: ElementType;
91
+ label: string;
92
+ value: string[];
93
+ options: {
94
+ id: string;
95
+ label: string;
96
+ value: string;
97
+ }[];
98
+ rowId?: number;
99
+ colId?: number;
100
+ innerRowId?: number;
101
+ colClass?: string;
102
+ onChange: (value: string | string[]) => void;
103
+ }
86
104
  interface DateTimePickerElement {
87
105
  id?: string;
88
106
  type: ElementType;
@@ -191,7 +209,7 @@ interface FileUploaderElement {
191
209
  innerRowId?: number;
192
210
  colClass?: string;
193
211
  }
194
- type FormElement = InputElement | TextareaElement | CheckboxElement | RadioButtonElement | SelectElement | DateTimePickerElement | TextElement | DividerElement | RichTextboxElement | TreeViewElement | ButtonElement | AutoCompleteInputElement | PhoneElement | FileUploaderElement;
212
+ type FormElement = InputElement | TextareaElement | CheckboxElement | RadioButtonElement | SelectElement | SimpleSelectElement | DateTimePickerElement | TextElement | DividerElement | RichTextboxElement | TreeViewElement | ButtonElement | AutoCompleteInputElement | PhoneElement | FileUploaderElement;
195
213
  interface CustomFormProps {
196
214
  elements: FormElement[];
197
215
  innerRowCustomClass?: string;
@@ -201,7 +219,6 @@ interface CustomFormProps {
201
219
  handleCancel?: () => void;
202
220
  showConfirmButton?: boolean;
203
221
  showCancelButton?: boolean;
204
- pendingFileCounts?: Record<string, number>;
205
222
  }
206
223
  declare const CustomForm: React.FC<CustomFormProps>;
207
224
  export { CustomForm, ElementType };
@@ -82,6 +82,7 @@ var CustomTextarea_1 = __importDefault(require("./CustomTextarea"));
82
82
  var CustomCheckbox_1 = __importDefault(require("./CustomCheckbox"));
83
83
  var CustomRadioButton_1 = __importDefault(require("./CustomRadioButton"));
84
84
  var CustomSelect_1 = __importDefault(require("./CustomSelect"));
85
+ var CustomSimpleSelect_1 = __importDefault(require("./CustomSimpleSelect"));
85
86
  var CustomDateTimePicker_1 = __importDefault(require("./CustomDateTimePicker"));
86
87
  var CustomText_1 = __importDefault(require("./CustomText"));
87
88
  var CustomDivider_1 = __importDefault(require("./CustomDivider"));
@@ -97,6 +98,7 @@ var ElementType;
97
98
  ElementType["CHECKBOX"] = "checkbox";
98
99
  ElementType["RADIO"] = "radio";
99
100
  ElementType["SELECT"] = "select";
101
+ ElementType["SIMPLESELECT"] = "simpleselect";
100
102
  ElementType["DATETIMEPICKER"] = "datetimepicker";
101
103
  ElementType["TEXT"] = "text";
102
104
  ElementType["DIVIDER"] = "divider";
@@ -114,13 +116,10 @@ var CustomForm = function (_a) {
114
116
  cancelLabel = _c === void 0 ? "Cancel" : _c, // Varsayılan değer
115
117
  handleCancel = _a.handleCancel, _d = _a.showConfirmButton, showConfirmButton = _d === void 0 ? true : _d, // Varsayılan olarak görünür
116
118
  _e = _a.showCancelButton, // Varsayılan olarak görünür
117
- showCancelButton = _e === void 0 ? false : _e, // Varsayılan olarak görünür
118
- pendingFileCounts = _a.pendingFileCounts;
119
+ showCancelButton = _e === void 0 ? false : _e;
119
120
  var formRef = (0, react_1.useRef)(null);
120
121
  var _f = (0, react_1.useState)(false), isLoading = _f[0], setIsLoading = _f[1];
121
122
  var _g = (0, react_1.useState)(false), submitted = _g[0], setSubmitted = _g[1];
122
- var isUploadingAnyFile = Object.values(pendingFileCounts || {}).some(function (count) { return count > 0; });
123
- var disableConfirmButton = isLoading || isUploadingAnyFile;
124
123
  var handleConfirm = function (e) { return __awaiter(void 0, void 0, void 0, function () {
125
124
  var form, customSelectValid, isValid, formValues_1, error_1;
126
125
  return __generator(this, function (_a) {
@@ -226,7 +225,7 @@ var CustomForm = function (_a) {
226
225
  var colId = _a[0], innerRows = _a[1];
227
226
  return (react_1.default.createElement("div", { className: "col", key: "col-".concat(rowId, "-").concat(colId) }, Object.entries(innerRows).map(function (_a) {
228
227
  var innerRowId = _a[0], elements = _a[1];
229
- 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.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 ? (
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 ? (
230
229
  // FILEUPLOADER elemanı için CustomFileUploader'ı render ediyoruz
231
230
  react_1.default.createElement(react_1.default.Fragment, null,
232
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)); })));
@@ -236,7 +235,7 @@ var CustomForm = function (_a) {
236
235
  (showConfirmButton || showCancelButton) && (react_1.default.createElement("div", { className: "card-footer mt-3" },
237
236
  react_1.default.createElement("div", { className: "form-actions mt-3", style: { display: "flex", justifyContent: "flex-end", gap: "10px" } },
238
237
  showCancelButton && (react_1.default.createElement(CustomButton_1.default, { label: cancelLabel, className: "btn btn-secondary", onClick: handleCancel || (function () { }), isLoading: isLoading })),
239
- 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 })))))));
240
239
  };
241
240
  exports.CustomForm = CustomForm;
242
241
  exports.default = CustomForm;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "albinasoft-ui-package",
3
- "version": "1.1.34",
3
+ "version": "1.1.36",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "scripts": {