allaw-ui 4.9.1 → 4.9.3
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.
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
export type SingleFilterProps = {
|
|
3
|
-
defaultSelectedValue?: string;
|
|
3
|
+
defaultSelectedValue?: string | string[];
|
|
4
4
|
filterData: {
|
|
5
5
|
value: string;
|
|
6
6
|
name: string;
|
|
7
7
|
}[];
|
|
8
|
-
setFilter: (selectedValue: string) => void;
|
|
8
|
+
setFilter: (selectedValue: string | string[]) => void;
|
|
9
9
|
children?: React.ReactNode;
|
|
10
10
|
required?: boolean;
|
|
11
11
|
showNumIndic?: boolean;
|
|
12
12
|
showBackdrop?: boolean;
|
|
13
13
|
isStatusTag?: boolean;
|
|
14
|
+
displaySelectedValue?: boolean;
|
|
15
|
+
multiSelect?: boolean;
|
|
14
16
|
};
|
|
15
|
-
declare const SingleFilter: ({ showNumIndic, required, defaultSelectedValue, filterData, setFilter, showBackdrop, children, ...props }: SingleFilterProps) => React.JSX.Element;
|
|
17
|
+
declare const SingleFilter: ({ showNumIndic, required, defaultSelectedValue, filterData, setFilter, showBackdrop, children, displaySelectedValue, multiSelect, ...props }: SingleFilterProps) => React.JSX.Element;
|
|
16
18
|
export default SingleFilter;
|
|
@@ -20,20 +20,55 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
20
20
|
}
|
|
21
21
|
return t;
|
|
22
22
|
};
|
|
23
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
24
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
25
|
+
if (ar || !(i in from)) {
|
|
26
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
27
|
+
ar[i] = from[i];
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
31
|
+
};
|
|
23
32
|
import styles from "./SingleFilter.module.css";
|
|
24
33
|
import { FilterButtonPrimary, PrimaryButton } from "../buttons";
|
|
25
34
|
import { TinyInfo } from "../typography";
|
|
26
35
|
import React, { useState, useEffect, useRef } from "react";
|
|
27
36
|
var SingleFilter = function (_a) {
|
|
28
|
-
var _b = _a.showNumIndic, showNumIndic = _b === void 0 ? false : _b, _c = _a.required, required = _c === void 0 ? true : _c, defaultSelectedValue = _a.defaultSelectedValue, filterData = _a.filterData, setFilter = _a.setFilter, _d = _a.showBackdrop, showBackdrop = _d === void 0 ? false : _d, children = _a.children, props = __rest(_a, ["showNumIndic", "required", "defaultSelectedValue", "filterData", "setFilter", "showBackdrop", "children"]);
|
|
29
|
-
var
|
|
30
|
-
var
|
|
37
|
+
var _b = _a.showNumIndic, showNumIndic = _b === void 0 ? false : _b, _c = _a.required, required = _c === void 0 ? true : _c, defaultSelectedValue = _a.defaultSelectedValue, filterData = _a.filterData, setFilter = _a.setFilter, _d = _a.showBackdrop, showBackdrop = _d === void 0 ? false : _d, children = _a.children, _e = _a.displaySelectedValue, displaySelectedValue = _e === void 0 ? false : _e, _f = _a.multiSelect, multiSelect = _f === void 0 ? false : _f, props = __rest(_a, ["showNumIndic", "required", "defaultSelectedValue", "filterData", "setFilter", "showBackdrop", "children", "displaySelectedValue", "multiSelect"]);
|
|
38
|
+
var _g = useState(false), isOpen = _g[0], setIsOpen = _g[1];
|
|
39
|
+
var _h = useState(defaultSelectedValue || (multiSelect ? [] : "")), selectedValue = _h[0], setSelectedValue = _h[1];
|
|
31
40
|
var filterRef = useRef(null);
|
|
41
|
+
// Fonction pour obtenir le nom affiché basé sur la valeur sélectionnée
|
|
42
|
+
var getDisplayName = function () {
|
|
43
|
+
if (!displaySelectedValue) {
|
|
44
|
+
return children;
|
|
45
|
+
}
|
|
46
|
+
if (multiSelect && Array.isArray(selectedValue)) {
|
|
47
|
+
if (selectedValue.length === 0) {
|
|
48
|
+
return children;
|
|
49
|
+
}
|
|
50
|
+
var firstSelectedItem = filterData.find(function (item) { return item.value === selectedValue[0]; });
|
|
51
|
+
var firstName = firstSelectedItem
|
|
52
|
+
? firstSelectedItem.name
|
|
53
|
+
: selectedValue[0];
|
|
54
|
+
if (selectedValue.length === 1) {
|
|
55
|
+
return firstName;
|
|
56
|
+
}
|
|
57
|
+
return "".concat(firstName, " (+").concat(selectedValue.length - 1, ")");
|
|
58
|
+
}
|
|
59
|
+
if (!selectedValue || selectedValue === "") {
|
|
60
|
+
return children;
|
|
61
|
+
}
|
|
62
|
+
var selectedItem = filterData.find(function (item) { return item.value === selectedValue; });
|
|
63
|
+
return selectedItem ? selectedItem.name : children;
|
|
64
|
+
};
|
|
32
65
|
useEffect(function () {
|
|
33
|
-
if (
|
|
66
|
+
if (multiSelect
|
|
67
|
+
? Array.isArray(selectedValue) && selectedValue.length > 0
|
|
68
|
+
: selectedValue) {
|
|
34
69
|
setFilter(selectedValue);
|
|
35
70
|
}
|
|
36
|
-
}, [selectedValue, setFilter]);
|
|
71
|
+
}, [selectedValue, setFilter, multiSelect]);
|
|
37
72
|
useEffect(function () {
|
|
38
73
|
var handleClickOutside = function (event) {
|
|
39
74
|
if (filterRef.current &&
|
|
@@ -61,26 +96,56 @@ var SingleFilter = function (_a) {
|
|
|
61
96
|
};
|
|
62
97
|
var Item = function (_a) {
|
|
63
98
|
var name = _a.name, value = _a.value;
|
|
64
|
-
|
|
99
|
+
var isSelected = multiSelect
|
|
100
|
+
? Array.isArray(selectedValue) && selectedValue.includes(value)
|
|
101
|
+
: selectedValue === value;
|
|
102
|
+
var handleItemClick = function () {
|
|
103
|
+
if (multiSelect) {
|
|
104
|
+
var currentValues = Array.isArray(selectedValue) ? selectedValue : [];
|
|
105
|
+
if (currentValues.includes(value)) {
|
|
106
|
+
setSelectedValue(currentValues.filter(function (v) { return v !== value; }));
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
setSelectedValue(__spreadArray(__spreadArray([], currentValues, true), [value], false));
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
65
113
|
setSelectedValue(value);
|
|
66
114
|
handleClose();
|
|
67
|
-
}
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
return (React.createElement("button", { className: styles.item, onClick: handleItemClick },
|
|
68
118
|
React.createElement("div", { className: styles.round },
|
|
69
|
-
React.createElement("div", { className:
|
|
119
|
+
React.createElement("div", { className: isSelected ? styles.selected : styles.notSelected })),
|
|
70
120
|
React.createElement("span", null, name)));
|
|
71
121
|
};
|
|
72
122
|
var SmallItem = function (_a) {
|
|
73
123
|
var name = _a.name, value = _a.value;
|
|
74
|
-
|
|
124
|
+
var isSelected = multiSelect
|
|
125
|
+
? Array.isArray(selectedValue) && selectedValue.includes(value)
|
|
126
|
+
: selectedValue === value;
|
|
127
|
+
var handleItemClick = function () {
|
|
128
|
+
if (multiSelect) {
|
|
129
|
+
var currentValues = Array.isArray(selectedValue) ? selectedValue : [];
|
|
130
|
+
if (currentValues.includes(value)) {
|
|
131
|
+
setSelectedValue(currentValues.filter(function (v) { return v !== value; }));
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
setSelectedValue(__spreadArray(__spreadArray([], currentValues, true), [value], false));
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
75
138
|
setSelectedValue(value);
|
|
76
|
-
}
|
|
139
|
+
}
|
|
140
|
+
};
|
|
141
|
+
return (React.createElement("button", { className: styles.smallItem, onClick: handleItemClick },
|
|
77
142
|
React.createElement("div", { className: styles.round },
|
|
78
|
-
React.createElement("div", { className:
|
|
143
|
+
React.createElement("div", { className: isSelected ? styles.selected : styles.notSelected })),
|
|
79
144
|
React.createElement("span", null, name)));
|
|
80
145
|
};
|
|
81
146
|
return (React.createElement("div", __assign({ className: styles.baseFilter, ref: filterRef }, props),
|
|
82
147
|
React.createElement(FilterButtonPrimary, { onClick: handleButtonTap },
|
|
83
|
-
|
|
148
|
+
getDisplayName(),
|
|
84
149
|
React.createElement("p", { style: {
|
|
85
150
|
color: "#25BEEB",
|
|
86
151
|
fontWeight: "600",
|
|
@@ -4,4 +4,7 @@ declare namespace _default {
|
|
|
4
4
|
}
|
|
5
5
|
export default _default;
|
|
6
6
|
export const Default: any;
|
|
7
|
+
export const WithDisplaySelectedValue: any;
|
|
8
|
+
export const MultiSelectWithDisplaySelected: any;
|
|
9
|
+
export const MultiSelectEmpty: any;
|
|
7
10
|
import SingleFilter from "./SingleFilter";
|
|
@@ -18,7 +18,7 @@ export default {
|
|
|
18
18
|
var Template = function (args) { return React.createElement(SingleFilter, __assign({}, args)); };
|
|
19
19
|
export var Default = Template.bind({});
|
|
20
20
|
Default.args = {
|
|
21
|
-
defaultSelectedValue: "
|
|
21
|
+
defaultSelectedValue: "option1",
|
|
22
22
|
filterData: [
|
|
23
23
|
{ value: "option1", name: "Option 1" },
|
|
24
24
|
{ value: "option2", name: "Option 2" },
|
|
@@ -31,3 +31,54 @@ Default.args = {
|
|
|
31
31
|
showBackdrop: true,
|
|
32
32
|
isStatusTag: false,
|
|
33
33
|
};
|
|
34
|
+
export var WithDisplaySelectedValue = Template.bind({});
|
|
35
|
+
WithDisplaySelectedValue.args = {
|
|
36
|
+
defaultSelectedValue: "option2",
|
|
37
|
+
filterData: [
|
|
38
|
+
{ value: "option1", name: "Médecin généraliste" },
|
|
39
|
+
{ value: "option2", name: "Cardiologue" },
|
|
40
|
+
{ value: "option3", name: "Dermatologue" },
|
|
41
|
+
],
|
|
42
|
+
setFilter: function (selectedValue) { return console.log("Selected value:", selectedValue); },
|
|
43
|
+
children: "Spécialité",
|
|
44
|
+
displaySelectedValue: true,
|
|
45
|
+
required: true,
|
|
46
|
+
showNumIndic: false,
|
|
47
|
+
showBackdrop: true,
|
|
48
|
+
isStatusTag: false,
|
|
49
|
+
};
|
|
50
|
+
export var MultiSelectWithDisplaySelected = Template.bind({});
|
|
51
|
+
MultiSelectWithDisplaySelected.args = {
|
|
52
|
+
defaultSelectedValue: ["option1", "option3"],
|
|
53
|
+
filterData: [
|
|
54
|
+
{ value: "option1", name: "Médecin généraliste" },
|
|
55
|
+
{ value: "option2", name: "Cardiologue" },
|
|
56
|
+
{ value: "option3", name: "Dermatologue" },
|
|
57
|
+
{ value: "option4", name: "Pédiatre" },
|
|
58
|
+
{ value: "option5", name: "Gynécologue" },
|
|
59
|
+
],
|
|
60
|
+
setFilter: function (selectedValue) { return console.log("Selected values:", selectedValue); },
|
|
61
|
+
children: "Spécialités",
|
|
62
|
+
displaySelectedValue: true,
|
|
63
|
+
multiSelect: true,
|
|
64
|
+
required: true,
|
|
65
|
+
showNumIndic: true,
|
|
66
|
+
showBackdrop: true,
|
|
67
|
+
isStatusTag: false,
|
|
68
|
+
};
|
|
69
|
+
export var MultiSelectEmpty = Template.bind({});
|
|
70
|
+
MultiSelectEmpty.args = {
|
|
71
|
+
filterData: [
|
|
72
|
+
{ value: "option1", name: "Médecin généraliste" },
|
|
73
|
+
{ value: "option2", name: "Cardiologue" },
|
|
74
|
+
{ value: "option3", name: "Dermatologue" },
|
|
75
|
+
],
|
|
76
|
+
setFilter: function (selectedValue) { return console.log("Selected values:", selectedValue); },
|
|
77
|
+
children: "Choisir spécialités",
|
|
78
|
+
displaySelectedValue: true,
|
|
79
|
+
multiSelect: true,
|
|
80
|
+
required: true,
|
|
81
|
+
showNumIndic: true,
|
|
82
|
+
showBackdrop: true,
|
|
83
|
+
isStatusTag: false,
|
|
84
|
+
};
|