'use client'; import clsx from 'clsx'; import { useState } from 'react'; import { useConceptNavigation } from '@/app/Navigation/NavigationContext'; import { urls } from '@/app/urls'; import { useAuthSuspense } from '@/backend/auth/useAuth'; import { IRSFormCloneDTO } from '@/backend/library/api'; import { useCloneItem } from '@/backend/library/useCloneItem'; import { VisibilityIcon } from '@/components/DomainIcons'; import SelectAccessPolicy from '@/components/select/SelectAccessPolicy'; import SelectLocationContext from '@/components/select/SelectLocationContext'; import SelectLocationHead from '@/components/select/SelectLocationHead'; import Checkbox from '@/components/ui/Checkbox'; import Label from '@/components/ui/Label'; import MiniButton from '@/components/ui/MiniButton'; import Modal from '@/components/ui/Modal'; import TextArea from '@/components/ui/TextArea'; import TextInput from '@/components/ui/TextInput'; import { AccessPolicy, ILibraryItem, LocationHead } from '@/models/library'; import { cloneTitle, combineLocation, validateLocation } from '@/models/libraryAPI'; import { ConstituentaID } from '@/models/rsform'; import { useDialogsStore } from '@/stores/dialogs'; export interface DlgCloneLibraryItemProps { base: ILibraryItem; initialLocation: string; selected: ConstituentaID[]; totalCount: number; } function DlgCloneLibraryItem() { const { base, initialLocation, selected, totalCount } = useDialogsStore( state => state.props as DlgCloneLibraryItemProps ); const router = useConceptNavigation(); const { user } = useAuthSuspense(); const [title, setTitle] = useState(cloneTitle(base)); const [alias, setAlias] = useState(base.alias); const [comment, setComment] = useState(base.comment); const [visible, setVisible] = useState(true); const [policy, setPolicy] = useState(AccessPolicy.PUBLIC); const [onlySelected, setOnlySelected] = useState(false); const [head, setHead] = useState(initialLocation.substring(0, 2) as LocationHead); const [body, setBody] = useState(initialLocation.substring(3)); const location = combineLocation(head, body); const { cloneItem } = useCloneItem(); const canSubmit = title !== '' && alias !== '' && validateLocation(location); function handleSelectLocation(newValue: string) { setHead(newValue.substring(0, 2) as LocationHead); setBody(newValue.length > 3 ? newValue.substring(3) : ''); } function handleSubmit() { const data: IRSFormCloneDTO = { id: base.id, item_type: base.item_type, title: title, alias: alias, comment: comment, read_only: false, visible: visible, access_policy: policy, location: location }; if (onlySelected) { data.items = selected; } cloneItem(data, newSchema => router.push(urls.schema(newSchema.id))); } return ( setTitle(event.target.value)} />
setAlias(event.target.value)} />