allaw-ui 4.0.0 → 4.0.2

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.
@@ -9,6 +9,7 @@ export interface DatepickerProps {
9
9
  yearDropdownItemNumber?: number;
10
10
  maxDaysInPast?: number;
11
11
  minDate?: Date;
12
+ maxDate?: Date;
12
13
  disableFutur?: Boolean;
13
14
  }
14
15
  declare const Datepicker: React.FC<DatepickerProps>;
@@ -48,7 +48,7 @@ var CustomInput = forwardRef(function (_a, ref) {
48
48
  });
49
49
  CustomInput.displayName = "CustomInput";
50
50
  var Datepicker = function (_a) {
51
- var value = _a.value, onChange = _a.onChange, _b = _a.placeholder, placeholder = _b === void 0 ? "Sélectionner une date" : _b, _c = _a.yearDropdownItemNumber, yearDropdownItemNumber = _c === void 0 ? 10 : _c, maxDaysInPast = _a.maxDaysInPast, minDate = _a.minDate, _d = _a.disableFutur, disableFutur = _d === void 0 ? true : _d;
51
+ var value = _a.value, onChange = _a.onChange, _b = _a.placeholder, placeholder = _b === void 0 ? "Sélectionner une date" : _b, _c = _a.yearDropdownItemNumber, yearDropdownItemNumber = _c === void 0 ? 10 : _c, maxDaysInPast = _a.maxDaysInPast, minDate = _a.minDate, maxDate = _a.maxDate, _d = _a.disableFutur, disableFutur = _d === void 0 ? true : _d;
52
52
  var _e = useState(value), selectedDate = _e[0], setSelectedDate = _e[1];
53
53
  var _f = useState(false), isOpen = _f[0], setIsOpen = _f[1];
54
54
  var _g = useState({ top: 0, left: 0 }), position = _g[0], setPosition = _g[1];
@@ -146,6 +146,6 @@ var Datepicker = function (_a) {
146
146
  ReactDOM.createPortal(React.createElement("div", { ref: calendarRef, className: "datepicker-portal ".concat(placement), style: __assign({ left: "".concat(position.left, "px") }, (placement === "bottom"
147
147
  ? { top: "".concat(position.top, "px") }
148
148
  : { top: "".concat(position.top, "px") })) },
149
- React.createElement(ReactDatePicker, { selected: selectedDate, onChange: handleDateChange, locale: fr, inline: true, dateFormat: "dd MMMM yyyy", calendarClassName: "custom-calendar", showMonthDropdown: true, showYearDropdown: true, dropdownMode: "select", maxDate: disableFutur ? new Date() : undefined, minDate: calculatedMinDate })), document.body)));
149
+ React.createElement(ReactDatePicker, { selected: selectedDate, onChange: handleDateChange, locale: fr, inline: true, dateFormat: "dd MMMM yyyy", calendarClassName: "custom-calendar", showMonthDropdown: true, showYearDropdown: true, dropdownMode: "select", maxDate: maxDate || (disableFutur ? new Date() : undefined), minDate: calculatedMinDate })), document.body)));
150
150
  };
151
151
  export default Datepicker;
