albinasoft-ui-package 1.1.5 → 1.1.7

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.
@@ -4,12 +4,18 @@ export interface TreeNode {
4
4
  value: string;
5
5
  children?: TreeNode[];
6
6
  }
7
- interface CustomTreeViewProps {
7
+ export interface CustomTreeViewProps {
8
+ /** Eğer başlık göstermek isterseniz */
8
9
  label?: string;
10
+ /** Seçili değerin (veya çokluysa dizi halinde) prop’u */
9
11
  value: string | string[] | null;
12
+ /** Gösterilecek ağaç verisi */
10
13
  treeData: TreeNode[];
14
+ /** Input placeholder’ı */
11
15
  placeholder?: string;
16
+ /** Çoklu seçim modu */
12
17
  multi?: boolean;
18
+ /** Seçim değiştiğinde çağrılır */
13
19
  onChange: (selected: string | string[] | null) => void;
14
20
  }
15
21
  declare const CustomTreeView: React.FC<CustomTreeViewProps>;
@@ -1,4 +1,5 @@
1
1
  "use strict";
2
+ // src/components/CustomTreeView.tsx
2
3
  var __assign = (this && this.__assign) || function () {
3
4
  __assign = Object.assign || function(t) {
4
5
  for (var s, i = 1, n = arguments.length; i < n; i++) {
@@ -51,10 +52,9 @@ var CustomInput_1 = __importStar(require("./CustomInput"));
51
52
  var CustomTreeView = function (_a) {
52
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, onChange = _a.onChange;
53
54
  var _d = (0, react_1.useState)(''), filterTerm = _d[0], setFilterTerm = _d[1];
54
- var _e = (0, react_1.useState)([]), selectedItems = _e[0], setSelectedItems = _e[1];
55
- var _f = (0, react_1.useState)([]), expandedItems = _f[0], setExpandedItems = _f[1];
56
- var _g = (0, react_1.useState)(''), inputValue = _g[0], setInputValue = _g[1];
57
- var _h = (0, react_1.useState)(false), isInputDisabled = _h[0], setIsInputDisabled = _h[1];
55
+ var _f = (0, react_1.useState)([]), selectedItems = _f[0], setSelectedItems = _f[1];
56
+ var _g = (0, react_1.useState)([]), expandedItems = _g[0], setExpandedItems = _g[1];
57
+ // Ağacın tüm node ID’lerini toplar
58
58
  var getAllNodeIds = function (nodes) {
59
59
  return nodes.reduce(function (acc, node) {
60
60
  acc.push(node.value);
@@ -63,6 +63,7 @@ var CustomTreeView = function (_a) {
63
63
  return acc;
64
64
  }, []);
65
65
  };
66
+ // Value’dan başlık bulmak için yardımcı
66
67
  var findNodeByValue = function (nodes, val) {
67
68
  for (var _i = 0, nodes_1 = nodes; _i < nodes_1.length; _i++) {
68
69
  var node = nodes_1[_i];
@@ -78,114 +79,96 @@ var CustomTreeView = function (_a) {
78
79
  };
79
80
  var findLabelByValue = function (nodes, val) {
80
81
  var node = findNodeByValue(nodes, val);
81
- return node ? node.label : '';
82
+ return node ? node.label : val;
82
83
  };
84
+ // Props value’dan selectedItems’e yansıt
83
85
  (0, react_1.useEffect)(function () {
84
- var initialSelected = Array.isArray(value)
86
+ var initial = Array.isArray(value)
85
87
  ? value
86
88
  : value
87
89
  ? [value]
88
90
  : [];
89
- setSelectedItems(initialSelected);
90
- if (initialSelected.length) {
91
- var labels = initialSelected.map(function (val) { return findLabelByValue(treeData, val); });
92
- setInputValue(labels.join(', '));
93
- setIsInputDisabled(true);
94
- setExpandedItems(getAllNodeIds(treeData));
95
- }
96
- else {
97
- setExpandedItems(getAllNodeIds(treeData));
98
- setInputValue('');
99
- setIsInputDisabled(false);
100
- }
101
- }, [value, treeData]);
91
+ setSelectedItems(initial);
92
+ }, [value]);
93
+ // Filtre ve expand mantığı
102
94
  var filterTree = function (nodes, term) {
103
- var normalizedTerm = term.toLocaleLowerCase('tr-TR');
104
- var pathsToExpand = [];
105
- var filteredNodes = nodes
95
+ var norm = term.toLocaleLowerCase('tr-TR');
96
+ var paths = [];
97
+ var filtered = nodes
106
98
  .map(function (node) {
107
- var normalizedLabel = node.label.toLocaleLowerCase('tr-TR');
108
- var matches = normalizedLabel.includes(normalizedTerm);
109
- var childrenResult = node.children
99
+ var labelNorm = node.label.toLocaleLowerCase('tr-TR');
100
+ var childResult = node.children
110
101
  ? filterTree(node.children, term)
111
102
  : { filteredNodes: [], pathsToExpand: [] };
112
- if (matches || childrenResult.filteredNodes.length) {
113
- pathsToExpand = __spreadArray(__spreadArray(__spreadArray([], pathsToExpand, true), [
114
- node.value
115
- ], false), childrenResult.pathsToExpand, true);
116
- return __assign(__assign({}, node), { children: childrenResult.filteredNodes.length > 0
117
- ? childrenResult.filteredNodes
103
+ if (labelNorm.includes(norm) || childResult.filteredNodes.length) {
104
+ paths.push.apply(paths, __spreadArray([node.value], childResult.pathsToExpand, false));
105
+ return __assign(__assign({}, node), { children: childResult.filteredNodes.length > 0
106
+ ? childResult.filteredNodes
118
107
  : undefined });
119
108
  }
120
109
  return null;
121
110
  })
122
111
  .filter(Boolean);
123
- return { filteredNodes: filteredNodes, pathsToExpand: pathsToExpand };
112
+ return { filteredNodes: filtered, pathsToExpand: Array.from(new Set(paths)) };
124
113
  };
125
- var _j = filterTerm
114
+ var _h = filterTerm
126
115
  ? filterTree(treeData, filterTerm)
127
- : { filteredNodes: treeData, pathsToExpand: [] }, filteredNodes = _j.filteredNodes, pathsToExpand = _j.pathsToExpand;
116
+ : { filteredNodes: treeData, pathsToExpand: [] }, filteredNodes = _h.filteredNodes, pathsToExpand = _h.pathsToExpand;
117
+ // Yalnızca filtre yaptığımızda aç
128
118
  (0, react_1.useEffect)(function () {
129
119
  if (filterTerm) {
130
120
  setExpandedItems(pathsToExpand);
131
121
  }
132
122
  }, [filterTerm, pathsToExpand]);
133
- var handleSelectionChange = function (_event, itemIds) {
134
- var newSelected = Array.isArray(itemIds)
123
+ // Seçim değiştiğinde hem state’e hem de parent’a bildir
124
+ var handleSelectionChange = function (_evt, itemIds) {
125
+ var newSel = Array.isArray(itemIds)
135
126
  ? itemIds
136
127
  : itemIds
137
128
  ? [itemIds]
138
129
  : [];
139
- setSelectedItems(newSelected);
130
+ setSelectedItems(newSel);
140
131
  if (multi) {
141
- onChange(newSelected);
142
- var labels = newSelected.map(function (val) { return findLabelByValue(treeData, val); });
143
- setInputValue(labels.join(', '));
144
- setIsInputDisabled(!!labels.length);
132
+ onChange(newSel);
145
133
  }
146
134
  else {
147
- var single = newSelected[0] || null;
148
- onChange(single);
149
- if (single) {
150
- setInputValue(findLabelByValue(treeData, single));
151
- setIsInputDisabled(true);
152
- }
153
- else {
154
- setInputValue('');
155
- setIsInputDisabled(false);
156
- }
135
+ onChange(newSel[0] || null);
157
136
  }
158
137
  };
159
- var handleLabelClick = function (val) {
160
- var newSelected;
161
- if (multi) {
162
- newSelected = selectedItems.includes(val)
163
- ? selectedItems.filter(function (v) { return v !== val; })
164
- : __spreadArray(__spreadArray([], selectedItems, true), [val], false);
165
- }
166
- else {
167
- newSelected = [val];
168
- }
169
- // simulate SyntheticEvent
170
- handleSelectionChange({}, newSelected);
138
+ // Badge’e tıklayıp seçimi kaldır
139
+ var handleBadgeRemove = function (val) {
140
+ var filtered = selectedItems.filter(function (v) { return v !== val; });
141
+ setSelectedItems(filtered);
142
+ onChange(multi ? filtered : filtered[0] || null);
171
143
  };
144
+ // Filtreyi sıfırla
172
145
  var handleReset = function () {
173
146
  setFilterTerm('');
174
147
  setSelectedItems([]);
175
148
  onChange(multi ? [] : null);
176
- setInputValue('');
177
- setIsInputDisabled(false);
178
- setExpandedItems(getAllNodeIds(treeData));
149
+ setExpandedItems([]);
179
150
  };
151
+ // Ağaç elemanlarını render et
180
152
  var renderTree = function (nodes) {
181
- 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 () { return handleLabelClick(node.value); }, style: { cursor: 'pointer' } }, node.label.trim() === '' ? 'Kök' : node.label) }, node.children ? renderTree(node.children) : null)); });
153
+ 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 () {
154
+ // TreeItem label’ına tıklayınca da seçilsin
155
+ var next = multi
156
+ ? selectedItems.includes(node.value)
157
+ ? selectedItems.filter(function (v) { return v !== node.value; })
158
+ : __spreadArray(__spreadArray([], selectedItems, true), [node.value], false)
159
+ : [node.value];
160
+ handleSelectionChange({}, next);
161
+ }, style: { cursor: 'pointer' } }, node.label || 'Kök') }, node.children ? renderTree(node.children) : null)); });
182
162
  };
