import Button from '@components/Button' import Icon from '@components/Icon' import { MenuRow } from '@components/Menu' import CustomText from '@components/Text' import { useActionSheet } from '@expo/react-native-action-sheet' import { getInstanceConfigurationPoll } from '@utils/slices/instancesSlice' import { StyleConstants } from '@utils/styles/constants' import { useTheme } from '@utils/styles/ThemeManager' import React, { useContext, useEffect, useState } from 'react' import { useTranslation } from 'react-i18next' import { StyleSheet, TextInput, View } from 'react-native' import { useSelector } from 'react-redux' import ComposeContext from '../../utils/createContext' const ComposePoll: React.FC = () => { const { showActionSheetWithOptions } = useActionSheet() const { composeState: { poll: { total, options, multiple, expire } }, composeDispatch } = useContext(ComposeContext) const { t } = useTranslation('screenCompose') const { colors, mode } = useTheme() const instanceConfigurationPoll = useSelector( getInstanceConfigurationPoll, () => true ) const MAX_OPTIONS = instanceConfigurationPoll.max_options const MAX_CHARS_PER_OPTION = instanceConfigurationPoll.max_characters_per_option const MIN_EXPIRATION = instanceConfigurationPoll.min_expiration const MAX_EXPIRATION = instanceConfigurationPoll.max_expiration const [firstRender, setFirstRender] = useState(true) useEffect(() => { setFirstRender(false) }, []) return ( {[...Array(total)].map((e, i) => { const restOptions = Object.keys(options).filter( o => parseInt(o) !== i && parseInt(o) < total ) let hasConflict = false restOptions.forEach(o => { // @ts-ignore if (options[o] === options[i]) { hasConflict = true } }) return ( composeDispatch({ type: 'poll', payload: { options: { ...options, [i]: e } } }) } /> ) })}