albinasoft-ui-package 1.1.62 → 1.1.64
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/components/CustomContainer.d.ts +9 -0
- package/dist/components/CustomContainer.js +12 -0
- package/dist/components/CustomForm.d.ts +14 -2
- package/dist/components/CustomForm.js +3 -1
- package/dist/components/CustomTreeView.d.ts +1 -0
- package/dist/components/CustomTreeView.js +71 -33
- package/dist/index.d.ts +1 -0
- package/dist/index.js +3 -1
- package/package.json +1 -1
@@ -0,0 +1,9 @@
|
|
1
|
+
import React from "react";
|
2
|
+
export interface CustomContainerProps {
|
3
|
+
id?: string;
|
4
|
+
className?: string;
|
5
|
+
style?: React.CSSProperties;
|
6
|
+
children?: React.ReactNode;
|
7
|
+
}
|
8
|
+
declare const CustomContainer: React.FC<CustomContainerProps>;
|
9
|
+
export default CustomContainer;
|
@@ -0,0 +1,12 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
// CustomContainer.tsx
|
7
|
+
var react_1 = __importDefault(require("react"));
|
8
|
+
var CustomContainer = function (_a) {
|
9
|
+
var id = _a.id, _b = _a.className, className = _b === void 0 ? "custom-container" : _b, style = _a.style, children = _a.children;
|
10
|
+
return (react_1.default.createElement("div", { id: id, className: className, style: style }, children));
|
11
|
+
};
|
12
|
+
exports.default = CustomContainer;
|
@@ -17,7 +17,8 @@ declare enum ElementType {
|
|
17
17
|
BUTTON = "button",
|
18
18
|
AUTOCOMPLETEINPUT = "autocompleteinput",
|
19
19
|
PHONE = "phone",
|
20
|
-
FILEUPLOADER = "fileuploader"
|
20
|
+
FILEUPLOADER = "fileuploader",
|
21
|
+
CONTAINER = "container"
|
21
22
|
}
|
22
23
|
interface InputElement {
|
23
24
|
id?: string;
|
@@ -211,7 +212,18 @@ interface FileUploaderElement {
|
|
211
212
|
innerRowId?: number;
|
212
213
|
colClass?: string;
|
213
214
|
}
|
214
|
-
|
215
|
+
interface ContainerElement {
|
216
|
+
id?: string;
|
217
|
+
type: ElementType.CONTAINER;
|
218
|
+
className?: string;
|
219
|
+
style?: React.CSSProperties;
|
220
|
+
rowId?: number;
|
221
|
+
colId?: number;
|
222
|
+
innerRowId?: number;
|
223
|
+
colClass?: string;
|
224
|
+
children?: React.ReactNode;
|
225
|
+
}
|
226
|
+
type FormElement = InputElement | TextareaElement | CheckboxElement | RadioButtonElement | SelectElement | SimpleSelectElement | DateTimePickerElement | TextElement | DividerElement | RichTextboxElement | TreeViewElement | ButtonElement | AutoCompleteInputElement | PhoneElement | FileUploaderElement | ContainerElement;
|
215
227
|
interface CustomFormProps {
|
216
228
|
elements: FormElement[];
|
217
229
|
innerRowCustomClass?: string;
|
@@ -92,6 +92,7 @@ var CustomTreeView_1 = __importDefault(require("./CustomTreeView"));
|
|
92
92
|
var CustomAutocompleteInput_1 = __importDefault(require("./CustomAutocompleteInput"));
|
93
93
|
var CustomFileUploader_1 = __importDefault(require("./CustomFileUploader"));
|
94
94
|
var CustomPhoneInput_1 = __importDefault(require("./CustomPhoneInput"));
|
95
|
+
var CustomContainer_1 = __importDefault(require("./CustomContainer"));
|
95
96
|
var ElementType;
|
96
97
|
(function (ElementType) {
|
97
98
|
ElementType["INPUT"] = "input";
|
@@ -109,6 +110,7 @@ var ElementType;
|
|
109
110
|
ElementType["AUTOCOMPLETEINPUT"] = "autocompleteinput";
|
110
111
|
ElementType["PHONE"] = "phone";
|
111
112
|
ElementType["FILEUPLOADER"] = "fileuploader";
|
113
|
+
ElementType["CONTAINER"] = "container";
|
112
114
|
})(ElementType || (ElementType = {}));
|
113
115
|
exports.ElementType = ElementType;
|
114
116
|
var CustomForm = function (_a) {
|
@@ -263,7 +265,7 @@ var CustomForm = function (_a) {
|
|
263
265
|
} }))) : 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, { submitted: submitted }))) : 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 ? (
|
264
266
|
// FILEUPLOADER elemanı için CustomFileUploader'ı render ediyoruz
|
265
267
|
react_1.default.createElement(react_1.default.Fragment, null,
|
266
|
-
react_1.default.createElement(CustomFileUploader_1.default, { ref: getUploaderRefCb(element.id), url: element.url, multi: element.multi, allowedTypes: element.allowedTypes, maxFile: element.maxFile, maxSize: element.maxSize, required: element.required, submitted: submitted, onUploadComplete: element.onUploadComplete, onRemoveUploaded: element.onRemoveUploaded, onPendingChange: element.onPendingChange, clearTrigger: element.clearTrigger, label: element.label, translations: element.translations, onUploadingChange: setIsUploading, onNotify: onNotify }))) : null)); })));
|
268
|
+
react_1.default.createElement(CustomFileUploader_1.default, { ref: getUploaderRefCb(element.id), url: element.url, multi: element.multi, allowedTypes: element.allowedTypes, maxFile: element.maxFile, maxSize: element.maxSize, required: element.required, submitted: submitted, onUploadComplete: element.onUploadComplete, onRemoveUploaded: element.onRemoveUploaded, onPendingChange: element.onPendingChange, clearTrigger: element.clearTrigger, label: element.label, translations: element.translations, onUploadingChange: setIsUploading, onNotify: onNotify }))) : element.type === ElementType.CONTAINER ? (react_1.default.createElement(CustomContainer_1.default, __assign({}, element), element.children)) : null)); })));
|
267
269
|
})));
|
268
270
|
})));
|
269
271
|
}),
|
@@ -14,6 +14,7 @@ export interface CustomTreeViewProps {
|
|
14
14
|
required?: boolean;
|
15
15
|
submitted?: boolean;
|
16
16
|
errorMessage?: string;
|
17
|
+
clearTheLineOnSelect?: boolean;
|
17
18
|
onChange: (selected: string | string[] | null) => void;
|
18
19
|
}
|
19
20
|
declare const CustomTreeView: React.FC<CustomTreeViewProps>;
|
@@ -1,5 +1,4 @@
|
|
1
1
|
"use strict";
|
2
|
-
// src/components/CustomTreeView.tsx
|
3
2
|
var __assign = (this && this.__assign) || function () {
|
4
3
|
__assign = Object.assign || function(t) {
|
5
4
|
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
@@ -50,11 +49,11 @@ var TreeItem_1 = require("@mui/x-tree-view/TreeItem");
|
|
50
49
|
var fa_1 = require("react-icons/fa");
|
51
50
|
require("../assets/css/custom-treeview.css");
|
52
51
|
var CustomTreeView = function (_a) {
|
53
|
-
var label = _a.label, value = _a.value, treeData = _a.treeData, _b = _a.placeholder, placeholder = _b === void 0 ? "Ağaç Yapısını Filtrele..." : _b, _c = _a.multi, multi = _c === void 0 ? false : _c, _d = _a.required, required = _d === void 0 ? false : _d, submitted = _a.submitted, errorMessage = _a.errorMessage, onChange = _a.onChange;
|
54
|
-
var
|
55
|
-
var
|
56
|
-
var
|
57
|
-
//
|
52
|
+
var label = _a.label, value = _a.value, treeData = _a.treeData, _b = _a.placeholder, placeholder = _b === void 0 ? "Ağaç Yapısını Filtrele..." : _b, _c = _a.multi, multi = _c === void 0 ? false : _c, _d = _a.required, required = _d === void 0 ? false : _d, submitted = _a.submitted, errorMessage = _a.errorMessage, _f = _a.clearTheLineOnSelect, clearTheLineOnSelect = _f === void 0 ? false : _f, onChange = _a.onChange;
|
53
|
+
var _g = (0, react_1.useState)(""), filterTerm = _g[0], setFilterTerm = _g[1];
|
54
|
+
var _h = (0, react_1.useState)([]), selectedItems = _h[0], setSelectedItems = _h[1];
|
55
|
+
var _j = (0, react_1.useState)([]), expandedItems = _j[0], setExpandedItems = _j[1];
|
56
|
+
// ---- Helpers ----
|
58
57
|
var findNodeByValue = function (nodes, val) {
|
59
58
|
for (var _i = 0, nodes_1 = nodes; _i < nodes_1.length; _i++) {
|
60
59
|
var node = nodes_1[_i];
|
@@ -72,7 +71,48 @@ var CustomTreeView = function (_a) {
|
|
72
71
|
var node = findNodeByValue(nodes, val);
|
73
72
|
return node ? node.label : val;
|
74
73
|
};
|
75
|
-
//
|
74
|
+
// Bir düğümün köke kadar yolunu döndür (root..target)
|
75
|
+
var findPathToNode = function (nodes, target, path) {
|
76
|
+
if (path === void 0) { path = []; }
|
77
|
+
for (var _i = 0, nodes_2 = nodes; _i < nodes_2.length; _i++) {
|
78
|
+
var node = nodes_2[_i];
|
79
|
+
var currentPath = __spreadArray(__spreadArray([], path, true), [node.value], false);
|
80
|
+
if (node.value === target)
|
81
|
+
return currentPath;
|
82
|
+
if (node.children) {
|
83
|
+
var result = findPathToNode(node.children, target, currentPath);
|
84
|
+
if (result)
|
85
|
+
return result;
|
86
|
+
}
|
87
|
+
}
|
88
|
+
return null;
|
89
|
+
};
|
90
|
+
// Bir düğümün atalarını (kök dâhil, kendisi hariç) döndür
|
91
|
+
var getAncestors = function (nodes, target) {
|
92
|
+
var path = findPathToNode(nodes, target);
|
93
|
+
if (!path)
|
94
|
+
return [];
|
95
|
+
return path.slice(0, -1);
|
96
|
+
};
|
97
|
+
// Bir düğümün tüm altlarını (çocuk/torun…) döndür
|
98
|
+
var getDescendants = function (nodes, target) {
|
99
|
+
var root = findNodeByValue(nodes, target);
|
100
|
+
if (!root)
|
101
|
+
return [];
|
102
|
+
var acc = [];
|
103
|
+
var walk = function (n) {
|
104
|
+
if (!n.children)
|
105
|
+
return;
|
106
|
+
for (var _i = 0, _a = n.children; _i < _a.length; _i++) {
|
107
|
+
var c = _a[_i];
|
108
|
+
acc.push(c.value);
|
109
|
+
walk(c);
|
110
|
+
}
|
111
|
+
};
|
112
|
+
walk(root);
|
113
|
+
return acc;
|
114
|
+
};
|
115
|
+
// ---- State <-> Prop senkronizasyonu ----
|
76
116
|
(0, react_1.useEffect)(function () {
|
77
117
|
var initial = Array.isArray(value) ? value : value ? [value] : [];
|
78
118
|
setSelectedItems(initial);
|
@@ -83,21 +123,6 @@ var CustomTreeView = function (_a) {
|
|
83
123
|
return;
|
84
124
|
var valuesArray = Array.isArray(value) ? value : [value];
|
85
125
|
var pathsToExpand = new Set();
|
86
|
-
var findPathToNode = function (nodes, target, path) {
|
87
|
-
if (path === void 0) { path = []; }
|
88
|
-
for (var _i = 0, nodes_2 = nodes; _i < nodes_2.length; _i++) {
|
89
|
-
var node = nodes_2[_i];
|
90
|
-
var currentPath = __spreadArray(__spreadArray([], path, true), [node.value], false);
|
91
|
-
if (node.value === target)
|
92
|
-
return currentPath;
|
93
|
-
if (node.children) {
|
94
|
-
var result = findPathToNode(node.children, target, currentPath);
|
95
|
-
if (result)
|
96
|
-
return result;
|
97
|
-
}
|
98
|
-
}
|
99
|
-
return null;
|
100
|
-
};
|
101
126
|
valuesArray.forEach(function (val) {
|
102
127
|
var path = findPathToNode(treeData, val);
|
103
128
|
if (path) {
|
@@ -106,7 +131,7 @@ var CustomTreeView = function (_a) {
|
|
106
131
|
});
|
107
132
|
setExpandedItems(Array.from(pathsToExpand));
|
108
133
|
}, [value, treeData]);
|
109
|
-
//
|
134
|
+
// ---- Filtreleme ----
|
110
135
|
var filterTree = function (nodes, term) {
|
111
136
|
var norm = term.toLocaleLowerCase("tr-TR");
|
112
137
|
var paths = [];
|
@@ -130,39 +155,52 @@ var CustomTreeView = function (_a) {
|
|
130
155
|
pathsToExpand: Array.from(new Set(paths)),
|
131
156
|
};
|
132
157
|
};
|
133
|
-
|
134
|
-
|
135
|
-
? filterTree(treeData, filterTerm)
|
136
|
-
: { filteredNodes: treeData, pathsToExpand: [] }, filteredNodes = _j.filteredNodes, pathsToExpand = _j.pathsToExpand;
|
137
|
-
// Auto-expand when filtering
|
158
|
+
var _k = filterTree(treeData, filterTerm), filteredNodes = _k.filteredNodes, pathsToExpand = _k.pathsToExpand;
|
159
|
+
// Filtre aktifken otomatik expand
|
138
160
|
(0, react_1.useEffect)(function () {
|
139
161
|
if (filterTerm) {
|
140
162
|
setExpandedItems(pathsToExpand);
|
141
163
|
}
|
142
164
|
}, [filterTerm, pathsToExpand]);
|
143
|
-
//
|
165
|
+
// ---- Seçim değişimi ----
|
144
166
|
var handleSelectionChange = function (_evt, itemIds) {
|
145
167
|
var newSel = Array.isArray(itemIds) ? itemIds : itemIds ? [itemIds] : [];
|
168
|
+
// Önceki ve yeni seçimler arasındaki farktan eklenen/kaldırılanı bul
|
169
|
+
var prev = new Set(selectedItems);
|
170
|
+
var curr = new Set(newSel);
|
171
|
+
var added = Array.from(curr).filter(function (id) { return !prev.has(id); });
|
172
|
+
var removed = Array.from(prev).filter(function (id) { return !curr.has(id); });
|
173
|
+
var addedId = added[0] || null;
|
174
|
+
if (clearTheLineOnSelect && addedId) {
|
175
|
+
// Sadece addedId çizgisini temizle (atalar + altlar)
|
176
|
+
var toRemove_1 = new Set();
|
177
|
+
getAncestors(treeData, addedId).forEach(function (a) { return toRemove_1.add(a); });
|
178
|
+
getDescendants(treeData, addedId).forEach(function (d) { return toRemove_1.add(d); });
|
179
|
+
// addedId'yi daima koru
|
180
|
+
newSel = newSel.filter(function (val) { return val === addedId || !toRemove_1.has(val); });
|
181
|
+
// Emniyet: addedId listede değilse ekle
|
182
|
+
if (!newSel.includes(addedId)) {
|
183
|
+
newSel = __spreadArray(__spreadArray([], newSel, true), [addedId], false);
|
184
|
+
}
|
185
|
+
}
|
146
186
|
setSelectedItems(newSel);
|
147
187
|
onChange(multi ? newSel : newSel[0] || null);
|
148
188
|
};
|
149
|
-
//
|
189
|
+
// Tek bir rozet (badge) kaldırma
|
150
190
|
var handleBadgeRemove = function (val) {
|
151
191
|
var filtered = selectedItems.filter(function (v) { return v !== val; });
|
152
192
|
setSelectedItems(filtered);
|
153
193
|
onChange(multi ? filtered : filtered[0] || null);
|
154
194
|
};
|
155
|
-
// Clear filter only
|
156
195
|
var handleReset = function () {
|
157
196
|
setFilterTerm("");
|
158
197
|
};
|
159
|
-
// Clear all selections
|
160
198
|
var handleClearAll = function () {
|
161
199
|
setSelectedItems([]);
|
162
200
|
onChange(multi ? [] : null);
|
163
201
|
setExpandedItems([]);
|
164
202
|
};
|
165
|
-
//
|
203
|
+
// Ağaç render (recursive)
|
166
204
|
var renderTree = function (nodes) {
|
167
205
|
return nodes.map(function (node) { return (react_1.default.createElement(TreeItem_1.TreeItem, { key: node.value, itemId: node.value, label: react_1.default.createElement("span", { onClick: function () {
|
168
206
|
var next = multi
|
package/dist/index.d.ts
CHANGED
@@ -19,5 +19,6 @@ export { default as CustomRichTextbox } from './components/CustomRichTextbox';
|
|
19
19
|
export { default as CustomProgressBar } from './components/CustomProgressBar';
|
20
20
|
export { default as CustomTab, AlignTabs, TabSize, type TabItem, type CustomTabProps, } from './components/CustomTab';
|
21
21
|
export { default as CustomTimeline, DotColor, type AdditionalInfo, type TimelineElement, } from './components/CustomTimeline';
|
22
|
+
export { default as CustomContainer, type CustomContainerProps, } from './components/CustomContainer';
|
22
23
|
export type { Notify } from './types/notify';
|
23
24
|
export { noopNotify } from './types/notify';
|
package/dist/index.js
CHANGED
@@ -4,7 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
4
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
5
5
|
};
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
7
|
-
exports.noopNotify = exports.DotColor = exports.CustomTimeline = exports.TabSize = exports.AlignTabs = exports.CustomTab = exports.CustomProgressBar = exports.CustomRichTextbox = exports.defaultTranslations = exports.AllowedTypes = exports.CustomFileUploader = exports.CustomDatatable = exports.CustomModal = exports.DividerWidth = exports.DividerThickness = exports.DividerAlignment = exports.DividerColor = exports.CustomDivider = exports.TextColor = exports.FontWeight = exports.LineHeight = exports.FontSize = exports.TextAlign = exports.TextType = exports.CustomText = exports.TimeFormat = exports.CustomDateTimePicker = exports.CustomTreeView = exports.CustomSimpleSelect = exports.CustomSelect = exports.CustomRadioButton = exports.CustomPhoneInput = exports.CustomTextarea = exports.InputType = exports.CustomInput = exports.CustomCheckbox = exports.CustomButton = exports.CustomAutocompleteInput = exports.ElementType = exports.CustomForm = void 0;
|
7
|
+
exports.noopNotify = exports.CustomContainer = exports.DotColor = exports.CustomTimeline = exports.TabSize = exports.AlignTabs = exports.CustomTab = exports.CustomProgressBar = exports.CustomRichTextbox = exports.defaultTranslations = exports.AllowedTypes = exports.CustomFileUploader = exports.CustomDatatable = exports.CustomModal = exports.DividerWidth = exports.DividerThickness = exports.DividerAlignment = exports.DividerColor = exports.CustomDivider = exports.TextColor = exports.FontWeight = exports.LineHeight = exports.FontSize = exports.TextAlign = exports.TextType = exports.CustomText = exports.TimeFormat = exports.CustomDateTimePicker = exports.CustomTreeView = exports.CustomSimpleSelect = exports.CustomSelect = exports.CustomRadioButton = exports.CustomPhoneInput = exports.CustomTextarea = exports.InputType = exports.CustomInput = exports.CustomCheckbox = exports.CustomButton = exports.CustomAutocompleteInput = exports.ElementType = exports.CustomForm = void 0;
|
8
8
|
// ---- Form orchestrator ----
|
9
9
|
var CustomForm_1 = require("./components/CustomForm");
|
10
10
|
Object.defineProperty(exports, "CustomForm", { enumerable: true, get: function () { return __importDefault(CustomForm_1).default; } });
|
@@ -74,5 +74,7 @@ Object.defineProperty(exports, "TabSize", { enumerable: true, get: function () {
|
|
74
74
|
var CustomTimeline_1 = require("./components/CustomTimeline");
|
75
75
|
Object.defineProperty(exports, "CustomTimeline", { enumerable: true, get: function () { return __importDefault(CustomTimeline_1).default; } });
|
76
76
|
Object.defineProperty(exports, "DotColor", { enumerable: true, get: function () { return CustomTimeline_1.DotColor; } });
|
77
|
+
var CustomContainer_1 = require("./components/CustomContainer");
|
78
|
+
Object.defineProperty(exports, "CustomContainer", { enumerable: true, get: function () { return __importDefault(CustomContainer_1).default; } });
|
77
79
|
var notify_1 = require("./types/notify");
|
78
80
|
Object.defineProperty(exports, "noopNotify", { enumerable: true, get: function () { return notify_1.noopNotify; } });
|