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"; import { useTheme } from "@mui/system"; import { useMediaQuery } from "@mui/material"; 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(); const theme = useTheme(); const matches = useMediaQuery(theme.breakpoints.down("370")); 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: "", }, }) ); setPage(1); }, [id]); 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, }, }) ); setPage(1); setFile(null); } }; const input = (
Edit text
| Putanja dokumenta | : ""}Naziv dokumenta | {file === null ?Tip dokumenta | : ""} {file === null ?Veličina dokumenta | : ""} {file === null ?Obrisi dokument | : ""} {file === null ?Note | : ""}Preuzmi dokument |
|---|---|---|---|---|---|---|
| {n.fileName} | ) : ( "" )}{n.title} | {file === null ?{n.file_type && n.file_type} | : ""} {file === null ? ({n.cached_file_size}kB | ) : ( "" )} {file === null ? (
|
) : (
""
)}
{file === null ? (
|
) : (
""
)}