allaw-ui 5.0.3 → 5.0.5
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.
- package/dist/components/atoms/tags/OtherStatusTag.css +15 -0
- package/dist/components/atoms/tags/OtherStatusTag.js +1 -1
- package/dist/components/atoms/tags/OtherStatusTag.stories.d.ts +2 -0
- package/dist/components/atoms/tags/OtherStatusTag.stories.js +9 -0
- package/dist/components/molecules/appointmentSlot/AppointmentSlot.d.ts +5 -3
- package/dist/components/molecules/appointmentSlot/AppointmentSlot.js +69 -39
- package/dist/components/molecules/appointmentSlot/AppointmentSlot.stories.d.ts +26 -1
- package/dist/components/molecules/appointmentSlot/AppointmentSlot.stories.js +27 -9
- package/dist/components/molecules/appointmentSlot/{AppointmentSlot.css → appointmentSlot.module.css} +143 -102
- package/package.json +1 -1
|
@@ -26,6 +26,15 @@
|
|
|
26
26
|
color: var(--Primary-Dark-grey, var(--dark-grey, #456073));
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
+
.other-status-tag.readonly .icon {
|
|
30
|
+
display: flex;
|
|
31
|
+
width: 16px;
|
|
32
|
+
height: 16px;
|
|
33
|
+
justify-content: center;
|
|
34
|
+
align-items: center;
|
|
35
|
+
font-size: 14px;
|
|
36
|
+
}
|
|
37
|
+
|
|
29
38
|
.other-status-tag.editable {
|
|
30
39
|
height: 35px;
|
|
31
40
|
padding: 8px;
|
|
@@ -123,3 +132,9 @@
|
|
|
123
132
|
padding: 2.833px;
|
|
124
133
|
font-size: 10px;
|
|
125
134
|
}
|
|
135
|
+
|
|
136
|
+
.other-status-tag.readonly.compact .icon {
|
|
137
|
+
width: 14px;
|
|
138
|
+
height: 14px;
|
|
139
|
+
font-size: 12px;
|
|
140
|
+
}
|
|
@@ -8,7 +8,7 @@ var OtherStatusTag = function (_a) {
|
|
|
8
8
|
return "".concat(text.slice(0, limit), "...");
|
|
9
9
|
};
|
|
10
10
|
return (React.createElement("div", { className: "other-status-tag ".concat(type, " ").concat(style, " ").concat(type === "information" ? "information-color-".concat(informationColor) : "") },
|
|
11
|
-
type === "information" && startIcon && (React.createElement("span", { className: "icon ".concat(startIconName) })),
|
|
11
|
+
(type === "information" || type === "readonly") && startIcon && (React.createElement("span", { className: "icon ".concat(startIconName) })),
|
|
12
12
|
React.createElement("span", { className: "other-status-tag-label", title: label }, truncateText(label, labelLimit)),
|
|
13
13
|
type === "editable" && React.createElement("span", { className: "icon allaw-icon-close" })));
|
|
14
14
|
};
|
|
@@ -86,11 +86,13 @@ declare namespace _default {
|
|
|
86
86
|
}
|
|
87
87
|
export default _default;
|
|
88
88
|
export const ReadOnly: any;
|
|
89
|
+
export const ReadOnlyWithIcon: any;
|
|
89
90
|
export const Editable: any;
|
|
90
91
|
export const Information: any;
|
|
91
92
|
export const LongLabel: any;
|
|
92
93
|
export const LongLabelWithoutLimit: any;
|
|
93
94
|
export const ReadOnlyCompact: any;
|
|
95
|
+
export const ReadOnlyWithIconCompact: any;
|
|
94
96
|
export const EditableCompact: any;
|
|
95
97
|
export const InformationCompact: any;
|
|
96
98
|
export const LongLabelCompact: any;
|
|
@@ -85,6 +85,13 @@ ReadOnly.args = {
|
|
|
85
85
|
startIcon: false,
|
|
86
86
|
startIconName: "allaw-icon-pmr",
|
|
87
87
|
};
|
|
88
|
+
export var ReadOnlyWithIcon = Template.bind({});
|
|
89
|
+
ReadOnlyWithIcon.args = {
|
|
90
|
+
label: "Rue des Ormes",
|
|
91
|
+
type: "readonly",
|
|
92
|
+
startIcon: true,
|
|
93
|
+
startIconName: "allaw-icon-map-pin",
|
|
94
|
+
};
|
|
88
95
|
export var Editable = Template.bind({});
|
|
89
96
|
Editable.args = {
|
|
90
97
|
label: "Tags",
|
|
@@ -128,6 +135,8 @@ LongLabelWithoutLimit.parameters = {
|
|
|
128
135
|
};
|
|
129
136
|
export var ReadOnlyCompact = Template.bind({});
|
|
130
137
|
ReadOnlyCompact.args = __assign(__assign({}, ReadOnly.args), { style: "compact" });
|
|
138
|
+
export var ReadOnlyWithIconCompact = Template.bind({});
|
|
139
|
+
ReadOnlyWithIconCompact.args = __assign(__assign({}, ReadOnlyWithIcon.args), { style: "compact" });
|
|
131
140
|
export var EditableCompact = Template.bind({});
|
|
132
141
|
EditableCompact.args = __assign(__assign({}, Editable.args), { style: "compact" });
|
|
133
142
|
export var InformationCompact = Template.bind({});
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
|
|
3
|
-
type
|
|
2
|
+
type AppointmentStatus = "pending" | "available" | "cancelled" | "passed" | "refused" | "confirmed" | "unavailable";
|
|
3
|
+
type AppointmentStyle = "compact" | "big" | "summary";
|
|
4
4
|
export interface AppointmentSlotProps {
|
|
5
5
|
status: AppointmentStatus;
|
|
6
6
|
startTime: string;
|
|
@@ -20,7 +20,9 @@ export interface AppointmentSlotProps {
|
|
|
20
20
|
};
|
|
21
21
|
isEditable?: boolean;
|
|
22
22
|
appointmentDetails?: string;
|
|
23
|
-
style?:
|
|
23
|
+
style?: AppointmentStyle;
|
|
24
|
+
meetingType?: "INPERSON" | "VISIO" | "CALL" | "IMPORTED";
|
|
25
|
+
location?: string;
|
|
24
26
|
}
|
|
25
27
|
declare const AppointmentSlot: React.FC<AppointmentSlotProps>;
|
|
26
28
|
export default AppointmentSlot;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import React, { useState, useCallback } from "react";
|
|
2
|
-
import "./
|
|
2
|
+
import styles from "./appointmentSlot.module.css";
|
|
3
3
|
import AppointementStatusTag from "../../atoms/tags/AppointementStatusTag";
|
|
4
4
|
import OtherStatusTag from "../../atoms/tags/OtherStatusTag";
|
|
5
5
|
import ActionCircleButton from "../../atoms/buttons/ActionCircleButton";
|
|
6
6
|
import IconButton from "../../atoms/buttons/IconButton";
|
|
7
7
|
var AppointmentSlot = function (_a) {
|
|
8
|
-
var status = _a.status, startTime = _a.startTime, endTime = _a.endTime, date = _a.date, clientName = _a.clientName, appointmentContent = _a.appointmentContent, tags = _a.tags, noteCount = _a.noteCount, documentCount = _a.documentCount, actions = _a.actions, _b = _a.style, style = _b === void 0 ? "compact" : _b;
|
|
8
|
+
var status = _a.status, startTime = _a.startTime, endTime = _a.endTime, date = _a.date, clientName = _a.clientName, appointmentContent = _a.appointmentContent, tags = _a.tags, noteCount = _a.noteCount, documentCount = _a.documentCount, actions = _a.actions, _b = _a.style, style = _b === void 0 ? "compact" : _b, isEditable = _a.isEditable, meetingType = _a.meetingType, location = _a.location;
|
|
9
9
|
var _c = useState(false), isActive = _c[0], setIsActive = _c[1];
|
|
10
10
|
// Handlers
|
|
11
11
|
var handleApprove = useCallback(function () {
|
|
@@ -33,76 +33,106 @@ var AppointmentSlot = function (_a) {
|
|
|
33
33
|
};
|
|
34
34
|
// Helper function
|
|
35
35
|
var isClickableElement = function (element) {
|
|
36
|
-
return (element.closest(".
|
|
37
|
-
null);
|
|
36
|
+
return (element.closest(".".concat(styles.actionButtonContainer, ", .").concat(styles.documentActions, ", button")) !== null);
|
|
38
37
|
};
|
|
39
38
|
// Render functions
|
|
40
|
-
var renderHeader = function () { return (React.createElement("div", { className:
|
|
41
|
-
React.createElement("span", { className:
|
|
42
|
-
|
|
39
|
+
var renderHeader = function () { return (React.createElement("div", { className: styles.appointmentHeader },
|
|
40
|
+
React.createElement("span", { className: styles.appointmentTime }, "".concat(startTime, " - ").concat(endTime)),
|
|
41
|
+
style !== "summary" && (React.createElement(AppointementStatusTag, { status: status, variant: style === "compact" ? "small" : "default" })))); };
|
|
43
42
|
var renderFooter = function () {
|
|
44
43
|
if (status === "available") {
|
|
45
44
|
return renderAvailableFooter();
|
|
46
45
|
}
|
|
47
|
-
if (status === "summary") {
|
|
48
|
-
return null;
|
|
49
|
-
}
|
|
50
46
|
if (status !== "unavailable") {
|
|
51
47
|
return renderDefaultFooter();
|
|
52
48
|
}
|
|
53
49
|
return null;
|
|
54
50
|
};
|
|
55
|
-
var renderAvailableFooter = function () { return (React.createElement("div", { className:
|
|
56
|
-
React.createElement("div", { className:
|
|
57
|
-
React.createElement("div", { className:
|
|
51
|
+
var renderAvailableFooter = function () { return (React.createElement("div", { className: styles.appointmentFooter },
|
|
52
|
+
React.createElement("div", { className: styles.actionButtonContainer, onClick: actions === null || actions === void 0 ? void 0 : actions.onMakeUnavailable },
|
|
53
|
+
React.createElement("div", { className: styles.iconCloseContainer },
|
|
58
54
|
React.createElement("i", { className: "allaw-icon-close" })),
|
|
59
|
-
React.createElement("span", { className:
|
|
60
|
-
var renderDefaultFooter = function () { return (React.createElement("div", { className:
|
|
61
|
-
React.createElement("div", { className:
|
|
62
|
-
clientName && React.createElement("div", { className:
|
|
63
|
-
appointmentContent && (React.createElement("div", { className:
|
|
55
|
+
React.createElement("span", { className: styles.makeUnavailableText }, "Rendre indisponible")))); };
|
|
56
|
+
var renderDefaultFooter = function () { return (React.createElement("div", { className: styles.appointmentFooter },
|
|
57
|
+
React.createElement("div", { className: styles.footerLeft },
|
|
58
|
+
clientName && React.createElement("div", { className: styles.clientName }, clientName),
|
|
59
|
+
appointmentContent && (React.createElement("div", { className: styles.appointmentContent }, appointmentContent)),
|
|
64
60
|
renderTags()),
|
|
65
61
|
renderActionButtons())); };
|
|
62
|
+
var getMeetingTypeTag = function () {
|
|
63
|
+
if (!meetingType)
|
|
64
|
+
return null;
|
|
65
|
+
var iconName = "";
|
|
66
|
+
var label = "";
|
|
67
|
+
switch (meetingType) {
|
|
68
|
+
case "INPERSON":
|
|
69
|
+
iconName = "allaw-icon-map-pin";
|
|
70
|
+
label = location || "Présentiel";
|
|
71
|
+
break;
|
|
72
|
+
case "VISIO":
|
|
73
|
+
iconName = "allaw-icon-visio";
|
|
74
|
+
label = "Visio";
|
|
75
|
+
break;
|
|
76
|
+
case "CALL":
|
|
77
|
+
iconName = "allaw-icon-phone";
|
|
78
|
+
label = "Téléphone";
|
|
79
|
+
break;
|
|
80
|
+
case "IMPORTED":
|
|
81
|
+
iconName = "allaw-icon-calendar";
|
|
82
|
+
label = "Calendrier connecté";
|
|
83
|
+
break;
|
|
84
|
+
default:
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
return (React.createElement(OtherStatusTag, { label: label, type: "readonly", startIcon: true, startIconName: iconName, style: style === "compact" ? "compact" : "normal" }));
|
|
88
|
+
};
|
|
66
89
|
var renderTags = function () {
|
|
67
|
-
|
|
90
|
+
var meetingTag = getMeetingTypeTag();
|
|
91
|
+
var hasTags = tags && tags.length > 0;
|
|
92
|
+
if (!meetingTag && !hasTags)
|
|
93
|
+
return null;
|
|
94
|
+
return (React.createElement("div", { className: styles.tagsContainer },
|
|
95
|
+
meetingTag,
|
|
96
|
+
hasTags &&
|
|
97
|
+
tags.map(function (tag, index) { return (React.createElement(OtherStatusTag, { key: index, label: tag, style: style === "compact" ? "compact" : "normal" })); })));
|
|
68
98
|
};
|
|
69
99
|
var renderActionButtons = function () {
|
|
70
100
|
switch (status) {
|
|
71
101
|
case "pending":
|
|
72
|
-
return (React.createElement("div", { className:
|
|
102
|
+
return (React.createElement("div", { className: styles.actionButtonContainer },
|
|
73
103
|
React.createElement(ActionCircleButton, { status: "dual", onApprove: handleApprove, onReject: handleReject })));
|
|
74
104
|
case "confirmed":
|
|
75
|
-
return documentCount && parseInt(documentCount) > 0 ? (React.createElement("div", { className:
|
|
105
|
+
return documentCount && parseInt(documentCount) > 0 ? (React.createElement("div", { className: styles.documentActions },
|
|
76
106
|
React.createElement(IconButton, { style: "smallFilled", iconName: "allaw-icon-document", onClick: actions === null || actions === void 0 ? void 0 : actions.onViewDocument }),
|
|
77
|
-
React.createElement("span", { className:
|
|
107
|
+
React.createElement("span", { className: styles.documentCount }, documentCount))) : null;
|
|
78
108
|
case "passed":
|
|
79
|
-
return (React.createElement("div", { className:
|
|
109
|
+
return (React.createElement("div", { className: styles.documentActions },
|
|
80
110
|
React.createElement(IconButton, { style: "smallFilled", iconName: "allaw-icon-edit-2", onClick: actions === null || actions === void 0 ? void 0 : actions.onEdit }),
|
|
81
|
-
noteCount && React.createElement("span", { className:
|
|
111
|
+
noteCount && React.createElement("span", { className: styles.noteCount }, noteCount),
|
|
82
112
|
documentCount && parseInt(documentCount) > 0 && (React.createElement(React.Fragment, null,
|
|
83
113
|
React.createElement(IconButton, { style: "smallFilled", iconName: "allaw-icon-document", onClick: actions === null || actions === void 0 ? void 0 : actions.onViewDocument }),
|
|
84
|
-
React.createElement("span", { className:
|
|
114
|
+
React.createElement("span", { className: styles.documentCount }, documentCount)))));
|
|
85
115
|
default:
|
|
86
116
|
return null;
|
|
87
117
|
}
|
|
88
118
|
};
|
|
89
|
-
if (
|
|
90
|
-
return (React.createElement("div", { className: "
|
|
91
|
-
React.createElement("div", { className:
|
|
92
|
-
React.createElement("div", { className:
|
|
93
|
-
React.createElement("span", { className:
|
|
94
|
-
React.createElement("span", { className:
|
|
95
|
-
React.createElement(IconButton, { style: "largeFilled", iconName: "allaw-icon-edit-2", onClick: actions === null || actions === void 0 ? void 0 : actions.onEdit })),
|
|
96
|
-
React.createElement("div", { className:
|
|
97
|
-
React.createElement("div", { className:
|
|
98
|
-
React.createElement("div", { className:
|
|
99
|
-
React.createElement("div", { className:
|
|
119
|
+
if (style === "summary") {
|
|
120
|
+
return (React.createElement("div", { className: "".concat(styles.summary, " ").concat(styles[status]) },
|
|
121
|
+
React.createElement("div", { className: styles.appointmentHeader },
|
|
122
|
+
React.createElement("div", { className: styles.dateTimeContainer },
|
|
123
|
+
React.createElement("span", { className: styles.summaryDate }, date),
|
|
124
|
+
React.createElement("span", { className: styles.summaryTime }, "".concat(startTime, " - ").concat(endTime))),
|
|
125
|
+
isEditable !== false ? (React.createElement(IconButton, { style: "largeFilled", iconName: "allaw-icon-edit-2", onClick: actions === null || actions === void 0 ? void 0 : actions.onEdit })) : (React.createElement(AppointementStatusTag, { status: status, variant: "default" }))),
|
|
126
|
+
React.createElement("div", { className: styles.appointmentFooter },
|
|
127
|
+
React.createElement("div", { className: styles.appointmentContentContainer },
|
|
128
|
+
React.createElement("div", { className: styles.clientName }, clientName),
|
|
129
|
+
React.createElement("div", { className: styles.appointmentContent }, appointmentContent),
|
|
100
130
|
renderTags()),
|
|
101
|
-
React.createElement("div", { className:
|
|
131
|
+
React.createElement("div", { className: styles.documentActionsContainer }, documentCount && parseInt(documentCount) > 0 && (React.createElement("div", { className: styles.documentActions },
|
|
102
132
|
React.createElement(IconButton, { style: "smallFilled", iconName: "allaw-icon-document", onClick: actions === null || actions === void 0 ? void 0 : actions.onViewDocument }),
|
|
103
|
-
React.createElement("span", { className:
|
|
133
|
+
React.createElement("span", { className: styles.documentCount }, documentCount)))))));
|
|
104
134
|
}
|
|
105
|
-
return (React.createElement("div", { className: "
|
|
135
|
+
return (React.createElement("div", { className: "".concat(styles.appointmentSlot, " ").concat(styles[status], " ").concat(isActive ? styles.active : "", " ").concat(style === "compact" ? styles.compact : styles.big), onMouseDown: handleMouseDown, onMouseUp: handleMouseUp, onMouseLeave: handleMouseUp, onClick: handleClick },
|
|
106
136
|
renderHeader(),
|
|
107
137
|
renderFooter()));
|
|
108
138
|
};
|
|
@@ -41,6 +41,28 @@ declare namespace _default {
|
|
|
41
41
|
export { control_4 as control };
|
|
42
42
|
export let defaultValue: string;
|
|
43
43
|
}
|
|
44
|
+
namespace isEditable {
|
|
45
|
+
let control_5: string;
|
|
46
|
+
export { control_5 as control };
|
|
47
|
+
let defaultValue_1: boolean;
|
|
48
|
+
export { defaultValue_1 as defaultValue };
|
|
49
|
+
}
|
|
50
|
+
namespace meetingType {
|
|
51
|
+
export namespace control_6 {
|
|
52
|
+
let type_3: string;
|
|
53
|
+
export { type_3 as type };
|
|
54
|
+
let options_3: (string | undefined)[];
|
|
55
|
+
export { options_3 as options };
|
|
56
|
+
}
|
|
57
|
+
export { control_6 as control };
|
|
58
|
+
export let description: string;
|
|
59
|
+
}
|
|
60
|
+
namespace location {
|
|
61
|
+
let control_7: string;
|
|
62
|
+
export { control_7 as control };
|
|
63
|
+
let description_1: string;
|
|
64
|
+
export { description_1 as description };
|
|
65
|
+
}
|
|
44
66
|
}
|
|
45
67
|
export namespace parameters {
|
|
46
68
|
namespace actions {
|
|
@@ -66,5 +88,8 @@ export const Passed: any;
|
|
|
66
88
|
export const Cancelled: any;
|
|
67
89
|
export const Refused: any;
|
|
68
90
|
export const Summary: any;
|
|
69
|
-
export const
|
|
91
|
+
export const SummaryNotEditable: any;
|
|
92
|
+
export const ConfirmedWithMeetingType: any;
|
|
93
|
+
export const ConfirmedWithVisio: any;
|
|
94
|
+
export const SummaryWithMeetingType: any;
|
|
70
95
|
import AppointmentSlot from "./AppointmentSlot";
|
|
@@ -11,7 +11,6 @@ var __assign = (this && this.__assign) || function () {
|
|
|
11
11
|
};
|
|
12
12
|
import React from "react";
|
|
13
13
|
import AppointmentSlot from "./AppointmentSlot";
|
|
14
|
-
import "../../../styles/global.css";
|
|
15
14
|
export default {
|
|
16
15
|
title: "Components/Molecules/AppointmentSlot",
|
|
17
16
|
component: AppointmentSlot,
|
|
@@ -26,7 +25,6 @@ export default {
|
|
|
26
25
|
"available",
|
|
27
26
|
"unavailable",
|
|
28
27
|
"passed",
|
|
29
|
-
"summary",
|
|
30
28
|
"cancelled",
|
|
31
29
|
"refused",
|
|
32
30
|
],
|
|
@@ -37,7 +35,6 @@ export default {
|
|
|
37
35
|
"available",
|
|
38
36
|
"unavailable",
|
|
39
37
|
"passed",
|
|
40
|
-
"summary",
|
|
41
38
|
"cancelled",
|
|
42
39
|
"refused",
|
|
43
40
|
],
|
|
@@ -52,15 +49,30 @@ export default {
|
|
|
52
49
|
},
|
|
53
50
|
date: {
|
|
54
51
|
control: "text",
|
|
55
|
-
if: { arg: "
|
|
52
|
+
if: { arg: "style", eq: "summary" },
|
|
56
53
|
},
|
|
57
54
|
style: {
|
|
58
55
|
control: {
|
|
59
56
|
type: "select",
|
|
60
|
-
options: ["compact", "big"],
|
|
57
|
+
options: ["compact", "big", "summary"],
|
|
61
58
|
},
|
|
62
59
|
defaultValue: "compact",
|
|
63
60
|
},
|
|
61
|
+
isEditable: {
|
|
62
|
+
control: "boolean",
|
|
63
|
+
defaultValue: true,
|
|
64
|
+
},
|
|
65
|
+
meetingType: {
|
|
66
|
+
control: {
|
|
67
|
+
type: "select",
|
|
68
|
+
options: [undefined, "INPERSON", "VISIO", "CALL", "IMPORTED"],
|
|
69
|
+
},
|
|
70
|
+
description: "Type de rendez-vous",
|
|
71
|
+
},
|
|
72
|
+
location: {
|
|
73
|
+
control: "text",
|
|
74
|
+
description: "Adresse du rendez-vous (pour INPERSON)",
|
|
75
|
+
},
|
|
64
76
|
},
|
|
65
77
|
parameters: {
|
|
66
78
|
actions: {
|
|
@@ -168,8 +180,8 @@ Refused.args = {
|
|
|
168
180
|
};
|
|
169
181
|
export var Summary = Template.bind({});
|
|
170
182
|
Summary.args = {
|
|
171
|
-
status: "
|
|
172
|
-
style: "
|
|
183
|
+
status: "confirmed",
|
|
184
|
+
style: "summary",
|
|
173
185
|
startTime: "14:15",
|
|
174
186
|
endTime: "15:00",
|
|
175
187
|
date: "LUN. 12 AVRIL 2023",
|
|
@@ -182,5 +194,11 @@ Summary.args = {
|
|
|
182
194
|
onViewDocument: function () { return console.log("View document clicked"); },
|
|
183
195
|
},
|
|
184
196
|
};
|
|
185
|
-
export var
|
|
186
|
-
|
|
197
|
+
export var SummaryNotEditable = Template.bind({});
|
|
198
|
+
SummaryNotEditable.args = __assign(__assign({}, Summary.args), { isEditable: false });
|
|
199
|
+
export var ConfirmedWithMeetingType = Template.bind({});
|
|
200
|
+
ConfirmedWithMeetingType.args = __assign(__assign({}, Confirmed.args), { meetingType: "INPERSON", location: "Rue des Ormes" });
|
|
201
|
+
export var ConfirmedWithVisio = Template.bind({});
|
|
202
|
+
ConfirmedWithVisio.args = __assign(__assign({}, Confirmed.args), { meetingType: "VISIO" });
|
|
203
|
+
export var SummaryWithMeetingType = Template.bind({});
|
|
204
|
+
SummaryWithMeetingType.args = __assign(__assign({}, Summary.args), { meetingType: "INPERSON", location: "Rue des Ormes" });
|
package/dist/components/molecules/appointmentSlot/{AppointmentSlot.css → appointmentSlot.module.css}
RENAMED
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
@import "../../../styles/colors.css";
|
|
2
|
-
|
|
3
1
|
/* Base styles */
|
|
4
|
-
.
|
|
2
|
+
.appointmentSlot {
|
|
5
3
|
display: flex;
|
|
6
4
|
width: 329px;
|
|
7
5
|
padding: 16px;
|
|
@@ -10,37 +8,50 @@
|
|
|
10
8
|
align-items: flex-start;
|
|
11
9
|
gap: 16px;
|
|
12
10
|
border-radius: 16px;
|
|
13
|
-
background:
|
|
11
|
+
background: #fff;
|
|
14
12
|
box-shadow: 0px 1px 9px 0px rgba(15, 133, 168, 0.08);
|
|
15
13
|
cursor: pointer;
|
|
16
|
-
transition:
|
|
17
|
-
background-color 0.05s ease,
|
|
18
|
-
transform 0.1s ease;
|
|
14
|
+
transition: background-color 0.05s ease, transform 0.1s ease;
|
|
19
15
|
user-select: none;
|
|
20
16
|
}
|
|
21
17
|
|
|
22
|
-
.
|
|
18
|
+
.appointmentSlot:hover {
|
|
23
19
|
transform: scale(1.015);
|
|
24
20
|
}
|
|
25
21
|
|
|
26
|
-
.
|
|
27
|
-
background:
|
|
22
|
+
.active {
|
|
23
|
+
background: #f4f7fb;
|
|
28
24
|
}
|
|
29
25
|
|
|
30
26
|
/* Status-specific styles */
|
|
31
|
-
.
|
|
32
|
-
.
|
|
33
|
-
.
|
|
34
|
-
.
|
|
35
|
-
border: 1px solid
|
|
27
|
+
.confirmed,
|
|
28
|
+
.available,
|
|
29
|
+
.unavailable,
|
|
30
|
+
.passed {
|
|
31
|
+
border: 1px solid #e6edf5;
|
|
36
32
|
}
|
|
37
33
|
|
|
38
|
-
.
|
|
34
|
+
.pending {
|
|
39
35
|
border: 1px solid rgba(225, 81, 81, 0.54);
|
|
40
36
|
}
|
|
41
37
|
|
|
38
|
+
.cancelled,
|
|
39
|
+
.refused {
|
|
40
|
+
border: 1px solid #e6edf5;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
.compact {
|
|
44
|
+
/* Modificateur de style, les règles sont définies via les sélecteurs descendants */
|
|
45
|
+
box-sizing: border-box;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.big {
|
|
49
|
+
/* Modificateur de style, les règles sont définies via les sélecteurs descendants */
|
|
50
|
+
box-sizing: border-box;
|
|
51
|
+
}
|
|
52
|
+
|
|
42
53
|
/* Header styles */
|
|
43
|
-
.
|
|
54
|
+
.appointmentHeader {
|
|
44
55
|
display: flex;
|
|
45
56
|
justify-content: space-between;
|
|
46
57
|
align-items: center;
|
|
@@ -48,8 +59,8 @@
|
|
|
48
59
|
width: 100%;
|
|
49
60
|
}
|
|
50
61
|
|
|
51
|
-
.
|
|
52
|
-
color:
|
|
62
|
+
.appointmentTime {
|
|
63
|
+
color: #171e25;
|
|
53
64
|
text-align: center;
|
|
54
65
|
font-family: Inter, sans-serif;
|
|
55
66
|
font-size: 20px;
|
|
@@ -59,23 +70,23 @@
|
|
|
59
70
|
letter-spacing: 0.2px;
|
|
60
71
|
}
|
|
61
72
|
|
|
62
|
-
.
|
|
63
|
-
.
|
|
64
|
-
.
|
|
65
|
-
color:
|
|
73
|
+
.available .appointmentTime,
|
|
74
|
+
.unavailable .appointmentTime,
|
|
75
|
+
.passed .appointmentTime {
|
|
76
|
+
color: #728ea7;
|
|
66
77
|
}
|
|
67
78
|
|
|
68
79
|
/* Footer styles */
|
|
69
|
-
.
|
|
80
|
+
.appointmentFooter {
|
|
70
81
|
display: flex;
|
|
71
82
|
padding-top: 10px;
|
|
72
83
|
justify-content: space-between;
|
|
73
84
|
align-items: flex-end;
|
|
74
85
|
align-self: stretch;
|
|
75
|
-
border-top: 1px solid
|
|
86
|
+
border-top: 1px solid #e6edf5;
|
|
76
87
|
}
|
|
77
88
|
|
|
78
|
-
.
|
|
89
|
+
.footerLeft {
|
|
79
90
|
display: flex;
|
|
80
91
|
flex-direction: column;
|
|
81
92
|
justify-content: center;
|
|
@@ -84,8 +95,8 @@
|
|
|
84
95
|
align-self: stretch;
|
|
85
96
|
}
|
|
86
97
|
|
|
87
|
-
.
|
|
88
|
-
color:
|
|
98
|
+
.clientName {
|
|
99
|
+
color: #728ea7;
|
|
89
100
|
font-family: "Open Sans", sans-serif;
|
|
90
101
|
font-size: 12px;
|
|
91
102
|
font-style: normal;
|
|
@@ -94,8 +105,8 @@
|
|
|
94
105
|
letter-spacing: 0.36px;
|
|
95
106
|
}
|
|
96
107
|
|
|
97
|
-
.
|
|
98
|
-
color:
|
|
108
|
+
.appointmentContent {
|
|
109
|
+
color: #456073;
|
|
99
110
|
font-family: "Open Sans", sans-serif;
|
|
100
111
|
font-size: 16px;
|
|
101
112
|
font-style: normal;
|
|
@@ -104,7 +115,7 @@
|
|
|
104
115
|
}
|
|
105
116
|
|
|
106
117
|
/* Tags styles */
|
|
107
|
-
.
|
|
118
|
+
.tagsContainer {
|
|
108
119
|
display: flex;
|
|
109
120
|
align-items: flex-start;
|
|
110
121
|
gap: 8px;
|
|
@@ -112,15 +123,15 @@
|
|
|
112
123
|
}
|
|
113
124
|
|
|
114
125
|
/* Document actions styles */
|
|
115
|
-
.
|
|
126
|
+
.documentActions {
|
|
116
127
|
display: flex;
|
|
117
128
|
align-items: center;
|
|
118
129
|
gap: 8px;
|
|
119
130
|
}
|
|
120
131
|
|
|
121
|
-
.
|
|
122
|
-
.
|
|
123
|
-
color:
|
|
132
|
+
.documentCount,
|
|
133
|
+
.noteCount {
|
|
134
|
+
color: #171e25;
|
|
124
135
|
font-family: Inter, sans-serif;
|
|
125
136
|
font-size: 14px;
|
|
126
137
|
font-style: normal;
|
|
@@ -129,57 +140,56 @@
|
|
|
129
140
|
}
|
|
130
141
|
|
|
131
142
|
/* Action button styles */
|
|
132
|
-
.
|
|
143
|
+
.actionButtonContainer {
|
|
133
144
|
position: relative;
|
|
134
145
|
z-index: 1;
|
|
135
146
|
}
|
|
136
147
|
|
|
137
148
|
/* Pending status styles */
|
|
138
|
-
.
|
|
139
|
-
.
|
|
140
|
-
.
|
|
149
|
+
.pending .actionButtonContainer,
|
|
150
|
+
.pending .documentActions,
|
|
151
|
+
.pending button {
|
|
141
152
|
pointer-events: auto;
|
|
142
153
|
}
|
|
143
154
|
|
|
144
|
-
.
|
|
155
|
+
.pending {
|
|
145
156
|
pointer-events: none;
|
|
146
157
|
}
|
|
147
158
|
|
|
148
|
-
.
|
|
149
|
-
> *:not(.action-button-container):not(.document-actions):not(button) {
|
|
159
|
+
.pending > *:not(.actionButtonContainer):not(.documentActions):not(button) {
|
|
150
160
|
pointer-events: auto;
|
|
151
161
|
}
|
|
152
162
|
|
|
153
163
|
/* Available and unavailable status styles */
|
|
154
|
-
.
|
|
155
|
-
.
|
|
164
|
+
.available,
|
|
165
|
+
.unavailable {
|
|
156
166
|
justify-content: flex-start;
|
|
157
167
|
}
|
|
158
168
|
|
|
159
|
-
.
|
|
160
|
-
.
|
|
169
|
+
.available .footerLeft,
|
|
170
|
+
.unavailable .footerLeft {
|
|
161
171
|
display: none;
|
|
162
172
|
}
|
|
163
173
|
|
|
164
|
-
.
|
|
165
|
-
.
|
|
174
|
+
.available .appointmentFooter,
|
|
175
|
+
.unavailable .appointmentFooter {
|
|
166
176
|
border-top: none;
|
|
167
177
|
padding-top: 0;
|
|
168
178
|
}
|
|
169
179
|
|
|
170
180
|
/* Available status specific styles */
|
|
171
|
-
.
|
|
181
|
+
.available {
|
|
172
182
|
gap: 11px;
|
|
173
183
|
}
|
|
174
184
|
|
|
175
|
-
.
|
|
185
|
+
.available .appointmentFooter {
|
|
176
186
|
display: flex;
|
|
177
187
|
justify-content: flex-end;
|
|
178
188
|
align-items: center;
|
|
179
189
|
align-self: stretch;
|
|
180
190
|
}
|
|
181
191
|
|
|
182
|
-
.
|
|
192
|
+
.available .actionButtonContainer {
|
|
183
193
|
display: flex;
|
|
184
194
|
padding: 4px 6px;
|
|
185
195
|
border-radius: 8px;
|
|
@@ -188,11 +198,11 @@
|
|
|
188
198
|
gap: 4px;
|
|
189
199
|
}
|
|
190
200
|
|
|
191
|
-
.
|
|
192
|
-
background-color:
|
|
201
|
+
.available .actionButtonContainer:hover {
|
|
202
|
+
background-color: #f4f7fb;
|
|
193
203
|
}
|
|
194
204
|
|
|
195
|
-
.
|
|
205
|
+
.available .iconCloseContainer {
|
|
196
206
|
display: flex;
|
|
197
207
|
width: 16px;
|
|
198
208
|
height: 16px;
|
|
@@ -200,17 +210,17 @@
|
|
|
200
210
|
justify-content: center;
|
|
201
211
|
align-items: center;
|
|
202
212
|
font-size: 9px;
|
|
203
|
-
color:
|
|
213
|
+
color: #456073;
|
|
204
214
|
}
|
|
205
215
|
|
|
206
|
-
.
|
|
216
|
+
.available .iconClose {
|
|
207
217
|
width: 9px;
|
|
208
218
|
height: 9px;
|
|
209
219
|
flex-shrink: 0;
|
|
210
220
|
}
|
|
211
221
|
|
|
212
|
-
.
|
|
213
|
-
color:
|
|
222
|
+
.available .makeUnavailableText {
|
|
223
|
+
color: #456073;
|
|
214
224
|
font-family: "Open Sans", sans-serif;
|
|
215
225
|
font-size: 14px;
|
|
216
226
|
font-style: normal;
|
|
@@ -218,44 +228,78 @@
|
|
|
218
228
|
line-height: normal;
|
|
219
229
|
}
|
|
220
230
|
|
|
221
|
-
.
|
|
231
|
+
.availableIconClose {
|
|
222
232
|
font-size: 8px;
|
|
223
|
-
color:
|
|
233
|
+
color: #456073;
|
|
224
234
|
}
|
|
225
235
|
|
|
226
236
|
/* Passed status styles */
|
|
227
|
-
.
|
|
237
|
+
.passed .documentActions {
|
|
228
238
|
display: flex;
|
|
229
239
|
align-items: center;
|
|
230
240
|
gap: 8px;
|
|
231
241
|
}
|
|
232
242
|
|
|
233
|
-
.
|
|
234
|
-
.
|
|
243
|
+
.passed .documentCount,
|
|
244
|
+
.passed .noteCount {
|
|
235
245
|
display: flex;
|
|
236
246
|
align-items: center;
|
|
237
247
|
gap: 4px;
|
|
238
248
|
}
|
|
239
249
|
|
|
240
|
-
.
|
|
241
|
-
.
|
|
250
|
+
.passed .documentCountIcon,
|
|
251
|
+
.passed .noteCountIcon {
|
|
242
252
|
width: 16px;
|
|
243
253
|
height: 16px;
|
|
244
254
|
}
|
|
245
255
|
|
|
246
|
-
.
|
|
247
|
-
.
|
|
248
|
-
color:
|
|
256
|
+
.passed .documentCountNumber,
|
|
257
|
+
.passed .noteCountNumber {
|
|
258
|
+
color: #171e25;
|
|
249
259
|
font-family: Inter, sans-serif;
|
|
250
260
|
font-size: 14px;
|
|
251
261
|
font-weight: 600;
|
|
252
262
|
line-height: normal;
|
|
253
263
|
}
|
|
254
264
|
|
|
255
|
-
|
|
256
|
-
|
|
265
|
+
.iconCloseContainer {
|
|
266
|
+
display: flex;
|
|
267
|
+
width: 16px;
|
|
268
|
+
height: 16px;
|
|
269
|
+
padding: 3px;
|
|
270
|
+
justify-content: center;
|
|
271
|
+
align-items: center;
|
|
272
|
+
font-size: 9px;
|
|
273
|
+
color: #456073;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
.makeUnavailableText {
|
|
277
|
+
color: #456073;
|
|
278
|
+
font-family: "Open Sans", sans-serif;
|
|
279
|
+
font-size: 14px;
|
|
280
|
+
font-style: normal;
|
|
281
|
+
font-weight: 400;
|
|
282
|
+
line-height: normal;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
.documentCountIcon,
|
|
286
|
+
.noteCountIcon {
|
|
287
|
+
width: 16px;
|
|
288
|
+
height: 16px;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
.documentCountNumber,
|
|
292
|
+
.noteCountNumber {
|
|
293
|
+
color: #171e25;
|
|
294
|
+
font-family: Inter, sans-serif;
|
|
295
|
+
font-size: 14px;
|
|
296
|
+
font-weight: 600;
|
|
297
|
+
line-height: normal;
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
/* Summary style */
|
|
301
|
+
.summary {
|
|
257
302
|
width: 463px;
|
|
258
|
-
/* height: 182px; */
|
|
259
303
|
display: flex;
|
|
260
304
|
padding: 16px;
|
|
261
305
|
flex-direction: column;
|
|
@@ -263,18 +307,18 @@
|
|
|
263
307
|
align-items: flex-start;
|
|
264
308
|
gap: 12px;
|
|
265
309
|
border-radius: 16px;
|
|
266
|
-
background:
|
|
310
|
+
background: #fff;
|
|
267
311
|
box-shadow: 0px 1px 9px 0px rgba(15, 133, 168, 0.08);
|
|
268
312
|
}
|
|
269
313
|
|
|
270
|
-
.
|
|
314
|
+
.summary .appointmentHeader {
|
|
271
315
|
display: flex;
|
|
272
316
|
justify-content: space-between;
|
|
273
317
|
align-items: flex-start;
|
|
274
318
|
align-self: stretch;
|
|
275
319
|
}
|
|
276
320
|
|
|
277
|
-
.
|
|
321
|
+
.appointmentContentContainer {
|
|
278
322
|
display: flex;
|
|
279
323
|
flex-direction: column;
|
|
280
324
|
justify-content: center;
|
|
@@ -282,11 +326,11 @@
|
|
|
282
326
|
gap: 10px;
|
|
283
327
|
}
|
|
284
328
|
|
|
285
|
-
.
|
|
329
|
+
.summary .appointmentFooter {
|
|
286
330
|
padding-top: 11px;
|
|
287
331
|
}
|
|
288
332
|
|
|
289
|
-
.
|
|
333
|
+
.dateTimeContainer {
|
|
290
334
|
display: flex;
|
|
291
335
|
flex-direction: column;
|
|
292
336
|
justify-content: center;
|
|
@@ -294,8 +338,8 @@
|
|
|
294
338
|
gap: 3px;
|
|
295
339
|
}
|
|
296
340
|
|
|
297
|
-
.
|
|
298
|
-
color:
|
|
341
|
+
.summaryDate {
|
|
342
|
+
color: #456073;
|
|
299
343
|
text-align: center;
|
|
300
344
|
font-family: Inter, sans-serif;
|
|
301
345
|
font-size: 20px;
|
|
@@ -304,8 +348,8 @@
|
|
|
304
348
|
line-height: 0.8;
|
|
305
349
|
}
|
|
306
350
|
|
|
307
|
-
.
|
|
308
|
-
color:
|
|
351
|
+
.summaryTime {
|
|
352
|
+
color: #456073;
|
|
309
353
|
font-family: Inter, sans-serif;
|
|
310
354
|
font-size: 20px;
|
|
311
355
|
font-style: normal;
|
|
@@ -314,7 +358,7 @@
|
|
|
314
358
|
letter-spacing: 0.2px;
|
|
315
359
|
}
|
|
316
360
|
|
|
317
|
-
.
|
|
361
|
+
.iconContainer {
|
|
318
362
|
display: flex;
|
|
319
363
|
width: 40px;
|
|
320
364
|
height: 40px;
|
|
@@ -323,8 +367,8 @@
|
|
|
323
367
|
align-items: center;
|
|
324
368
|
}
|
|
325
369
|
|
|
326
|
-
.
|
|
327
|
-
color:
|
|
370
|
+
.summary .appointmentContent {
|
|
371
|
+
color: #456073;
|
|
328
372
|
font-family: "Open Sans";
|
|
329
373
|
font-size: 16px;
|
|
330
374
|
font-style: normal;
|
|
@@ -332,8 +376,8 @@
|
|
|
332
376
|
line-height: 1;
|
|
333
377
|
}
|
|
334
378
|
|
|
335
|
-
.
|
|
336
|
-
color:
|
|
379
|
+
.summary .clientName {
|
|
380
|
+
color: #728ea7;
|
|
337
381
|
font-family: "Open Sans", sans-serif;
|
|
338
382
|
font-size: 12px;
|
|
339
383
|
font-style: normal;
|
|
@@ -342,7 +386,7 @@
|
|
|
342
386
|
letter-spacing: 0.36px;
|
|
343
387
|
}
|
|
344
388
|
|
|
345
|
-
.
|
|
389
|
+
.summary .tagsContainer {
|
|
346
390
|
display: flex;
|
|
347
391
|
align-items: flex-start;
|
|
348
392
|
gap: 8px;
|
|
@@ -350,14 +394,15 @@
|
|
|
350
394
|
padding-top: 3px;
|
|
351
395
|
}
|
|
352
396
|
|
|
353
|
-
.
|
|
397
|
+
.documentActionsContainer {
|
|
354
398
|
display: flex;
|
|
355
399
|
flex-direction: column;
|
|
356
400
|
justify-content: center;
|
|
357
401
|
align-items: flex-end;
|
|
358
402
|
gap: 8px;
|
|
359
403
|
}
|
|
360
|
-
|
|
404
|
+
|
|
405
|
+
.summary .documentActions {
|
|
361
406
|
display: flex;
|
|
362
407
|
flex-direction: row;
|
|
363
408
|
justify-content: center;
|
|
@@ -366,44 +411,40 @@
|
|
|
366
411
|
}
|
|
367
412
|
|
|
368
413
|
/* Styles compacts */
|
|
369
|
-
|
|
370
|
-
max-width: 280px;
|
|
371
|
-
} */
|
|
372
|
-
|
|
373
|
-
.appointment-slot.compact .appointment-time {
|
|
414
|
+
.compact .appointmentTime {
|
|
374
415
|
font-size: 14px;
|
|
375
416
|
}
|
|
376
417
|
|
|
377
|
-
.
|
|
418
|
+
.compact .clientName {
|
|
378
419
|
font-size: 12px;
|
|
379
420
|
}
|
|
380
421
|
|
|
381
|
-
.
|
|
422
|
+
.compact .appointmentContent {
|
|
382
423
|
font-size: 14px;
|
|
383
424
|
}
|
|
384
425
|
|
|
385
|
-
.
|
|
426
|
+
.compact .makeUnavailableText {
|
|
386
427
|
font-size: 12px;
|
|
387
428
|
}
|
|
388
429
|
|
|
389
|
-
.
|
|
390
|
-
.
|
|
430
|
+
.compact .documentCount,
|
|
431
|
+
.compact .noteCount {
|
|
391
432
|
font-size: 12px;
|
|
392
433
|
}
|
|
393
434
|
|
|
394
435
|
/* Styles compacts pour le mode summary */
|
|
395
|
-
.
|
|
436
|
+
.summary.compact .summaryDate {
|
|
396
437
|
font-size: 14px;
|
|
397
438
|
}
|
|
398
439
|
|
|
399
|
-
.
|
|
440
|
+
.summary.compact .summaryTime {
|
|
400
441
|
font-size: 14px;
|
|
401
442
|
}
|
|
402
443
|
|
|
403
|
-
.
|
|
444
|
+
.summary.compact .appointmentContent {
|
|
404
445
|
font-size: 14px;
|
|
405
446
|
}
|
|
406
447
|
|
|
407
|
-
.
|
|
448
|
+
.summary.compact .clientName {
|
|
408
449
|
font-size: 12px;
|
|
409
450
|
}
|