import React, { useState, useCallback, useMemo } from 'react'; import { useMutableCallback, useLocalStorage, useDebouncedState, useUniqueId, useResizeObserver } from '@rocket.chat/fuselage-hooks'; import { Box, Icon, TextInput, Field, FieldGroup, Select, Throbber, } from '@rocket.chat/fuselage'; import { FixedSizeList as List } from 'react-window'; import InfiniteLoader from 'react-window-infinite-loader'; import memoize from 'memoize-one'; import { useUserId, useUserRoom } from '../../../../contexts/UserContext'; import DeleteFileWarning from '../../../../components/DeleteFileWarning'; import { useToastMessageDispatch } from '../../../../contexts/ToastMessagesContext'; import { useSetModal } from '../../../../contexts/ModalContext'; import { useMethod } from '../../../../contexts/ServerContext'; import { AsyncStatePhase } from '../../../../hooks/useAsyncState'; import { useTranslation } from '../../../../contexts/TranslationContext'; import VerticalBar from '../../../../components/VerticalBar'; import FileItem from './components/FileItem'; import ScrollableContentWrapper from '../../../../components/ScrollableContentWrapper'; import { useFileList } from './hooks/useFileList'; import { useComponentDidUpdate } from '../../../../hooks/useComponentDidUpdate'; import { useMessageDeletionIsAllowed } from './hooks/useMessageDeletionIsAllowed'; const Row = React.memo(({ data, index, style }) => { const { items, userId, onClickDelete, isDeletionAllowed } = data; const item = items[index] || null; return item && ; }); export const createItemData = memoize((items, onClickDelete, isDeletionAllowed) => ({ items, onClickDelete, isDeletionAllowed, })); export const RoomFiles = function RoomFiles({ loading, filesItems = [], text, type, setText, setType, onClickClose, onClickDelete, total, loadMoreItems, isDeletionAllowed, }) { const t = useTranslation(); const isItemLoaded = (index) => !!filesItems[index]; const options = useMemo(() => [ ['all', t('All')], ['image', t('Images')], ['video', t('Videos')], ['audio', t('Audios')], ['text', t('Texts')], ['application', t('Files')], ], [t]); const { ref, contentBoxSize: { blockSize = 780 } = {} } = useResizeObserver({ debounceDelay: 100 }); const searchId = useUniqueId(); const itemData = createItemData(filesItems, onClickDelete, isDeletionAllowed); return ( <> {t('Files')} { onClickClose && } {t('Search_by_file_name')} }/>