projects/deliberation_at_scale/packages/frontend/state/slices/room.ts (35 lines of code) (raw):

import { PayloadAction, createSlice } from "@reduxjs/toolkit"; import dayjs from "dayjs"; export type RoomId = string | undefined; export enum PermissionState { /** We're currently checking whether permissions have already been given */ INITIALIZING = 'INITIALIZING', /** Sufficient permissions were not given */ NONE = 'NONE', /** Permissions have been requested */ REQUESTED = 'REQUESTED', } export interface RoomState { permission: PermissionState; lastOpenedChatAt: string | null; lastOpenedAssistantAt: string | null; } const initialState: RoomState = { permission: PermissionState.NONE, lastOpenedChatAt: null, lastOpenedAssistantAt: null, }; const slice = createSlice({ name: 'room', initialState, reducers: { openRoomChat(state) { state.lastOpenedChatAt = dayjs().toISOString(); }, openRoomAssistant(state) { state.lastOpenedAssistantAt = dayjs().toISOString(); }, setPermissionState(state, action: PayloadAction<PermissionState>) { state.permission = action.payload; }, }, }); export default slice; export const { openRoomChat, openRoomAssistant, setPermissionState } = slice.actions;