Files
jitsi-meet/react/features/polls/functions.ts
Calinteodor 75e7f64311 feat(polls/web/native): fixed identical answers verification (#14782)
* feat(polls/web/native): fixed identical answers verification
2024-05-28 14:06:11 +03:00

65 lines
1.8 KiB
TypeScript

import { IReduxState } from '../app/types';
import { IAnswerData } from './types';
/**
* Selector creator for determining if poll results should be displayed or not.
*
* @param {string} id - Id of the poll.
* @returns {Function}
*/
export function shouldShowResults(id: string) {
return function(state: IReduxState) {
return Boolean(state['features/polls']?.polls[id].showResults);
};
}
/**
* Selector creator for polls.
*
* @param {string} pollId - Id of the poll to get.
* @returns {Function}
*/
export function getPoll(pollId: string) {
return function(state: IReduxState) {
return state['features/polls'].polls[pollId];
};
}
/**
* Selector for calculating the number of unread poll messages.
*
* @param {IReduxState} state - The redux state.
* @returns {number} The number of unread messages.
*/
export function getUnreadPollCount(state: IReduxState) {
const { nbUnreadPolls } = state['features/polls'];
return nbUnreadPolls;
}
/**
* Determines if the submit poll answer button should be disabled.
*
* @param {Array<boolean>} checkBoxStates - The states of the checkboxes.
* @returns {boolean}
*/
export function isSubmitAnswerDisabled(checkBoxStates: Array<boolean>) {
return !checkBoxStates.find(checked => checked);
}
/**
* Check if the input array has identical answers.
*
* @param {Array<IAnswerData>} currentAnswers - The array of current answers to compare.
* @returns {boolean} - Returns true if the answers are identical.
*/
export function hasIdenticalAnswers(currentAnswers: Array<IAnswerData>): boolean {
const nonEmptyCurrentAnswers = currentAnswers.filter((answer): boolean => answer.name !== '');
const currentAnswersSet = new Set(nonEmptyCurrentAnswers.map(answer => answer.name));
return currentAnswersSet.size !== nonEmptyCurrentAnswers.length;
}