allaw-ui 3.9.4 → 3.9.6

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.
@@ -7,6 +7,10 @@
7
7
  gap: 8px;
8
8
  }
9
9
 
10
+ .Input-no-title {
11
+ gap: 0;
12
+ }
13
+
10
14
  .Input-title-container {
11
15
  display: flex;
12
16
  align-items: center;
@@ -82,7 +86,7 @@
82
86
  border: none;
83
87
  outline: none;
84
88
  color: var(--noir);
85
- padding-right: 30px;
89
+ padding-right: 4px;
86
90
  }
87
91
 
88
92
  /* Style variation */
@@ -4,7 +4,7 @@ import "../../../styles/global.css";
4
4
  import "../../../styles/icons.css";
5
5
  import { commonRegex } from "../../../utils/regex";
6
6
  export interface InputProps {
7
- title: string;
7
+ title?: string;
8
8
  style?: "default" | "variation" | "password";
9
9
  placeholder: string;
10
10
  endIcon?: string;
@@ -93,10 +93,11 @@ var Input = forwardRef(function (_a, ref) {
93
93
  }
94
94
  return null;
95
95
  };
96
- return (React.createElement("div", { className: "Input Input-".concat(style) },
97
- React.createElement("div", { className: "Input-title-container" },
96
+ var hasTitle = title && title.trim() !== "";
97
+ return (React.createElement("div", { className: "Input Input-".concat(style, " ").concat(!hasTitle ? "Input-no-title" : "") },
98
+ hasTitle && (React.createElement("div", { className: "Input-title-container" },
98
99
  React.createElement(Paragraph, { variant: variant, color: color, text: title }),
99
- isRequired && title && (React.createElement("span", { className: "Input-required" },
100
+ isRequired && React.createElement("span", { className: "Input-required" },
100
101
  "\u00A0",
101
102
  "*"))),
102
103
  React.createElement("div", { className: "Input-wrapper" },
@@ -0,0 +1,22 @@
1
+ import React from "react";
2
+ export interface ContactCardEditProps {
3
+ name: string;
4
+ status: string;
5
+ phone: string;
6
+ email: string;
7
+ clientOfStudy?: boolean;
8
+ officeName?: "du cabinet" | "de l'étude";
9
+ birthDate?: Date;
10
+ onSave?: (data: {
11
+ firstName: string;
12
+ lastName: string;
13
+ status: string;
14
+ clientType: string;
15
+ phone: string;
16
+ email: string;
17
+ birthDate?: Date;
18
+ }) => void;
19
+ onCancel?: () => void;
20
+ }
21
+ declare const ContactCardEdit: React.FC<ContactCardEditProps>;
22
+ export default ContactCardEdit;
@@ -0,0 +1,107 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ import React, { useState, useEffect } from "react";
13
+ import styles from "./contactCardEdit.module.css";
14
+ import Input from "../../atoms/inputs/Input";
15
+ import Select from "../../atoms/selects/Select";
16
+ import Datepicker from "../../atoms/datepickers/Datepicker";
17
+ import IconButton from "../../atoms/buttons/IconButton";
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, onSave = _a.onSave, onCancel = _a.onCancel;
20
+ var _d = useState({
21
+ firstName: "",
22
+ lastName: "",
23
+ status: status,
24
+ clientType: clientOfStudy ? "Client ".concat(officeName) : "Non client",
25
+ phone: phone,
26
+ email: email,
27
+ birthDate: birthDate,
28
+ }), editData = _d[0], setEditData = _d[1];
29
+ // Options pour les selects
30
+ var statusOptions = [
31
+ { label: "Client actif", value: "Client actif" },
32
+ { label: "Prospect", value: "Prospect" },
33
+ { label: "Ancien client", value: "Ancien client" },
34
+ { label: "Contact", value: "Contact" },
35
+ ];
36
+ var clientTypeOptions = [
37
+ { label: "Client du cabinet", value: "Client du cabinet" },
38
+ { label: "Client de l'étude", value: "Client de l'étude" },
39
+ { label: "Non client", value: "Non client" },
40
+ ];
41
+ // Initialisation des données d'édition
42
+ useEffect(function () {
43
+ if (name) {
44
+ var nameParts_1 = name.split(" ");
45
+ setEditData(function (prev) { return (__assign(__assign({}, prev), { firstName: nameParts_1[0] || "", lastName: nameParts_1.slice(1).join(" ") || "", status: status, clientType: clientOfStudy ? "Client ".concat(officeName) : "Non client", phone: phone, email: email, birthDate: birthDate })); });
46
+ }
47
+ }, [name, status, phone, email, birthDate, clientOfStudy, officeName]);
48
+ var handleSave = function () {
49
+ onSave === null || onSave === void 0 ? void 0 : onSave(editData);
50
+ };
51
+ var handleCancel = function () {
52
+ // Reset des données
53
+ var nameParts = name.split(" ");
54
+ setEditData({
55
+ firstName: nameParts[0] || "",
56
+ lastName: nameParts.slice(1).join(" ") || "",
57
+ status: status,
58
+ clientType: clientOfStudy ? "Client ".concat(officeName) : "Non client",
59
+ phone: phone,
60
+ email: email,
61
+ birthDate: birthDate,
62
+ });
63
+ onCancel === null || onCancel === void 0 ? void 0 : onCancel();
64
+ };
65
+ return (React.createElement("div", { className: styles.contactCardEdit },
66
+ React.createElement("div", { className: styles.contentContainer },
67
+ React.createElement("div", { className: styles.nameTagContainer },
68
+ React.createElement("div", { className: styles.nameInputsContainer },
69
+ React.createElement(Input, { title: "", placeholder: "Pr\u00E9nom", value: editData.firstName, onChange: function (value) {
70
+ return setEditData(function (prev) { return (__assign(__assign({}, prev), { firstName: value })); });
71
+ }, disableAutofill: true }),
72
+ React.createElement(Input, { title: "", placeholder: "Nom", value: editData.lastName, onChange: function (value) {
73
+ return setEditData(function (prev) { return (__assign(__assign({}, prev), { lastName: value })); });
74
+ }, disableAutofill: true })),
75
+ React.createElement(Select, { items: statusOptions, selectedItem: editData.status, placeholder: "Statut", onChange: function (value) {
76
+ return setEditData(function (prev) { return (__assign(__assign({}, prev), { status: value })); });
77
+ } })),
78
+ React.createElement("div", { className: styles.infoContainer },
79
+ React.createElement("div", { className: styles.infoItem },
80
+ React.createElement("i", { className: "allaw-icon-user ".concat(styles.infoIcon) }),
81
+ React.createElement("div", { className: styles.clientTypeSelectContainer },
82
+ React.createElement(Select, { items: clientTypeOptions, selectedItem: editData.clientType, placeholder: "Type de client", onChange: function (value) {
83
+ return setEditData(function (prev) { return (__assign(__assign({}, prev), { clientType: value })); });
84
+ } }))),
85
+ React.createElement("div", { className: styles.telephoneEmailItems },
86
+ React.createElement("div", { className: styles.infoItem },
87
+ React.createElement("i", { className: "allaw-icon-phone ".concat(styles.infoIcon) }),
88
+ React.createElement("div", { className: styles.phoneInputContainer },
89
+ React.createElement(Input, { title: "", placeholder: "T\u00E9l\u00E9phone", type: "tel", value: editData.phone, onChange: function (value) {
90
+ return setEditData(function (prev) { return (__assign(__assign({}, prev), { phone: value })); });
91
+ }, disableAutofill: true }))),
92
+ React.createElement("div", { className: styles.infoItem },
93
+ React.createElement("i", { className: "allaw-icon-mail ".concat(styles.infoIcon) }),
94
+ React.createElement(Input, { title: "", placeholder: "Email", type: "email", value: editData.email, onChange: function (value) {
95
+ return setEditData(function (prev) { return (__assign(__assign({}, prev), { email: value })); });
96
+ }, disableAutofill: true })),
97
+ birthDate && (React.createElement("div", { className: styles.infoItem },
98
+ React.createElement("i", { className: "allaw-icon-user ".concat(styles.infoIcon) }),
99
+ React.createElement(Datepicker, { value: editData.birthDate, onChange: function (date) {
100
+ return setEditData(function (prev) { return (__assign(__assign({}, prev), { birthDate: date })); });
101
+ }, placeholder: "Date de naissance" })))))),
102
+ React.createElement("div", { className: styles.actionsContainer },
103
+ React.createElement("div", { className: styles.editActionsContainer },
104
+ React.createElement(IconButton, { style: "largeFilled", iconName: "allaw-icon-check", onClick: handleSave, color: "#29a36a" }),
105
+ React.createElement(IconButton, { style: "largeFilled", iconName: "allaw-icon-close", onClick: handleCancel, color: "#728ea7" })))));
106
+ };
107
+ export default ContactCardEdit;
@@ -0,0 +1,72 @@
1
+ declare namespace _default {
2
+ export let title: string;
3
+ export { ContactCardEdit as component };
4
+ export let tags: string[];
5
+ export namespace argTypes {
6
+ namespace name {
7
+ let control: string;
8
+ }
9
+ namespace status {
10
+ let control_1: string;
11
+ export { control_1 as control };
12
+ }
13
+ namespace phone {
14
+ let control_2: string;
15
+ export { control_2 as control };
16
+ }
17
+ namespace email {
18
+ let control_3: string;
19
+ export { control_3 as control };
20
+ }
21
+ namespace clientOfStudy {
22
+ let control_4: string;
23
+ export { control_4 as control };
24
+ }
25
+ namespace officeName {
26
+ export namespace control_5 {
27
+ let type: string;
28
+ let options: string[];
29
+ }
30
+ export { control_5 as control };
31
+ }
32
+ namespace birthDate {
33
+ let control_6: string;
34
+ export { control_6 as control };
35
+ }
36
+ }
37
+ export namespace args {
38
+ let name_1: string;
39
+ export { name_1 as name };
40
+ let status_1: string;
41
+ export { status_1 as status };
42
+ let phone_1: string;
43
+ export { phone_1 as phone };
44
+ let email_1: string;
45
+ export { email_1 as email };
46
+ let clientOfStudy_1: boolean;
47
+ export { clientOfStudy_1 as clientOfStudy };
48
+ let officeName_1: string;
49
+ export { officeName_1 as officeName };
50
+ export function onSave(data: any): void;
51
+ export function onCancel(): void;
52
+ }
53
+ export namespace parameters {
54
+ namespace backgrounds {
55
+ let _default: string;
56
+ export { _default as default };
57
+ export let values: {
58
+ name: string;
59
+ value: string;
60
+ }[];
61
+ }
62
+ }
63
+ }
64
+ export default _default;
65
+ export const Default: any;
66
+ export const WithBirthDate: any;
67
+ export const WithoutBirthDate: any;
68
+ export const NonClient: any;
69
+ export const ClientEtude: any;
70
+ export const ClientCabinet: any;
71
+ export const EmptyFields: any;
72
+ import ContactCardEdit from "./ContactCardEdit";
@@ -0,0 +1,90 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ import React from "react";
13
+ import ContactCardEdit from "./ContactCardEdit";
14
+ import "../../../styles/global.css";
15
+ export default {
16
+ title: "Components/Molecules/ContactCardEdit",
17
+ component: ContactCardEdit,
18
+ tags: ["autodocs"],
19
+ argTypes: {
20
+ name: { control: "text" },
21
+ status: { control: "text" },
22
+ phone: { control: "text" },
23
+ email: { control: "text" },
24
+ clientOfStudy: { control: "boolean" },
25
+ officeName: {
26
+ control: {
27
+ type: "select",
28
+ options: ["du cabinet", "de l'étude"],
29
+ },
30
+ },
31
+ birthDate: { control: "date" },
32
+ },
33
+ args: {
34
+ name: "Jane DOE",
35
+ status: "Client actif",
36
+ phone: "06 63 90 59 25",
37
+ email: "enzo@quarantesoixante.com",
38
+ clientOfStudy: false,
39
+ officeName: "du cabinet",
40
+ onSave: function (data) {
41
+ console.log("Données sauvegardées:", data);
42
+ alert("Sauvegarde: ".concat(data.firstName, " ").concat(data.lastName));
43
+ },
44
+ onCancel: function () {
45
+ console.log("Édition annulée");
46
+ alert("Édition annulée");
47
+ },
48
+ },
49
+ parameters: {
50
+ backgrounds: {
51
+ default: "light",
52
+ values: [
53
+ { name: "light", value: "#ffffff" },
54
+ { name: "grey", value: "#728ea7" },
55
+ { name: "figma", value: "#404040" },
56
+ { name: "dark", value: "#171e25" },
57
+ ],
58
+ },
59
+ },
60
+ };
61
+ var Template = function (args) { return React.createElement(ContactCardEdit, __assign({}, args)); };
62
+ export var Default = Template.bind({});
63
+ export var WithBirthDate = Template.bind({});
64
+ WithBirthDate.args = {
65
+ birthDate: new Date("1990-05-15"),
66
+ };
67
+ export var WithoutBirthDate = Template.bind({});
68
+ WithoutBirthDate.args = {
69
+ birthDate: undefined,
70
+ };
71
+ export var NonClient = Template.bind({});
72
+ NonClient.args = {
73
+ clientOfStudy: false,
74
+ status: "Prospect",
75
+ };
76
+ export var ClientEtude = Template.bind({});
77
+ ClientEtude.args = {
78
+ clientOfStudy: true,
79
+ officeName: "de l'étude",
80
+ };
81
+ export var ClientCabinet = Template.bind({});
82
+ ClientCabinet.args = {
83
+ clientOfStudy: true,
84
+ officeName: "du cabinet",
85
+ };
86
+ export var EmptyFields = Template.bind({});
87
+ EmptyFields.args = {
88
+ phone: "",
89
+ email: "",
90
+ };
@@ -12,6 +12,7 @@
12
12
  align-items: stretch;
13
13
  align-self: stretch;
14
14
  border-radius: 16px;
15
+ min-height: 147px;
15
16
  }
16
17
 
17
18
  .actionsContainer {
@@ -0,0 +1,145 @@
1
+ @import "../../../styles/colors.module.css";
2
+
3
+ .contactCardEdit {
4
+ font-family: "Open Sans", sans-serif;
5
+ border-radius: 16px;
6
+ border: 1px solid var(--grey-venom, #e6edf5);
7
+ background: var(--pure-white, #fff);
8
+ display: flex;
9
+ padding: 24px;
10
+ width: 100%;
11
+ justify-content: space-between;
12
+ align-items: stretch;
13
+ align-self: stretch;
14
+ }
15
+
16
+ .contentContainer {
17
+ display: flex;
18
+ flex-direction: row;
19
+ align-items: center;
20
+ gap: 24px;
21
+ }
22
+
23
+ .nameTagContainer {
24
+ display: flex;
25
+ flex-direction: column;
26
+ justify-content: center;
27
+ align-items: center;
28
+ gap: 10px;
29
+ width: 300px;
30
+ min-width: 300px;
31
+ max-width: 300px;
32
+ }
33
+
34
+ .nameInputsContainer {
35
+ display: flex;
36
+ flex-direction: row;
37
+ gap: 8px;
38
+ width: 100%;
39
+ min-width: 200px;
40
+ }
41
+
42
+ .nameInputsContainer > div {
43
+ flex: 1;
44
+ }
45
+
46
+ .infoContainer {
47
+ display: flex;
48
+ flex-direction: column;
49
+ align-items: flex-start;
50
+ gap: 10px;
51
+ padding-left: 6px;
52
+ }
53
+
54
+ .infoItem {
55
+ display: flex;
56
+ align-items: center;
57
+ gap: 8px;
58
+ }
59
+
60
+ .infoItem i {
61
+ min-width: 24px;
62
+ min-height: 24px;
63
+ }
64
+
65
+ .infoIcon {
66
+ width: 24px;
67
+ height: 24px;
68
+ color: var(--bleu-allaw, #25beeb);
69
+ font-size: 20px;
70
+ display: flex;
71
+ justify-content: center;
72
+ align-items: center;
73
+ }
74
+
75
+ .telephoneEmailItems {
76
+ display: flex;
77
+ flex-direction: row;
78
+ justify-content: center;
79
+ align-items: center;
80
+ gap: 16px;
81
+ }
82
+
83
+ .actionsContainer {
84
+ display: flex;
85
+ flex-direction: row;
86
+ gap: 1rem;
87
+ align-items: center;
88
+ justify-content: end;
89
+ }
90
+
91
+ .editActionsContainer {
92
+ display: flex;
93
+ flex-direction: row;
94
+ gap: 8px;
95
+ align-items: center;
96
+ padding: 1rem;
97
+ }
98
+
99
+ .phoneInputContainer {
100
+ width: 140px;
101
+ min-width: 140px;
102
+ max-width: 140px;
103
+ }
104
+
105
+ .clientTypeSelectContainer {
106
+ padding-left: 0px;
107
+ }
108
+
109
+ /* Media queries responsive */
110
+ @media (max-width: 1000px) {
111
+ .phoneInputContainer {
112
+ max-width: 100%;
113
+ }
114
+ }
115
+
116
+ @media (max-width: 900px) {
117
+ .telephoneEmailItems {
118
+ flex-direction: column;
119
+ align-items: flex-start;
120
+ gap: 10px;
121
+ }
122
+
123
+ .nameInputsContainer {
124
+ flex-direction: column;
125
+ gap: 8px;
126
+ }
127
+
128
+ .contentContainer {
129
+ flex-direction: column;
130
+ align-items: flex-start;
131
+ }
132
+
133
+ .nameTagContainer {
134
+ align-items: flex-start;
135
+ width: 100%;
136
+ }
137
+
138
+ .clientTypeSelectContainer {
139
+ min-width: 188px;
140
+ }
141
+
142
+ .infoItem {
143
+ min-width: 219px;
144
+ }
145
+ }
@@ -1,4 +1,6 @@
1
1
  export { default as ContactCard } from "./ContactCard";
2
2
  export type { ContactCardProps } from "./ContactCard";
3
+ export { default as ContactCardEdit } from "./ContactCardEdit";
4
+ export type { ContactCardEditProps } from "./ContactCardEdit";
3
5
  export { default as DetailedContactCard } from "./DetailedContactCard";
4
6
  export type { DetailedContactCardProps } from "./DetailedContactCard";
@@ -1,2 +1,3 @@
1
1
  export { default as ContactCard } from "./ContactCard";
2
+ export { default as ContactCardEdit } from "./ContactCardEdit";
2
3
  export { default as DetailedContactCard } from "./DetailedContactCard";
package/dist/index.d.ts CHANGED
@@ -50,6 +50,8 @@ export { default as BillingCount } from "./components/molecules/billingCount/Bil
50
50
  export { default as CaseCard } from "./components/molecules/caseCard/CaseCard";
51
51
  export { default as ContactCard } from "./components/molecules/contactCard/ContactCard";
52
52
  export type { ContactCardProps } from "./components/molecules/contactCard/ContactCard";
53
+ export { default as ContactCardEdit } from "./components/molecules/contactCard/ContactCardEdit";
54
+ export type { ContactCardEditProps } from "./components/molecules/contactCard/ContactCardEdit";
53
55
  export { default as DetailedContactCard } from "./components/molecules/contactCard/DetailedContactCard";
54
56
  export type { DetailedContactCardProps } from "./components/molecules/contactCard/DetailedContactCard";
55
57
  export { default as CaseCardLink } from "./components/molecules/caseLinkCard/CaseLinkCard";
package/dist/index.js CHANGED
@@ -57,6 +57,7 @@ export { default as BillingCount } from "./components/molecules/billingCount/Bil
57
57
  export { default as CaseCard } from "./components/molecules/caseCard/CaseCard";
58
58
  // Contact Cards
59
59
  export { default as ContactCard } from "./components/molecules/contactCard/ContactCard";
60
+ export { default as ContactCardEdit } from "./components/molecules/contactCard/ContactCardEdit";
60
61
  export { default as DetailedContactCard } from "./components/molecules/contactCard/DetailedContactCard";
61
62
  // Case Link Card
62
63
  export { default as CaseCardLink } from "./components/molecules/caseLinkCard/CaseLinkCard";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "allaw-ui",
3
- "version": "3.9.4",
3
+ "version": "3.9.6",
4
4
  "description": "Composants UI pour l'application Allaw",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.esm.js",