@clikvn/agent-widget-embedded 1.1.5-dev-21 → 1.1.5-dev-23
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/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/commons/constants/bookMeeting.d.ts +60 -7
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/commons/constants/bookMeeting.d.ts.map +1 -1
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/commons/constants/bookMeeting.js +25 -17
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/commons/constants/bookMeeting.js.map +1 -1
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/BookMeetingDetail.d.ts +1 -1
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/BookMeetingDetail.d.ts.map +1 -1
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/BookMeetingDetail.js +5 -6
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/BookMeetingDetail.js.map +1 -1
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/BookMeetingForm.d.ts +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/BookMeetingForm.d.ts.map +1 -1
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/BookMeetingForm.js +30 -22
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/BookMeetingForm.js.map +1 -1
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/BookMeetingList.d.ts.map +1 -1
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/BookMeetingList.js +8 -11
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/BookMeetingList.js.map +1 -1
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Chat.js +1 -1
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Chat.js.map +1 -1
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Icons.d.ts.map +1 -1
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Icons.js +1 -1
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Icons.js.map +1 -1
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Message.d.ts.map +1 -1
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Message.js +1 -1
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/Message.js.map +1 -1
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/MultimodalInput.d.ts.map +1 -1
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/MultimodalInput.js +7 -5
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/MultimodalInput.js.map +1 -1
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ProductList.d.ts +3 -3
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ProductList.d.ts.map +1 -1
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ProductList.js +2 -2
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ProductList.js.map +1 -1
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/UserContactForm.js +1 -1
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/UserContactForm.js.map +1 -1
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ui/PhoneNumberInput.d.ts +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ui/PhoneNumberInput.d.ts.map +1 -1
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ui/PhoneNumberInput.js +4 -2
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/components/Chat/ui/PhoneNumberInput.js.map +1 -1
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/hooks/useConfiguration.d.ts +4 -1
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/hooks/useConfiguration.d.ts.map +1 -1
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/hooks/useConfiguration.js.map +1 -1
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/types/bookMeeting.type.d.ts +2 -1
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/types/bookMeeting.type.d.ts.map +1 -1
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/types/bookMeeting.type.js.map +1 -1
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/wdyr.d.ts +2 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/wdyr.d.ts.map +1 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/wdyr.js +15 -0
- package/.rollup.cache/Users/tungthai/Desktop/Develop/clik-ai-chatbot-embedded/dist/wdyr.js.map +1 -0
- package/dist/commons/constants/bookMeeting.d.ts +60 -7
- package/dist/commons/constants/bookMeeting.d.ts.map +1 -1
- package/dist/components/Chat/BookMeetingDetail.d.ts +1 -1
- package/dist/components/Chat/BookMeetingDetail.d.ts.map +1 -1
- package/dist/components/Chat/BookMeetingForm.d.ts +1 -0
- package/dist/components/Chat/BookMeetingForm.d.ts.map +1 -1
- package/dist/components/Chat/BookMeetingList.d.ts.map +1 -1
- package/dist/components/Chat/Icons.d.ts.map +1 -1
- package/dist/components/Chat/Message.d.ts.map +1 -1
- package/dist/components/Chat/MultimodalInput.d.ts.map +1 -1
- package/dist/components/Chat/ProductList.d.ts +3 -3
- package/dist/components/Chat/ProductList.d.ts.map +1 -1
- package/dist/components/Chat/ui/PhoneNumberInput.d.ts +1 -0
- package/dist/components/Chat/ui/PhoneNumberInput.d.ts.map +1 -1
- package/dist/hooks/useConfiguration.d.ts +4 -1
- package/dist/hooks/useConfiguration.d.ts.map +1 -1
- package/dist/index.html +4 -4
- package/dist/types/bookMeeting.type.d.ts +2 -1
- package/dist/types/bookMeeting.type.d.ts.map +1 -1
- package/dist/wdyr.d.ts +2 -0
- package/dist/wdyr.d.ts.map +1 -0
- package/dist/web.js +1 -1
- package/dist/web.js.map +1 -1
- package/package.json +1 -1
|
@@ -3,12 +3,65 @@ export declare const TIME_OPTIONS: {
|
|
|
3
3
|
label: string;
|
|
4
4
|
}[];
|
|
5
5
|
export declare const DURATION_OPTIONS: {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
FIFTEEN_MINUTES: {
|
|
7
|
+
value: string;
|
|
8
|
+
label: string;
|
|
9
|
+
};
|
|
10
|
+
TWENTY_MINUTES: {
|
|
11
|
+
value: string;
|
|
12
|
+
label: string;
|
|
13
|
+
};
|
|
14
|
+
TWENTY_FIVE_MINUTES: {
|
|
15
|
+
value: string;
|
|
16
|
+
label: string;
|
|
17
|
+
};
|
|
18
|
+
THIRTY_MINUTES: {
|
|
19
|
+
value: string;
|
|
20
|
+
label: string;
|
|
21
|
+
};
|
|
22
|
+
SIXTY_MINUTES: {
|
|
23
|
+
value: string;
|
|
24
|
+
label: string;
|
|
25
|
+
};
|
|
26
|
+
NINETY_MINUTES: {
|
|
27
|
+
value: string;
|
|
28
|
+
label: string;
|
|
29
|
+
};
|
|
30
|
+
ONE_HUNDRED_TWENTY_MINUTES: {
|
|
31
|
+
value: string;
|
|
32
|
+
label: string;
|
|
33
|
+
};
|
|
34
|
+
};
|
|
9
35
|
export declare const CHANNEL_OPTIONS: {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
36
|
+
ZOOM: {
|
|
37
|
+
value: string;
|
|
38
|
+
label: string;
|
|
39
|
+
icon: import("react/jsx-runtime").JSX.Element;
|
|
40
|
+
};
|
|
41
|
+
PHONE_CALL: {
|
|
42
|
+
value: string;
|
|
43
|
+
label: string;
|
|
44
|
+
icon: import("react/jsx-runtime").JSX.Element;
|
|
45
|
+
};
|
|
46
|
+
IN_PERSON: {
|
|
47
|
+
value: string;
|
|
48
|
+
label: string;
|
|
49
|
+
icon: import("react/jsx-runtime").JSX.Element;
|
|
50
|
+
};
|
|
51
|
+
GOOGLE_MEET: {
|
|
52
|
+
value: string;
|
|
53
|
+
label: string;
|
|
54
|
+
icon: import("react/jsx-runtime").JSX.Element;
|
|
55
|
+
};
|
|
56
|
+
MICROSOFT_TEAMS: {
|
|
57
|
+
value: string;
|
|
58
|
+
label: string;
|
|
59
|
+
icon: import("react/jsx-runtime").JSX.Element;
|
|
60
|
+
};
|
|
61
|
+
WEBEX: {
|
|
62
|
+
value: string;
|
|
63
|
+
label: string;
|
|
64
|
+
icon: import("react/jsx-runtime").JSX.Element;
|
|
65
|
+
};
|
|
66
|
+
};
|
|
14
67
|
//# sourceMappingURL=bookMeeting.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bookMeeting.d.ts","sourceRoot":"","sources":["../../../src/commons/constants/bookMeeting.tsx"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY;;;GAiDxB,CAAC;AAEF,eAAO,MAAM,gBAAgB
|
|
1
|
+
{"version":3,"file":"bookMeeting.d.ts","sourceRoot":"","sources":["../../../src/commons/constants/bookMeeting.tsx"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY;;;GAiDxB,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAQ5B,CAAC;AAEF,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAe3B,CAAC"}
|
|
@@ -50,21 +50,29 @@ export const TIME_OPTIONS = [
|
|
|
50
50
|
{ value: '23:00', label: '11:00 PM' },
|
|
51
51
|
{ value: '23:30', label: '11:30 PM' },
|
|
52
52
|
];
|
|
53
|
-
export const DURATION_OPTIONS =
|
|
54
|
-
{ value: '15', label: '15 min' },
|
|
55
|
-
{ value: '20', label: '20 min' },
|
|
56
|
-
{ value: '25', label: '25 min' },
|
|
57
|
-
{ value: '30', label: '30 min' },
|
|
58
|
-
{ value: '60', label: '60 min' },
|
|
59
|
-
{ value: '90', label: '90 min' },
|
|
60
|
-
{ value: '120', label: '120 min' },
|
|
61
|
-
|
|
62
|
-
export const CHANNEL_OPTIONS =
|
|
63
|
-
{ value: 'ZOOM', label: 'Zoom', icon: _jsx(VideoIcon, {}) },
|
|
64
|
-
{ value: 'PHONE_CALL', label: 'Phone Call', icon: _jsx(PhoneIcon, {}) },
|
|
65
|
-
{ value: 'IN_PERSON', label: 'In Person', icon: _jsx(MapPinIcon, {}) },
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
53
|
+
export const DURATION_OPTIONS = {
|
|
54
|
+
FIFTEEN_MINUTES: { value: '15', label: '15 min' },
|
|
55
|
+
TWENTY_MINUTES: { value: '20', label: '20 min' },
|
|
56
|
+
TWENTY_FIVE_MINUTES: { value: '25', label: '25 min' },
|
|
57
|
+
THIRTY_MINUTES: { value: '30', label: '30 min' },
|
|
58
|
+
SIXTY_MINUTES: { value: '60', label: '60 min' },
|
|
59
|
+
NINETY_MINUTES: { value: '90', label: '90 min' },
|
|
60
|
+
ONE_HUNDRED_TWENTY_MINUTES: { value: '120', label: '120 min' },
|
|
61
|
+
};
|
|
62
|
+
export const CHANNEL_OPTIONS = {
|
|
63
|
+
ZOOM: { value: 'ZOOM', label: 'Zoom', icon: _jsx(VideoIcon, {}) },
|
|
64
|
+
PHONE_CALL: { value: 'PHONE_CALL', label: 'Phone Call', icon: _jsx(PhoneIcon, {}) },
|
|
65
|
+
IN_PERSON: { value: 'IN_PERSON', label: 'In Person', icon: _jsx(MapPinIcon, {}) },
|
|
66
|
+
GOOGLE_MEET: {
|
|
67
|
+
value: 'GOOGLE_MEET',
|
|
68
|
+
label: 'Google Meet',
|
|
69
|
+
icon: _jsx(VideoIcon, {}),
|
|
70
|
+
},
|
|
71
|
+
MICROSOFT_TEAMS: {
|
|
72
|
+
value: 'MICROSOFT_TEAMS',
|
|
73
|
+
label: 'Microsoft Teams',
|
|
74
|
+
icon: _jsx(VideoIcon, {}),
|
|
75
|
+
},
|
|
76
|
+
WEBEX: { value: 'WEBEX', label: 'Webex', icon: _jsx(VideoIcon, {}) },
|
|
77
|
+
};
|
|
70
78
|
//# sourceMappingURL=bookMeeting.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bookMeeting.js","sourceRoot":"","sources":["../../../src/commons/constants/bookMeeting.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"bookMeeting.js","sourceRoot":"","sources":["../../../src/commons/constants/bookMeeting.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEzE,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE;IACrC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE;IACrC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE;IACrC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE;IACrC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE;IACrC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE;IACrC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE;IACrC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE;IACrC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE;IACrC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE;IACrC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE;IACrC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE;IACrC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE;IACrC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE;IACrC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE;IACrC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE;IACrC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE;IACrC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE;IACrC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE;IACrC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE;IACrC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE;IACrC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE;IACrC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE;IACrC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE;IACrC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE;IACrC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE;IACrC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE;IACrC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE;IACrC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE;IACrC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE;IACrC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE;IACrC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE;IACrC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE;IACrC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE;IACrC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE;IACrC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE;IACrC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE;IACrC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE;IACrC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE;IACrC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE;IACrC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE;IACrC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE;IACrC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE;IACrC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE;IACrC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE;IACrC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE;IACrC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE;IACrC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE;CACtC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,eAAe,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE;IACjD,cAAc,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE;IAChD,mBAAmB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE;IACrD,cAAc,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE;IAChD,aAAa,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE;IAC/C,cAAc,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE;IAChD,0BAA0B,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE;CAC/D,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,KAAC,SAAS,KAAG,EAAE;IAC3D,UAAU,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,KAAC,SAAS,KAAG,EAAE;IAC7E,SAAS,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,KAAC,UAAU,KAAG,EAAE;IAC3E,WAAW,EAAE;QACX,KAAK,EAAE,aAAa;QACpB,KAAK,EAAE,aAAa;QACpB,IAAI,EAAE,KAAC,SAAS,KAAG;KACpB;IACD,eAAe,EAAE;QACf,KAAK,EAAE,iBAAiB;QACxB,KAAK,EAAE,iBAAiB;QACxB,IAAI,EAAE,KAAC,SAAS,KAAG;KACpB;IACD,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,KAAC,SAAS,KAAG,EAAE;CAC/D,CAAC","sourcesContent":["import { MapPinIcon, PhoneIcon, VideoIcon } from 'components/Chat/Icons';\n\nexport const TIME_OPTIONS = [\n { value: '00:00', label: '12:00 AM' },\n { value: '00:30', label: '12:30 AM' },\n { value: '01:00', label: '01:00 AM' },\n { value: '01:30', label: '01:30 AM' },\n { value: '02:00', label: '02:00 AM' },\n { value: '02:30', label: '02:30 AM' },\n { value: '03:00', label: '03:00 AM' },\n { value: '03:30', label: '03:30 AM' },\n { value: '04:00', label: '04:00 AM' },\n { value: '04:30', label: '04:30 AM' },\n { value: '05:00', label: '05:00 AM' },\n { value: '05:30', label: '05:30 AM' },\n { value: '06:00', label: '06:00 AM' },\n { value: '06:30', label: '06:30 AM' },\n { value: '07:00', label: '07:00 AM' },\n { value: '07:30', label: '07:30 AM' },\n { value: '08:00', label: '08:00 AM' },\n { value: '08:30', label: '08:30 AM' },\n { value: '09:00', label: '09:00 AM' },\n { value: '09:30', label: '09:30 AM' },\n { value: '10:00', label: '10:00 AM' },\n { value: '10:30', label: '10:30 AM' },\n { value: '11:00', label: '11:00 AM' },\n { value: '11:30', label: '11:30 AM' },\n { value: '12:00', label: '12:00 PM' },\n { value: '12:30', label: '12:30 PM' },\n { value: '13:00', label: '01:00 PM' },\n { value: '13:30', label: '01:30 PM' },\n { value: '14:00', label: '02:00 PM' },\n { value: '14:30', label: '02:30 PM' },\n { value: '15:00', label: '03:00 PM' },\n { value: '15:30', label: '03:30 PM' },\n { value: '16:00', label: '04:00 PM' },\n { value: '16:30', label: '04:30 PM' },\n { value: '17:00', label: '05:00 PM' },\n { value: '17:30', label: '05:30 PM' },\n { value: '18:00', label: '06:00 PM' },\n { value: '18:30', label: '06:30 PM' },\n { value: '19:00', label: '07:00 PM' },\n { value: '19:30', label: '07:30 PM' },\n { value: '20:00', label: '08:00 PM' },\n { value: '20:30', label: '08:30 PM' },\n { value: '21:00', label: '09:00 PM' },\n { value: '21:30', label: '09:30 PM' },\n { value: '22:00', label: '10:00 PM' },\n { value: '22:30', label: '10:30 PM' },\n { value: '23:00', label: '11:00 PM' },\n { value: '23:30', label: '11:30 PM' },\n];\n\nexport const DURATION_OPTIONS = {\n FIFTEEN_MINUTES: { value: '15', label: '15 min' },\n TWENTY_MINUTES: { value: '20', label: '20 min' },\n TWENTY_FIVE_MINUTES: { value: '25', label: '25 min' },\n THIRTY_MINUTES: { value: '30', label: '30 min' },\n SIXTY_MINUTES: { value: '60', label: '60 min' },\n NINETY_MINUTES: { value: '90', label: '90 min' },\n ONE_HUNDRED_TWENTY_MINUTES: { value: '120', label: '120 min' },\n};\n\nexport const CHANNEL_OPTIONS = {\n ZOOM: { value: 'ZOOM', label: 'Zoom', icon: <VideoIcon /> },\n PHONE_CALL: { value: 'PHONE_CALL', label: 'Phone Call', icon: <PhoneIcon /> },\n IN_PERSON: { value: 'IN_PERSON', label: 'In Person', icon: <MapPinIcon /> },\n GOOGLE_MEET: {\n value: 'GOOGLE_MEET',\n label: 'Google Meet',\n icon: <VideoIcon />,\n },\n MICROSOFT_TEAMS: {\n value: 'MICROSOFT_TEAMS',\n label: 'Microsoft Teams',\n icon: <VideoIcon />,\n },\n WEBEX: { value: 'WEBEX', label: 'Webex', icon: <VideoIcon /> },\n};\n"]}
|
|
@@ -2,7 +2,7 @@ import { FC } from 'react';
|
|
|
2
2
|
import { BookMeetingType } from 'types/bookMeeting.type';
|
|
3
3
|
import { UserContactType } from 'types/userContact.type';
|
|
4
4
|
interface Props {
|
|
5
|
-
|
|
5
|
+
userContact?: UserContactType;
|
|
6
6
|
booking: BookMeetingType;
|
|
7
7
|
loading: boolean;
|
|
8
8
|
theme?: Record<string, any>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BookMeetingDetail.d.ts","sourceRoot":"","sources":["../../../src/components/Chat/BookMeetingDetail.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAW,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAQzD,UAAU,KAAK;IACb,
|
|
1
|
+
{"version":3,"file":"BookMeetingDetail.d.ts","sourceRoot":"","sources":["../../../src/components/Chat/BookMeetingDetail.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAW,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAQzD,UAAU,KAAK;IACb,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,OAAO,EAAE,eAAe,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC7B;AAED,QAAA,MAAM,iBAAiB,EAAE,EAAE,CAAC,KAAK,CAwGhC,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
|
|
@@ -2,7 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
|
|
|
2
2
|
import { useMemo } from 'react';
|
|
3
3
|
import LoadingComponent from './LoadingComponent';
|
|
4
4
|
import { CHANNEL_OPTIONS, DURATION_OPTIONS, TIME_OPTIONS, } from 'commons/constants';
|
|
5
|
-
const BookMeetingDetail = ({
|
|
5
|
+
const BookMeetingDetail = ({ userContact, booking, loading, theme, }) => {
|
|
6
6
|
const loadingComponent = useMemo(() => _jsx(LoadingComponent, {}), []);
|
|
7
7
|
const bookMeetingDetailComponent = useMemo(() => {
|
|
8
8
|
if (!booking) {
|
|
@@ -21,15 +21,14 @@ const BookMeetingDetail = ({ hostData, booking, loading, theme, }) => {
|
|
|
21
21
|
?.label
|
|
22
22
|
: '';
|
|
23
23
|
const duration = booking?.duration
|
|
24
|
-
? DURATION_OPTIONS
|
|
24
|
+
? DURATION_OPTIONS[booking?.duration]
|
|
25
25
|
?.label
|
|
26
26
|
: '';
|
|
27
27
|
const channel = booking?.channel
|
|
28
|
-
? CHANNEL_OPTIONS
|
|
29
|
-
?.label
|
|
28
|
+
? CHANNEL_OPTIONS[booking?.channel]?.label
|
|
30
29
|
: '';
|
|
31
|
-
return (_jsxs("div", { className: "bg-white w-full shadow overflow-hidden sm:rounded-lg max-w-[358px] mx-auto border", children: [_jsx("div", { className: "p-3", children: _jsx("h3", { className: "text-[#18181B] text-base font-semibold", children: `${title}${
|
|
32
|
-
}, [booking,
|
|
30
|
+
return (_jsxs("div", { className: "bg-white w-full shadow overflow-hidden sm:rounded-lg max-w-[358px] mx-auto border", children: [_jsx("div", { className: "p-3", children: _jsx("h3", { className: "text-[#18181B] text-base font-semibold", children: `${title}${userContact?.name?.firstName ? ` with ${userContact?.name?.firstName}` : ''}` }) }), _jsx("div", { children: _jsxs("dl", { children: [_jsxs("div", { className: "bg-gray-50 p-3 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-6", children: [_jsx("dt", { className: "text-[#00000073] font-medium text-[14px] leading-[14px]", children: theme?.bookMeetingForm?.labelDate || 'Date' }), _jsx("dd", { className: "mt-1 text-[#18181B] font-medium text-[14px] leading-[14px] sm:mt-0 sm:col-span-2", children: startDate })] }), _jsxs("div", { className: "bg-white p-3 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-6", children: [_jsx("dt", { className: "text-[#00000073] font-medium text-[14px] leading-[14px]", children: theme?.bookMeetingForm?.labelTime || 'Time' }), _jsx("dd", { className: "mt-1 text-[#18181B] font-medium text-[14px] leading-[14px] sm:mt-0 sm:col-span-2", children: startTime })] }), _jsxs("div", { className: "bg-gray-50 p-3 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-6", children: [_jsx("dt", { className: "text-[#00000073] font-medium text-[14px] leading-[14px]", children: theme?.bookMeetingForm?.labelDuration || 'Duration' }), _jsx("dd", { className: "mt-1 text-[#18181B] font-medium text-[14px] leading-[14px] sm:mt-0 sm:col-span-2", children: duration })] }), _jsxs("div", { className: "bg-white p-3 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-6", children: [_jsx("dt", { className: "text-[#00000073] font-medium text-[14px] leading-[14px]", children: theme?.bookMeetingForm?.labelChannel || 'Channel' }), _jsx("dd", { className: "mt-1 text-[#18181B] font-medium text-[14px] leading-[14px] sm:mt-0 sm:col-span-2", children: channel })] }), _jsxs("div", { className: "bg-gray-50 p-3 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-6", children: [_jsx("dt", { className: "text-[#00000073] font-medium text-[14px] leading-[14px]", children: theme?.bookMeetingForm?.labelHost || 'Host' }), _jsx("dd", { className: "mt-1 text-[#18181B] font-medium text-[14px] leading-[14px] sm:mt-0 sm:col-span-2", children: userContact?.emails?.primaryEmail })] }), _jsxs("div", { className: "bg-gray-50 p-3 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-6", children: [_jsx("dt", { className: "text-[#00000073] font-medium text-[14px] leading-[14px]", children: theme?.bookMeetingForm?.labelBrand || 'Brand' }), _jsx("dd", { className: "mt-1 text-[#18181B] font-medium text-[14px] leading-[14px] sm:mt-0 sm:col-span-2", children: booking?.brand })] })] }) })] }));
|
|
31
|
+
}, [booking, userContact]);
|
|
33
32
|
return (_jsxs(_Fragment, { children: [loading && loadingComponent, !loading && !!booking && bookMeetingDetailComponent] }));
|
|
34
33
|
};
|
|
35
34
|
export default BookMeetingDetail;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BookMeetingDetail.js","sourceRoot":"","sources":["../../../src/components/Chat/BookMeetingDetail.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAM,OAAO,EAAE,MAAM,OAAO,CAAC;AAGpC,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAClD,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,YAAY,GACb,MAAM,mBAAmB,CAAC;AAS3B,MAAM,iBAAiB,GAAc,CAAC,EACpC,
|
|
1
|
+
{"version":3,"file":"BookMeetingDetail.js","sourceRoot":"","sources":["../../../src/components/Chat/BookMeetingDetail.tsx"],"names":[],"mappings":"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","sourcesContent":["import { FC, useMemo } from 'react';\nimport { BookMeetingType } from 'types/bookMeeting.type';\nimport { UserContactType } from 'types/userContact.type';\nimport LoadingComponent from './LoadingComponent';\nimport {\n CHANNEL_OPTIONS,\n DURATION_OPTIONS,\n TIME_OPTIONS,\n} from 'commons/constants';\n\ninterface Props {\n userContact?: UserContactType;\n booking: BookMeetingType;\n loading: boolean;\n theme?: Record<string, any>;\n}\n\nconst BookMeetingDetail: FC<Props> = ({\n userContact,\n booking,\n loading,\n theme,\n}) => {\n const loadingComponent = useMemo(() => <LoadingComponent />, []);\n\n const bookMeetingDetailComponent = useMemo(() => {\n if (!booking) {\n return null;\n }\n\n const title = booking?.title || 'Book meeting';\n const startDate = booking?.startDate\n ? new Date(booking?.startDate).toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n })\n : '';\n const startTime = booking?.startTime\n ? TIME_OPTIONS.find((option) => option.value === booking?.startTime)\n ?.label\n : '';\n\n const duration = booking?.duration\n ? DURATION_OPTIONS[booking?.duration as keyof typeof DURATION_OPTIONS]\n ?.label\n : '';\n\n const channel = booking?.channel\n ? CHANNEL_OPTIONS[booking?.channel as keyof typeof CHANNEL_OPTIONS]?.label\n : '';\n\n return (\n <div className=\"bg-white w-full shadow overflow-hidden sm:rounded-lg max-w-[358px] mx-auto border\">\n <div className=\"p-3\">\n <h3 className=\"text-[#18181B] text-base font-semibold\">\n {`${title}${userContact?.name?.firstName ? ` with ${userContact?.name?.firstName}` : ''}`}\n </h3>\n </div>\n <div>\n <dl>\n <div className=\"bg-gray-50 p-3 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-6\">\n <dt className=\"text-[#00000073] font-medium text-[14px] leading-[14px]\">\n {theme?.bookMeetingForm?.labelDate || 'Date'}\n </dt>\n <dd className=\"mt-1 text-[#18181B] font-medium text-[14px] leading-[14px] sm:mt-0 sm:col-span-2\">\n {startDate}\n </dd>\n </div>\n <div className=\"bg-white p-3 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-6\">\n <dt className=\"text-[#00000073] font-medium text-[14px] leading-[14px]\">\n {theme?.bookMeetingForm?.labelTime || 'Time'}\n </dt>\n <dd className=\"mt-1 text-[#18181B] font-medium text-[14px] leading-[14px] sm:mt-0 sm:col-span-2\">\n {startTime}\n </dd>\n </div>\n <div className=\"bg-gray-50 p-3 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-6\">\n <dt className=\"text-[#00000073] font-medium text-[14px] leading-[14px]\">\n {theme?.bookMeetingForm?.labelDuration || 'Duration'}\n </dt>\n <dd className=\"mt-1 text-[#18181B] font-medium text-[14px] leading-[14px] sm:mt-0 sm:col-span-2\">\n {duration}\n </dd>\n </div>\n <div className=\"bg-white p-3 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-6\">\n <dt className=\"text-[#00000073] font-medium text-[14px] leading-[14px]\">\n {theme?.bookMeetingForm?.labelChannel || 'Channel'}\n </dt>\n <dd className=\"mt-1 text-[#18181B] font-medium text-[14px] leading-[14px] sm:mt-0 sm:col-span-2\">\n {channel}\n </dd>\n </div>\n <div className=\"bg-gray-50 p-3 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-6\">\n <dt className=\"text-[#00000073] font-medium text-[14px] leading-[14px]\">\n {theme?.bookMeetingForm?.labelHost || 'Host'}\n </dt>\n <dd className=\"mt-1 text-[#18181B] font-medium text-[14px] leading-[14px] sm:mt-0 sm:col-span-2\">\n {userContact?.emails?.primaryEmail}\n </dd>\n </div>\n <div className=\"bg-gray-50 p-3 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-6\">\n <dt className=\"text-[#00000073] font-medium text-[14px] leading-[14px]\">\n {theme?.bookMeetingForm?.labelBrand || 'Brand'}\n </dt>\n <dd className=\"mt-1 text-[#18181B] font-medium text-[14px] leading-[14px] sm:mt-0 sm:col-span-2\">\n {booking?.brand}\n </dd>\n </div>\n </dl>\n </div>\n </div>\n );\n }, [booking, userContact]);\n\n return (\n <>\n {loading && loadingComponent}\n {!loading && !!booking && bookMeetingDetailComponent}\n </>\n );\n};\n\nexport default BookMeetingDetail;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BookMeetingForm.d.ts","sourceRoot":"","sources":["../../../src/components/Chat/BookMeetingForm.tsx"],"names":[],"mappings":"AAQA,OAAO,EAAE,EAAE,EAAuB,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"BookMeetingForm.d.ts","sourceRoot":"","sources":["../../../src/components/Chat/BookMeetingForm.tsx"],"names":[],"mappings":"AAQA,OAAO,EAAE,EAAE,EAAuB,MAAM,OAAO,CAAC;AAYhD,KAAK,SAAS,GAAG;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,QAAA,MAAM,eAAe,EAAE,EAAE,CAAC,SAAS,CA4XlC,CAAC;AAEF,eAAe,eAAe,CAAC"}
|
|
@@ -3,6 +3,7 @@ import { CHANNEL_OPTIONS, DURATION_OPTIONS, TIME_OPTIONS, } from 'commons/consta
|
|
|
3
3
|
import { motion } from 'framer-motion';
|
|
4
4
|
import { useConfiguration } from 'hooks/useConfiguration';
|
|
5
5
|
import { useEffect, useState } from 'react';
|
|
6
|
+
import { isValidPhoneNumber } from 'react-phone-number-input';
|
|
6
7
|
import { createBookMeeting } from 'services/bookMeeting.service';
|
|
7
8
|
import { getUserContact } from 'services/userContact.service';
|
|
8
9
|
import { isEmptyString } from 'utils/functionUtils';
|
|
@@ -10,15 +11,17 @@ import DataPickerCustom from './ui/DataPickerCustom';
|
|
|
10
11
|
import { SelectBox } from './ui/SelectBox';
|
|
11
12
|
import { SelectBoxWithIcon } from './ui/SelectBoxWithIcon';
|
|
12
13
|
import Spinner from './ui/Spinner';
|
|
13
|
-
|
|
14
|
+
import PhoneNumberInput from './ui/PhoneNumberInput';
|
|
15
|
+
const BookMeetingForm = ({ chatId, brandAlias, userId }) => {
|
|
14
16
|
const { theme, apiHost } = useConfiguration();
|
|
15
17
|
const [loading, setLoading] = useState(false);
|
|
16
18
|
const [formData, setFormData] = useState({
|
|
17
19
|
startDate: new Date().toISOString().split('T')[0],
|
|
18
20
|
startTime: '',
|
|
19
|
-
duration:
|
|
21
|
+
duration: DURATION_OPTIONS.THIRTY_MINUTES.value,
|
|
20
22
|
channel: '',
|
|
21
23
|
host: '',
|
|
24
|
+
hostPhoneNumber: '',
|
|
22
25
|
});
|
|
23
26
|
const [statusSubmit, setStatusSubmit] = useState();
|
|
24
27
|
const [errors, setErrors] = useState({});
|
|
@@ -74,6 +77,13 @@ const BookMeetingForm = ({ chatId, brandAlias }) => {
|
|
|
74
77
|
if (isEmptyString(formData.channel)) {
|
|
75
78
|
errors.channel = messages?.channelError || 'Channel is required';
|
|
76
79
|
}
|
|
80
|
+
if (isEmptyString(formData.host)) {
|
|
81
|
+
errors.host = messages?.hostError || 'Host is required';
|
|
82
|
+
}
|
|
83
|
+
if (formData?.channel === CHANNEL_OPTIONS.PHONE_CALL.value &&
|
|
84
|
+
!isValidPhoneNumber(formData?.hostPhoneNumber)) {
|
|
85
|
+
errors.host = messages?.invalidPhoneNumber || 'Invalid phone number';
|
|
86
|
+
}
|
|
77
87
|
return errors;
|
|
78
88
|
};
|
|
79
89
|
const handleSubmit = async (e) => {
|
|
@@ -85,29 +95,20 @@ const BookMeetingForm = ({ chatId, brandAlias }) => {
|
|
|
85
95
|
setErrors(validationErrors);
|
|
86
96
|
return;
|
|
87
97
|
}
|
|
88
|
-
let userContact;
|
|
89
|
-
if (formData?.host) {
|
|
90
|
-
const userContacts = await getUserContact(apiHost, {
|
|
91
|
-
email: formData?.host,
|
|
92
|
-
});
|
|
93
|
-
if (!userContacts || !userContacts?.length) {
|
|
94
|
-
setErrors({
|
|
95
|
-
host: theme?.bookMeetingForm?.messages?.hostNotFound ||
|
|
96
|
-
'Host is not found',
|
|
97
|
-
});
|
|
98
|
-
return;
|
|
99
|
-
}
|
|
100
|
-
else {
|
|
101
|
-
userContact = userContacts[0];
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
98
|
setErrors({});
|
|
99
|
+
const { startDate, startTime, duration, channel, host, hostPhoneNumber } = formData;
|
|
105
100
|
const requestData = {
|
|
106
|
-
|
|
101
|
+
startDate,
|
|
102
|
+
startTime,
|
|
103
|
+
duration,
|
|
104
|
+
channel,
|
|
107
105
|
title: 'Book Meeting',
|
|
108
|
-
hostId: userContact.id,
|
|
109
106
|
chatId,
|
|
110
107
|
brand: `/${brandAlias}`,
|
|
108
|
+
userId,
|
|
109
|
+
host: formData?.channel === CHANNEL_OPTIONS.PHONE_CALL.value
|
|
110
|
+
? hostPhoneNumber
|
|
111
|
+
: host,
|
|
111
112
|
};
|
|
112
113
|
const res = await createBookMeeting(requestData, apiHost);
|
|
113
114
|
if (res?.id) {
|
|
@@ -157,8 +158,15 @@ const BookMeetingForm = ({ chatId, brandAlias }) => {
|
|
|
157
158
|
...prevData,
|
|
158
159
|
startDate: date.toISOString().split('T')[0],
|
|
159
160
|
}));
|
|
160
|
-
}, disabled: disabled, value: new Date(formData?.startDate) }) })] }), _jsxs("div", { className: "flex flex-col", children: [_jsxs("div", { className: "flex items-center gap-3", children: [_jsxs("div", { className: "flex flex-col gap-2 w-1/2", children: [_jsx("label", { className: "text-[#18181B] font-medium text-[14px] leading-[14px]", htmlFor: "startTime", children: theme?.bookMeetingForm?.labelTime || 'Time' }), _jsx("div", { children: _jsx(SelectBox, { name: "startTime", options: TIME_OPTIONS, optionClassName: "text-[#18181B] h-[40px] py-2 pr-2 pl-3 border rounded-lg bg-white", placeholder: theme?.bookMeetingForm?.labelTime || 'Select Time', onChange: handleChangeSelect, disabled: disabled, className: errors?.startTime ? 'border-red-500' : '' }) })] }), _jsxs("div", { className: "flex flex-col gap-2 w-1/2", children: [_jsx("label", { className: "text-[#18181B] font-medium text-[14px] leading-[14px]", htmlFor: "duration", children: theme?.bookMeetingForm?.labelDuration || 'Duration' }), _jsx("div", { children: _jsx(SelectBox, { name: "duration", options: DURATION_OPTIONS, optionContainerClassName: "gap-4", optionClassName: "!p-0 !h-[24px] hover:bg-transparent hover:!text-[#1E6EB4]", placeholder: theme?.bookMeetingForm?.labelDuration || 'Select Duration', onChange: handleChangeSelect, disabled: disabled, defaultValue: "30", className: errors?.duration ? 'border-red-500' : '' }) })] })] }), errors.startTime && (_jsx("p", { className: "text-red-500 text-sm", children: errors.startTime })), errors.duration && (_jsx("p", { className: "text-red-500 text-sm", children: errors.duration }))] }), _jsxs("div", { className: "flex flex-col", children: [_jsxs("div", { className: "flex gap-2 items-center", children: [_jsx("label", { className: "w-1/4 text-[#18181B] font-medium text-[14px] leading-[14px]", htmlFor: "channel", children: theme?.bookMeetingForm?.labelChannel || 'Channel' }), _jsx("div", { className: "w-full", children: _jsx(SelectBoxWithIcon, { name: "channel", options: CHANNEL_OPTIONS, placeholder: theme?.bookMeetingForm?.labelChannel || 'Select Channel', onChange: handleChangeSelect, disabled: disabled, className: errors?.channel ? 'border-red-500' : '' }) })] }), errors.channel && (_jsx("p", { className: "text-red-500 text-sm", children: errors.channel }))] }), _jsxs("div", { className: "flex flex-col", children: [_jsxs("div", { className: "flex gap-2 items-center", children: [_jsx("label", { className: "w-1/4 text-[#18181B] font-medium text-[14px] leading-[14px]", htmlFor: "host", children: theme?.bookMeetingForm?.labelHost || 'Host' }), _jsx("div", { className: "flex flex-col w-full", children:
|
|
161
|
-
|
|
161
|
+
}, disabled: disabled, value: new Date(formData?.startDate) }) })] }), _jsxs("div", { className: "flex flex-col", children: [_jsxs("div", { className: "flex items-center gap-3", children: [_jsxs("div", { className: "flex flex-col gap-2 w-1/2", children: [_jsx("label", { className: "text-[#18181B] font-medium text-[14px] leading-[14px]", htmlFor: "startTime", children: theme?.bookMeetingForm?.labelTime || 'Time' }), _jsx("div", { children: _jsx(SelectBox, { name: "startTime", options: TIME_OPTIONS, optionClassName: "text-[#18181B] h-[40px] py-2 pr-2 pl-3 border rounded-lg bg-white", placeholder: theme?.bookMeetingForm?.labelTime || 'Select Time', onChange: handleChangeSelect, disabled: disabled, className: errors?.startTime ? 'border-red-500' : '' }) })] }), _jsxs("div", { className: "flex flex-col gap-2 w-1/2", children: [_jsx("label", { className: "text-[#18181B] font-medium text-[14px] leading-[14px]", htmlFor: "duration", children: theme?.bookMeetingForm?.labelDuration || 'Duration' }), _jsx("div", { children: _jsx(SelectBox, { name: "duration", options: Object.values(DURATION_OPTIONS), optionContainerClassName: "gap-4", optionClassName: "!p-0 !h-[24px] hover:bg-transparent hover:!text-[#1E6EB4]", placeholder: theme?.bookMeetingForm?.labelDuration || 'Select Duration', onChange: handleChangeSelect, disabled: disabled, defaultValue: "30", className: errors?.duration ? 'border-red-500' : '' }) })] })] }), errors.startTime && (_jsx("p", { className: "text-red-500 text-sm", children: errors.startTime })), errors.duration && (_jsx("p", { className: "text-red-500 text-sm", children: errors.duration }))] }), _jsxs("div", { className: "flex flex-col", children: [_jsxs("div", { className: "flex gap-2 items-center", children: [_jsx("label", { className: "w-1/4 text-[#18181B] font-medium text-[14px] leading-[14px]", htmlFor: "channel", children: theme?.bookMeetingForm?.labelChannel || 'Channel' }), _jsx("div", { className: "w-full", children: _jsx(SelectBoxWithIcon, { name: "channel", options: Object.values(CHANNEL_OPTIONS), placeholder: theme?.bookMeetingForm?.labelChannel || 'Select Channel', onChange: handleChangeSelect, disabled: disabled, className: errors?.channel ? 'border-red-500' : '' }) })] }), errors.channel && (_jsx("p", { className: "text-red-500 text-sm", children: errors.channel }))] }), _jsxs("div", { className: "flex flex-col", children: [_jsxs("div", { className: "flex gap-2 items-center", children: [_jsx("label", { className: "w-1/4 text-[#18181B] font-medium text-[14px] leading-[14px]", htmlFor: "host", children: theme?.bookMeetingForm?.labelHost || 'Host' }), _jsx("div", { className: "flex flex-col w-full", children: formData?.channel === CHANNEL_OPTIONS.PHONE_CALL.value ? (_jsx(PhoneNumberInput, { onChange: (val) => {
|
|
162
|
+
setFormData((prevData) => ({
|
|
163
|
+
...prevData,
|
|
164
|
+
hostPhoneNumber: val,
|
|
165
|
+
}));
|
|
166
|
+
}, placeholder: theme?.bookMeetingForm?.placeholderPhoneNumber ||
|
|
167
|
+
'Phone number', value: formData?.hostPhoneNumber, disabled: disabled, numberInputClassName: errors?.host ? '!border-red-500' : '' })) : (_jsx("input", { type: "email", name: "host", id: "host", className: `w-full rounded-lg border border-[#e0e0e0] bg-white pt-2 pr-[8px] pb-2 pl-3 text-base font-medium text-[#18181B] outline-none focus:border-[#6A64F1] focus:shadow-md h-[40px]
|
|
168
|
+
disabled:cursor-not-allowed disabled:!bg-gray-100 disabled:!text-gray-500 ${errors?.host ? '!border-red-500' : ''}`, placeholder: theme?.bookMeetingForm?.placeholderEmail ||
|
|
169
|
+
'Email address', required: true, disabled: disabled, onChange: handleChange, value: formData?.host })) })] }), errors.host && (_jsx("p", { className: "text-red-500 text-sm", children: errors.host }))] }), _jsxs("div", { className: "flex flex-col items-center justify-center", children: [statusSubmit && (_jsx("div", { className: "flex items-center w-full justify-center mb-2", children: _jsx("p", { className: `text-green-500 text-sm mt-1 ${statusSubmit?.status === 200 ? 'text-green-500' : 'text-red-500'}`, children: statusSubmit.message }) })), _jsx("div", { className: "w-full", children: _jsx("button", { className: `shadow bg-[#1E6EB4] hover:bg-[#4096ff] focus:shadow-outline focus:outline-none text-white font-bold py-2 px-8 rounded-lg w-full h-[40px] disabled:cursor-not-allowed disabled:!bg-[#0000000a] disabled:!text-[#00000040] ${loading ? 'flex items-center justify-center' : ''}`, type: "submit", disabled: disabled, children: loading ? (_jsx(Spinner, {})) : (`${theme?.buttons?.textBtnSubmit || 'Submit'}`) }) })] })] })] }) }));
|
|
162
170
|
};
|
|
163
171
|
export default BookMeetingForm;
|
|
164
172
|
//# sourceMappingURL=BookMeetingForm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BookMeetingForm.js","sourceRoot":"","sources":["../../../src/components/Chat/BookMeetingForm.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n CHANNEL_OPTIONS,\n DURATION_OPTIONS,\n TIME_OPTIONS,\n} from 'commons/constants';\nimport { FormErrors, StatusSubmitType } from 'constants/form';\nimport { motion } from 'framer-motion';\nimport { useConfiguration } from 'hooks/useConfiguration';\nimport { FC, useEffect, useState } from 'react';\nimport { createBookMeeting } from 'services/bookMeeting.service';\nimport { getUserContact } from 'services/userContact.service';\nimport { BookMeetingType } from 'types/bookMeeting.type';\nimport { isEmptyString } from 'utils/functionUtils';\nimport DataPickerCustom from './ui/DataPickerCustom';\nimport { SelectBox } from './ui/SelectBox';\nimport { SelectBoxWithIcon } from './ui/SelectBoxWithIcon';\nimport Spinner from './ui/Spinner';\n\ntype PropsType = {\n chatId: string;\n brandAlias: string;\n};\n\nconst BookMeetingForm: FC<PropsType> = ({ chatId, brandAlias }) => {\n const { theme, apiHost } = useConfiguration();\n\n const [loading, setLoading] = useState(false);\n const [formData, setFormData] = useState({\n startDate: new Date().toISOString().split('T')[0],\n startTime: '',\n duration: '30',\n channel: '',\n host: '',\n });\n const [statusSubmit, setStatusSubmit] = useState<StatusSubmitType>();\n const [errors, setErrors] = useState<FormErrors>({});\n const [disabled, setDisabled] = useState(false);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const { name, value } = e.target;\n setFormData((prevData) => ({\n ...prevData,\n [name]: value,\n }));\n };\n\n const handleChangeSelect = (value: string, name: string) => {\n setFormData((prevData) => ({\n ...prevData,\n [name]: value,\n }));\n };\n\n const parseTimeToDate = (timeStr: string, dateStr: string) => {\n const now = new Date(dateStr);\n const [hours, minutes] = timeStr.split(':').map(Number);\n\n if (\n isNaN(hours) ||\n isNaN(minutes) ||\n hours < 0 ||\n hours > 23 ||\n minutes < 0 ||\n minutes > 59\n ) {\n throw new Error(`Invalid time format: ${timeStr}`);\n }\n\n const date = new Date(\n now.getFullYear(),\n now.getMonth(),\n now.getDate(),\n hours,\n minutes\n );\n return date;\n };\n\n const validateForm = () => {\n const errors: FormErrors = {};\n const messages = theme?.bookMeetingForm?.messages;\n\n if (isEmptyString(formData.startTime)) {\n errors.startTime = messages?.startTimeError || 'Time is required';\n } else if (formData?.startDate) {\n try {\n const parsedDate = parseTimeToDate(\n formData.startTime,\n formData.startDate\n );\n if (parsedDate < new Date()) {\n errors.startTime =\n messages?.startTimeInThePast || 'Time is in the past';\n }\n } catch (e: any) {\n errors.startTime = e.message;\n }\n }\n\n if (isEmptyString(formData.duration)) {\n errors.duration = messages?.durationError || 'Duration is required';\n }\n\n if (isEmptyString(formData.channel)) {\n errors.channel = messages?.channelError || 'Channel is required';\n }\n\n return errors;\n };\n\n const handleSubmit = async (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n setLoading(true);\n try {\n const validationErrors = validateForm();\n if (Object.keys(validationErrors)?.length) {\n setErrors(validationErrors);\n return;\n }\n\n let userContact;\n if (formData?.host) {\n const userContacts = await getUserContact(apiHost, {\n email: formData?.host,\n });\n\n if (!userContacts || !userContacts?.length) {\n setErrors({\n host:\n theme?.bookMeetingForm?.messages?.hostNotFound ||\n 'Host is not found',\n });\n return;\n } else {\n userContact = userContacts[0];\n }\n }\n\n setErrors({});\n const requestData: BookMeetingType = {\n ...formData,\n title: 'Book Meeting',\n hostId: userContact.id,\n chatId,\n brand: `/${brandAlias}`,\n };\n\n const res = await createBookMeeting(requestData, apiHost);\n\n if (res?.id) {\n localStorage.setItem('bookMeetingId', res.id);\n setDisabled(true);\n setStatusSubmit({\n message:\n theme?.bookMeetingForm?.messages?.submitSuccess ||\n 'Submit successful',\n status: 200,\n });\n }\n } catch (error) {\n console.error(error);\n setDisabled(false);\n setStatusSubmit({\n message:\n theme?.bookMeetingForm?.messages?.submitError || 'Failed to submit',\n status: 500,\n });\n } finally {\n setLoading(false);\n }\n };\n\n const getUserContactData = async (userId: string) => {\n if (!userId) return;\n\n const res = await getUserContact(apiHost, { id: userId });\n if (!res || !res?.length) {\n return;\n }\n\n setFormData((prevData) => ({\n ...prevData,\n host: res[0]?.emails?.primaryEmail,\n }));\n };\n\n useEffect(() => {\n const userId = localStorage.getItem('userId');\n if (userId) {\n getUserContactData(userId);\n }\n }, []);\n\n return (\n <motion.div\n className=\"w-full mx-auto max-w-[358px] group/message\"\n initial={{ y: 5, opacity: 0 }}\n animate={{ y: 0, opacity: 1 }}\n >\n <form\n className=\"flex flex-col gap-3 bg-white px-3 py-3 pb-4 rounded-lg w-full\"\n onSubmit={handleSubmit}\n >\n <div className=\"text-[#18181B] font-semibold text-base\">\n {theme?.bookMeetingForm?.title || 'Book meeting'}\n </div>\n\n <div className=\"flex flex-col gap-3\">\n {/* Date */}\n <div className=\"flex items-center gap-2\">\n <label\n className=\"w-1/4 text-[#18181B] font-medium text-[14px] leading-[14px]\"\n htmlFor=\"startDate\"\n >\n {theme?.bookMeetingForm?.labelDate || 'Date'}\n </label>\n\n <div className=\"w-full\">\n <DataPickerCustom\n onChange={(date: Date | null) => {\n if (!date) return;\n\n setFormData((prevData) => ({\n ...prevData,\n startDate: date.toISOString().split('T')[0],\n }));\n }}\n disabled={disabled}\n value={new Date(formData?.startDate)}\n />\n </div>\n </div>\n\n {/* Time and Duration */}\n <div className=\"flex flex-col\">\n <div className=\"flex items-center gap-3\">\n {/* Time */}\n <div className=\"flex flex-col gap-2 w-1/2\">\n <label\n className=\"text-[#18181B] font-medium text-[14px] leading-[14px]\"\n htmlFor=\"startTime\"\n >\n {theme?.bookMeetingForm?.labelTime || 'Time'}\n </label>\n\n <div>\n <SelectBox\n name=\"startTime\"\n options={TIME_OPTIONS}\n optionClassName=\"text-[#18181B] h-[40px] py-2 pr-2 pl-3 border rounded-lg bg-white\"\n placeholder={\n theme?.bookMeetingForm?.labelTime || 'Select Time'\n }\n onChange={handleChangeSelect}\n disabled={disabled}\n className={errors?.startTime ? 'border-red-500' : ''}\n />\n </div>\n </div>\n {/* Duration */}\n <div className=\"flex flex-col gap-2 w-1/2\">\n <label\n className=\"text-[#18181B] font-medium text-[14px] leading-[14px]\"\n htmlFor=\"duration\"\n >\n {theme?.bookMeetingForm?.labelDuration || 'Duration'}\n </label>\n\n <div>\n <SelectBox\n name=\"duration\"\n options={DURATION_OPTIONS}\n optionContainerClassName=\"gap-4\"\n optionClassName=\"!p-0 !h-[24px] hover:bg-transparent hover:!text-[#1E6EB4]\"\n placeholder={\n theme?.bookMeetingForm?.labelDuration || 'Select Duration'\n }\n onChange={handleChangeSelect}\n disabled={disabled}\n defaultValue=\"30\"\n className={errors?.duration ? 'border-red-500' : ''}\n />\n </div>\n </div>\n </div>\n\n {errors.startTime && (\n <p className=\"text-red-500 text-sm\">{errors.startTime}</p>\n )}\n {errors.duration && (\n <p className=\"text-red-500 text-sm\">{errors.duration}</p>\n )}\n </div>\n\n {/* Channel */}\n <div className=\"flex flex-col\">\n <div className=\"flex gap-2 items-center\">\n <label\n className=\"w-1/4 text-[#18181B] font-medium text-[14px] leading-[14px]\"\n htmlFor=\"channel\"\n >\n {theme?.bookMeetingForm?.labelChannel || 'Channel'}\n </label>\n\n <div className=\"w-full\">\n <SelectBoxWithIcon\n name=\"channel\"\n options={CHANNEL_OPTIONS}\n placeholder={\n theme?.bookMeetingForm?.labelChannel || 'Select Channel'\n }\n onChange={handleChangeSelect}\n disabled={disabled}\n className={errors?.channel ? 'border-red-500' : ''}\n />\n </div>\n </div>\n {errors.channel && (\n <p className=\"text-red-500 text-sm\">{errors.channel}</p>\n )}\n </div>\n\n {/* Host */}\n <div className=\"flex flex-col\">\n <div className=\"flex gap-2 items-center\">\n <label\n className=\"w-1/4 text-[#18181B] font-medium text-[14px] leading-[14px]\"\n htmlFor=\"host\"\n >\n {theme?.bookMeetingForm?.labelHost || 'Host'}\n </label>\n\n <div className=\"flex flex-col w-full\">\n <input\n type=\"email\"\n name=\"host\"\n id=\"host\"\n className={`w-full rounded-lg border border-[#e0e0e0] bg-white pt-2 pr-[8px] pb-2 pl-3 text-base font-medium text-[#18181B] outline-none focus:border-[#6A64F1] focus:shadow-md h-[40px] \n disabled:cursor-not-allowed disabled:!bg-gray-100 disabled:!text-gray-500 ${errors?.host ? '!border-red-500' : ''}`}\n placeholder={theme?.bookMeetingForm?.labelHost || 'Email'}\n required\n disabled={disabled}\n onChange={handleChange}\n value={formData?.host}\n />\n </div>\n </div>\n {errors.host && (\n <p className=\"text-red-500 text-sm\">{errors.host}</p>\n )}\n </div>\n\n <div className=\"flex flex-col items-center justify-center\">\n {statusSubmit && (\n <div className=\"flex items-center w-full justify-center mb-2\">\n <p\n className={`text-green-500 text-sm mt-1 ${statusSubmit?.status === 200 ? 'text-green-500' : 'text-red-500'}`}\n >\n {statusSubmit.message}\n </p>\n </div>\n )}\n <div className=\"w-full\">\n <button\n className={`shadow bg-[#1E6EB4] hover:bg-[#4096ff] focus:shadow-outline focus:outline-none text-white font-bold py-2 px-8 rounded-lg w-full h-[40px] disabled:cursor-not-allowed disabled:!bg-[#0000000a] disabled:!text-[#00000040] ${loading ? 'flex items-center justify-center' : ''}`}\n type=\"submit\"\n disabled={disabled}\n >\n {loading ? (\n <Spinner />\n ) : (\n `${theme?.buttons?.textBtnSubmit || 'Submit'}`\n )}\n </button>\n </div>\n </div>\n </div>\n </form>\n </motion.div>\n );\n};\n\nexport default BookMeetingForm;\n"]}
|
|
1
|
+
{"version":3,"file":"BookMeetingForm.js","sourceRoot":"","sources":["../../../src/components/Chat/BookMeetingForm.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n CHANNEL_OPTIONS,\n DURATION_OPTIONS,\n TIME_OPTIONS,\n} from 'commons/constants';\nimport { FormErrors, StatusSubmitType } from 'constants/form';\nimport { motion } from 'framer-motion';\nimport { useConfiguration } from 'hooks/useConfiguration';\nimport { FC, useEffect, useState } from 'react';\nimport { isValidPhoneNumber, Value } from 'react-phone-number-input';\nimport { createBookMeeting } from 'services/bookMeeting.service';\nimport { getUserContact } from 'services/userContact.service';\nimport { BookMeetingType } from 'types/bookMeeting.type';\nimport { isEmptyString } from 'utils/functionUtils';\nimport DataPickerCustom from './ui/DataPickerCustom';\nimport { SelectBox } from './ui/SelectBox';\nimport { SelectBoxWithIcon } from './ui/SelectBoxWithIcon';\nimport Spinner from './ui/Spinner';\nimport PhoneNumberInput from './ui/PhoneNumberInput';\n\ntype PropsType = {\n chatId: string;\n brandAlias: string;\n userId: string;\n};\n\nconst BookMeetingForm: FC<PropsType> = ({ chatId, brandAlias, userId }) => {\n const { theme, apiHost } = useConfiguration();\n\n const [loading, setLoading] = useState(false);\n const [formData, setFormData] = useState({\n startDate: new Date().toISOString().split('T')[0],\n startTime: '',\n duration: DURATION_OPTIONS.THIRTY_MINUTES.value,\n channel: '',\n host: '',\n hostPhoneNumber: '' as Value,\n });\n const [statusSubmit, setStatusSubmit] = useState<StatusSubmitType>();\n const [errors, setErrors] = useState<FormErrors>({});\n const [disabled, setDisabled] = useState(false);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const { name, value } = e.target;\n setFormData((prevData) => ({\n ...prevData,\n [name]: value,\n }));\n };\n\n const handleChangeSelect = (value: string, name: string) => {\n setFormData((prevData) => ({\n ...prevData,\n [name]: value,\n }));\n };\n\n const parseTimeToDate = (timeStr: string, dateStr: string) => {\n const now = new Date(dateStr);\n const [hours, minutes] = timeStr.split(':').map(Number);\n\n if (\n isNaN(hours) ||\n isNaN(minutes) ||\n hours < 0 ||\n hours > 23 ||\n minutes < 0 ||\n minutes > 59\n ) {\n throw new Error(`Invalid time format: ${timeStr}`);\n }\n\n const date = new Date(\n now.getFullYear(),\n now.getMonth(),\n now.getDate(),\n hours,\n minutes\n );\n return date;\n };\n\n const validateForm = () => {\n const errors: FormErrors = {};\n const messages = theme?.bookMeetingForm?.messages;\n\n if (isEmptyString(formData.startTime)) {\n errors.startTime = messages?.startTimeError || 'Time is required';\n } else if (formData?.startDate) {\n try {\n const parsedDate = parseTimeToDate(\n formData.startTime,\n formData.startDate\n );\n if (parsedDate < new Date()) {\n errors.startTime =\n messages?.startTimeInThePast || 'Time is in the past';\n }\n } catch (e: any) {\n errors.startTime = e.message;\n }\n }\n\n if (isEmptyString(formData.duration)) {\n errors.duration = messages?.durationError || 'Duration is required';\n }\n\n if (isEmptyString(formData.channel)) {\n errors.channel = messages?.channelError || 'Channel is required';\n }\n if (isEmptyString(formData.host)) {\n errors.host = messages?.hostError || 'Host is required';\n }\n\n if (\n formData?.channel === CHANNEL_OPTIONS.PHONE_CALL.value &&\n !isValidPhoneNumber(formData?.hostPhoneNumber as Value)\n ) {\n errors.host = messages?.invalidPhoneNumber || 'Invalid phone number';\n }\n\n return errors;\n };\n\n const handleSubmit = async (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n setLoading(true);\n try {\n const validationErrors = validateForm();\n if (Object.keys(validationErrors)?.length) {\n setErrors(validationErrors);\n return;\n }\n\n setErrors({});\n const { startDate, startTime, duration, channel, host, hostPhoneNumber } =\n formData;\n const requestData: BookMeetingType = {\n startDate,\n startTime,\n duration,\n channel,\n title: 'Book Meeting',\n chatId,\n brand: `/${brandAlias}`,\n userId,\n host:\n formData?.channel === CHANNEL_OPTIONS.PHONE_CALL.value\n ? hostPhoneNumber\n : host,\n };\n\n const res = await createBookMeeting(requestData, apiHost);\n\n if (res?.id) {\n localStorage.setItem('bookMeetingId', res.id);\n setDisabled(true);\n setStatusSubmit({\n message:\n theme?.bookMeetingForm?.messages?.submitSuccess ||\n 'Submit successful',\n status: 200,\n });\n }\n } catch (error) {\n console.error(error);\n setDisabled(false);\n setStatusSubmit({\n message:\n theme?.bookMeetingForm?.messages?.submitError || 'Failed to submit',\n status: 500,\n });\n } finally {\n setLoading(false);\n }\n };\n\n const getUserContactData = async (userId: string) => {\n if (!userId) return;\n\n const res = await getUserContact(apiHost, { id: userId });\n if (!res || !res?.length) {\n return;\n }\n\n setFormData((prevData) => ({\n ...prevData,\n host: res[0]?.emails?.primaryEmail,\n }));\n };\n\n useEffect(() => {\n const userId = localStorage.getItem('userId');\n if (userId) {\n getUserContactData(userId);\n }\n }, []);\n\n return (\n <motion.div\n className=\"w-full mx-auto max-w-[358px] group/message\"\n initial={{ y: 5, opacity: 0 }}\n animate={{ y: 0, opacity: 1 }}\n >\n <form\n className=\"flex flex-col gap-3 bg-white px-3 py-3 pb-4 rounded-lg w-full\"\n onSubmit={handleSubmit}\n >\n <div className=\"text-[#18181B] font-semibold text-base\">\n {theme?.bookMeetingForm?.title || 'Book meeting'}\n </div>\n\n <div className=\"flex flex-col gap-3\">\n {/* Date */}\n <div className=\"flex items-center gap-2\">\n <label\n className=\"w-1/4 text-[#18181B] font-medium text-[14px] leading-[14px]\"\n htmlFor=\"startDate\"\n >\n {theme?.bookMeetingForm?.labelDate || 'Date'}\n </label>\n\n <div className=\"w-full\">\n <DataPickerCustom\n onChange={(date: Date | null) => {\n if (!date) return;\n\n setFormData((prevData) => ({\n ...prevData,\n startDate: date.toISOString().split('T')[0],\n }));\n }}\n disabled={disabled}\n value={new Date(formData?.startDate)}\n />\n </div>\n </div>\n\n {/* Time and Duration */}\n <div className=\"flex flex-col\">\n <div className=\"flex items-center gap-3\">\n {/* Time */}\n <div className=\"flex flex-col gap-2 w-1/2\">\n <label\n className=\"text-[#18181B] font-medium text-[14px] leading-[14px]\"\n htmlFor=\"startTime\"\n >\n {theme?.bookMeetingForm?.labelTime || 'Time'}\n </label>\n\n <div>\n <SelectBox\n name=\"startTime\"\n options={TIME_OPTIONS}\n optionClassName=\"text-[#18181B] h-[40px] py-2 pr-2 pl-3 border rounded-lg bg-white\"\n placeholder={\n theme?.bookMeetingForm?.labelTime || 'Select Time'\n }\n onChange={handleChangeSelect}\n disabled={disabled}\n className={errors?.startTime ? 'border-red-500' : ''}\n />\n </div>\n </div>\n {/* Duration */}\n <div className=\"flex flex-col gap-2 w-1/2\">\n <label\n className=\"text-[#18181B] font-medium text-[14px] leading-[14px]\"\n htmlFor=\"duration\"\n >\n {theme?.bookMeetingForm?.labelDuration || 'Duration'}\n </label>\n\n <div>\n <SelectBox\n name=\"duration\"\n options={Object.values(DURATION_OPTIONS)}\n optionContainerClassName=\"gap-4\"\n optionClassName=\"!p-0 !h-[24px] hover:bg-transparent hover:!text-[#1E6EB4]\"\n placeholder={\n theme?.bookMeetingForm?.labelDuration || 'Select Duration'\n }\n onChange={handleChangeSelect}\n disabled={disabled}\n defaultValue=\"30\"\n className={errors?.duration ? 'border-red-500' : ''}\n />\n </div>\n </div>\n </div>\n\n {errors.startTime && (\n <p className=\"text-red-500 text-sm\">{errors.startTime}</p>\n )}\n {errors.duration && (\n <p className=\"text-red-500 text-sm\">{errors.duration}</p>\n )}\n </div>\n\n {/* Channel */}\n <div className=\"flex flex-col\">\n <div className=\"flex gap-2 items-center\">\n <label\n className=\"w-1/4 text-[#18181B] font-medium text-[14px] leading-[14px]\"\n htmlFor=\"channel\"\n >\n {theme?.bookMeetingForm?.labelChannel || 'Channel'}\n </label>\n\n <div className=\"w-full\">\n <SelectBoxWithIcon\n name=\"channel\"\n options={Object.values(CHANNEL_OPTIONS)}\n placeholder={\n theme?.bookMeetingForm?.labelChannel || 'Select Channel'\n }\n onChange={handleChangeSelect}\n disabled={disabled}\n className={errors?.channel ? 'border-red-500' : ''}\n />\n </div>\n </div>\n {errors.channel && (\n <p className=\"text-red-500 text-sm\">{errors.channel}</p>\n )}\n </div>\n\n {/* Host */}\n <div className=\"flex flex-col\">\n <div className=\"flex gap-2 items-center\">\n <label\n className=\"w-1/4 text-[#18181B] font-medium text-[14px] leading-[14px]\"\n htmlFor=\"host\"\n >\n {theme?.bookMeetingForm?.labelHost || 'Host'}\n </label>\n\n <div className=\"flex flex-col w-full\">\n {formData?.channel === CHANNEL_OPTIONS.PHONE_CALL.value ? (\n <PhoneNumberInput\n onChange={(val: Value) => {\n setFormData((prevData) => ({\n ...prevData,\n hostPhoneNumber: val,\n }));\n }}\n placeholder={\n theme?.bookMeetingForm?.placeholderPhoneNumber ||\n 'Phone number'\n }\n value={formData?.hostPhoneNumber}\n disabled={disabled}\n numberInputClassName={errors?.host ? '!border-red-500' : ''}\n />\n ) : (\n <input\n type=\"email\"\n name=\"host\"\n id=\"host\"\n className={`w-full rounded-lg border border-[#e0e0e0] bg-white pt-2 pr-[8px] pb-2 pl-3 text-base font-medium text-[#18181B] outline-none focus:border-[#6A64F1] focus:shadow-md h-[40px] \n disabled:cursor-not-allowed disabled:!bg-gray-100 disabled:!text-gray-500 ${errors?.host ? '!border-red-500' : ''}`}\n placeholder={\n theme?.bookMeetingForm?.placeholderEmail ||\n 'Email address'\n }\n required\n disabled={disabled}\n onChange={handleChange}\n value={formData?.host}\n />\n )}\n </div>\n </div>\n {errors.host && (\n <p className=\"text-red-500 text-sm\">{errors.host}</p>\n )}\n </div>\n\n <div className=\"flex flex-col items-center justify-center\">\n {statusSubmit && (\n <div className=\"flex items-center w-full justify-center mb-2\">\n <p\n className={`text-green-500 text-sm mt-1 ${statusSubmit?.status === 200 ? 'text-green-500' : 'text-red-500'}`}\n >\n {statusSubmit.message}\n </p>\n </div>\n )}\n <div className=\"w-full\">\n <button\n className={`shadow bg-[#1E6EB4] hover:bg-[#4096ff] focus:shadow-outline focus:outline-none text-white font-bold py-2 px-8 rounded-lg w-full h-[40px] disabled:cursor-not-allowed disabled:!bg-[#0000000a] disabled:!text-[#00000040] ${loading ? 'flex items-center justify-center' : ''}`}\n type=\"submit\"\n disabled={disabled}\n >\n {loading ? (\n <Spinner />\n ) : (\n `${theme?.buttons?.textBtnSubmit || 'Submit'}`\n )}\n </button>\n </div>\n </div>\n </div>\n </form>\n </motion.div>\n );\n};\n\nexport default BookMeetingForm;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BookMeetingList.d.ts","sourceRoot":"","sources":["../../../src/components/Chat/BookMeetingList.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAgC,MAAM,OAAO,CAAC;AAQzD,UAAU,KAAK;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC7B;AAED,QAAA,MAAM,eAAe,EAAE,EAAE,CAAC,KAAK,
|
|
1
|
+
{"version":3,"file":"BookMeetingList.d.ts","sourceRoot":"","sources":["../../../src/components/Chat/BookMeetingList.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAgC,MAAM,OAAO,CAAC;AAQzD,UAAU,KAAK;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC7B;AAED,QAAA,MAAM,eAAe,EAAE,EAAE,CAAC,KAAK,CA4F9B,CAAC;AAEF,eAAe,eAAe,CAAC"}
|
|
@@ -7,14 +7,14 @@ import { getBookMeeting } from 'services/bookMeeting.service';
|
|
|
7
7
|
const BookMeetingList = ({ apiHost, userId, theme }) => {
|
|
8
8
|
const [loading, setLoading] = useState(false);
|
|
9
9
|
const [bookings, setBookings] = useState([]);
|
|
10
|
-
const [
|
|
10
|
+
const [userContactData, setUserContactData] = useState();
|
|
11
11
|
const loadingComponent = useMemo(() => _jsx(LoadingComponent, {}), []);
|
|
12
|
-
const
|
|
13
|
-
const
|
|
14
|
-
if (!
|
|
12
|
+
const fetchUserContactDetail = async (userId) => {
|
|
13
|
+
const userContactData = await getUserContact(apiHost, { id: userId });
|
|
14
|
+
if (!userContactData || !userContactData?.length) {
|
|
15
15
|
return;
|
|
16
16
|
}
|
|
17
|
-
|
|
17
|
+
setUserContactData(userContactData[0]);
|
|
18
18
|
};
|
|
19
19
|
const handleFetchBookingOfUser = async () => {
|
|
20
20
|
if (!userId)
|
|
@@ -28,10 +28,7 @@ const BookMeetingList = ({ apiHost, userId, theme }) => {
|
|
|
28
28
|
return;
|
|
29
29
|
}
|
|
30
30
|
setBookings(bookMeetingData);
|
|
31
|
-
|
|
32
|
-
if (hostId) {
|
|
33
|
-
fetchHostData(hostId);
|
|
34
|
-
}
|
|
31
|
+
fetchUserContactDetail(userId);
|
|
35
32
|
}
|
|
36
33
|
catch (err) {
|
|
37
34
|
console.error('Error fetching book meeting details:', err);
|
|
@@ -56,8 +53,8 @@ const BookMeetingList = ({ apiHost, userId, theme }) => {
|
|
|
56
53
|
alignItems: 'flex-start',
|
|
57
54
|
}, children: [_jsx("div", { className: "text-[#18181B] font-semibold text-base", children: theme?.bookMeetingForm?.labelBookingList || 'Booking List' }), _jsx("div", { className: "flex flex-col w-full", style: {
|
|
58
55
|
gap: '12px',
|
|
59
|
-
}, children: bookings.map((booking) => (_jsx("div", { children: _jsx(BookMeetingDetail, { booking: booking, loading: loading,
|
|
60
|
-
}, [bookings,
|
|
56
|
+
}, children: bookings.map((booking) => (_jsx("div", { children: _jsx(BookMeetingDetail, { booking: booking, loading: loading, userContact: userContactData, theme: theme }) }, booking.id))) })] }) }));
|
|
57
|
+
}, [bookings, userContactData, loading]);
|
|
61
58
|
return (_jsxs(_Fragment, { children: [loading && loadingComponent, !loading && !!bookings && bookMeetingListComponent] }));
|
|
62
59
|
};
|
|
63
60
|
export default BookMeetingList;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BookMeetingList.js","sourceRoot":"","sources":["../../../src/components/Chat/BookMeetingList.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAM,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAGzD,OAAO,iBAAiB,MAAM,qBAAqB,CAAC;AACpD,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAQ9D,MAAM,eAAe,GAAc,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;IAChE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAU,KAAK,CAAC,CAAC;IACvD,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAoB,EAAE,CAAC,CAAC;IAChE,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"BookMeetingList.js","sourceRoot":"","sources":["../../../src/components/Chat/BookMeetingList.tsx"],"names":[],"mappings":"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","sourcesContent":["import { FC, useEffect, useMemo, useState } from 'react';\nimport { BookMeetingType } from 'types/bookMeeting.type';\nimport { UserContactType } from 'types/userContact.type';\nimport BookMeetingDetail from './BookMeetingDetail';\nimport LoadingComponent from './LoadingComponent';\nimport { getUserContact } from 'services/userContact.service';\nimport { getBookMeeting } from 'services/bookMeeting.service';\n\ninterface Props {\n apiHost: string;\n userId?: string;\n theme?: Record<string, any>;\n}\n\nconst BookMeetingList: FC<Props> = ({ apiHost, userId, theme }) => {\n const [loading, setLoading] = useState<boolean>(false);\n const [bookings, setBookings] = useState<BookMeetingType[]>([]);\n const [userContactData, setUserContactData] = useState<UserContactType>();\n\n const loadingComponent = useMemo(() => <LoadingComponent />, []);\n\n const fetchUserContactDetail = async (userId: string) => {\n const userContactData = await getUserContact(apiHost, { id: userId });\n\n if (!userContactData || !userContactData?.length) {\n return;\n }\n\n setUserContactData(userContactData[0]);\n };\n\n const handleFetchBookingOfUser = async () => {\n if (!userId) return;\n\n setLoading(true);\n try {\n const bookMeetingData = await getBookMeeting(apiHost, {\n userId,\n });\n\n if (!bookMeetingData || !bookMeetingData?.length) {\n return;\n }\n\n setBookings(bookMeetingData);\n fetchUserContactDetail(userId);\n } catch (err) {\n console.error('Error fetching book meeting details:', err);\n } finally {\n setLoading(false);\n }\n };\n\n useEffect(() => {\n handleFetchBookingOfUser();\n }, [userId]);\n\n const bookMeetingListComponent = useMemo(() => {\n if (!bookings || !bookings?.length) {\n return;\n }\n\n return (\n <div className=\"py-4\">\n <div\n className=\"bg-white rounded-lg overflow-hidden w-full max-w-[358px] mx-auto\"\n style={{\n padding: '12px',\n gap: '12px',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'flex-start',\n }}\n >\n <div className=\"text-[#18181B] font-semibold text-base\">\n {theme?.bookMeetingForm?.labelBookingList || 'Booking List'}\n </div>\n <div\n className=\"flex flex-col w-full\"\n style={{\n gap: '12px',\n }}\n >\n {bookings.map((booking) => (\n <div key={booking.id}>\n <BookMeetingDetail\n booking={booking}\n loading={loading}\n userContact={userContactData}\n theme={theme}\n />\n </div>\n ))}\n </div>\n </div>\n </div>\n );\n }, [bookings, userContactData, loading]);\n\n return (\n <>\n {loading && loadingComponent}\n {!loading && !!bookings && bookMeetingListComponent}\n </>\n );\n};\n\nexport default BookMeetingList;\n"]}
|