2023-12-13 14:32:57 +03:00
|
|
|
'use client';
|
|
|
|
|
2025-03-11 12:47:15 +03:00
|
|
|
import clsx from 'clsx';
|
|
|
|
|
2025-02-20 14:45:52 +03:00
|
|
|
import { urls, useConceptNavigation } from '@/app';
|
2025-02-26 00:16:41 +03:00
|
|
|
import { HelpTopic } from '@/features/help';
|
|
|
|
import { BadgeHelp } from '@/features/help/components';
|
2025-03-07 22:05:12 +03:00
|
|
|
import { type IRSForm } from '@/features/rsform';
|
2025-02-12 15:13:37 +03:00
|
|
|
import { useRoleStore, UserRole } from '@/features/users';
|
2025-02-12 21:36:25 +03:00
|
|
|
|
2025-03-12 11:55:43 +03:00
|
|
|
import { MiniButton } from '@/components/control1';
|
|
|
|
import { IconDestroy, IconSave, IconShare } from '@/components/icons1';
|
2025-01-27 15:03:48 +03:00
|
|
|
import { useModificationStore } from '@/stores/modification';
|
2025-02-12 01:35:41 +03:00
|
|
|
import { tooltipText } from '@/utils/labels';
|
2025-02-12 15:13:37 +03:00
|
|
|
import { prepareTooltip, sharePage } from '@/utils/utils';
|
2023-11-30 02:14:24 +03:00
|
|
|
|
2025-03-07 22:05:12 +03:00
|
|
|
import { AccessPolicy, type ILibraryItem, LibraryItemType } from '../backend/types';
|
2025-03-12 11:55:43 +03:00
|
|
|
import { useMutatingLibrary } from '../backend/use-mutating-library';
|
2024-08-01 20:11:32 +03:00
|
|
|
|
2025-03-12 11:55:43 +03:00
|
|
|
import { MiniSelectorOSS } from './mini-selector-oss';
|
2025-03-07 22:05:12 +03:00
|
|
|
|
|
|
|
interface ToolbarItemCardProps {
|
2025-03-11 12:47:15 +03:00
|
|
|
className?: string;
|
2024-01-04 19:30:10 +03:00
|
|
|
onSubmit: () => void;
|
2025-02-20 14:45:52 +03:00
|
|
|
isMutable: boolean;
|
|
|
|
schema: ILibraryItem;
|
|
|
|
deleteSchema: () => void;
|
2023-11-30 02:14:24 +03:00
|
|
|
}
|
|
|
|
|
2025-03-11 12:47:15 +03:00
|
|
|
export function ToolbarItemCard({ className, schema, onSubmit, isMutable, deleteSchema }: ToolbarItemCardProps) {
|
2025-01-15 23:03:35 +03:00
|
|
|
const role = useRoleStore(state => state.role);
|
2025-02-20 14:45:52 +03:00
|
|
|
const router = useConceptNavigation();
|
2025-01-27 15:03:48 +03:00
|
|
|
const { isModified } = useModificationStore();
|
2025-01-29 14:52:07 +03:00
|
|
|
const isProcessing = useMutatingLibrary();
|
2025-01-27 15:03:48 +03:00
|
|
|
const canSave = isModified && !isProcessing;
|
2024-08-01 20:11:32 +03:00
|
|
|
|
2024-12-13 21:31:09 +03:00
|
|
|
const ossSelector = (() => {
|
2025-02-20 14:45:52 +03:00
|
|
|
if (schema.item_type !== LibraryItemType.RSFORM) {
|
2024-08-01 20:11:32 +03:00
|
|
|
return null;
|
|
|
|
}
|
2025-02-20 14:45:52 +03:00
|
|
|
const rsSchema = schema as IRSForm;
|
|
|
|
if (rsSchema.oss.length <= 0) {
|
2024-08-01 20:11:32 +03:00
|
|
|
return null;
|
|
|
|
}
|
|
|
|
return (
|
|
|
|
<MiniSelectorOSS
|
2025-02-20 14:45:52 +03:00
|
|
|
items={rsSchema.oss}
|
2025-02-26 16:28:29 +03:00
|
|
|
onSelect={(event, value) => router.push({ path: urls.oss(value.id), newTab: event.ctrlKey || event.metaKey })}
|
2024-08-01 20:11:32 +03:00
|
|
|
/>
|
|
|
|
);
|
2024-12-13 21:31:09 +03:00
|
|
|
})();
|
2024-08-01 20:11:32 +03:00
|
|
|
|
2024-01-04 19:30:10 +03:00
|
|
|
return (
|
2025-03-11 12:47:15 +03:00
|
|
|
<div className={clsx('cc-icons', className)}>
|
2024-08-01 20:11:32 +03:00
|
|
|
{ossSelector}
|
2025-02-20 14:45:52 +03:00
|
|
|
{isMutable || isModified ? (
|
2024-03-08 18:39:08 +03:00
|
|
|
<MiniButton
|
2024-03-09 16:40:10 +03:00
|
|
|
titleHtml={prepareTooltip('Сохранить изменения', 'Ctrl + S')}
|
2024-03-08 18:39:08 +03:00
|
|
|
disabled={!canSave}
|
2024-04-03 21:05:53 +03:00
|
|
|
icon={<IconSave size='1.25rem' className='icon-primary' />}
|
2024-03-08 18:39:08 +03:00
|
|
|
onClick={onSubmit}
|
|
|
|
/>
|
|
|
|
) : null}
|
2024-01-04 19:30:10 +03:00
|
|
|
<MiniButton
|
2025-02-20 14:45:52 +03:00
|
|
|
titleHtml={tooltipText.shareItem(schema.access_policy === AccessPolicy.PUBLIC)}
|
2024-04-03 21:05:53 +03:00
|
|
|
icon={<IconShare size='1.25rem' className='icon-primary' />}
|
2025-01-27 15:03:48 +03:00
|
|
|
onClick={sharePage}
|
2025-02-20 14:45:52 +03:00
|
|
|
disabled={schema.access_policy !== AccessPolicy.PUBLIC}
|
2024-01-04 19:30:10 +03:00
|
|
|
/>
|
2025-02-20 14:45:52 +03:00
|
|
|
{isMutable ? (
|
2024-03-08 18:39:08 +03:00
|
|
|
<MiniButton
|
|
|
|
title='Удалить схему'
|
2024-04-03 21:05:53 +03:00
|
|
|
icon={<IconDestroy size='1.25rem' className='icon-red' />}
|
2025-02-20 14:45:52 +03:00
|
|
|
disabled={!isMutable || isProcessing || role < UserRole.OWNER}
|
|
|
|
onClick={deleteSchema}
|
2024-03-08 18:39:08 +03:00
|
|
|
/>
|
|
|
|
) : null}
|
2025-03-07 22:05:12 +03:00
|
|
|
<BadgeHelp topic={HelpTopic.UI_RS_CARD} offset={4} />
|
|
|
|
</div>
|
2024-01-04 19:30:10 +03:00
|
|
|
);
|
2023-11-30 02:14:24 +03:00
|
|
|
}
|