'use client'; import clsx from 'clsx'; import { useCallback, useEffect, useRef, useState } from 'react'; import { toast } from 'react-toastify'; import { urls } from '@/app/urls'; import { VisibilityIcon } from '@/components/DomainIcons'; import { IconDownload } from '@/components/Icons'; import InfoError from '@/components/info/InfoError'; import SelectAccessPolicy from '@/components/select/SelectAccessPolicy'; import SelectItemType from '@/components/select/SelectItemType'; import SelectLocationContext from '@/components/select/SelectLocationContext'; import SelectLocationHead from '@/components/select/SelectLocationHead'; import Button from '@/components/ui/Button'; import Label from '@/components/ui/Label'; import MiniButton from '@/components/ui/MiniButton'; import Overlay from '@/components/ui/Overlay'; import SubmitButton from '@/components/ui/SubmitButton'; import TextArea from '@/components/ui/TextArea'; import TextInput from '@/components/ui/TextInput'; import { useAuth } from '@/context/AuthContext'; import { useLibrary } from '@/context/LibraryContext'; import { useConceptNavigation } from '@/context/NavigationContext'; import { AccessPolicy, LibraryItemType, LocationHead } from '@/models/library'; import { ILibraryCreateData } from '@/models/library'; import { combineLocation, validateLocation } from '@/models/libraryAPI'; import { useLibrarySearchStore } from '@/stores/librarySearch'; import { EXTEOR_TRS_FILE } from '@/utils/constants'; import { information } from '@/utils/labels'; function FormCreateItem() { const router = useConceptNavigation(); const { user } = useAuth(); const { createItem, processingError, setProcessingError, processing, folders } = useLibrary(); const searchLocation = useLibrarySearchStore(state => state.location); const setSearchLocation = useLibrarySearchStore(state => state.setLocation); const [itemType, setItemType] = useState(LibraryItemType.RSFORM); const [title, setTitle] = useState(''); const [alias, setAlias] = useState(''); const [comment, setComment] = useState(''); const [visible, setVisible] = useState(true); const [policy, setPolicy] = useState(AccessPolicy.PUBLIC); const [head, setHead] = useState(LocationHead.USER); const [body, setBody] = useState(''); const location = combineLocation(head, body); const isValid = validateLocation(location); const [fileName, setFileName] = useState(''); const [file, setFile] = useState(); const inputRef = useRef(null); useEffect(() => { setProcessingError(undefined); }, [title, alias, setProcessingError]); function handleCancel() { if (router.canBack()) { router.back(); } else { router.push(urls.library); } } function handleSubmit(event: React.FormEvent) { event.preventDefault(); if (processing) { return; } const data: ILibraryCreateData = { item_type: itemType, title: title, alias: alias, comment: comment, read_only: false, visible: visible, access_policy: policy, location: location, file: file, fileName: file?.name }; setSearchLocation(location); createItem(data, newItem => { toast.success(information.newLibraryItem); if (itemType == LibraryItemType.RSFORM) { router.push(urls.schema(newItem.id)); } else { router.push(urls.oss(newItem.id)); } }); } function handleFileChange(event: React.ChangeEvent) { if (event.target.files && event.target.files.length > 0) { setFileName(event.target.files[0].name); setFile(event.target.files[0]); } else { setFileName(''); setFile(undefined); } } const handleSelectLocation = useCallback((newValue: string) => { setHead(newValue.substring(0, 2) as LocationHead); setBody(newValue.length > 3 ? newValue.substring(3) : ''); }, []); useEffect(() => { if (!searchLocation) { return; } handleSelectLocation(searchLocation); }, [searchLocation, handleSelectLocation]); useEffect(() => { if (itemType !== LibraryItemType.RSFORM) { setFile(undefined); setFileName(''); } }, [itemType]); return (

{itemType == LibraryItemType.RSFORM ? ( } onClick={() => inputRef.current?.click()} /> ) : null} Создание схемы

{fileName ?