@@ -9,6 +9,12 @@ export interface ContactCardEditProps {
9
9
  birthDate?: Date;
10
10
  hideActions?: boolean;
11
11
  controlled?: boolean;
12
+ hasExternalChanges?: boolean;
13
+ datepickerYearDropdownItemNumber?: number;
14
+ datepickerMaxDaysInPast?: number;
15
+ datepickerMinDate?: Date;
16
+ datepickerMaxDate?: Date;
17
+ datepickerDisableFutur?: boolean;
12
18
  editData?: {
13
19
  firstName: string;
14
20
  lastName: string;
@@ -16,8 +16,8 @@ import Select from "../../atoms/selects/Select";
16
16
  import Datepicker from "../../atoms/datepickers/Datepicker";
17
17
  import IconButton from "../../atoms/buttons/IconButton";
18
18
  var ContactCardEdit = function (_a) {
19
- var name = _a.name, status = _a.status, phone = _a.phone, email = _a.email, _b = _a.clientOfStudy, clientOfStudy = _b === void 0 ? false : _b, _c = _a.officeName, officeName = _c === void 0 ? "du cabinet" : _c, birthDate = _a.birthDate, _d = _a.hideActions, hideActions = _d === void 0 ? false : _d, _e = _a.controlled, controlled = _e === void 0 ? false : _e, externalEditData = _a.editData, onEditDataChange = _a.onEditDataChange, onSave = _a.onSave, onCancel = _a.onCancel;
20
- var _f = useState({
19
+ var name = _a.name, status = _a.status, phone = _a.phone, email = _a.email, _b = _a.clientOfStudy, clientOfStudy = _b === void 0 ? false : _b, _c = _a.officeName, officeName = _c === void 0 ? "du cabinet" : _c, birthDate = _a.birthDate, _d = _a.hideActions, hideActions = _d === void 0 ? false : _d, _e = _a.controlled, controlled = _e === void 0 ? false : _e, _f = _a.hasExternalChanges, hasExternalChanges = _f === void 0 ? false : _f, _g = _a.datepickerYearDropdownItemNumber, datepickerYearDropdownItemNumber = _g === void 0 ? 10 : _g, datepickerMaxDaysInPast = _a.datepickerMaxDaysInPast, datepickerMinDate = _a.datepickerMinDate, datepickerMaxDate = _a.datepickerMaxDate, _h = _a.datepickerDisableFutur, datepickerDisableFutur = _h === void 0 ? true : _h, externalEditData = _a.editData, onEditDataChange = _a.onEditDataChange, onSave = _a.onSave, onCancel = _a.onCancel;
20
+ var _j = useState({
21
21
  firstName: "",
22
22
  lastName: "",
23
23
  status: status,
@@ -25,7 +25,9 @@ var ContactCardEdit = function (_a) {
25
25
  phone: phone,
26
26
  email: email,
27
27
  birthDate: birthDate,
28
- }), internalEditData = _f[0], setInternalEditData = _f[1];
28
+ }), internalEditData = _j[0], setInternalEditData = _j[1];
29
+ // État pour suivre les modifications
30
+ var _k = useState(false), hasChanges = _k[0], setHasChanges = _k[1];
29
31
  // Utiliser les données externes si contrôlé, sinon les données internes
30
32
  var editData = controlled && externalEditData ? externalEditData : internalEditData;
31
33
  var updateEditData = function (updater) {
@@ -59,6 +61,41 @@ var ContactCardEdit = function (_a) {
59
61
  officeName,
60
62
  controlled,
61
63
  ]);
64
+ // Détection des changements
65
+ useEffect(function () {
66
+ var _a, _b;
67
+ if (!controlled) {
68
+ var nameParts = name.split(" ");
69
+ var originalData = {
70
+ firstName: nameParts[0] || "",
71
+ lastName: nameParts.slice(1).join(" ") || "",
72
+ status: status,
73
+ clientType: clientOfStudy ? "Client ".concat(officeName) : "Non client",
74
+ phone: phone,
75
+ email: email,
76
+ birthDate: birthDate,
77
+ };
78
+ var currentData = editData;
79
+ var changed = originalData.firstName !== currentData.firstName ||
80
+ originalData.lastName !== currentData.lastName ||
81
+ originalData.status !== currentData.status ||
82
+ originalData.clientType !== currentData.clientType ||
83
+ originalData.phone !== currentData.phone ||
84
+ originalData.email !== currentData.email ||
85
+ ((_a = originalData.birthDate) === null || _a === void 0 ? void 0 : _a.getTime()) !== ((_b = currentData.birthDate) === null || _b === void 0 ? void 0 : _b.getTime());
86
+ setHasChanges(changed);
87
+ }
88
+ }, [
89
+ editData,
90
+ name,
91
+ status,
92
+ phone,
93
+ email,
94
+ birthDate,
95
+ clientOfStudy,
96
+ officeName,
97
+ controlled,
98
+ ]);
62
99
  var handleSave = function () {
63
100
  onSave === null || onSave === void 0 ? void 0 : onSave(editData);
64
101
  };
@@ -78,7 +115,7 @@ var ContactCardEdit = function (_a) {
78
115
  }
79
116
  onCancel === null || onCancel === void 0 ? void 0 : onCancel();
80
117
  };
81
- return (React.createElement("div", { className: styles.contactCardEdit },
118
+ return (React.createElement("div", { className: "".concat(styles.contactCardEdit, " ").concat((controlled ? hasExternalChanges : hasChanges) ? styles.modified : "") },
82
119
  React.createElement("div", { className: styles.contentContainer },
83
120
  React.createElement("div", { className: styles.nameTagContainer },
84
121
  React.createElement("div", { className: styles.nameInputsContainer },
@@ -111,7 +148,7 @@ var ContactCardEdit = function (_a) {
111
148
  React.createElement("i", { className: "allaw-icon-user ".concat(styles.infoIcon) }),
112
149
  React.createElement(Datepicker, { value: editData.birthDate, onChange: function (date) {
113
150
  return updateEditData(function (prev) { return (__assign(__assign({}, prev), { birthDate: date })); });
114
- }, placeholder: "Date de naissance" })))))),
151
+ }, placeholder: "Date de naissance", yearDropdownItemNumber: datepickerYearDropdownItemNumber, maxDaysInPast: datepickerMaxDaysInPast, minDate: datepickerMinDate, maxDate: datepickerMaxDate, disableFutur: datepickerDisableFutur })))))),
115
152
  !hideActions && (React.createElement("div", { className: styles.actionsContainer },
116
153
  React.createElement("div", { className: styles.editActionsContainer },
117
154
  React.createElement(IconButton, { style: "largeFilled", iconName: "allaw-icon-check", onClick: handleSave, color: "#29a36a" }),
@@ -33,6 +33,22 @@ declare namespace _default {
33
33
  let control_6: string;
34
34
  export { control_6 as control };
35
35
  }
36
+ namespace datepickerYearDropdownItemNumber {
37
+ let control_7: string;
38
+ export { control_7 as control };
39
+ }
40
+ namespace datepickerMinDate {
41
+ let control_8: string;
42
+ export { control_8 as control };
43
+ }
44
+ namespace datepickerMaxDate {
45
+ let control_9: string;
46
+ export { control_9 as control };
47
+ }
48
+ namespace datepickerDisableFutur {
49
+ let control_10: string;
50
+ export { control_10 as control };
51
+ }
36
52
  }
37
53
  export namespace args {
38
54
  let name_1: string;
@@ -29,6 +29,10 @@ export default {
29
29
  },
30
30
  },
31
31
  birthDate: { control: "date" },
32
+ datepickerYearDropdownItemNumber: { control: "number" },
33
+ datepickerMinDate: { control: "date" },
34
+ datepickerMaxDate: { control: "date" },
35
+ datepickerDisableFutur: { control: "boolean" },
32
36
  },
33
37
  args: {
34
38
  name: "Jane DOE",
@@ -63,6 +67,18 @@ export var Default = Template.bind({});
63
67
  export var WithBirthDate = Template.bind({});
64
68
  WithBirthDate.args = {
65
69
  birthDate: new Date("1990-05-15"),
70
+ datepickerYearDropdownItemNumber: 120,
71
+ datepickerMinDate: (function () {
72
+ var date = new Date();
73
+ date.setFullYear(date.getFullYear() - 120);
74
+ return date;
75
+ })(),
76
+ datepickerMaxDate: (function () {
77
+ var date = new Date();
78
+ date.setFullYear(date.getFullYear() - 10);
79
+ return date;
80
+ })(),
81
+ datepickerDisableFutur: false,
66
82
  };
67
83
  export var WithoutBirthDate = Template.bind({});
68
84
  WithoutBirthDate.args = {
@@ -11,6 +11,11 @@
11
11
  justify-content: space-between;
12
12
  align-items: stretch;
13
13
  align-self: stretch;
14
+ transition: border-color 0.3s ease;
15
+ }
16
+
17
+ .contactCardEdit.modified {
18
+ border-color: #25beeb;
14
19
  }
15
20
 
16
21
  .contentContainer {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "allaw-ui",
3
- "version": "4.0.0",
3
+ "version": "4.0.2",
4
4
  "description": "Composants UI pour l'application Allaw",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.esm.js",