= ({ user, status }: Props) => {
setSnackbarOpen(false);
};
+ const startCall = async () => {
+ const newMeeting: NewMeeting = {
+ startTime: "2022-03-30T23:40:00Z",
+ duration: 30,
+ topic: `Meeting with ${user.name}`,
+ registrantIds: [user.uuid],
+ };
+ try {
+ const response = await axios.post(
+ `/users/${me}/meetings`,
+ JSON.stringify(newMeeting)
+ );
+ window.open(response.data.joinUrl, "_blank")?.focus();
+ } catch (e) {
+ console.log(e);
+ }
+ };
+
return (
= ({ user, status }: Props) => {
>
View upcoming meetings
-
+
{
- let socket: Socket;
+ let socket: WebSocket;
return (next) => (action) => {
const isConnectionEstablished =
@@ -14,28 +12,23 @@ const socketMiddleware: Middleware = (store) => {
socketActions.startConnecting.match(action) &&
!isConnectionEstablished
) {
- console.log("startConnecting called");
- socket = io("wss://uo5wdcbn6l.execute-api.us-west-2.amazonaws.com/Prod/");
-
- socket.on("Connect", () => {
- console.log("connected!!!");
- store.dispatch(socketActions.connectionEstablished());
- });
-
- socket.on("MeetingCreated", (meeting: DetailedMeeting) => {
- store.dispatch(socketActions.meetingCreated(meeting));
- });
-
- socket.on(
- "UserStatusChange",
- (statusChange: {
- userId: string;
- inMeeting: boolean;
- meetingId: string;
- }) => {
- store.dispatch(socketActions.userStatusChanged(statusChange));
- }
+ console.log("start connecting");
+ socket = new WebSocket(
+ "wss://uo5wdcbn6l.execute-api.us-west-2.amazonaws.com/Prod/"
);
+ socket.onopen = () => {
+ console.log("connected");
+ store.dispatch(socketActions.connectionEstablished());
+ };
+ socket.addEventListener("message", (event: MessageEvent) => {
+ const json = JSON.parse(event.data);
+ console.log(json);
+ if ("inMeeting" in json) {
+ store.dispatch(socketActions.userStatusChanged(json));
+ } else {
+ store.dispatch(socketActions.meetingCreated(json));
+ }
+ });
}
next(action);
};
diff --git a/src/redux/slices/meetingsAndUserStatusSlice.tsx b/src/redux/slices/meetingsAndUserStatusSlice.tsx
index 1b7a411..6298a9d 100644
--- a/src/redux/slices/meetingsAndUserStatusSlice.tsx
+++ b/src/redux/slices/meetingsAndUserStatusSlice.tsx
@@ -31,10 +31,10 @@ export const meetingsAndUserStatusSlice = createSlice({
state.isConnected = true;
},
meetingCreated: (state, action) => {
- state.meetings.push(action.payload.meeting);
+ state.meetings.push(action.payload);
},
userStatusChanged: (state, action) => {
- state.userStatuses[action.payload.uuid] = action.payload;
+ state.userStatuses[action.payload.userId] = action.payload;
},
},
extraReducers(builder) {
@@ -90,9 +90,25 @@ export const selectMeeting = (state: RootState, meetingID: string | null) => {
: null;
};
export const selectUserUpcomingMeetings = (state: RootState, uuid: string) => {
- return state.meetingsAndUserStatuses.meetings.filter((meeting) =>
- meeting.registrantIds.includes(uuid)
- );
+ const isToday = (date: Date) => {
+ const today = new Date();
+ return (
+ date.getDate() == today.getDate() &&
+ date.getMonth() == today.getMonth() &&
+ date.getFullYear() == today.getFullYear()
+ );
+ };
+ return state.meetingsAndUserStatuses.meetings
+ .filter(
+ (meeting) =>
+ meeting.registrantIds.includes(uuid) &&
+ meeting.startTime &&
+ isToday(new Date(meeting.startTime))
+ )
+ .sort(
+ (a, b) =>
+ new Date(a.startTime).getTime() - new Date(b.startTime).getTime()
+ );
};
export const selectUserStatus = (
state: RootState,
diff --git a/src/redux/slices/usersSlice.tsx b/src/redux/slices/usersSlice.tsx
index 8539c5f..35a0482 100644
--- a/src/redux/slices/usersSlice.tsx
+++ b/src/redux/slices/usersSlice.tsx
@@ -47,14 +47,14 @@ export const fetchUsers = createAsyncThunk(
};
// fetch userfull
const userResp = await axios.get(`/users/${uuid}`);
- const user: UserFull = userResp.data.user;
-
+ const user: UserFull = userResp.data["user"];
+ console.log("1");
users[user.userInfo.uuid] = user.userInfo;
- users[user.manager.uuid] = user.manager;
+ console.log("2");
+ if (user.manager) users[user.manager.uuid] = user.manager;
team.user = user.userInfo.uuid;
- team.manager = user.manager.uuid;
-
+ if (user.manager) team.manager = user.manager.uuid;
user.userDirectReports.forEach((userLite) => {
users[userLite.uuid] = userLite;
team.directReports.push(userLite.uuid);
@@ -76,6 +76,7 @@ export const fetchUsers = createAsyncThunk(
);
export const selectMe = (state: RootState) => state.users.team.user;
+export const selectManager = (state: RootState) => state.users.team.manager;
export const selectUser = (
state: RootState,
uuid: string | undefined
diff --git a/src/utils.tsx b/src/utils.tsx
index 3e2ad36..e537354 100644
--- a/src/utils.tsx
+++ b/src/utils.tsx
@@ -1,6 +1,7 @@
const enum MeetingStatus {
NOT_IN_MEETING = "Not in meeting",
IN_MEETING = "In meeting",
+ NOT_AVAILABLE = "Not available",
}
const getStatusColor = (ms: MeetingStatus): string => {
@@ -11,6 +12,9 @@ const getStatusColor = (ms: MeetingStatus): string => {
case MeetingStatus.IN_MEETING: {
return "#ff7070";
}
+ case MeetingStatus.NOT_AVAILABLE: {
+ return "#808080";
+ }
}
};