'use client'; import { zodResolver } from '@hookform/resolvers/zod'; import clsx from 'clsx'; import { useRef } from 'react'; import { Controller, useForm, useWatch } from 'react-hook-form'; import { useConceptNavigation } from '@/app/Navigation/NavigationContext'; import { urls } from '@/app/urls'; import { useAuthSuspense } from '@/backend/auth/useAuth'; import { CreateLibraryItemSchema, ICreateLibraryItemDTO } from '@/backend/library/api'; import { useCreateItem } from '@/backend/library/useCreateItem'; 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 { AccessPolicy, LibraryItemType, LocationHead } from '@/models/library'; import { combineLocation } from '@/models/libraryAPI'; import { useLibrarySearchStore } from '@/stores/librarySearch'; import { EXTEOR_TRS_FILE } from '@/utils/constants'; function FormCreateItem() { const router = useConceptNavigation(); const { user } = useAuthSuspense(); const { createItem, isPending, error: serverError, reset: clearServerError } = useCreateItem(); const searchLocation = useLibrarySearchStore(state => state.location); const setSearchLocation = useLibrarySearchStore(state => state.setLocation); const { register, handleSubmit, clearErrors, setValue, control, formState: { errors } } = useForm({ resolver: zodResolver(CreateLibraryItemSchema), defaultValues: { item_type: LibraryItemType.RSFORM, access_policy: AccessPolicy.PUBLIC, visible: true, read_only: false, location: !!searchLocation ? searchLocation : LocationHead.USER } }); const itemType = useWatch({ control, name: 'item_type' }); const file = useWatch({ control, name: 'file' }); const inputRef = useRef(null); function resetErrors() { clearServerError(); clearErrors(); } function handleCancel() { if (router.canBack()) { router.back(); } else { router.push(urls.library); } } function handleFileChange(event: React.ChangeEvent) { if (event.target.files && event.target.files.length > 0) { setValue('file', event.target.files[0]); setValue('fileName', event.target.files[0].name); } else { setValue('file', undefined); setValue('fileName', ''); } } function handleItemTypeChange(value: LibraryItemType) { if (value !== LibraryItemType.RSFORM) { setValue('file', undefined); setValue('fileName', ''); } setValue('item_type', value); } function onSubmit(data: ICreateLibraryItemDTO) { createItem(data, newItem => { setSearchLocation(data.location); if (newItem.item_type == LibraryItemType.RSFORM) { router.push(urls.schema(newItem.id)); } else { router.push(urls.oss(newItem.id)); } }); } return (
void handleSubmit(onSubmit)(event)} onChange={resetErrors} >

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

{file ?