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 _e = useState(false), isOpen = _e[0], setIsOpen = _e[1];
30
- var _f = useState(defaultSelectedValue || ""), selectedValue = _f[0], setSelectedValue = _f[1];
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 (selectedValue) {
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
- return (React.createElement("button", { className: styles.item, onClick: function () {
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: selectedValue === value ? styles.selected : styles.notSelected })),
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
- return (React.createElement("button", { className: styles.smallItem, onClick: function () {
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: selectedValue === value ? styles.selected : styles.notSelected })),
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
- children,
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: "Option 1",
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
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "allaw-ui",
3
- "version": "4.9.1",
3
+ "version": "4.9.3",
4
4
  "description": "Composants UI pour l'application Allaw",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.esm.js",