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
|
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
|
-
|
326
|
-
if (
|
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
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
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
|
-
|
396
|
-
return [
|
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
|
-
|
342
|
+
response = _a.sent();
|
343
|
+
if (!response.ok) return [3 /*break*/, 4];
|
344
|
+
return [4 /*yield*/, response.json()];
|
400
345
|
case 3:
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
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
|
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
|
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;
|