183
163
  return (react_1.default.createElement("div", null,
184
164
  label && react_1.default.createElement("label", null, label),
185
- react_1.default.createElement(CustomInput_1.default, { id: "tree-search", value: inputValue || filterTerm, inputType: CustomInput_1.InputType.TEXT, disabled: isInputDisabled, placeholder: placeholder, buttonIcon: react_1.default.createElement(fa_1.FaTimes, null), buttonClass: "btn btn-danger bg-soft-danger", buttonOnClick: handleReset, onChange: function (e) { return setFilterTerm(e.target.value); } }),
186
- react_1.default.createElement(SimpleTreeView_1.SimpleTreeView, { checkboxSelection: true, multiSelect: multi, selectedItems: selectedItems, expandedItems: expandedItems, onSelectedItemsChange: handleSelectionChange, onExpandedItemsChange: function (event, itemIds) {
187
- var ids = Array.isArray(itemIds) ? itemIds : itemIds ? [itemIds] : [];
188
- setExpandedItems(ids);
165
+ react_1.default.createElement(CustomInput_1.default, { id: "tree-search", value: filterTerm, inputType: CustomInput_1.InputType.TEXT, placeholder: placeholder, buttonIcon: react_1.default.createElement(fa_1.FaTimes, null), buttonClass: "btn btn-danger bg-soft-danger", buttonOnClick: handleReset, onChange: function (e) { return setFilterTerm(e.target.value); } }),
166
+ selectedItems.length > 0 && (react_1.default.createElement("div", { className: "mt-1" }, selectedItems.map(function (val) { return (react_1.default.createElement("span", { key: val, className: "badge bg-secondary me-1", style: { cursor: 'pointer' }, onClick: function () { return handleBadgeRemove(val); } },
167
+ findLabelByValue(treeData, val),
168
+ " \u00D7")); }))),
169
+ react_1.default.createElement(SimpleTreeView_1.SimpleTreeView, { checkboxSelection: true, multiSelect: multi, selectedItems: selectedItems, expandedItems: expandedItems, onSelectedItemsChange: handleSelectionChange, onExpandedItemsChange: function (_e, ids) {
170
+ var arr = Array.isArray(ids) ? ids : ids ? [ids] : [];
171
+ setExpandedItems(arr);
189
172
  } }, renderTree(filteredNodes))));
190
173
  };
191
174
  exports.default = CustomTreeView;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "albinasoft-ui-package",
3
- "version": "1.1.5",
3
+ "version": "1.1.7",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "scripts": {