forked from jitsi/jitsi-meet
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(polls-history): control polls through local storage
- Loading branch information
1 parent
2514617
commit 60b4581
Showing
20 changed files
with
313 additions
and
100 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
/** | ||
* The type of the action which signals that we need to remove poll from the history(local storage). | ||
* | ||
* { | ||
* type: REMOVE_POLL_FROM_HISTORY, | ||
* meetingId: string, | ||
* pollId: string, | ||
* poll: IPoll | ||
* } | ||
*/ | ||
export const REMOVE_POLL_FROM_HISTORY = 'REMOVE_POLL_FROM_HISTORY'; | ||
|
||
/** | ||
* The type of the action triggered when the poll is saved in history(local storage). | ||
* | ||
* { | ||
* type: SAVE_POLL_IN_HISTORY, | ||
* poll: Poll, | ||
* pollId: string, | ||
* saved: boolean | ||
* } | ||
*/ | ||
export const SAVE_POLL_IN_HISTORY = 'SAVE_POLL_IN_HISTORY'; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
import { IPoll } from '../polls/types'; | ||
|
||
import { REMOVE_POLL_FROM_HISTORY, SAVE_POLL_IN_HISTORY } from './actionTypes'; | ||
|
||
/** | ||
* Action to signal saving a poll in history(local storage). | ||
* | ||
* @param {string} meetingId - The id of the meeting in which polls get to be saved. | ||
* @param {string} pollId - The id of the poll that gets to be saved. | ||
* @param {IPoll} poll - The Poll object that gets to be saved. | ||
* @returns {{ | ||
* type: SAVE_POLL_IN_HISTORY, | ||
* meetingId: string, | ||
* pollId: string, | ||
* poll: IPoll | ||
* }} | ||
*/ | ||
export function savePollInHistory(meetingId: string | undefined, pollId: string, poll: IPoll) { | ||
return { | ||
type: SAVE_POLL_IN_HISTORY, | ||
meetingId, | ||
pollId, | ||
poll | ||
}; | ||
} | ||
|
||
/** | ||
* Action to signal that existing poll needs to be deleted from history(local storage). | ||
* | ||
* @param {string} meetingId - The id of the meeting in which poll gets to be removed. | ||
* @param {string} pollId - The id of the poll that gets to be removed. | ||
* @param {IPoll} poll - The incoming IPoll object. | ||
* @returns {{ | ||
* type: REMOVE_POLL_FROM_HISTORY, | ||
* meetingId: string, | ||
* pollId: string, | ||
* poll: IPoll | ||
* }} | ||
*/ | ||
export const removePollFromHistory = (meetingId: string | undefined, pollId: string, poll: IPoll) => { | ||
return { | ||
type: REMOVE_POLL_FROM_HISTORY, | ||
meetingId, | ||
pollId, | ||
poll | ||
}; | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
import { CONFERENCE_JOINED } from '../base/conference/actionTypes'; | ||
import MiddlewareRegistry from '../base/redux/MiddlewareRegistry'; | ||
import { REMOVE_POLL, SAVE_POLL } from '../polls/actionTypes'; | ||
import { savePoll } from '../polls/actions'; | ||
|
||
import { removePollFromHistory, savePollInHistory } from './actions'; | ||
|
||
MiddlewareRegistry.register(({ dispatch, getState }) => next => action => { | ||
const result = next(action); | ||
const { room: meetingId } = getState()['features/base/conference']; | ||
|
||
switch (action.type) { | ||
|
||
case CONFERENCE_JOINED: { | ||
const state = getState(); | ||
const pollsHistory = meetingId && state['features/polls-history'].polls?.[meetingId]; | ||
|
||
if (!pollsHistory) { | ||
return null; | ||
} | ||
|
||
for (const key in pollsHistory) { | ||
if (pollsHistory.hasOwnProperty(key) && pollsHistory[key].saved) { | ||
dispatch(savePoll(key, pollsHistory[key])); | ||
} | ||
} | ||
break; | ||
} | ||
|
||
case REMOVE_POLL: { | ||
const { poll, pollId } = action; | ||
|
||
dispatch(removePollFromHistory(meetingId, pollId, poll)); | ||
break; | ||
} | ||
|
||
case SAVE_POLL: { | ||
const { poll, pollId } = action; | ||
|
||
dispatch(savePollInHistory(meetingId, pollId, poll)); | ||
break; | ||
} | ||
} | ||
|
||
return result; | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
import PersistenceRegistry from '../base/redux/PersistenceRegistry'; | ||
import ReducerRegistry from '../base/redux/ReducerRegistry'; | ||
import { IPoll } from '../polls/types'; | ||
|
||
import { REMOVE_POLL_FROM_HISTORY, SAVE_POLL_IN_HISTORY } from './actionTypes'; | ||
|
||
const INITIAL_STATE = { | ||
polls: {} | ||
}; | ||
|
||
export interface IPollsHistoryState { | ||
polls: { | ||
[meetingId: string]: { | ||
[pollId: string]: IPoll; | ||
}; | ||
}; | ||
} | ||
|
||
const STORE_NAME = 'features/polls-history'; | ||
|
||
PersistenceRegistry.register(STORE_NAME, INITIAL_STATE); | ||
|
||
ReducerRegistry.register<IPollsHistoryState>(STORE_NAME, (state = INITIAL_STATE, action): IPollsHistoryState => { | ||
switch (action.type) { | ||
|
||
case REMOVE_POLL_FROM_HISTORY: { | ||
if (Object.keys(state.polls[action.meetingId] ?? {})?.length === 1) { | ||
delete state.polls[action.meetingId]; | ||
} else { | ||
delete state.polls[action.meetingId]?.[action.pollId]; | ||
} | ||
|
||
return state; | ||
} | ||
|
||
case SAVE_POLL_IN_HISTORY: { | ||
return { | ||
...state, | ||
polls: { | ||
...state.polls, | ||
[action.meetingId]: { | ||
...state.polls[action.meetingId], | ||
[action.pollId]: action.poll | ||
} | ||
} | ||
}; | ||
} | ||
|
||
default: | ||
return state; | ||
} | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.