| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278 |
- import React, { useState } from "react";
- import { Checkbox, FormControlLabel, MenuItem, Select } from "@mui/material";
- import { useTranslation } from "react-i18next";
- import uploadIcon from "../../assets/images/upload.png";
- import IconButton from "../../components/IconButton/IconButton";
- import { useSelector, useDispatch } from "react-redux";
- import { selectCategories } from "../../store/selectors/categoriesSelector";
- import { useEffect } from "react";
- import { setCategoriesReq } from "../../store/actions/categories/categoriesAction";
- import {
- changeTagIsCheckedValue,
- resetIsCheckedTagsValue,
- setTagsReq,
- } from "../../store/actions/tags/tagsAction";
- import { selectTags } from "../../store/selectors/tagsSelector";
- import { uploadFileReq } from "../../store/actions/uploadFile/uploadFileActions";
- import { FILES_VIEW_PAGE } from "../../constants/pages";
- import PropTypes from "prop-types";
-
- const AddFile = ({ history }) => {
- const [dropzoneActive, setDropzoneActive] = useState(false);
- const [pdfFile, setPdfFile] = useState(null);
- const [title, setTitle] = useState("");
- const [showMessage, setShowMessage] = useState(false);
- const dispatch = useDispatch();
- const categories = useSelector(selectCategories);
- const tags = useSelector(selectTags);
- const [selectedCategory, setSelectedCategory] = useState(null);
- const [note,setNote] = useState("")
- const { t } = useTranslation();
-
- useEffect(() => {
- dispatch(setCategoriesReq());
- dispatch(setTagsReq());
- }, []);
-
- const onSuccessUploadFile = () => {
- dispatch(resetIsCheckedTagsValue());
- setPdfFile(null);
- setTitle("");
- setShowMessage(true);
- setNote("")
- };
-
- useEffect(() => {
- if (showMessage === true) {
- setTimeout(() => {
- setShowMessage(false);
- }, 2000);
- }
- }, [showMessage]);
-
- const handleDrop = (e) => {
- e.preventDefault();
- const selectedFile = e.dataTransfer.files[0];
- setPdfFile(selectedFile);
- };
-
- const handleChangeInputFile = (e) => {
- const selectedFile = e.target.files[0];
- setTitle(selectedFile.name.split(".")[0]);
- setPdfFile(selectedFile);
- };
-
- const selectCategoryHandler = (e) => {
- setSelectedCategory(e.target.value);
- };
-
- const onChangeTagsCheckbox = (id) => {
- dispatch(changeTagIsCheckedValue(id));
- };
-
- const uploadFileHandler = () => {
- const tagsIds = tags
- .filter((tag) => tag.isChecked === true)
- .map((tag) => Number(tag.id));
-
- if (
- title === "" ||
- tagsIds.length === 0 ||
- pdfFile === null ||
- selectedCategory === null
- )
- return;
-
- dispatch(
- uploadFileReq({
- title,
- categoryId: selectedCategory,
- tagsIds,
- fileToUpload: pdfFile,
- note:note,
- onSuccessUploadFile,
- })
- );
- };
-
- const handleChangeNote = (e) => {
- setNote(e.target.value)
- }
-
- return (
- <div className="files-page" style={{ paddingTop: "0px" }}>
- <div className="l-t-rectangle"></div>
- <div className="r-b-rectangle"></div>
- {/* <div className="files-page-card">
- <div className="files-page-card-title">
- <h1>Title</h1>
- </div>
- <div className="files-page-card-content">
- <input
- type="text"
- className="create-ad-form-control-first-step-input"
- onChange={(e) => setTitle(e.target.value)}
- value={title}
- placeholder="Document Title"
- />
- </div>
- </div> */}
-
- <div className="files-page-card">
- <div className="files-page-card-title">
- <h1>Categories</h1>
- </div>
- <div className="files-page-card-content">
- <Select
- labelId="files-page-card-content-select"
- id="files-page-card-content-selectt"
- sx={{ width: "100%", borderColor: "#e4e4e4 !important" }}
- onChange={selectCategoryHandler}
- value={selectedCategory}
- >
- {categories &&
- categories.map((category, index) => (
- <MenuItem
- key={index}
- sx={{ textAlign: "left" }}
- value={category.id}
- >
- {category.name}
- </MenuItem>
- ))}
- </Select>
- </div>
- </div>
-
- <div className="files-page-card">
- <div className="files-page-card-title">
- <h1>Tags</h1>
- </div>
- <div className="files-page-card-content">
- <div className="files-page-card-content-checkboxes">
- {tags &&
- tags.map((tag) => (
- <FormControlLabel
- key={tag.id}
- control={
- <Checkbox
- value={tag.name}
- checked={tag.isChecked}
- onChange={onChangeTagsCheckbox.bind(this, tag.id)}
- className="create-ad-second-step-checkbox"
- />
- }
- label={tag.name}
- />
- ))}
- </div>
- </div>
- </div>
-
- <div className="files-page-card">
- <div className="files-page-card-title">
- <h1>Drag & Drop File</h1>
- </div>
- <div className="files-page-card-content">
- <div
- className="uploadCV-input files-page-drag-and-drop"
- onDragOver={(e) => {
- setDropzoneActive(true);
- e.preventDefault();
- }}
- onDragLeave={(e) => {
- setDropzoneActive(false);
- e.preventDefault();
- }}
- onDrop={(e) => handleDrop(e)}
- style={{
- backgroundColor: dropzoneActive ? "#F4F4F4" : "#ffffff",
- }}
- >
- <div className="uploadCV-input-sub-container">
- <img src={uploadIcon} />
- <div className="uploadCV-input-sub-container">
- {pdfFile !== null ? (
- <p>{pdfFile.name}</p>
- ) : (
- <>
- <p>
- {t("ads.dragPdf1")}
- <label
- htmlFor="upload-file"
- style={{
- cursor: "pointer",
- textDecoration: "underline",
- color: "#1E92D0",
- }}
- >
- {t("common.search")}
- </label>
- {t("ads.dragPdf2")}
- </p>
- <input
- type="file"
- name="photo"
- id="upload-file"
- style={{ display: "none", zIndex: -1 }}
- value={pdfFile}
- data-testid="apply-for-ad-modal-fourth-stage-pdf-input"
- // accept=".pdf"
- onChange={handleChangeInputFile}
- />
- </>
- )}
- </div>
- </div>
- </div>
- </div>
- </div>
-
- <div className="files-page-card">
- <div className="files-page-card-title"></div>
- <textarea className="files-note" placeholder="Note..." value={note} onChange={(e) => handleChangeNote(e)}/>
- </div>
-
- <div
- className="add-file-message"
- style={
- showMessage === false ? { display: "none" } : { display: "flex" }
- }
- >
- <p>Uspesno dodat fajl</p>
- </div>
-
- <div className="files-page-card">
- <div
- className="files-page-card-add-button"
- style={{ alignItems: "center" }}
- >
- <p
- className="applicant-ads-back-button"
- onClick={() => history.push(FILES_VIEW_PAGE)}
- >
- Nazad na sve fajlove
- </p>
- <IconButton
- className="c-btn ads-page-btn c-btn--primary add-ad-btn"
- onClick={uploadFileHandler}
- >
- + {t("files.addFile")}
- </IconButton>
- </div>
- </div>
- </div>
- );
- };
-
- AddFile.propTypes = {
- history: PropTypes.shape({
- replace: PropTypes.func,
- push: PropTypes.func,
- location: PropTypes.shape({
- pathname: PropTypes.string,
- }),
- }),
- };
-
- export default AddFile;
|