PluginProbe
HubSpot All-In-One Marketing – Forms, Popups, Live Chat / 11.3.64
HubSpot All-In-One Marketing – Forms, Popups, Live Chat v11.3.64
11.3.75 11.3.73 11.3.71 11.3.70 11.3.69 11.3.64 11.3.65 11.3.62 11.3.61 11.3.56 11.3.58 11.0.31 11.0.52 11.0.54 11.0.56 11.0.58 11.0.7 11.1.10 11.1.11 11.1.13 11.1.14 11.1.15 11.1.2 11.1.20 11.1.21 All 73 releases
leadin / scripts / shared / Meeting / hooks / useMeetings.ts

useMeetings.ts in HubSpot All-In-One Marketing – Forms, Popups, Live Chat 11.3.64, at scripts/shared/Meeting/hooks/useMeetings.ts

122 lines 3.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 import { useCallback } from 'react';
2 import { __ } from '@wordpress/i18n';
3 import {
4 CURRENT_USER_CALENDAR_MISSING,
5 OTHER_USER_CALENDAR_MISSING,
6 } from '../constants';
7 import useMeetingsFetch, { MeetingUser } from './useMeetingsFetch';
8 import useCurrentUserFetch from './useCurrentUserFetch';
9 import LoadState from '../../enums/loadState';
10 import { usePostAsyncBackgroundMessage } from '../../../iframe/useBackgroundApp';
11 import { ProxyMessages } from '../../../iframe/integratedMessages';
12
13 function getDefaultMeetingName(
14 meeting: any,
15 currentUser: any,
16 meetingUsers: any
17 ) {
18 const [meetingOwnerId] = meeting.meetingsUserIds;
19 let result = __('Default', 'leadin');
20 if (
21 currentUser &&
22 meetingOwnerId !== currentUser.id &&
23 meetingUsers[meetingOwnerId]
24 ) {
25 const user = meetingUsers[meetingOwnerId];
26 result += ` (${user.userProfile.fullName})`;
27 }
28 return result;
29 }
30
31 function hasCalendarObject(user: any) {
32 return (
33 user &&
34 user.meetingsUserBlob &&
35 user.meetingsUserBlob.calendarSettings &&
36 user.meetingsUserBlob.calendarSettings.email
37 );
38 }
39
40 export default function useMeetings() {
41 const proxy = usePostAsyncBackgroundMessage();
42 const {
43 meetings,
44 meetingUsers,
45 error: meetingsError,
46 loadMeetingsState,
47 reload: reloadMeetings,
48 } = useMeetingsFetch();
49 const {
50 user: currentUser,
51 error: userError,
52 loadUserState,
53 reload: reloadUser,
54 } = useCurrentUserFetch();
55
56 const reload = useCallback(() => {
57 reloadUser();
58 reloadMeetings();
59 }, [reloadUser, reloadMeetings]);
60
61 const connectCalendar = () => {
62 return proxy({
63 key: ProxyMessages.ConnectMeetingsCalendar,
64 });
65 };
66
67 return {
68 mappedMeetings: meetings.map(meet => ({
69 label:
70 meet.name || getDefaultMeetingName(meet, currentUser, meetingUsers),
71 value: meet.link,
72 })),
73 meetings,
74 meetingUsers,
75 currentUser,
76 error: meetingsError || (userError as any),
77 loading:
78 loadMeetingsState == LoadState.Loading ||
79 loadUserState === LoadState.Loading,
80 reload,
81 connectCalendar,
82 };
83 }
84
85 export function useSelectedMeeting(url: string) {
86 const { mappedMeetings: meetings } = useMeetings();
87 const option = meetings.find(({ value }) => value === url);
88
89 return option;
90 }
91
92 export function useSelectedMeetingCalendar(url: string) {
93 const { meetings, meetingUsers, currentUser } = useMeetings();
94
95 const meeting = meetings.find(meet => meet.link === url);
96
97 const mappedMeetingUsersId: {
98 [key: number]: MeetingUser;
99 } = meetingUsers.reduce((p, c) => ({ ...p, [c.id]: c }), {});
100
101 if (!meeting) {
102 return null;
103 } else {
104 const { meetingsUserIds } = meeting;
105 if (
106 currentUser &&
107 meetingsUserIds.includes(currentUser.id) &&
108 !hasCalendarObject(currentUser)
109 ) {
110 return CURRENT_USER_CALENDAR_MISSING;
111 } else if (
112 meetingsUserIds
113 .map(id => mappedMeetingUsersId[id])
114 .some((user: any) => !hasCalendarObject(user))
115 ) {
116 return OTHER_USER_CALENDAR_MISSING;
117 } else {
118 return null;
119 }
120 }
121 }
122