import React, { useState, useEffect } from "react"; import IconButton from "../../components/IconButton/IconButton"; import deleteIcon from "../../assets/images/delete.png"; import editIcon from "../../assets/images/edit.png"; import { useTranslation } from "react-i18next"; import PropTypes from "prop-types"; import { useSelector, useDispatch } from "react-redux"; import { deleteFileReq, getFileFiltersReq, getFilesReq, setContent, updateFileReq, } from "../../store/actions/files/fileActions"; import { Fade, Pagination } from "@mui/material"; import FilterButton from "../../components/Button/FilterButton"; import searchImage from "../../assets/images/search.png"; import DocsFilters from "../../components/Docs/DocsFilters"; import ConfirmDialog from "../../components/MUI/ConfirmDialog"; import FileViewer from "react-file-viewer"; import CustomModal from "../../components/UI/CustomModal"; import xIcon from "../../assets/images/x.png"; import Button from "../../components/Button/Button"; import { selectIsLoadingByActionType } from "../../store/selectors/loadingSelectors"; import { FETCH_FILES_LOADING } from "../../store/actions/files/fileActionConstants"; import { useParams } from "react-router"; import { PAGE_SIZE_FILES } from "../../constants/keyCodeConstants"; const FileTable = ({ trigger }) => { const [file, setFile] = useState(null); const { data } = useSelector((s) => s.files); const { filters } = useSelector((s) => s.fileFilters); const [page, setPage] = useState(1); const [toggleFiltersDrawer, setToggleFiltersDrawer] = useState(false); const [isSearchFieldVisible, setIsSearchFieldVisible] = useState(false); let { id } = useParams(); const [fileForDelete, setFileForDelete] = useState({ open: false, title: "", streamId: null, }); const [openNoteModal, setOpenNoteModal] = useState({ open: false, note: null, streamId: "", }); const { t } = useTranslation(); const dispatch = useDispatch(); useEffect(() => { if (data !== null && data.data !== undefined) { if (data.data.length === 0) { setPage(getTotalNumberOfPages(data) - 1); } } }, [data]); const getTotalNumberOfPages = (data) => { return parseInt(data.total) <= PAGE_SIZE_FILES ? 1 : Math.ceil(parseInt(data.total) / PAGE_SIZE_FILES); }; useEffect(() => { setFile(null); }, [id]); useEffect(() => { if (trigger) { handleChangeVisibility(); } }, [trigger]); const handleToggleFiltersDrawer = () => { setToggleFiltersDrawer((oldState) => !oldState); }; useEffect(() => { handleFilters(page); }, [page]); useEffect(() => { dispatch(getFileFiltersReq()); dispatch( getFilesReq({ payload: { pageSize: PAGE_SIZE_FILES, currentPage: page, categoryId: id, extensions: [], tags: [], content: "", }, }) ); }, [id, page]); const handleChange = (_, value) => { setFile(null); handleFilters(value); setPage(value); }; const handleFilters = (value) => { var extFilters = []; filters.extensions ?.filter((n) => n.isChecked) .forEach((m) => extFilters.push(m.name)); var tagFilters = []; filters.tags ?.filter((n) => n.isChecked) .forEach((m) => tagFilters.push(m.name)); dispatch( getFilesReq({ payload: { pageSize: PAGE_SIZE_FILES, currentPage: value, categoryId: id, extensions: extFilters, tags: tagFilters, content: filters.content === undefined ? "" : filters.content, }, }) ); }; const isLoading = useSelector( selectIsLoadingByActionType(FETCH_FILES_LOADING) ); const handleChangeVisibility = () => { setIsSearchFieldVisible(false); }; const stopPropagation = (e) => { e.stopPropagation(); }; const handleChangeContent = (value) => { dispatch(setContent(value)); }; const deleteFileHandler = (stream_id) => { dispatch(deleteFileReq({ id: stream_id })); if (file !== null && stream_id === file.streamId) { setFile(null); } }; const handleKeyDown = (event) => { if (event.key === "Enter" && filters.content !== "" && filters.content !== undefined) { var extFilters = []; filters.extensions ?.filter((n) => n.isChecked) .forEach((m) => extFilters.push(m.name)); var tagFilters = []; filters.tags ?.filter((n) => n.isChecked) .forEach((m) => tagFilters.push(m.name)); dispatch( getFilesReq({ payload: { pageSize: PAGE_SIZE_FILES, currentPage: page, categoryId: id, extensions: extFilters, tags: tagFilters, content: filters.content, }, }) ); } }; const input = (
handleChangeContent(e.target.value)} onKeyDown={handleKeyDown} className="candidate-search-field" onClick={stopPropagation} role="input" />
); const onError = (e) => { console.log(e, "error in file-viewer"); }; const displayFile = (fileStream, streamId, fileType) => { setFile({ fileStream, streamId, fileType }); }; const getPathForFile = (fileType, fileStream) => { if (fileType === "docx") { return `data:application/vnd.openxmlformats-officedocument.wordprocessingml.document;base64,${fileStream}`; } else if (fileType === "doc") { return `data:application/msword;base64,${fileStream}`; } else { return `data:application/pdf;base64,${fileStream}`; } }; const updateFileNoteHandler = () => { dispatch( updateFileReq({ id: openNoteModal.streamId, data: openNoteModal.note, onSuccessOpenNoteModal, }) ); }; const onSuccessOpenNoteModal = () => { setOpenNoteModal({ open: false, note: null, streamId: "", }); }; return isLoading ? (
Loading
) : (
{ setFileForDelete({ open: false, title: "", streamId: null }); }} onConfirm={() => { deleteFileHandler(fileForDelete.streamId); setFileForDelete({ open: false, title: "", streamId: null }); }} /> setOpenNoteModal({ open: false, note: null, streamId: "" }) } >
plus

Edit text

| Note
setOpenNoteModal({ open: false, note: null, streamId: "" }) } > close