Rev 3416 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
import React, { useMemo, useState } from 'react'import { Tab, Tabs, styled } from '@mui/material'import { useFetch } from '@hooks'import { REACTIONS } from '@constants/feed'import Modal from '@components/UI/modal/Modal'import Spinner from '@components/UI/Spinner'import UsersList from '@components/UI/UsersList'const ReactionTab = styled(Tab)(() => ({minWidth: 'auto',minHeight: 'auto',padding: '0.5rem 1rem'}))export default function ReactionsModal({reactionsUsersUrl = '',reactions = [],show = false,onClose}) {const { data: users, isLoading } = useFetch(show ? reactionsUsersUrl : '', [])const [reaction, setReaction] = useState('')const availableReactions = useMemo(() =>REACTIONS.filter(({ type }) =>reactions.some(({ reaction }) => type === reaction)),[reactions])const filteredUsers = useMemo(() => (reaction ? users.filter((u) => u.reaction === reaction) : users),[reaction, users])return (<Modalshow={show}title='Personas que reaccionaron'onClose={onClose}showFooter={false}><Tabsvalue={reaction}onChange={(e, newValue) => setReaction(newValue)}sx={{width: '100%',minHeight: 'auto','& .MuiTabs-indicator': {backgroundColor: 'var(--font-color)'}}}><ReactionTab value='' label='Todas' disableRipple />{availableReactions.map(({ name, icon: Icon, type, color }) => (<ReactionTabkey={type}value={type}label={name}icon={<Icon style={{ color }} />}disableRipple/>))}</Tabs>{isLoading ? <Spinner /> : <UsersList users={filteredUsers} />}</Modal>)}