| } from "../../store/actions/files/fileActions"; | } from "../../store/actions/files/fileActions"; | ||||
| import { useParams } from "react-router-dom"; | import { useParams } from "react-router-dom"; | ||||
| import { PAGE_SIZE_FILES } from "../../constants/keyCodeConstants"; | import { PAGE_SIZE_FILES } from "../../constants/keyCodeConstants"; | ||||
| import { useTranslation } from "react-i18next"; | |||||
| const DocsFilters = ({ open, handleClose, setPage, setFile }) => { | const DocsFilters = ({ open, handleClose, setPage, setFile }) => { | ||||
| const dispatch = useDispatch(); | const dispatch = useDispatch(); | ||||
| const { filters } = useSelector((s) => s.fileFilters); | const { filters } = useSelector((s) => s.fileFilters); | ||||
| let { id } = useParams(); | let { id } = useParams(); | ||||
| const { t } = useTranslation(); | |||||
| const handleCheckboxesExt = (e) => | const handleCheckboxesExt = (e) => | ||||
| dispatch(updateFileFilterExt(e.target.value)); | dispatch(updateFileFilterExt(e.target.value)); | ||||
| <div className="ad-filters-header"> | <div className="ad-filters-header"> | ||||
| <img src={filterIcon} alt="filter_icon" /> | <img src={filterIcon} alt="filter_icon" /> | ||||
| {/* <h3>{t("filters.filters")}</h3> */} | {/* <h3>{t("filters.filters")}</h3> */} | ||||
| <h3>Filteri</h3> | |||||
| <h3>{t("files.filters")}</h3> | |||||
| <p> | <p> | ||||
| {/* <sub>| {t("ads.ads")}</sub> */} | {/* <sub>| {t("ads.ads")}</sub> */} | ||||
| <sub>| Dokumenti</sub> | |||||
| <sub>{t("files.documents")}</sub> | |||||
| </p> | </p> | ||||
| </div> | </div> | ||||
| <div className="ad-filters-header-close" onClick={handleClose}> | <div className="ad-filters-header-close" onClick={handleClose}> | ||||
| style={{ paddingTop: "30px" }} | style={{ paddingTop: "30px" }} | ||||
| className="custom-drawer-sub-card-label" | className="custom-drawer-sub-card-label" | ||||
| > | > | ||||
| <p>Ekstenzija</p> | |||||
| <p>{t("files.extension")}</p> | |||||
| </div> | </div> | ||||
| <div className="ad-filters-technologies-checkboxes"> | <div className="ad-filters-technologies-checkboxes"> | ||||
| <FormGroup> | <FormGroup> | ||||
| style={{ paddingTop: "10px" }} | style={{ paddingTop: "10px" }} | ||||
| className="custom-drawer-sub-card-label" | className="custom-drawer-sub-card-label" | ||||
| > | > | ||||
| <p>Tagovi</p> | |||||
| <p>{t("files.tags")}</p> | |||||
| </div> | </div> | ||||
| <div className="ad-filters-technologies-checkboxes"> | <div className="ad-filters-technologies-checkboxes"> | ||||
| <FormGroup> | <FormGroup> | ||||
| className="c-btn c-btn--primary" | className="c-btn c-btn--primary" | ||||
| data-testid="custom-drawer-submit-search" | data-testid="custom-drawer-submit-search" | ||||
| > | > | ||||
| {/* {t("common.search")} */} | |||||
| Pretraži | |||||
| {t("files.search")} | |||||
| </button> | </button> | ||||
| </div> | </div> | ||||
| </form> | </form> |
| positionNotDeclared:"Position has not been declared yet.", | positionNotDeclared:"Position has not been declared yet.", | ||||
| backToUsers: "Back to list of users", | backToUsers: "Back to list of users", | ||||
| noSocialMedia:"User takes not part in any social media.", | noSocialMedia:"User takes not part in any social media.", | ||||
| noPhoneNumber:"User has no phone number saved." | |||||
| noPhoneNumber:"User has no phone number saved.", | |||||
| grantedCategories: "Granted categories", | |||||
| applyChanges: "Apply changes", | |||||
| }, | }, | ||||
| selectionLevels: { | selectionLevels: { | ||||
| done: { | done: { | ||||
| registered:"Registered by positions" | registered:"Registered by positions" | ||||
| }, | }, | ||||
| files: { | files: { | ||||
| addFile: "Add File" | |||||
| addFile: "Add File", | |||||
| addFileCategories: "Categories", | |||||
| addFileSelectedCategory: "Selected Category", | |||||
| addFileSetRoot: "Set root", | |||||
| addFileTags: "Tags", | |||||
| addFileDragAndDrop: "Drag & Drop File", | |||||
| addFileSuccessfullyAddedFile: "Successfully added file", | |||||
| addFileGoBackToFiles: "Go back to all files", | |||||
| createCategoryModalTitle: "Create category", | |||||
| createCategoryModalPlaceholder: "Category name", | |||||
| close: "Close", | |||||
| createCategoryModalSubmitButton: "Create category", | |||||
| folders: "Folders", | |||||
| file: "File", | |||||
| files: "Files", | |||||
| category: "Category", | |||||
| root: "Root", | |||||
| confirmDialogTitle: "Deleting document", | |||||
| confirmDialogContent: "Are you sure for deleting document?", | |||||
| editText: "Edit text", | |||||
| editTextSub: " | Note", | |||||
| saveChanges: "Save changes", | |||||
| doucmentPath: "Document path", | |||||
| doucmentName: "Document name", | |||||
| doucmentType: "Document type", | |||||
| doucmentSize: "Document size", | |||||
| deleteDocument: "Delete document", | |||||
| note: "Note", | |||||
| downloadDocument: "Download document", | |||||
| filters: "Filters", | |||||
| documents: "| Documents", | |||||
| extension: "Extension", | |||||
| tags: "Tags", | |||||
| search: "Search" | |||||
| } | } | ||||
| }; | }; |
| statistics: "Statistika", | statistics: "Statistika", | ||||
| users: "Korisnici", | users: "Korisnici", | ||||
| signOut: "Izloguj se", | signOut: "Izloguj se", | ||||
| files:"Fajlovi" | |||||
| files: "Fajlovi", | |||||
| }, | }, | ||||
| ads: { | ads: { | ||||
| activeAds: "Aktivni Oglasi", | activeAds: "Aktivni Oglasi", | ||||
| duties: "Glavna zaduženja", | duties: "Glavna zaduženja", | ||||
| conditions: "Uslovi", | conditions: "Uslovi", | ||||
| offer: "Šta nudimo", | offer: "Šta nudimo", | ||||
| archivingAds:"Arhiviranje oglasa", | |||||
| archivingAdQuestion:"Da li ste sigurni da želite da arhivirate oglas?", | |||||
| archivingAds: "Arhiviranje oglasa", | |||||
| archivingAdQuestion: "Da li ste sigurni da želite da arhivirate oglas?", | |||||
| }, | }, | ||||
| // selection: { | // selection: { | ||||
| // title: "Tok Selekcije", | // title: "Tok Selekcije", | ||||
| backToUsers: "Nazad na listu korisnika", | backToUsers: "Nazad na listu korisnika", | ||||
| noSocialMedia: "Korisnik nije deo nijedne društvene mreže.", | noSocialMedia: "Korisnik nije deo nijedne društvene mreže.", | ||||
| noPhoneNumber: "Korisnik nema sacuvan broj telefona.", | noPhoneNumber: "Korisnik nema sacuvan broj telefona.", | ||||
| grantedCategories: "Dodeljene kategorije", | |||||
| applyChanges: "Primenite promene", | |||||
| }, | }, | ||||
| filter: { | filter: { | ||||
| title: "Filteri", | title: "Filteri", | ||||
| tableView: "Tablični prikaz", | tableView: "Tablični prikaz", | ||||
| search: "Pretraga", | search: "Pretraga", | ||||
| position: "Pozicija", | position: "Pozicija", | ||||
| deleteCandidate:"Brisanje kandidata", | |||||
| deleteCandidateQuestion:"Da li ste sigurni da želite da obrišete kandidata?" | |||||
| deleteCandidate: "Brisanje kandidata", | |||||
| deleteCandidateQuestion: | |||||
| "Da li ste sigurni da želite da obrišete kandidata?", | |||||
| }, | }, | ||||
| dialogs: { | dialogs: { | ||||
| candidateName: "Ime kandidata", | candidateName: "Ime kandidata", | ||||
| noInterviewer: "Proces nema intervjuera.", | noInterviewer: "Proces nema intervjuera.", | ||||
| title: "Tok selekcije", | title: "Tok selekcije", | ||||
| subtitle: "Svi kandidati", | subtitle: "Svi kandidati", | ||||
| addInterviewer:"Dodavanje intervjuera", | |||||
| selection:"Selekcija", | |||||
| changeInterviewer:"Promena intervjuera", | |||||
| addCandidate:"Dodavanje kandidata", | |||||
| interview:"HR intervju", | |||||
| filterDate:"Datum" | |||||
| addInterviewer: "Dodavanje intervjuera", | |||||
| selection: "Selekcija", | |||||
| changeInterviewer: "Promena intervjuera", | |||||
| addCandidate: "Dodavanje kandidata", | |||||
| interview: "HR intervju", | |||||
| filterDate: "Datum", | |||||
| }, | }, | ||||
| patterns: { | patterns: { | ||||
| made: "Napravljen", | made: "Napravljen", | ||||
| patternsMade: "Napravljeni Šabloni", | patternsMade: "Napravljeni Šabloni", | ||||
| noPatterns: "Trenutno nema dodatih sablona", | noPatterns: "Trenutno nema dodatih sablona", | ||||
| addPattern: "Dodaj Šablon", | addPattern: "Dodaj Šablon", | ||||
| editing2:"Režim uređivanja" | |||||
| editing2: "Režim uređivanja", | |||||
| }, | }, | ||||
| stats: { | stats: { | ||||
| statistic: "Statistika", | statistic: "Statistika", | ||||
| registered: "Prijavljeni po pozicijama", | registered: "Prijavljeni po pozicijama", | ||||
| }, | }, | ||||
| files: { | files: { | ||||
| addFile: "Dodajte Fajl" | |||||
| } | |||||
| addFile: "Dodajte Fajl", | |||||
| addFileCategories: "Kategorije", | |||||
| addFileSelectedCategory: "Izabrana kategorija", | |||||
| addFileSetRoot: "Podesite koren", | |||||
| addFileTags: "Tagovi", | |||||
| addFileDragAndDrop: "Prevucite fajl", | |||||
| addFileSuccessfullyAddedFile: "Uspešno dodat fajl", | |||||
| addFileGoBackToFiles: "Nazad na sve fajlove", | |||||
| createCategoryModalTitle: "Napravite kategoriju", | |||||
| createCategoryModalPlaceholder: "Naziv kategorije", | |||||
| close: "Izađite", | |||||
| createCategoryModalSubmitButton: "Napravite kategoriju", | |||||
| folders: "Folderi", | |||||
| file: "Fajl", | |||||
| files: "Fajlovi", | |||||
| category: "Kategorija", | |||||
| root: "Koren", | |||||
| confirmDialogTitle: "Brisanje dokumenta", | |||||
| confirmDialogContent: "Da li ste sigurni za brisanje dokumenta?", | |||||
| editText: "Izmena teksta", | |||||
| editTextSub: " | Beleška", | |||||
| saveChanges: "Sačuvajte izmene", | |||||
| doucmentPath: "Putanja dokumenta", | |||||
| doucmentName: "Naziv dokumenta", | |||||
| doucmentType: "Tip dokumenta", | |||||
| doucmentSize: "Veličina dokumenta", | |||||
| deleteDocument: "Obrišite dokument", | |||||
| note: "Beleška", | |||||
| downloadDocument: "Preuzmite dokument", | |||||
| filters: "Filteri", | |||||
| documents: "| Dokumenti", | |||||
| extension: "Ekstenzija", | |||||
| tags: "Tagovi", | |||||
| search: "Pretraži" | |||||
| }, | |||||
| }; | }; |
| setTitle(""); | setTitle(""); | ||||
| setShowMessage(true); | setShowMessage(true); | ||||
| setSelectedCategory({ id: -1, name: "" }); | setSelectedCategory({ id: -1, name: "" }); | ||||
| setDropzoneActive(false) | |||||
| setDropzoneActive(false); | |||||
| }; | }; | ||||
| useEffect(() => { | useEffect(() => { | ||||
| return ( | return ( | ||||
| <div | <div | ||||
| className="uploadCV-input files-page-drag-and-drop" | className="uploadCV-input files-page-drag-and-drop" | ||||
| style={{backgroundColor: !pdfFile && dropzoneActive === true ? "#F4F4F4" : "#ffffff"}} | |||||
| style={{ | |||||
| backgroundColor: | |||||
| !pdfFile && dropzoneActive === true ? "#F4F4F4" : "#ffffff", | |||||
| }} | |||||
| onDragOver={(e) => { | onDragOver={(e) => { | ||||
| setDropzoneActive(true); | setDropzoneActive(true); | ||||
| e.preventDefault(); | e.preventDefault(); | ||||
| <div className="files-page-card"> | <div className="files-page-card"> | ||||
| <div className="files-page-card-title"> | <div className="files-page-card-title"> | ||||
| <h1>Categories</h1> | |||||
| <h1>{t("files.addFileCategories")}</h1> | |||||
| </div> | </div> | ||||
| <div className="files-page-card-content"> | <div className="files-page-card-content"> | ||||
| <TreeViewFiles onSelectCategory={selectCategoryHandler} /> | <TreeViewFiles onSelectCategory={selectCategoryHandler} /> | ||||
| <div className="files-page-card"> | <div className="files-page-card"> | ||||
| <div className="files-page-card-title"> | <div className="files-page-card-title"> | ||||
| <h1>Selected Category</h1> | |||||
| <h1>{t("files.addFileSelectedCategory")}</h1> | |||||
| </div> | </div> | ||||
| <div className="files-page-card-input"> | <div className="files-page-card-input"> | ||||
| <input | <input | ||||
| type="text" | type="text" | ||||
| disabled={true} | disabled={true} | ||||
| value={ | |||||
| selectedCategory.id !== -1 ? selectedCategory.name : "" | |||||
| } | |||||
| value={selectedCategory.id !== -1 ? selectedCategory.name : ""} | |||||
| /> | /> | ||||
| <Button | <Button | ||||
| type="button" | type="button" | ||||
| onClick={() => setSelectedCategory({ id: -1, name: "" })} | onClick={() => setSelectedCategory({ id: -1, name: "" })} | ||||
| disabled={selectedCategory.id === -1} | disabled={selectedCategory.id === -1} | ||||
| > | > | ||||
| Set root | |||||
| {t("files.addFileSetRoot")} | |||||
| </Button> | </Button> | ||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| <div className="files-page-card"> | <div className="files-page-card"> | ||||
| <div className="files-page-card-title"> | <div className="files-page-card-title"> | ||||
| <h1>Tags</h1> | |||||
| <h1>{t("files.addFileTags")}</h1> | |||||
| </div> | </div> | ||||
| <div className="files-page-card-content"> | <div className="files-page-card-content"> | ||||
| <div className="files-page-card-content-checkboxes"> | <div className="files-page-card-content-checkboxes"> | ||||
| <div className="files-page-card"> | <div className="files-page-card"> | ||||
| <div className="files-page-card-title"> | <div className="files-page-card-title"> | ||||
| <h1>Drag & Drop File</h1> | |||||
| <h1>{t("files.addFileDragAndDrop")}</h1> | |||||
| </div> | </div> | ||||
| <div | <div | ||||
| className="files-page-card-content drag-and-drop" | className="files-page-card-content drag-and-drop" | ||||
| showMessage === false ? { display: "none" } : { display: "flex" } | showMessage === false ? { display: "none" } : { display: "flex" } | ||||
| } | } | ||||
| > | > | ||||
| <p>Uspesno dodat fajl</p> | |||||
| <p>{t("files.addFileSuccessfullyAddedFile")}</p> | |||||
| </div> | </div> | ||||
| <div className="files-page-card"> | <div className="files-page-card"> | ||||
| className="applicant-ads-back-button" | className="applicant-ads-back-button" | ||||
| onClick={() => history.push(FILES_PAGE)} | onClick={() => history.push(FILES_PAGE)} | ||||
| > | > | ||||
| Nazad na sve fajlove | |||||
| {t("files.addFileGoBackToFiles")} | |||||
| </p> | </p> | ||||
| <IconButton | <IconButton | ||||
| className="c-btn ads-page-btn c-btn--primary add-ad-btn" | className="c-btn ads-page-btn c-btn--primary add-ad-btn" |
| <div> | <div> | ||||
| <ConfirmDialog | <ConfirmDialog | ||||
| open={fileForDelete.open} | open={fileForDelete.open} | ||||
| title="Brisanje dokumenta" | |||||
| title={t("files.confirmDialogTitle")} | |||||
| subtitle={fileForDelete.title} | subtitle={fileForDelete.title} | ||||
| imgSrc={deleteIcon} | imgSrc={deleteIcon} | ||||
| content="Da li ste sigurni za brisanje dokumenta?" | |||||
| content={t("files.confirmDialogContent")} | |||||
| onClose={() => { | onClose={() => { | ||||
| setFileForDelete({ open: false, title: "", streamId: null }); | setFileForDelete({ open: false, title: "", streamId: null }); | ||||
| }} | }} | ||||
| <img src={editIcon} alt="plus" /> | <img src={editIcon} alt="plus" /> | ||||
| </div> | </div> | ||||
| <div className="add-pattern-modal-header-title-title"> | <div className="add-pattern-modal-header-title-title"> | ||||
| <p>Edit text</p> | |||||
| <p>{t("files.editText")}</p> | |||||
| </div> | </div> | ||||
| <div className="add-pattern-modal-header-title-sub"> | <div className="add-pattern-modal-header-title-sub"> | ||||
| <sub> | Note</sub> | |||||
| <sub>{t("files.editTextSub")}</sub> | |||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| <div | <div | ||||
| setOpenNoteModal({ open: false, note: null, streamId: "" }) | setOpenNoteModal({ open: false, note: null, streamId: "" }) | ||||
| } | } | ||||
| > | > | ||||
| Close | |||||
| {t("files.close")} | |||||
| </Button> | </Button> | ||||
| <Button | <Button | ||||
| type="button" | type="button" | ||||
| className="c-btn c-btn--primary" | className="c-btn c-btn--primary" | ||||
| onClick={updateFileNoteHandler} | onClick={updateFileNoteHandler} | ||||
| > | > | ||||
| Save Changes | |||||
| {t("files.saveChanges")} | |||||
| </Button> | </Button> | ||||
| </div> | </div> | ||||
| </CustomModal> | </CustomModal> | ||||
| className="headingRow headingRowFiles" | className="headingRow headingRowFiles" | ||||
| style={{ cursor: "pointer" }} | style={{ cursor: "pointer" }} | ||||
| > | > | ||||
| {file === null ? <th>Putanja dokumenta</th> : ""} | |||||
| <th>Naziv dokumenta</th> | |||||
| {file === null ? <th>Tip dokumenta</th> : ""} | |||||
| {file === null ? <th>Veličina dokumenta</th> : ""} | |||||
| {file === null ? <th>Obrisi dokument</th> : ""} | |||||
| {file === null ? <th>Note</th> : ""} | |||||
| <th>Preuzmi dokument</th> | |||||
| {file === null ? <th>{t("files.doucmentPath")}</th> : ""} | |||||
| <th>{t("files.doucmentName")}</th> | |||||
| {file === null ? <th>{t("files.doucmentType")}</th> : ""} | |||||
| {file === null ? <th>{t("files.doucmentSize")}</th> : ""} | |||||
| {file === null ? <th>{t("files.deleteDocument")}</th> : ""} | |||||
| {file === null ? <th>{t("files.note")}</th> : ""} | |||||
| <th>{t("files.downloadDocument")}</th> | |||||
| </tr> | </tr> | ||||
| </thead> | </thead> | ||||
| <tbody> | <tbody> |
| import Button from "../../components/Button/Button"; | import Button from "../../components/Button/Button"; | ||||
| import { useTheme } from "@mui/system"; | import { useTheme } from "@mui/system"; | ||||
| import { useMediaQuery } from "@mui/material"; | import { useMediaQuery } from "@mui/material"; | ||||
| import { useTranslation } from "react-i18next"; | |||||
| const FilesPage = ({ history }) => { | const FilesPage = ({ history }) => { | ||||
| const categories = useSelector(selectCategories); | const categories = useSelector(selectCategories); | ||||
| let { id } = useParams(); | let { id } = useParams(); | ||||
| const theme = useTheme(); | const theme = useTheme(); | ||||
| const matches = useMediaQuery(theme.breakpoints.down("370")); | const matches = useMediaQuery(theme.breakpoints.down("370")); | ||||
| const { t } = useTranslation(); | |||||
| useEffect(() => { | useEffect(() => { | ||||
| if (id === undefined) { | if (id === undefined) { | ||||
| <img src={plusIcon} alt="plus" /> | <img src={plusIcon} alt="plus" /> | ||||
| </div> | </div> | ||||
| <div className="add-pattern-modal-header-title-title"> | <div className="add-pattern-modal-header-title-title"> | ||||
| <p>Create category</p> | |||||
| <p>{t("files.createCategoryModalTitle")}</p> | |||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| <div | <div | ||||
| <div className="add-category-input"> | <div className="add-category-input"> | ||||
| <input | <input | ||||
| type="text" | type="text" | ||||
| placeholder="Category name" | |||||
| placeholder={t("files.createCategoryModalPlaceholder")} | |||||
| value={createCategoryName} | value={createCategoryName} | ||||
| onChange={(e) => setCreateCategoryName(e.target.value)} | onChange={(e) => setCreateCategoryName(e.target.value)} | ||||
| /> | /> | ||||
| className="c-btn c-btn--primary-outlined" | className="c-btn c-btn--primary-outlined" | ||||
| onClick={changeOpenCreateCategoryModal} | onClick={changeOpenCreateCategoryModal} | ||||
| > | > | ||||
| Close | |||||
| {t("files.close")} | |||||
| </Button> | </Button> | ||||
| <Button | <Button | ||||
| type="button" | type="button" | ||||
| className="c-btn c-btn--primary" | className="c-btn c-btn--primary" | ||||
| onClick={createCategoryHandler} | onClick={createCategoryHandler} | ||||
| > | > | ||||
| Create category | |||||
| {t("files.createCategoryModalSubmitButton")} | |||||
| </Button> | </Button> | ||||
| </div> | </div> | ||||
| </CustomModal> | </CustomModal> | ||||
| marginBottom: "15px", | marginBottom: "15px", | ||||
| }} | }} | ||||
| > | > | ||||
| <h1 className="page-heading">Folderi</h1> | |||||
| <h1 className="page-heading">{t("files.folders")}</h1> | |||||
| <div className="add-categories-files"> | <div className="add-categories-files"> | ||||
| <IconButton | <IconButton | ||||
| className={ | className={ | ||||
| } | } | ||||
| onClick={() => history.push(ADD_FILE)} | onClick={() => history.push(ADD_FILE)} | ||||
| > | > | ||||
| + Fajl | |||||
| + {t("files.file")} | |||||
| </IconButton> | </IconButton> | ||||
| <IconButton | <IconButton | ||||
| className={ | className={ | ||||
| } | } | ||||
| onClick={changeOpenCreateCategoryModal} | onClick={changeOpenCreateCategoryModal} | ||||
| > | > | ||||
| + Kategorija | |||||
| + {t("files.category")} | |||||
| </IconButton> | </IconButton> | ||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| onClick={() => history.push({ pathname: FILES_PAGE })} | onClick={() => history.push({ pathname: FILES_PAGE })} | ||||
| className="files-file-routing" | className="files-file-routing" | ||||
| > | > | ||||
| Root | |||||
| {t("files.root")} | |||||
| </div> | </div> | ||||
| {childParentRelations.map((relation) => ( | {childParentRelations.map((relation) => ( | ||||
| <div | <div | ||||
| <div> | <div> | ||||
| <div style={{ marginBottom: "0px" }}> | <div style={{ marginBottom: "0px" }}> | ||||
| <h1 className="page-heading">Fajlovi</h1> | |||||
| <h1 className="page-heading">{t("files.files")}</h1> | |||||
| </div> | </div> | ||||
| <div className="files-page-categories"> | <div className="files-page-categories"> | ||||
| <FileTable trigger={trigger} /> | <FileTable trigger={trigger} /> |
| marginTop: matches ? "1rem" : "0px", | marginTop: matches ? "1rem" : "0px", | ||||
| }} | }} | ||||
| > | > | ||||
| <h1>Granted Categories</h1> | |||||
| <h1>{t("users.grantedCategories")}</h1> | |||||
| </div> | </div> | ||||
| <div className="user-details-middle-checkboxes"> | <div className="user-details-middle-checkboxes"> | ||||
| <FormGroup> | <FormGroup> | ||||
| type="submit" | type="submit" | ||||
| onClick={onGrantCategoriesHandler} | onClick={onGrantCategoriesHandler} | ||||
| > | > | ||||
| Apply Changes | |||||
| {t("users.applyChanges")} | |||||
| </Button> | </Button> | ||||
| </div> | </div> | ||||
| {matches && ( | {matches && ( |