albinasoft-ui-package 1.0.22 → 1.0.25
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.
@@ -0,0 +1,38 @@
|
|
1
|
+
.progress-bar-container {
|
2
|
+
margin-bottom: 30px;
|
3
|
+
padding: 10px;
|
4
|
+
width: 100%;
|
5
|
+
}
|
6
|
+
|
7
|
+
.step-item {
|
8
|
+
cursor: pointer;
|
9
|
+
display: flex;
|
10
|
+
align-items: center;
|
11
|
+
flex-direction: column;
|
12
|
+
position: relative;
|
13
|
+
z-index: 1;
|
14
|
+
}
|
15
|
+
|
16
|
+
.step-circle {
|
17
|
+
width: 30px;
|
18
|
+
height: 30px;
|
19
|
+
border-radius: 50%;
|
20
|
+
color: #fff;
|
21
|
+
display: flex;
|
22
|
+
justify-content: center;
|
23
|
+
align-items: center;
|
24
|
+
font-weight: bold;
|
25
|
+
margin-bottom: 10px;
|
26
|
+
}
|
27
|
+
|
28
|
+
.step-label {
|
29
|
+
font-size: 14px;
|
30
|
+
font-weight: bold;
|
31
|
+
}
|
32
|
+
|
33
|
+
.step-line {
|
34
|
+
flex: 1;
|
35
|
+
height: 4px;
|
36
|
+
margin: 0 10px;
|
37
|
+
}
|
38
|
+
|
@@ -0,0 +1,9 @@
|
|
1
|
+
import React from "react";
|
2
|
+
import "@css/ProgressBar.css";
|
3
|
+
interface ProgressBarProps {
|
4
|
+
activeStep: number;
|
5
|
+
stepLabels: string[];
|
6
|
+
onStepClick: (step: number) => void;
|
7
|
+
}
|
8
|
+
declare const ProgressBar: React.FC<ProgressBarProps>;
|
9
|
+
export default ProgressBar;
|
@@ -0,0 +1,40 @@
|
|
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
|
+
var react_1 = __importDefault(require("react"));
|
7
|
+
require("@css/ProgressBar.css");
|
8
|
+
var ProgressBar = function (_a) {
|
9
|
+
var activeStep = _a.activeStep, stepLabels = _a.stepLabels, onStepClick = _a.onStepClick;
|
10
|
+
return (react_1.default.createElement("div", { className: "progress-bar-container" },
|
11
|
+
react_1.default.createElement("div", { style: { display: "flex", alignItems: "center", position: "relative" } }, stepLabels.map(function (label, index) {
|
12
|
+
var currentStep = index + 1;
|
13
|
+
var isActive = activeStep >= currentStep;
|
14
|
+
var isCompleted = activeStep > currentStep;
|
15
|
+
return (react_1.default.createElement(react_1.default.Fragment, { key: label },
|
16
|
+
react_1.default.createElement("div", { onClick: function () { return onStepClick(currentStep); }, className: "step-item", style: {
|
17
|
+
cursor: activeStep === currentStep ? "default" : "pointer",
|
18
|
+
zIndex: isActive ? 2 : 1,
|
19
|
+
} },
|
20
|
+
react_1.default.createElement("div", { className: "step-circle", style: {
|
21
|
+
backgroundColor: isCompleted
|
22
|
+
? "#4caf50"
|
23
|
+
: isActive
|
24
|
+
? "#ffa500"
|
25
|
+
: "#ccc",
|
26
|
+
border: isActive ? "2px solid #4caf50" : "none",
|
27
|
+
} }, currentStep),
|
28
|
+
react_1.default.createElement("span", { className: "step-label", style: {
|
29
|
+
color: isCompleted
|
30
|
+
? "#4caf50"
|
31
|
+
: isActive
|
32
|
+
? "#ffa500"
|
33
|
+
: "#ccc",
|
34
|
+
} }, label)),
|
35
|
+
index < stepLabels.length - 1 && (react_1.default.createElement("div", { className: "step-line", style: {
|
36
|
+
backgroundColor: activeStep > currentStep ? "#4caf50" : "#ddd",
|
37
|
+
} }))));
|
38
|
+
}))));
|
39
|
+
};
|
40
|
+
exports.default = ProgressBar;
|
@@ -52,17 +52,19 @@ require("react-checkbox-tree/lib/react-checkbox-tree.css");
|
|
52
52
|
var fa_1 = require("react-icons/fa");
|
53
53
|
var CustomInput_1 = __importStar(require("./CustomInput"));
|
54
54
|
var CustomTreeView = function (_a) {
|
55
|
-
var label = _a.label, value = _a.value, treeData = _a.treeData, onChange = _a.onChange;
|
56
|
-
var
|
57
|
-
var
|
58
|
-
var
|
59
|
-
var
|
60
|
-
var
|
61
|
-
|
55
|
+
var label = _a.label, value = _a.value, treeData = _a.treeData, _b = _a.placeholder, placeholder = _b === void 0 ? "Ağaç Yapısını Filtrele..." : _b, onChange = _a.onChange;
|
56
|
+
var _c = (0, react_1.useState)(value ? [value] : []), checked = _c[0], setChecked = _c[1];
|
57
|
+
var _d = (0, react_1.useState)([]), expanded = _d[0], setExpanded = _d[1];
|
58
|
+
var _e = (0, react_1.useState)(''), filterTerm = _e[0], setFilterTerm = _e[1];
|
59
|
+
var _f = (0, react_1.useState)(treeData), filteredTreeData = _f[0], setFilteredTreeData = _f[1];
|
60
|
+
var _g = (0, react_1.useState)([]), selectedPath = _g[0], setSelectedPath = _g[1];
|
61
|
+
var _h = (0, react_1.useState)(''), inputValue = _h[0], setInputValue = _h[1];
|
62
|
+
var _j = (0, react_1.useState)(false), isInputDisabled = _j[0], setIsInputDisabled = _j[1];
|
63
|
+
// Recursive function to add `showCheckbox` only for leaf nodes
|
62
64
|
var markLeafCheckboxOnly = function (nodes) {
|
63
65
|
return nodes.map(function (node) { return (__assign(__assign({}, node), { showCheckbox: !(Array.isArray(node.children) && node.children.length > 0), children: node.children ? markLeafCheckboxOnly(node.children) : undefined })); });
|
64
66
|
};
|
65
|
-
//
|
67
|
+
// Parent Path'i Bulma (recursive)
|
66
68
|
var findParentPath = function (nodes, targetValue, path) {
|
67
69
|
if (path === void 0) { path = []; }
|
68
70
|
for (var _i = 0, nodes_1 = nodes; _i < nodes_1.length; _i++) {
|
@@ -79,11 +81,11 @@ var CustomTreeView = function (_a) {
|
|
79
81
|
}
|
80
82
|
return null;
|
81
83
|
};
|
82
|
-
//
|
84
|
+
// Filtreleme fonksiyonu (path'leri de genişletiyoruz)
|
83
85
|
var filterTreeData = function (nodes, searchTerm) {
|
84
86
|
var pathsToExpand = [];
|
85
87
|
var filteredNodes = nodes.map(function (node) {
|
86
|
-
var nodeMatches = node.label.
|
88
|
+
var nodeMatches = node.label.toLocaleLowerCase('tr-TR').includes(searchTerm.toLocaleLowerCase('tr-TR'));
|
87
89
|
var children = node.children ? filterTreeData(node.children, searchTerm) : { filteredNodes: [], pathsToExpand: [] };
|
88
90
|
var childMatches = children.filteredNodes.length > 0;
|
89
91
|
if (nodeMatches || childMatches) {
|
@@ -94,7 +96,21 @@ var CustomTreeView = function (_a) {
|
|
94
96
|
}).filter(Boolean);
|
95
97
|
return { filteredNodes: filteredNodes, pathsToExpand: pathsToExpand };
|
96
98
|
};
|
97
|
-
//
|
99
|
+
// Belirtilen value'ya karşılık gelen leaf'in label'ını bulur (recursive)
|
100
|
+
var findLeafLabel = function (nodes, targetValue) {
|
101
|
+
for (var _i = 0, nodes_2 = nodes; _i < nodes_2.length; _i++) {
|
102
|
+
var node = nodes_2[_i];
|
103
|
+
if (node.value === targetValue)
|
104
|
+
return node.label;
|
105
|
+
if (node.children) {
|
106
|
+
var result = findLeafLabel(node.children, targetValue);
|
107
|
+
if (result)
|
108
|
+
return result;
|
109
|
+
}
|
110
|
+
}
|
111
|
+
return null;
|
112
|
+
};
|
113
|
+
// Filtreleme işlemi
|
98
114
|
(0, react_1.useEffect)(function () {
|
99
115
|
if (filterTerm.trim() === '') {
|
100
116
|
setFilteredTreeData(treeData);
|
@@ -106,7 +122,7 @@ var CustomTreeView = function (_a) {
|
|
106
122
|
setExpanded(Array.from(new Set(__spreadArray(__spreadArray([], pathsToExpand, true), selectedPath, true)))); // 🔥 Genişletilecek tüm path'leri belirle
|
107
123
|
}
|
108
124
|
}, [filterTerm, treeData, selectedPath]);
|
109
|
-
//
|
125
|
+
// Kullanıcı bir leaf seçtiğinde, o leaf'in parent'larını genişlet
|
110
126
|
var handleCheck = function (checkedNodes) {
|
111
127
|
var newlySelected = checkedNodes.find(function (node) { return !checked.includes(node); });
|
112
128
|
var selectedLeaf = newlySelected || '';
|
@@ -117,13 +133,23 @@ var CustomTreeView = function (_a) {
|
|
117
133
|
setSelectedPath(parentPath); // 🔥 Kalıcı olarak bu path'i hatırla
|
118
134
|
setExpanded(parentPath); // 🔥 Yalnızca bu leaf'in parent path'i açık kalacak
|
119
135
|
}
|
136
|
+
var selectedLabel = findLeafLabel(treeData, selectedLeaf) || '';
|
137
|
+
setInputValue(selectedLabel);
|
138
|
+
setIsInputDisabled(true);
|
120
139
|
}
|
121
|
-
setFilterTerm('');
|
140
|
+
setFilterTerm('');
|
122
141
|
onChange(selectedLeaf);
|
123
142
|
};
|
143
|
+
var handleReset = function () {
|
144
|
+
setFilterTerm('');
|
145
|
+
setChecked([]);
|
146
|
+
setExpanded([]);
|
147
|
+
setInputValue('');
|
148
|
+
setIsInputDisabled(false);
|
149
|
+
};
|
124
150
|
return (react_1.default.createElement("div", null,
|
125
151
|
label && react_1.default.createElement("label", null, label),
|
126
|
-
react_1.default.createElement(CustomInput_1.default, { id: "tree-search", value: filterTerm, inputType: CustomInput_1.InputType.TEXT, placeholder:
|
152
|
+
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); } }),
|
127
153
|
react_1.default.createElement(react_checkbox_tree_1.default, { nodes: markLeafCheckboxOnly(filteredTreeData), checked: checked, expanded: expanded, onCheck: handleCheck, onExpand: setExpanded, icons: {
|
128
154
|
check: react_1.default.createElement(fa_1.FaCheckSquare, { color: "#4caf50" }),
|
129
155
|
uncheck: react_1.default.createElement(fa_1.FaSquare, { color: "currentColor" }),
|