From 8f53afa34e2c711856f08a9bbd8fb10428b3b547 Mon Sep 17 00:00:00 2001 From: IRBorisov <8611739+IRBorisov@users.noreply.github.com> Date: Fri, 21 Jun 2024 19:27:51 +0300 Subject: [PATCH] Implementing SelectLocation pt1 --- .../src/components/select/SelectLocation.tsx | 42 +++++++++++++++++++ .../pages/CreateItemPage/FormCreateItem.tsx | 16 +++++-- 2 files changed, 55 insertions(+), 3 deletions(-) create mode 100644 rsconcept/frontend/src/components/select/SelectLocation.tsx diff --git a/rsconcept/frontend/src/components/select/SelectLocation.tsx b/rsconcept/frontend/src/components/select/SelectLocation.tsx new file mode 100644 index 00000000..43cbcd66 --- /dev/null +++ b/rsconcept/frontend/src/components/select/SelectLocation.tsx @@ -0,0 +1,42 @@ +'use client'; + +import { useCallback } from 'react'; + +import useDropdown from '@/hooks/useDropdown'; +import { FolderTree } from '@/models/FolderTree'; + +import { IconFolderTree } from '../Icons'; +import MiniButton from '../ui/MiniButton'; + +interface SelectLocationProps { + value: string; + onChange: (newValue: string) => void; + + folderTree: FolderTree; +} + +function SelectLocation({ value, onChange, folderTree }: SelectLocationProps) { + const menu = useDropdown(); + + const handleChange = useCallback( + (newValue: string) => { + console.log(folderTree.roots.size); + console.log(value); + menu.hide(); + onChange(newValue); + }, + [menu, onChange, value, folderTree] + ); + + return ( +
+ } + onClick={() => handleChange('/U/test')} + /> +
+ ); +} + +export default SelectLocation; diff --git a/rsconcept/frontend/src/pages/CreateItemPage/FormCreateItem.tsx b/rsconcept/frontend/src/pages/CreateItemPage/FormCreateItem.tsx index 78eb2998..b5ab8e23 100644 --- a/rsconcept/frontend/src/pages/CreateItemPage/FormCreateItem.tsx +++ b/rsconcept/frontend/src/pages/CreateItemPage/FormCreateItem.tsx @@ -1,7 +1,7 @@ 'use client'; import clsx from 'clsx'; -import { useEffect, useMemo, useRef, useState } from 'react'; +import { useCallback, useEffect, useMemo, useRef, useState } from 'react'; import { toast } from 'react-toastify'; import { urls } from '@/app/urls'; @@ -10,6 +10,7 @@ import { IconDownload } from '@/components/Icons'; import InfoError from '@/components/info/InfoError'; import SelectAccessPolicy from '@/components/select/SelectAccessPolicy'; import SelectItemType from '@/components/select/SelectItemType'; +import SelectLocation from '@/components/select/SelectLocation'; import SelectLocationHead from '@/components/select/SelectLocationHead'; import Button from '@/components/ui/Button'; import Label from '@/components/ui/Label'; @@ -30,7 +31,7 @@ import { information } from '@/utils/labels'; function FormCreateItem() { const router = useConceptNavigation(); const { user } = useAuth(); - const { createItem, processingError, setProcessingError, processing } = useLibrary(); + const { createItem, processingError, setProcessingError, processing, folders } = useLibrary(); const [itemType, setItemType] = useState(LibraryItemType.RSFORM); const [title, setTitle] = useState(''); @@ -98,6 +99,11 @@ function FormCreateItem() { } } + const handleSelectLocation = useCallback((newValue: string) => { + setHead(newValue.substring(0, 2) as LocationHead); + setBody(newValue.length > 3 ? newValue.substring(3) : ''); + }, []); + return (

@@ -154,7 +160,6 @@ function FormCreateItem() {
} onClick={() => setVisible(prev => !prev)} @@ -180,6 +185,11 @@ function FormCreateItem() { excluded={!user?.is_staff ? [LocationHead.LIBRARY] : []} />
+ {user?.is_staff ? ( +
+ +
+ ) : null}