mirror of
https://github.com/IRBorisov/ConceptPortal.git
synced 2025-06-25 20:40:36 +03:00
R: library feature boundary
This commit is contained in:
parent
8c894b1245
commit
012fb142ed
|
@ -6,17 +6,17 @@ import { DialogType, useDialogsStore } from '@/stores/dialogs';
|
|||
|
||||
const DlgChangeInputSchema = React.lazy(() => import('@/features/oss/dialogs/DlgChangeInputSchema'));
|
||||
const DlgChangeLocation = React.lazy(() => import('@/features/library/dialogs/DlgChangeLocation'));
|
||||
const DlgCloneLibraryItem = React.lazy(() => import('@/features/rsform/dialogs/DlgCloneLibraryItem'));
|
||||
const DlgCloneLibraryItem = React.lazy(() => import('@/features/library/dialogs/DlgCloneLibraryItem'));
|
||||
const DlgCreateCst = React.lazy(() => import('@/features/rsform/dialogs/DlgCreateCst'));
|
||||
const DlgCreateOperation = React.lazy(() => import('@/features/oss/dialogs/DlgCreateOperation'));
|
||||
const DlgCreateVersion = React.lazy(() => import('@/features/rsform/dialogs/DlgCreateVersion'));
|
||||
const DlgCreateVersion = React.lazy(() => import('@/features/library/dialogs/DlgCreateVersion'));
|
||||
const DlgCstTemplate = React.lazy(() => import('@/features/rsform/dialogs/DlgCstTemplate'));
|
||||
const DlgDeleteCst = React.lazy(() => import('@/features/rsform/dialogs/DlgDeleteCst'));
|
||||
const DlgDeleteOperation = React.lazy(() => import('@/features/oss/dialogs/DlgDeleteOperation'));
|
||||
const DlgEditEditors = React.lazy(() => import('@/features/library/dialogs/DlgEditEditors'));
|
||||
const DlgEditOperation = React.lazy(() => import('@/features/oss/dialogs/DlgEditOperation'));
|
||||
const DlgEditReference = React.lazy(() => import('@/features/rsform/dialogs/DlgEditReference'));
|
||||
const DlgEditVersions = React.lazy(() => import('@/features/rsform/dialogs/DlgEditVersions'));
|
||||
const DlgEditVersions = React.lazy(() => import('@/features/library/dialogs/DlgEditVersions'));
|
||||
const DlgEditWordForms = React.lazy(() => import('@/features/rsform/dialogs/DlgEditWordForms'));
|
||||
const DlgGraphParams = React.lazy(() => import('@/features/rsform/dialogs/DlgGraphParams'));
|
||||
const DlgInlineSynthesis = React.lazy(() => import('@/features/rsform/dialogs/DlgInlineSynthesis'));
|
||||
|
|
|
@ -2,9 +2,10 @@ import clsx from 'clsx';
|
|||
|
||||
import { Overlay } from '@/components/Container';
|
||||
import { IconSearch } from '@/components/Icons';
|
||||
import { TextInput } from '@/components/Input';
|
||||
import { CProps } from '@/components/props';
|
||||
|
||||
import { TextInput } from './TextInput';
|
||||
|
||||
interface SearchBarProps extends CProps.Styling {
|
||||
/** Id of the search bar. */
|
||||
id?: string;
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
import { FolderTree } from '@/features/library/models/FolderTree';
|
||||
|
||||
import { FolderTree } from '../models/FolderTree';
|
||||
import { LocationHead } from '../models/library';
|
||||
import { useLibrary } from './useLibrary';
|
||||
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
import { useQueryClient } from '@tanstack/react-query';
|
||||
|
||||
import { ILibraryItem, LibraryItemID } from '../models/library';
|
||||
import { ILibraryItem } from '../models/library';
|
||||
import { libraryApi } from './api';
|
||||
|
||||
export function useUpdateTimestamp() {
|
||||
const client = useQueryClient();
|
||||
return {
|
||||
updateTimestamp: (target: LibraryItemID) =>
|
||||
updateTimestamp: (target: number) =>
|
||||
client.setQueryData(
|
||||
libraryApi.libraryListKey, //
|
||||
(prev: ILibraryItem[] | undefined) =>
|
||||
|
|
|
@ -16,8 +16,7 @@ import {
|
|||
import { Loader } from '@/components/Loader';
|
||||
import { CProps } from '@/components/props';
|
||||
import { ValueIcon } from '@/components/View';
|
||||
import { InfoUsers, SelectUser, useLabelUser, useRoleStore } from '@/features/users';
|
||||
import { UserRole } from '@/features/users/models/user';
|
||||
import { InfoUsers, SelectUser, useLabelUser, useRoleStore, UserRole } from '@/features/users';
|
||||
import { useDialogsStore } from '@/stores/dialogs';
|
||||
import { useModificationStore } from '@/stores/modification';
|
||||
import { prefixes } from '@/utils/constants';
|
||||
|
@ -26,9 +25,20 @@ import { promptText } from '@/utils/labels';
|
|||
import { useMutatingLibrary } from '../backend/useMutatingLibrary';
|
||||
import { useSetLocation } from '../backend/useSetLocation';
|
||||
import { useSetOwner } from '../backend/useSetOwner';
|
||||
import { ILibraryItemEditor } from '../models/library';
|
||||
import { ILibraryItemData } from '../models/library';
|
||||
import { useLibrarySearchStore } from '../stores/librarySearch';
|
||||
|
||||
/**
|
||||
* Represents common {@link ILibraryItem} editor controller.
|
||||
*/
|
||||
export interface ILibraryItemEditor {
|
||||
schema: ILibraryItemData;
|
||||
deleteSchema: () => void;
|
||||
|
||||
isMutable: boolean;
|
||||
isAttachedToOSS: boolean;
|
||||
}
|
||||
|
||||
interface EditorLibraryItemProps {
|
||||
controller: ILibraryItemEditor;
|
||||
}
|
||||
|
|
|
@ -7,15 +7,16 @@ import { Dropdown, DropdownButton, useDropdown } from '@/components/Dropdown';
|
|||
import { IconOSS } from '@/components/Icons';
|
||||
import { Label } from '@/components/Input';
|
||||
import { CProps } from '@/components/props';
|
||||
import { ILibraryItemReference } from '@/features/library/models/library';
|
||||
import { prefixes } from '@/utils/constants';
|
||||
|
||||
import { ILibraryItemReference } from '../models/library';
|
||||
|
||||
interface MiniSelectorOSSProps extends CProps.Styling {
|
||||
items: ILibraryItemReference[];
|
||||
onSelect: (event: CProps.EventMouse, newValue: ILibraryItemReference) => void;
|
||||
}
|
||||
|
||||
function MiniSelectorOSS({ items, onSelect, className, ...restProps }: MiniSelectorOSSProps) {
|
||||
export function MiniSelectorOSS({ items, onSelect, className, ...restProps }: MiniSelectorOSSProps) {
|
||||
const ossMenu = useDropdown();
|
||||
|
||||
function onToggle(event: CProps.EventMouse) {
|
||||
|
@ -50,5 +51,3 @@ function MiniSelectorOSS({ items, onSelect, className, ...restProps }: MiniSelec
|
|||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default MiniSelectorOSS;
|
|
@ -9,17 +9,17 @@ import { Dropdown, useDropdown } from '@/components/Dropdown';
|
|||
import { IconClose, IconFolderTree } from '@/components/Icons';
|
||||
import { SearchBar } from '@/components/Input';
|
||||
import { CProps } from '@/components/props';
|
||||
import { ILibraryItem, LibraryItemID, LibraryItemType } from '@/features/library/models/library';
|
||||
import { matchLibraryItem } from '@/features/library/models/libraryAPI';
|
||||
import { APP_COLORS } from '@/styling/colors';
|
||||
import { prefixes } from '@/utils/constants';
|
||||
|
||||
import SelectLocation from '../../library/components/SelectLocation';
|
||||
import { ILibraryItem, LibraryItemType } from '../models/library';
|
||||
import { matchLibraryItem } from '../models/libraryAPI';
|
||||
import SelectLocation from './SelectLocation';
|
||||
|
||||
interface PickSchemaProps extends CProps.Styling {
|
||||
id?: string;
|
||||
value: LibraryItemID | null;
|
||||
onChange: (newValue: LibraryItemID) => void;
|
||||
value: number | null;
|
||||
onChange: (newValue: number) => void;
|
||||
|
||||
initialFilter?: string;
|
||||
rows?: number;
|
|
@ -17,7 +17,7 @@ interface SelectAccessPolicyProps extends CProps.Styling {
|
|||
stretchLeft?: boolean;
|
||||
}
|
||||
|
||||
function SelectAccessPolicy({ value, disabled, stretchLeft, onChange, ...restProps }: SelectAccessPolicyProps) {
|
||||
export function SelectAccessPolicy({ value, disabled, stretchLeft, onChange, ...restProps }: SelectAccessPolicyProps) {
|
||||
const menu = useDropdown();
|
||||
|
||||
function handleChange(newValue: AccessPolicy) {
|
||||
|
@ -51,5 +51,3 @@ function SelectAccessPolicy({ value, disabled, stretchLeft, onChange, ...restPro
|
|||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default SelectAccessPolicy;
|
||||
|
|
|
@ -16,7 +16,7 @@ interface SelectItemTypeProps extends CProps.Styling {
|
|||
stretchLeft?: boolean;
|
||||
}
|
||||
|
||||
function SelectItemType({ value, disabled, stretchLeft, onChange, ...restProps }: SelectItemTypeProps) {
|
||||
export function SelectItemType({ value, disabled, stretchLeft, onChange, ...restProps }: SelectItemTypeProps) {
|
||||
const menu = useDropdown();
|
||||
|
||||
function handleChange(newValue: LibraryItemType) {
|
||||
|
@ -52,5 +52,3 @@ function SelectItemType({ value, disabled, stretchLeft, onChange, ...restProps }
|
|||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default SelectItemType;
|
||||
|
|
|
@ -5,7 +5,7 @@ import clsx from 'clsx';
|
|||
import { SelectSingle } from '@/components/Input';
|
||||
import { CProps } from '@/components/props';
|
||||
|
||||
import { ILibraryItem, LibraryItemID } from '../models/library';
|
||||
import { ILibraryItem } from '../models/library';
|
||||
import { matchLibraryItem } from '../models/libraryAPI';
|
||||
|
||||
interface SelectLibraryItemProps extends CProps.Styling {
|
||||
|
@ -17,7 +17,7 @@ interface SelectLibraryItemProps extends CProps.Styling {
|
|||
noBorder?: boolean;
|
||||
}
|
||||
|
||||
function SelectLibraryItem({
|
||||
export function SelectLibraryItem({
|
||||
className,
|
||||
items,
|
||||
value,
|
||||
|
@ -31,7 +31,7 @@ function SelectLibraryItem({
|
|||
label: `${cst.alias}: ${cst.title}`
|
||||
})) ?? [];
|
||||
|
||||
function filter(option: { value: LibraryItemID | undefined; label: string }, inputValue: string) {
|
||||
function filter(option: { value: number | undefined; label: string }, inputValue: string) {
|
||||
const item = items?.find(item => item.id === option.value);
|
||||
return !item ? false : matchLibraryItem(item, inputValue);
|
||||
}
|
||||
|
@ -49,5 +49,3 @@ function SelectLibraryItem({
|
|||
/>
|
||||
);
|
||||
}
|
||||
|
||||
export default SelectLibraryItem;
|
||||
|
|
|
@ -6,10 +6,10 @@ import { useEffect, useState } from 'react';
|
|||
import { MiniButton } from '@/components/Control';
|
||||
import { IconFolder, IconFolderClosed, IconFolderEmpty, IconFolderOpened } from '@/components/Icons';
|
||||
import { CProps } from '@/components/props';
|
||||
import { FolderNode } from '@/features/library/models/FolderTree';
|
||||
|
||||
import { useFolders } from '../backend/useFolders';
|
||||
import { labelFolderNode } from '../labels';
|
||||
import { FolderNode } from '../models/FolderTree';
|
||||
|
||||
interface SelectLocationProps extends CProps.Styling {
|
||||
value: string;
|
||||
|
|
|
@ -17,7 +17,7 @@ interface SelectLocationContextProps extends CProps.Styling {
|
|||
stretchTop?: boolean;
|
||||
}
|
||||
|
||||
function SelectLocationContext({
|
||||
export function SelectLocationContext({
|
||||
value,
|
||||
title = 'Проводник...',
|
||||
onChange,
|
||||
|
@ -56,5 +56,3 @@ function SelectLocationContext({
|
|||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default SelectLocationContext;
|
||||
|
|
|
@ -17,7 +17,13 @@ interface SelectLocationHeadProps extends CProps.Styling {
|
|||
excluded?: LocationHead[];
|
||||
}
|
||||
|
||||
function SelectLocationHead({ value, excluded = [], onChange, className, ...restProps }: SelectLocationHeadProps) {
|
||||
export function SelectLocationHead({
|
||||
value,
|
||||
excluded = [],
|
||||
onChange,
|
||||
className,
|
||||
...restProps
|
||||
}: SelectLocationHeadProps) {
|
||||
const menu = useDropdown();
|
||||
|
||||
function handleChange(newValue: LocationHead) {
|
||||
|
@ -60,5 +66,3 @@ function SelectLocationHead({ value, excluded = [], onChange, className, ...rest
|
|||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default SelectLocationHead;
|
||||
|
|
|
@ -4,21 +4,21 @@ import clsx from 'clsx';
|
|||
|
||||
import { SelectSingle } from '@/components/Input';
|
||||
import { CProps } from '@/components/props';
|
||||
import { IVersionInfo, VersionID } from '@/features/library/models/library';
|
||||
|
||||
import { labelVersion } from '../labels';
|
||||
import { labelVersion } from '../../rsform/labels';
|
||||
import { IVersionInfo } from '../models/library';
|
||||
|
||||
interface SelectVersionProps extends CProps.Styling {
|
||||
id?: string;
|
||||
items?: IVersionInfo[];
|
||||
value?: VersionID;
|
||||
onChange: (newValue?: VersionID) => void;
|
||||
value?: number;
|
||||
onChange: (newValue?: number) => void;
|
||||
|
||||
placeholder?: string;
|
||||
noBorder?: boolean;
|
||||
}
|
||||
|
||||
function SelectVersion({ id, className, items, value, onChange, ...restProps }: SelectVersionProps) {
|
||||
export function SelectVersion({ id, className, items, value, onChange, ...restProps }: SelectVersionProps) {
|
||||
const options = [
|
||||
{
|
||||
value: undefined,
|
||||
|
@ -46,5 +46,3 @@ function SelectVersion({ id, className, items, value, onChange, ...restProps }:
|
|||
/>
|
||||
);
|
||||
}
|
||||
|
||||
export default SelectVersion;
|
|
@ -4,14 +4,15 @@ import { VisibilityIcon } from '@/components/DomainIcons';
|
|||
import { IconImmutable, IconMutable } from '@/components/Icons';
|
||||
import { Label } from '@/components/Input';
|
||||
import { BadgeHelp, HelpTopic } from '@/features/help';
|
||||
import { useMutatingLibrary } from '@/features/library/backend/useMutatingLibrary';
|
||||
import { useSetAccessPolicy } from '@/features/library/backend/useSetAccessPolicy';
|
||||
import SelectAccessPolicy from '@/features/library/components/SelectAccessPolicy';
|
||||
import { AccessPolicy, ILibraryItemEditor } from '@/features/library/models/library';
|
||||
import { useRoleStore } from '@/features/users';
|
||||
import { UserRole } from '@/features/users/models/user';
|
||||
import { useRoleStore, UserRole } from '@/features/users';
|
||||
import { PARAMETER } from '@/utils/constants';
|
||||
|
||||
import { useMutatingLibrary } from '../backend/useMutatingLibrary';
|
||||
import { useSetAccessPolicy } from '../backend/useSetAccessPolicy';
|
||||
import { AccessPolicy } from '../models/library';
|
||||
import { ILibraryItemEditor } from './EditorLibraryItem';
|
||||
import { SelectAccessPolicy } from './SelectAccessPolicy';
|
||||
|
||||
interface ToolbarItemAccessProps {
|
||||
visible: boolean;
|
||||
toggleVisible: () => void;
|
||||
|
@ -20,7 +21,13 @@ interface ToolbarItemAccessProps {
|
|||
controller: ILibraryItemEditor;
|
||||
}
|
||||
|
||||
function ToolbarItemAccess({ visible, toggleVisible, readOnly, toggleReadOnly, controller }: ToolbarItemAccessProps) {
|
||||
export function ToolbarItemAccess({
|
||||
visible,
|
||||
toggleVisible,
|
||||
readOnly,
|
||||
toggleReadOnly,
|
||||
controller
|
||||
}: ToolbarItemAccessProps) {
|
||||
const role = useRoleStore(state => state.role);
|
||||
const isProcessing = useMutatingLibrary();
|
||||
const policy = controller.schema.access_policy;
|
||||
|
@ -65,5 +72,3 @@ function ToolbarItemAccess({ visible, toggleVisible, readOnly, toggleReadOnly, c
|
|||
</Overlay>
|
||||
);
|
||||
}
|
||||
|
||||
export default ToolbarItemAccess;
|
|
@ -12,8 +12,8 @@ import { useDialogsStore } from '@/stores/dialogs';
|
|||
import { limits } from '@/utils/constants';
|
||||
import { errorMsg } from '@/utils/labels';
|
||||
|
||||
import SelectLocationContext from '../components/SelectLocationContext';
|
||||
import SelectLocationHead from '../components/SelectLocationHead';
|
||||
import { SelectLocationContext } from '../components/SelectLocationContext';
|
||||
import { SelectLocationHead } from '../components/SelectLocationHead';
|
||||
import { LocationHead } from '../models/library';
|
||||
import { combineLocation, validateLocation } from '../models/libraryAPI';
|
||||
|
||||
|
|
|
@ -10,21 +10,20 @@ import { VisibilityIcon } from '@/components/DomainIcons';
|
|||
import { Checkbox, Label, TextArea, TextInput } from '@/components/Input';
|
||||
import { ModalForm } from '@/components/Modal';
|
||||
import { useAuthSuspense } from '@/features/auth';
|
||||
import { ICloneLibraryItemDTO, schemaCloneLibraryItem } from '@/features/library/backend/api';
|
||||
import { useCloneItem } from '@/features/library/backend/useCloneItem';
|
||||
import SelectAccessPolicy from '@/features/library/components/SelectAccessPolicy';
|
||||
import SelectLocationContext from '@/features/library/components/SelectLocationContext';
|
||||
import SelectLocationHead from '@/features/library/components/SelectLocationHead';
|
||||
import { AccessPolicy, ILibraryItem, LocationHead } from '@/features/library/models/library';
|
||||
import { cloneTitle, combineLocation } from '@/features/library/models/libraryAPI';
|
||||
import { useDialogsStore } from '@/stores/dialogs';
|
||||
|
||||
import { ConstituentaID } from '../models/rsform';
|
||||
import { ICloneLibraryItemDTO, schemaCloneLibraryItem } from '../backend/api';
|
||||
import { useCloneItem } from '../backend/useCloneItem';
|
||||
import { SelectAccessPolicy } from '../components/SelectAccessPolicy';
|
||||
import { SelectLocationContext } from '../components/SelectLocationContext';
|
||||
import { SelectLocationHead } from '../components/SelectLocationHead';
|
||||
import { AccessPolicy, ILibraryItem, LocationHead } from '../models/library';
|
||||
import { cloneTitle, combineLocation } from '../models/libraryAPI';
|
||||
|
||||
export interface DlgCloneLibraryItemProps {
|
||||
base: ILibraryItem;
|
||||
initialLocation: string;
|
||||
selected: ConstituentaID[];
|
||||
selected: number[];
|
||||
totalCount: number;
|
||||
}
|
||||
|
|
@ -6,31 +6,26 @@ import { Controller, useForm, useWatch } from 'react-hook-form';
|
|||
|
||||
import { Checkbox, TextArea, TextInput } from '@/components/Input';
|
||||
import { ModalForm } from '@/components/Modal';
|
||||
import { IVersionCreateDTO, schemaVersionCreate } from '@/features/library/backend/api';
|
||||
import { useVersionCreate } from '@/features/library/backend/useVersionCreate';
|
||||
import { IVersionInfo, LibraryItemID, VersionID } from '@/features/library/models/library';
|
||||
import { nextVersion } from '@/features/library/models/libraryAPI';
|
||||
import { useDialogsStore } from '@/stores/dialogs';
|
||||
import { errorMsg } from '@/utils/labels';
|
||||
|
||||
import { ConstituentaID } from '../models/rsform';
|
||||
import { IVersionCreateDTO, schemaVersionCreate } from '../backend/api';
|
||||
import { useVersionCreate } from '../backend/useVersionCreate';
|
||||
import { IVersionInfo } from '../models/library';
|
||||
import { nextVersion } from '../models/libraryAPI';
|
||||
|
||||
export interface DlgCreateVersionProps {
|
||||
itemID: LibraryItemID;
|
||||
itemID: number;
|
||||
versions: IVersionInfo[];
|
||||
onCreate: (newVersion: VersionID) => void;
|
||||
selected: ConstituentaID[];
|
||||
onCreate: (newVersion: number) => void;
|
||||
selected: number[];
|
||||
totalCount: number;
|
||||
}
|
||||
|
||||
function DlgCreateVersion() {
|
||||
const {
|
||||
itemID, //
|
||||
versions,
|
||||
selected,
|
||||
totalCount,
|
||||
onCreate
|
||||
} = useDialogsStore(state => state.props as DlgCreateVersionProps);
|
||||
const { itemID, versions, selected, totalCount, onCreate } = useDialogsStore(
|
||||
state => state.props as DlgCreateVersionProps
|
||||
);
|
||||
const { versionCreate } = useVersionCreate();
|
||||
|
||||
const { register, handleSubmit, control } = useForm<IVersionCreateDTO>({
|
|
@ -9,20 +9,19 @@ import { MiniButton } from '@/components/Control';
|
|||
import { IconReset, IconSave } from '@/components/Icons';
|
||||
import { TextArea, TextInput } from '@/components/Input';
|
||||
import { ModalView } from '@/components/Modal';
|
||||
import { IVersionUpdateDTO, schemaVersionUpdate } from '@/features/library/backend/api';
|
||||
import { useMutatingLibrary } from '@/features/library/backend/useMutatingLibrary';
|
||||
import { useVersionDelete } from '@/features/library/backend/useVersionDelete';
|
||||
import { useVersionUpdate } from '@/features/library/backend/useVersionUpdate';
|
||||
import { LibraryItemID, VersionID } from '@/features/library/models/library';
|
||||
import { useRSFormSuspense } from '@/features/rsform/backend/useRSForm';
|
||||
import { useDialogsStore } from '@/stores/dialogs';
|
||||
import { errorMsg } from '@/utils/labels';
|
||||
|
||||
import { useRSFormSuspense } from '../../backend/useRSForm';
|
||||
import { IVersionUpdateDTO, schemaVersionUpdate } from '../../backend/api';
|
||||
import { useMutatingLibrary } from '../../backend/useMutatingLibrary';
|
||||
import { useVersionDelete } from '../../backend/useVersionDelete';
|
||||
import { useVersionUpdate } from '../../backend/useVersionUpdate';
|
||||
import TableVersions from './TableVersions';
|
||||
|
||||
export interface DlgEditVersionsProps {
|
||||
itemID: LibraryItemID;
|
||||
afterDelete: (targetVersion: VersionID) => void;
|
||||
itemID: number;
|
||||
afterDelete: (targetVersion: number) => void;
|
||||
}
|
||||
|
||||
function DlgEditVersions() {
|
||||
|
@ -56,7 +55,7 @@ function DlgEditVersions() {
|
|||
[schema, versionID, versionName]
|
||||
);
|
||||
|
||||
function handleSelectVersion(targetVersion: VersionID) {
|
||||
function handleSelectVersion(targetVersion: number) {
|
||||
const ver = schema.versions.find(ver => ver.id === targetVersion);
|
||||
if (!ver) {
|
||||
return;
|
||||
|
@ -64,7 +63,7 @@ function DlgEditVersions() {
|
|||
reset({ ...ver });
|
||||
}
|
||||
|
||||
function handleDeleteVersion(targetVersion: VersionID) {
|
||||
function handleDeleteVersion(targetVersion: number) {
|
||||
const nextVer = schema.versions.find(ver => ver.id !== targetVersion);
|
||||
void versionDelete({ itemID: itemID, versionID: targetVersion }).then(() => {
|
||||
if (!nextVer) {
|
|
@ -6,15 +6,16 @@ import { useIntl } from 'react-intl';
|
|||
import { MiniButton } from '@/components/Control';
|
||||
import DataTable, { createColumnHelper, IConditionalStyle } from '@/components/DataTable';
|
||||
import { IconRemove } from '@/components/Icons';
|
||||
import { IVersionInfo, VersionID } from '@/features/library/models/library';
|
||||
import { APP_COLORS } from '@/styling/colors';
|
||||
|
||||
import { IVersionInfo } from '../../models/library';
|
||||
|
||||
interface TableVersionsProps {
|
||||
processing: boolean;
|
||||
items: IVersionInfo[];
|
||||
selected?: VersionID;
|
||||
onDelete: (versionID: VersionID) => void;
|
||||
onSelect: (versionID: VersionID) => void;
|
||||
selected?: number;
|
||||
onDelete: (versionID: number) => void;
|
||||
onSelect: (versionID: number) => void;
|
||||
}
|
||||
|
||||
const columnHelper = createColumnHelper<IVersionInfo>();
|
||||
|
@ -22,7 +23,7 @@ const columnHelper = createColumnHelper<IVersionInfo>();
|
|||
function TableVersions({ processing, items, onDelete, selected, onSelect }: TableVersionsProps) {
|
||||
const intl = useIntl();
|
||||
|
||||
function handleDeleteVersion(event: React.MouseEvent, targetVersion: VersionID) {
|
||||
function handleDeleteVersion(event: React.MouseEvent, targetVersion: number) {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
onDelete(targetVersion);
|
22
rsconcept/frontend/src/features/library/index.ts
Normal file
22
rsconcept/frontend/src/features/library/index.ts
Normal file
|
@ -0,0 +1,22 @@
|
|||
export { libraryApi } from './backend/api';
|
||||
export { useDeleteItem } from './backend/useDeleteItem';
|
||||
export { useLibrary, useLibrarySuspense } from './backend/useLibrary';
|
||||
export { useMutatingLibrary } from './backend/useMutatingLibrary';
|
||||
export { useTemplatesSuspense } from './backend/useTemplates';
|
||||
export { useUpdateItem } from './backend/useUpdateItem';
|
||||
export { useUpdateTimestamp } from './backend/useUpdateTimestamp';
|
||||
export { useVersionRestore } from './backend/useVersionRestore';
|
||||
export { EditorLibraryItem, type ILibraryItemEditor } from './components/EditorLibraryItem';
|
||||
export { MiniSelectorOSS } from './components/MiniSelectorOSS';
|
||||
export { PickSchema } from './components/PickSchema';
|
||||
export { SelectLibraryItem } from './components/SelectLibraryItem';
|
||||
export { SelectVersion } from './components/SelectVersion';
|
||||
export { ToolbarItemAccess } from './components/ToolbarItemAccess';
|
||||
export {
|
||||
AccessPolicy,
|
||||
type ILibraryItem,
|
||||
type ILibraryItemReference,
|
||||
type IVersionInfo,
|
||||
LibraryItemType
|
||||
} from './models/library';
|
||||
export { useLibrarySearchStore } from './stores/librarySearch';
|
|
@ -90,17 +90,6 @@ export interface ILibraryItemVersioned extends ILibraryItemData {
|
|||
versions: IVersionInfo[];
|
||||
}
|
||||
|
||||
/**
|
||||
* Represents common {@link ILibraryItem} editor controller.
|
||||
*/
|
||||
export interface ILibraryItemEditor {
|
||||
schema: ILibraryItemData;
|
||||
deleteSchema: () => void;
|
||||
|
||||
isMutable: boolean;
|
||||
isAttachedToOSS: boolean;
|
||||
}
|
||||
|
||||
/**
|
||||
* Represents Library filter parameters.
|
||||
*/
|
||||
|
|
|
@ -17,10 +17,10 @@ import { EXTEOR_TRS_FILE } from '@/utils/constants';
|
|||
|
||||
import { ICreateLibraryItemDTO, schemaCreateLibraryItem } from '../../backend/api';
|
||||
import { useCreateItem } from '../../backend/useCreateItem';
|
||||
import SelectAccessPolicy from '../../components/SelectAccessPolicy';
|
||||
import SelectItemType from '../../components/SelectItemType';
|
||||
import SelectLocationContext from '../../components/SelectLocationContext';
|
||||
import SelectLocationHead from '../../components/SelectLocationHead';
|
||||
import { SelectAccessPolicy } from '../../components/SelectAccessPolicy';
|
||||
import { SelectItemType } from '../../components/SelectItemType';
|
||||
import { SelectLocationContext } from '../../components/SelectLocationContext';
|
||||
import { SelectLocationHead } from '../../components/SelectLocationHead';
|
||||
import { AccessPolicy, LibraryItemType, LocationHead } from '../../models/library';
|
||||
import { combineLocation } from '../../models/libraryAPI';
|
||||
import { useLibrarySearchStore } from '../../stores/librarySearch';
|
||||
|
|
|
@ -7,7 +7,6 @@ import { IconFolderEdit, IconFolderTree } from '@/components/Icons';
|
|||
import { CProps } from '@/components/props';
|
||||
import { useAuthSuspense } from '@/features/auth';
|
||||
import { BadgeHelp, HelpTopic } from '@/features/help';
|
||||
import { FolderNode } from '@/features/library/models/FolderTree';
|
||||
import useWindowSize from '@/hooks/useWindowSize';
|
||||
import { useFitHeight } from '@/stores/appLayout';
|
||||
import { PARAMETER, prefixes } from '@/utils/constants';
|
||||
|
@ -15,6 +14,7 @@ import { infoMsg } from '@/utils/labels';
|
|||
|
||||
import { useLibrary } from '../../backend/useLibrary';
|
||||
import SelectLocation from '../../components/SelectLocation';
|
||||
import { FolderNode } from '../../models/FolderTree';
|
||||
import { useLibrarySearchStore } from '../../stores/librarySearch';
|
||||
|
||||
interface ViewSideLocationProps {
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* Module: OSS data loading and processing.
|
||||
*/
|
||||
|
||||
import { ILibraryItem, LibraryItemID } from '@/features/library/models/library';
|
||||
import { ILibraryItem } from '@/features/library/models/library';
|
||||
import {
|
||||
IOperation,
|
||||
IOperationSchema,
|
||||
|
@ -22,7 +22,7 @@ export class OssLoader {
|
|||
private oss: IOperationSchemaDTO;
|
||||
private graph: Graph = new Graph();
|
||||
private operationByID = new Map<OperationID, IOperation>();
|
||||
private schemaIDs: LibraryItemID[] = [];
|
||||
private schemaIDs: number[] = [];
|
||||
private items: ILibraryItem[];
|
||||
|
||||
constructor(input: IOperationSchemaDTO, items: ILibraryItem[]) {
|
||||
|
|
|
@ -3,7 +3,7 @@ import { z } from 'zod';
|
|||
|
||||
import { axiosGet, axiosPatch, axiosPost } from '@/backend/apiTransport';
|
||||
import { DELAYS } from '@/backend/configuration';
|
||||
import { ILibraryItem, ILibraryItemData, LibraryItemID } from '@/features/library/models/library';
|
||||
import { ILibraryItem, ILibraryItemData } from '@/features/library/models/library';
|
||||
import { IArgument, ICstSubstituteEx, IOperation, OperationID, OperationType } from '@/features/oss/models/oss';
|
||||
import { schemaCstSubstitute } from '@/features/rsform/backend/api';
|
||||
import { IConstituentaReference, ITargetCst } from '@/features/rsform/models/rsform';
|
||||
|
@ -149,7 +149,7 @@ export type ICstRelocateDTO = z.infer<typeof schemaCstRelocate>;
|
|||
export const ossApi = {
|
||||
baseKey: 'oss',
|
||||
|
||||
getOssQueryOptions: ({ itemID }: { itemID?: LibraryItemID }) => {
|
||||
getOssQueryOptions: ({ itemID }: { itemID?: number }) => {
|
||||
return queryOptions({
|
||||
queryKey: [ossApi.baseKey, 'item', itemID],
|
||||
staleTime: DELAYS.staleShort,
|
||||
|
@ -168,7 +168,7 @@ export const ossApi = {
|
|||
positions,
|
||||
isSilent
|
||||
}: {
|
||||
itemID: LibraryItemID;
|
||||
itemID: number;
|
||||
positions: IOperationPosition[];
|
||||
isSilent?: boolean;
|
||||
}) =>
|
||||
|
@ -180,7 +180,7 @@ export const ossApi = {
|
|||
}
|
||||
}),
|
||||
|
||||
operationCreate: ({ itemID, data }: { itemID: LibraryItemID; data: IOperationCreateDTO }) =>
|
||||
operationCreate: ({ itemID, data }: { itemID: number; data: IOperationCreateDTO }) =>
|
||||
axiosPost<IOperationCreateDTO, IOperationCreatedResponse>({
|
||||
endpoint: `/api/oss/${itemID}/create-operation`,
|
||||
request: {
|
||||
|
@ -188,7 +188,7 @@ export const ossApi = {
|
|||
successMessage: response => infoMsg.newOperation(response.new_operation.alias)
|
||||
}
|
||||
}),
|
||||
operationDelete: ({ itemID, data }: { itemID: LibraryItemID; data: IOperationDeleteDTO }) =>
|
||||
operationDelete: ({ itemID, data }: { itemID: number; data: IOperationDeleteDTO }) =>
|
||||
axiosPatch<IOperationDeleteDTO, IOperationSchemaDTO>({
|
||||
endpoint: `/api/oss/${itemID}/delete-operation`,
|
||||
request: {
|
||||
|
@ -196,7 +196,7 @@ export const ossApi = {
|
|||
successMessage: infoMsg.operationDestroyed
|
||||
}
|
||||
}),
|
||||
inputCreate: ({ itemID, data }: { itemID: LibraryItemID; data: ITargetOperation }) =>
|
||||
inputCreate: ({ itemID, data }: { itemID: number; data: ITargetOperation }) =>
|
||||
axiosPatch<ITargetOperation, IInputCreatedResponse>({
|
||||
endpoint: `/api/oss/${itemID}/create-input`,
|
||||
request: {
|
||||
|
@ -204,7 +204,7 @@ export const ossApi = {
|
|||
successMessage: infoMsg.newLibraryItem
|
||||
}
|
||||
}),
|
||||
inputUpdate: ({ itemID, data }: { itemID: LibraryItemID; data: IInputUpdateDTO }) =>
|
||||
inputUpdate: ({ itemID, data }: { itemID: number; data: IInputUpdateDTO }) =>
|
||||
axiosPatch<IInputUpdateDTO, IOperationSchemaDTO>({
|
||||
endpoint: `/api/oss/${itemID}/set-input`,
|
||||
request: {
|
||||
|
@ -212,7 +212,7 @@ export const ossApi = {
|
|||
successMessage: infoMsg.changesSaved
|
||||
}
|
||||
}),
|
||||
operationUpdate: ({ itemID, data }: { itemID: LibraryItemID; data: IOperationUpdateDTO }) =>
|
||||
operationUpdate: ({ itemID, data }: { itemID: number; data: IOperationUpdateDTO }) =>
|
||||
axiosPatch<IOperationUpdateDTO, IOperationSchemaDTO>({
|
||||
endpoint: `/api/oss/${itemID}/update-operation`,
|
||||
request: {
|
||||
|
@ -220,7 +220,7 @@ export const ossApi = {
|
|||
successMessage: infoMsg.changesSaved
|
||||
}
|
||||
}),
|
||||
operationExecute: ({ itemID, data }: { itemID: LibraryItemID; data: ITargetOperation }) =>
|
||||
operationExecute: ({ itemID, data }: { itemID: number; data: ITargetOperation }) =>
|
||||
axiosPost<ITargetOperation, IOperationSchemaDTO>({
|
||||
endpoint: `/api/oss/${itemID}/execute-operation`,
|
||||
request: {
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
import { useMutation, useQueryClient } from '@tanstack/react-query';
|
||||
|
||||
import { libraryApi } from '@/features/library/backend/api';
|
||||
import { LibraryItemID } from '@/features/library/models/library';
|
||||
import { libraryApi } from '@/features/library';
|
||||
import { rsformsApi } from '@/features/rsform/backend/api';
|
||||
|
||||
import { ITargetOperation, ossApi } from './api';
|
||||
|
@ -20,7 +19,7 @@ export const useInputCreate = () => {
|
|||
}
|
||||
});
|
||||
return {
|
||||
inputCreate: (data: { itemID: LibraryItemID; data: ITargetOperation }) =>
|
||||
inputCreate: (data: { itemID: number; data: ITargetOperation }) =>
|
||||
mutation.mutateAsync(data).then(response => response.new_schema)
|
||||
};
|
||||
};
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
import { useMutation, useQueryClient } from '@tanstack/react-query';
|
||||
|
||||
import { libraryApi } from '@/features/library/backend/api';
|
||||
import { LibraryItemID } from '@/features/library/models/library';
|
||||
import { libraryApi } from '@/features/library';
|
||||
import { rsformsApi } from '@/features/rsform/backend/api';
|
||||
|
||||
import { IInputUpdateDTO, ossApi } from './api';
|
||||
|
@ -20,6 +19,6 @@ export const useInputUpdate = () => {
|
|||
}
|
||||
});
|
||||
return {
|
||||
inputUpdate: (data: { itemID: LibraryItemID; data: IInputUpdateDTO }) => mutation.mutateAsync(data)
|
||||
inputUpdate: (data: { itemID: number; data: IInputUpdateDTO }) => mutation.mutateAsync(data)
|
||||
};
|
||||
};
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import { useIsMutating } from '@tanstack/react-query';
|
||||
|
||||
import { libraryApi } from '@/features/library/backend/api';
|
||||
import { libraryApi } from '@/features/library';
|
||||
|
||||
import { ossApi } from './api';
|
||||
|
||||
|
|
|
@ -1,13 +1,12 @@
|
|||
import { useQuery, useSuspenseQuery } from '@tanstack/react-query';
|
||||
|
||||
import { useLibrary, useLibrarySuspense } from '@/features/library/backend/useLibrary';
|
||||
import { LibraryItemID } from '@/features/library/models/library';
|
||||
import { OssLoader } from '@/features/oss/backend/OssLoader';
|
||||
|
||||
import { queryClient } from '../../../backend/queryClient';
|
||||
import { ossApi } from './api';
|
||||
import { OssLoader } from './OssLoader';
|
||||
|
||||
export function useOss({ itemID }: { itemID?: LibraryItemID }) {
|
||||
export function useOss({ itemID }: { itemID?: number }) {
|
||||
const { items: libraryItems, isLoading: libraryLoading } = useLibrary();
|
||||
const { data, isLoading, error } = useQuery({
|
||||
...ossApi.getOssQueryOptions({ itemID })
|
||||
|
@ -17,7 +16,7 @@ export function useOss({ itemID }: { itemID?: LibraryItemID }) {
|
|||
return { schema: schema, isLoading: isLoading || libraryLoading, error: error };
|
||||
}
|
||||
|
||||
export function useOssSuspense({ itemID }: { itemID: LibraryItemID }) {
|
||||
export function useOssSuspense({ itemID }: { itemID: number }) {
|
||||
const { items: libraryItems } = useLibrarySuspense();
|
||||
const { data } = useSuspenseQuery({
|
||||
...ossApi.getOssQueryOptions({ itemID })
|
||||
|
@ -26,7 +25,7 @@ export function useOssSuspense({ itemID }: { itemID: LibraryItemID }) {
|
|||
return { schema };
|
||||
}
|
||||
|
||||
export function prefetchOSS({ itemID }: { itemID?: LibraryItemID }) {
|
||||
export function prefetchOSS({ itemID }: { itemID?: number }) {
|
||||
if (!itemID) {
|
||||
return null;
|
||||
}
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
import { useMutation, useQueryClient } from '@tanstack/react-query';
|
||||
|
||||
import { useUpdateTimestamp } from '@/features/library/backend/useUpdateTimestamp';
|
||||
import { LibraryItemID } from '@/features/library/models/library';
|
||||
import { useUpdateTimestamp } from '@/features/library';
|
||||
|
||||
import { IOperationCreateDTO, ossApi } from './api';
|
||||
|
||||
|
@ -17,6 +16,6 @@ export const useOperationCreate = () => {
|
|||
}
|
||||
});
|
||||
return {
|
||||
operationCreate: (data: { itemID: LibraryItemID; data: IOperationCreateDTO }) => mutation.mutateAsync(data)
|
||||
operationCreate: (data: { itemID: number; data: IOperationCreateDTO }) => mutation.mutateAsync(data)
|
||||
};
|
||||
};
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
import { useMutation, useQueryClient } from '@tanstack/react-query';
|
||||
|
||||
import { libraryApi } from '@/features/library/backend/api';
|
||||
import { LibraryItemID } from '@/features/library/models/library';
|
||||
import { libraryApi } from '@/features/library';
|
||||
import { rsformsApi } from '@/features/rsform/backend/api';
|
||||
|
||||
import { IOperationDeleteDTO, ossApi } from './api';
|
||||
|
@ -20,6 +19,6 @@ export const useOperationDelete = () => {
|
|||
}
|
||||
});
|
||||
return {
|
||||
operationDelete: (data: { itemID: LibraryItemID; data: IOperationDeleteDTO }) => mutation.mutateAsync(data)
|
||||
operationDelete: (data: { itemID: number; data: IOperationDeleteDTO }) => mutation.mutateAsync(data)
|
||||
};
|
||||
};
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
import { useMutation, useQueryClient } from '@tanstack/react-query';
|
||||
|
||||
import { libraryApi } from '@/features/library/backend/api';
|
||||
import { LibraryItemID } from '@/features/library/models/library';
|
||||
import { libraryApi } from '@/features/library';
|
||||
import { rsformsApi } from '@/features/rsform/backend/api';
|
||||
|
||||
import { ITargetOperation, ossApi } from './api';
|
||||
|
@ -20,6 +19,6 @@ export const useOperationExecute = () => {
|
|||
}
|
||||
});
|
||||
return {
|
||||
operationExecute: (data: { itemID: LibraryItemID; data: ITargetOperation }) => mutation.mutateAsync(data)
|
||||
operationExecute: (data: { itemID: number; data: ITargetOperation }) => mutation.mutateAsync(data)
|
||||
};
|
||||
};
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import { useMutation, useQueryClient } from '@tanstack/react-query';
|
||||
|
||||
import { libraryApi } from '@/features/library/backend/api';
|
||||
import { ILibraryItem, LibraryItemID } from '@/features/library/models/library';
|
||||
import { libraryApi } from '@/features/library';
|
||||
import { ILibraryItem } from '@/features/library/models/library';
|
||||
import { rsformsApi } from '@/features/rsform/backend/api';
|
||||
|
||||
import { IOperationUpdateDTO, ossApi } from './api';
|
||||
|
@ -30,6 +30,6 @@ export const useOperationUpdate = () => {
|
|||
}
|
||||
});
|
||||
return {
|
||||
operationUpdate: (data: { itemID: LibraryItemID; data: IOperationUpdateDTO }) => mutation.mutateAsync(data)
|
||||
operationUpdate: (data: { itemID: number; data: IOperationUpdateDTO }) => mutation.mutateAsync(data)
|
||||
};
|
||||
};
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import { useMutation, useQueryClient } from '@tanstack/react-query';
|
||||
|
||||
import { libraryApi } from '@/features/library/backend/api';
|
||||
import { libraryApi } from '@/features/library';
|
||||
import { rsformsApi } from '@/features/rsform/backend/api';
|
||||
|
||||
import { ICstRelocateDTO, ossApi } from './api';
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
import { useMutation } from '@tanstack/react-query';
|
||||
|
||||
import { useUpdateTimestamp } from '@/features/library/backend/useUpdateTimestamp';
|
||||
import { LibraryItemID } from '@/features/library/models/library';
|
||||
import { useUpdateTimestamp } from '@/features/library';
|
||||
|
||||
import { IOperationPosition, ossApi } from './api';
|
||||
|
||||
|
@ -14,7 +13,7 @@ export const useUpdatePositions = () => {
|
|||
});
|
||||
return {
|
||||
updatePositions: (data: {
|
||||
itemID: LibraryItemID; //
|
||||
itemID: number; //
|
||||
positions: IOperationPosition[];
|
||||
isSilent?: boolean;
|
||||
}) => mutation.mutateAsync(data)
|
||||
|
|
|
@ -8,9 +8,7 @@ import { MiniButton } from '@/components/Control';
|
|||
import { IconReset } from '@/components/Icons';
|
||||
import { Label } from '@/components/Input';
|
||||
import { ModalForm } from '@/components/Modal';
|
||||
import { useLibrary } from '@/features/library/backend/useLibrary';
|
||||
import { ILibraryItem, LibraryItemType } from '@/features/library/models/library';
|
||||
import { PickSchema } from '@/features/rsform/components/PickSchema';
|
||||
import { ILibraryItem, LibraryItemType, PickSchema, useLibrary } from '@/features/library';
|
||||
import { useDialogsStore } from '@/stores/dialogs';
|
||||
|
||||
import { IInputUpdateDTO, IOperationPosition, schemaInputUpdate } from '../backend/api';
|
||||
|
|
|
@ -5,13 +5,11 @@ import { Controller, useFormContext, useWatch } from 'react-hook-form';
|
|||
import { MiniButton } from '@/components/Control';
|
||||
import { IconReset } from '@/components/Icons';
|
||||
import { Checkbox, Label, TextArea, TextInput } from '@/components/Input';
|
||||
import { useLibrary } from '@/features/library/backend/useLibrary';
|
||||
import { ILibraryItem, LibraryItemID, LibraryItemType } from '@/features/library/models/library';
|
||||
import { sortItemsForOSS } from '@/features/oss/models/ossAPI';
|
||||
import { PickSchema } from '@/features/rsform/components/PickSchema';
|
||||
import { ILibraryItem, LibraryItemType, PickSchema, useLibrary } from '@/features/library';
|
||||
import { useDialogsStore } from '@/stores/dialogs';
|
||||
|
||||
import { IOperationCreateDTO } from '../../backend/api';
|
||||
import { sortItemsForOSS } from '../../models/ossAPI';
|
||||
import { DlgCreateOperationProps } from './DlgCreateOperation';
|
||||
|
||||
function TabInputOperation() {
|
||||
|
@ -38,12 +36,12 @@ function TabInputOperation() {
|
|||
setValue('create_schema', value);
|
||||
}
|
||||
|
||||
function handleSetInput(value: LibraryItemID) {
|
||||
const schema = libraryItems.find(item => item.id === value);
|
||||
function handleSetInput(inputID: number) {
|
||||
const schema = libraryItems.find(item => item.id === inputID);
|
||||
if (!schema) {
|
||||
return;
|
||||
}
|
||||
setValue('item_data.result', value);
|
||||
setValue('item_data.result', inputID);
|
||||
setValue('create_schema', false);
|
||||
setValue('item_data.alias', schema.alias);
|
||||
setValue('item_data.title', schema.title);
|
||||
|
|
|
@ -3,7 +3,6 @@ import { Controller, useFormContext } from 'react-hook-form';
|
|||
|
||||
import { FlexColumn } from '@/components/Container';
|
||||
import { Label } from '@/components/Input';
|
||||
import { LibraryItemID } from '@/features/library/models/library';
|
||||
import { useDialogsStore } from '@/stores/dialogs';
|
||||
|
||||
import { IOperationUpdateDTO } from '../../backend/api';
|
||||
|
@ -16,7 +15,7 @@ function TabArguments() {
|
|||
const potentialCycle = [target.id, ...oss.graph.expandAllOutputs([target.id])];
|
||||
const filtered = oss.items.filter(item => !potentialCycle.includes(item.id));
|
||||
|
||||
function handleChangeArguments(prev: LibraryItemID[], newValue: LibraryItemID[]) {
|
||||
function handleChangeArguments(prev: number[], newValue: number[]) {
|
||||
setValue('arguments', newValue);
|
||||
if (prev.some(id => !newValue.includes(id))) {
|
||||
setValue('substitutions', []);
|
||||
|
|
|
@ -10,9 +10,7 @@ import { RelocateUpIcon } from '@/components/DomainIcons';
|
|||
import { Loader } from '@/components/Loader';
|
||||
import { ModalForm } from '@/components/Modal';
|
||||
import { HelpTopic } from '@/features/help';
|
||||
import { useLibrary } from '@/features/library/backend/useLibrary';
|
||||
import SelectLibraryItem from '@/features/library/components/SelectLibraryItem';
|
||||
import { ILibraryItem, LibraryItemID } from '@/features/library/models/library';
|
||||
import { ILibraryItem, SelectLibraryItem, useLibrary } from '@/features/library';
|
||||
import { useRSForm } from '@/features/rsform/backend/useRSForm';
|
||||
import PickMultiConstituenta from '@/features/rsform/components/PickMultiConstituenta';
|
||||
import { useDialogsStore } from '@/stores/dialogs';
|
||||
|
@ -63,10 +61,10 @@ function DlgRelocateConstituents() {
|
|||
return [];
|
||||
}
|
||||
const node = oss.graph.at(operation.id)!;
|
||||
const ids: LibraryItemID[] = directionUp
|
||||
const schemaIds: number[] = directionUp
|
||||
? node.inputs.map(id => oss.operationByID.get(id)!.result).filter(id => id !== null)
|
||||
: node.outputs.map(id => oss.operationByID.get(id)!.result).filter(id => id !== null);
|
||||
return ids.map(id => libraryItems.find(item => item.id === id)).filter(item => item !== undefined);
|
||||
return schemaIds.map(id => libraryItems.find(item => item.id === id)).filter(item => item !== undefined);
|
||||
})();
|
||||
|
||||
const sourceData = useRSForm({ itemID: source?.id });
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/**
|
||||
* Module: Schema of Synthesis Operations.
|
||||
*/
|
||||
import { ILibraryItem, ILibraryItemData, LibraryItemID } from '@/features/library/models/library';
|
||||
import { ILibraryItem, ILibraryItemData } from '@/features/library/models/library';
|
||||
import { ICstSubstitute } from '@/features/rsform/backend/api';
|
||||
import { IConstituenta } from '@/features/rsform/models/rsform';
|
||||
|
||||
|
@ -26,7 +26,7 @@ export enum OperationType {
|
|||
export interface IOperation {
|
||||
id: OperationID;
|
||||
operation_type: OperationType;
|
||||
oss: LibraryItemID;
|
||||
oss: number;
|
||||
|
||||
alias: string;
|
||||
title: string;
|
||||
|
@ -35,7 +35,7 @@ export interface IOperation {
|
|||
position_x: number;
|
||||
position_y: number;
|
||||
|
||||
result: LibraryItemID | null;
|
||||
result: number | null;
|
||||
|
||||
is_owned: boolean;
|
||||
is_consolidation: boolean; // aka 'diamond synthesis'
|
||||
|
@ -93,7 +93,7 @@ export interface IOperationSchema extends ILibraryItemData {
|
|||
substitutions: ICstSubstituteEx[];
|
||||
|
||||
graph: Graph;
|
||||
schemas: LibraryItemID[];
|
||||
schemas: number[];
|
||||
stats: IOperationSchemaStats;
|
||||
operationByID: Map<OperationID, IOperation>;
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* Module: API for OperationSystem.
|
||||
*/
|
||||
|
||||
import { ILibraryItem, LibraryItemID } from '@/features/library/models/library';
|
||||
import { ILibraryItem } from '@/features/library/models/library';
|
||||
import { ICstSubstitute } from '@/features/rsform/backend/api';
|
||||
import { ConstituentaID, CstClass, CstType, IConstituenta, IRSForm } from '@/features/rsform/models/rsform';
|
||||
import { AliasMapping, ParsingStatus } from '@/features/rsform/models/rslang';
|
||||
|
@ -56,7 +56,7 @@ export function sortItemsForOSS(oss: IOperationSchema, items: ILibraryItem[]): I
|
|||
return result;
|
||||
}
|
||||
|
||||
type CrossMapping = Map<LibraryItemID, AliasMapping>;
|
||||
type CrossMapping = Map<number, AliasMapping>;
|
||||
|
||||
/**
|
||||
* Validator for Substitution table.
|
||||
|
@ -72,7 +72,7 @@ export class SubstitutionValidator {
|
|||
private mapping: CrossMapping = new Map();
|
||||
|
||||
private cstByID = new Map<ConstituentaID, IConstituenta>();
|
||||
private schemaByID = new Map<LibraryItemID, IRSForm>();
|
||||
private schemaByID = new Map<number, IRSForm>();
|
||||
private schemaByCst = new Map<ConstituentaID, IRSForm>();
|
||||
|
||||
constructor(schemas: IRSForm[], substitutions: ICstSubstitute[]) {
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
import clsx from 'clsx';
|
||||
|
||||
import { FlexColumn } from '@/components/Container';
|
||||
import { EditorLibraryItem } from '@/features/library/components/EditorLibraryItem';
|
||||
import { EditorLibraryItem } from '@/features/library';
|
||||
import ToolbarRSFormCard from '@/features/rsform/pages/RSFormPage/EditorRSFormCard/ToolbarRSFormCard';
|
||||
import { useModificationStore } from '@/stores/modification';
|
||||
import { globals } from '@/utils/constants';
|
||||
|
|
|
@ -9,10 +9,8 @@ import { useForm, useWatch } from 'react-hook-form';
|
|||
import { SubmitButton } from '@/components/Control';
|
||||
import { IconSave } from '@/components/Icons';
|
||||
import { TextArea, TextInput } from '@/components/Input';
|
||||
import { LibraryItemType, ToolbarItemAccess, useUpdateItem } from '@/features/library';
|
||||
import { IUpdateLibraryItemDTO, schemaUpdateLibraryItem } from '@/features/library/backend/api';
|
||||
import { useUpdateItem } from '@/features/library/backend/useUpdateItem';
|
||||
import { LibraryItemType } from '@/features/library/models/library';
|
||||
import ToolbarItemAccess from '@/features/rsform/pages/RSFormPage/EditorRSFormCard/ToolbarItemAccess';
|
||||
import { useModificationStore } from '@/stores/modification';
|
||||
import { globals } from '@/utils/constants';
|
||||
|
||||
|
|
|
@ -19,7 +19,7 @@ import {
|
|||
import { urls, useConceptNavigation } from '@/app';
|
||||
import { Overlay } from '@/components/Container';
|
||||
import { CProps } from '@/components/props';
|
||||
import { useLibrary } from '@/features/library/backend/useLibrary';
|
||||
import { useLibrary } from '@/features/library';
|
||||
import { useMainHeight } from '@/stores/appLayout';
|
||||
import { useModificationStore } from '@/stores/modification';
|
||||
import { APP_COLORS } from '@/styling/colors';
|
||||
|
|
|
@ -20,8 +20,7 @@ import {
|
|||
} from '@/components/Icons';
|
||||
import { useAuthSuspense } from '@/features/auth';
|
||||
import { useMutatingOss } from '@/features/oss/backend/useMutatingOss';
|
||||
import { useRoleStore } from '@/features/users';
|
||||
import { UserRole } from '@/features/users/models/user';
|
||||
import { useRoleStore, UserRole } from '@/features/users';
|
||||
import { describeAccessMode as describeUserRole, labelAccessMode as labelUserRole } from '@/utils/labels';
|
||||
import { sharePage } from '@/utils/utils';
|
||||
|
||||
|
|
|
@ -4,12 +4,9 @@ import { createContext, useContext, useEffect, useState } from 'react';
|
|||
|
||||
import { urls, useConceptNavigation } from '@/app';
|
||||
import { useAuthSuspense } from '@/features/auth';
|
||||
import { useDeleteItem } from '@/features/library/backend/useDeleteItem';
|
||||
import { ILibraryItemEditor, LibraryItemID } from '@/features/library/models/library';
|
||||
import { useLibrarySearchStore } from '@/features/library/stores/librarySearch';
|
||||
import { ILibraryItemEditor, useDeleteItem, useLibrarySearchStore } from '@/features/library';
|
||||
import { RSTabID } from '@/features/rsform/pages/RSFormPage/RSEditContext';
|
||||
import { useRoleStore } from '@/features/users';
|
||||
import { UserRole } from '@/features/users/models/user';
|
||||
import { useRoleStore, UserRole } from '@/features/users';
|
||||
import { useDialogsStore } from '@/stores/dialogs';
|
||||
import { usePreferencesStore } from '@/stores/preferences';
|
||||
import { promptText } from '@/utils/labels';
|
||||
|
@ -66,7 +63,7 @@ export const useOssEdit = () => {
|
|||
};
|
||||
|
||||
interface OssEditStateProps {
|
||||
itemID: LibraryItemID;
|
||||
itemID: number;
|
||||
}
|
||||
|
||||
export const OssEditState = ({ itemID, children }: React.PropsWithChildren<OssEditStateProps>) => {
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
* Module: RSForm data loading and processing.
|
||||
*/
|
||||
|
||||
import { LibraryItemID } from '@/features/library/models/library';
|
||||
import { Graph } from '@/models/Graph';
|
||||
|
||||
import { ConstituentaID, CstType, IConstituenta, IRSForm, IRSFormStats } from '../models/rsform';
|
||||
|
@ -62,8 +61,8 @@ export class RSFormLoader {
|
|||
}
|
||||
|
||||
private inferCstAttributes() {
|
||||
const schemaByCst = new Map<ConstituentaID, LibraryItemID>();
|
||||
const parents: LibraryItemID[] = [];
|
||||
const schemaByCst = new Map<ConstituentaID, number>();
|
||||
const parents: number[] = [];
|
||||
this.schema.inheritance.forEach(item => {
|
||||
if (item.child_source === this.schema.id) {
|
||||
schemaByCst.set(item.child, item.parent_source);
|
||||
|
|
|
@ -3,12 +3,7 @@ import { z } from 'zod';
|
|||
|
||||
import { axiosGet, axiosPatch, axiosPost } from '@/backend/apiTransport';
|
||||
import { DELAYS } from '@/backend/configuration';
|
||||
import {
|
||||
ILibraryItemReference,
|
||||
ILibraryItemVersioned,
|
||||
LibraryItemID,
|
||||
VersionID
|
||||
} from '@/features/library/models/library';
|
||||
import { ILibraryItemReference, ILibraryItemVersioned } from '@/features/library/models/library';
|
||||
import { errorMsg, infoMsg } from '@/utils/labels';
|
||||
|
||||
import {
|
||||
|
@ -48,7 +43,7 @@ export interface IRSFormDTO extends ILibraryItemVersioned {
|
|||
* Represents data, used for uploading {@link IRSForm} as file.
|
||||
*/
|
||||
export interface IRSFormUploadDTO {
|
||||
itemID: LibraryItemID;
|
||||
itemID: number;
|
||||
load_metadata: boolean;
|
||||
file: File;
|
||||
fileName: string;
|
||||
|
@ -178,7 +173,7 @@ export type ICstSubstitutionsDTO = z.infer<typeof schemaCstSubstitutions>;
|
|||
export const rsformsApi = {
|
||||
baseKey: 'rsform',
|
||||
|
||||
getRSFormQueryOptions: ({ itemID, version }: { itemID?: LibraryItemID; version?: VersionID }) => {
|
||||
getRSFormQueryOptions: ({ itemID, version }: { itemID?: number; version?: number }) => {
|
||||
return queryOptions({
|
||||
queryKey: [rsformsApi.baseKey, 'item', itemID, version ?? ''],
|
||||
staleTime: DELAYS.staleShort,
|
||||
|
@ -192,7 +187,7 @@ export const rsformsApi = {
|
|||
});
|
||||
},
|
||||
|
||||
download: ({ itemID, version }: { itemID: LibraryItemID; version?: VersionID }) =>
|
||||
download: ({ itemID, version }: { itemID: number; version?: number }) =>
|
||||
axiosGet<Blob>({
|
||||
endpoint: version ? `/api/versions/${version}/export-file` : `/api/rsforms/${itemID}/export-trs`,
|
||||
options: { responseType: 'blob' }
|
||||
|
@ -211,7 +206,7 @@ export const rsformsApi = {
|
|||
}
|
||||
}),
|
||||
|
||||
cstCreate: ({ itemID, data }: { itemID: LibraryItemID; data: ICstCreateDTO }) =>
|
||||
cstCreate: ({ itemID, data }: { itemID: number; data: ICstCreateDTO }) =>
|
||||
axiosPost<ICstCreateDTO, ICstCreatedResponse>({
|
||||
endpoint: `/api/rsforms/${itemID}/create-cst`,
|
||||
request: {
|
||||
|
@ -219,7 +214,7 @@ export const rsformsApi = {
|
|||
successMessage: response => infoMsg.newConstituent(response.new_cst.alias)
|
||||
}
|
||||
}),
|
||||
cstUpdate: ({ itemID, data }: { itemID: LibraryItemID; data: ICstUpdateDTO }) =>
|
||||
cstUpdate: ({ itemID, data }: { itemID: number; data: ICstUpdateDTO }) =>
|
||||
axiosPatch<ICstUpdateDTO, IConstituentaMeta>({
|
||||
endpoint: `/api/rsforms/${itemID}/update-cst`,
|
||||
request: {
|
||||
|
@ -227,7 +222,7 @@ export const rsformsApi = {
|
|||
successMessage: infoMsg.changesSaved
|
||||
}
|
||||
}),
|
||||
cstDelete: ({ itemID, data }: { itemID: LibraryItemID; data: IConstituentaList }) =>
|
||||
cstDelete: ({ itemID, data }: { itemID: number; data: IConstituentaList }) =>
|
||||
axiosPatch<IConstituentaList, IRSFormDTO>({
|
||||
endpoint: `/api/rsforms/${itemID}/delete-multiple-cst`,
|
||||
request: {
|
||||
|
@ -235,7 +230,7 @@ export const rsformsApi = {
|
|||
successMessage: infoMsg.constituentsDestroyed(data.items.length)
|
||||
}
|
||||
}),
|
||||
cstRename: ({ itemID, data }: { itemID: LibraryItemID; data: ICstRenameDTO }) =>
|
||||
cstRename: ({ itemID, data }: { itemID: number; data: ICstRenameDTO }) =>
|
||||
axiosPatch<ICstRenameDTO, ICstCreatedResponse>({
|
||||
endpoint: `/api/rsforms/${itemID}/rename-cst`,
|
||||
request: {
|
||||
|
@ -243,7 +238,7 @@ export const rsformsApi = {
|
|||
successMessage: infoMsg.changesSaved
|
||||
}
|
||||
}),
|
||||
cstSubstitute: ({ itemID, data }: { itemID: LibraryItemID; data: ICstSubstitutionsDTO }) =>
|
||||
cstSubstitute: ({ itemID, data }: { itemID: number; data: ICstSubstitutionsDTO }) =>
|
||||
axiosPatch<ICstSubstitutionsDTO, IRSFormDTO>({
|
||||
endpoint: `/api/rsforms/${itemID}/substitute`,
|
||||
request: {
|
||||
|
@ -251,13 +246,13 @@ export const rsformsApi = {
|
|||
successMessage: infoMsg.substituteSingle
|
||||
}
|
||||
}),
|
||||
cstMove: ({ itemID, data }: { itemID: LibraryItemID; data: ICstMoveDTO }) =>
|
||||
cstMove: ({ itemID, data }: { itemID: number; data: ICstMoveDTO }) =>
|
||||
axiosPatch<ICstMoveDTO, IRSFormDTO>({
|
||||
endpoint: `/api/rsforms/${itemID}/move-cst`,
|
||||
request: { data: data }
|
||||
}),
|
||||
|
||||
produceStructure: ({ itemID, data }: { itemID: LibraryItemID; data: ITargetCst }) =>
|
||||
produceStructure: ({ itemID, data }: { itemID: number; data: ITargetCst }) =>
|
||||
axiosPatch<ITargetCst, IProduceStructureResponse>({
|
||||
endpoint: `/api/rsforms/${itemID}/produce-structure`,
|
||||
request: {
|
||||
|
@ -273,18 +268,18 @@ export const rsformsApi = {
|
|||
successMessage: infoMsg.inlineSynthesisComplete
|
||||
}
|
||||
}),
|
||||
restoreOrder: ({ itemID }: { itemID: LibraryItemID }) =>
|
||||
restoreOrder: ({ itemID }: { itemID: number }) =>
|
||||
axiosPatch<undefined, IRSFormDTO>({
|
||||
endpoint: `/api/rsforms/${itemID}/restore-order`,
|
||||
request: { successMessage: infoMsg.reorderComplete }
|
||||
}),
|
||||
resetAliases: ({ itemID }: { itemID: LibraryItemID }) =>
|
||||
resetAliases: ({ itemID }: { itemID: number }) =>
|
||||
axiosPatch<undefined, IRSFormDTO>({
|
||||
endpoint: `/api/rsforms/${itemID}/reset-aliases`,
|
||||
request: { successMessage: infoMsg.reindexComplete }
|
||||
}),
|
||||
|
||||
checkConstituenta: ({ itemID, data }: { itemID: LibraryItemID; data: ICheckConstituentaDTO }) =>
|
||||
checkConstituenta: ({ itemID, data }: { itemID: number; data: ICheckConstituentaDTO }) =>
|
||||
axiosPost<ICheckConstituentaDTO, IExpressionParse>({
|
||||
endpoint: `/api/rsforms/${itemID}/check-constituenta`,
|
||||
request: { data: data }
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
import { useMutation } from '@tanstack/react-query';
|
||||
|
||||
import { LibraryItemID } from '@/features/library/models/library';
|
||||
|
||||
import { ICheckConstituentaDTO, rsformsApi } from './api';
|
||||
|
||||
export const useCheckConstituenta = () => {
|
||||
|
@ -10,7 +8,7 @@ export const useCheckConstituenta = () => {
|
|||
mutationFn: rsformsApi.checkConstituenta
|
||||
});
|
||||
return {
|
||||
checkConstituenta: (data: { itemID: LibraryItemID; data: ICheckConstituentaDTO }) => mutation.mutateAsync(data),
|
||||
checkConstituenta: (data: { itemID: number; data: ICheckConstituentaDTO }) => mutation.mutateAsync(data),
|
||||
isPending: mutation.isPending,
|
||||
error: mutation.error
|
||||
};
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
import { useMutation, useQueryClient } from '@tanstack/react-query';
|
||||
|
||||
import { useUpdateTimestamp } from '@/features/library/backend/useUpdateTimestamp';
|
||||
import { LibraryItemID } from '@/features/library/models/library';
|
||||
import { useUpdateTimestamp } from '@/features/library';
|
||||
import { ossApi } from '@/features/oss/backend/api';
|
||||
|
||||
import { ICstCreateDTO, rsformsApi } from './api';
|
||||
|
@ -26,7 +25,7 @@ export const useCstCreate = () => {
|
|||
}
|
||||
});
|
||||
return {
|
||||
cstCreate: (data: { itemID: LibraryItemID; data: ICstCreateDTO }) =>
|
||||
cstCreate: (data: { itemID: number; data: ICstCreateDTO }) =>
|
||||
mutation.mutateAsync(data).then(response => response.new_cst)
|
||||
};
|
||||
};
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
import { useMutation, useQueryClient } from '@tanstack/react-query';
|
||||
|
||||
import { useUpdateTimestamp } from '@/features/library/backend/useUpdateTimestamp';
|
||||
import { LibraryItemID } from '@/features/library/models/library';
|
||||
import { useUpdateTimestamp } from '@/features/library';
|
||||
import { ossApi } from '@/features/oss/backend/api';
|
||||
|
||||
import { IConstituentaList } from '../models/rsform';
|
||||
|
@ -27,6 +26,6 @@ export const useCstDelete = () => {
|
|||
}
|
||||
});
|
||||
return {
|
||||
cstDelete: (data: { itemID: LibraryItemID; data: IConstituentaList }) => mutation.mutateAsync(data)
|
||||
cstDelete: (data: { itemID: number; data: IConstituentaList }) => mutation.mutateAsync(data)
|
||||
};
|
||||
};
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
import { useMutation, useQueryClient } from '@tanstack/react-query';
|
||||
|
||||
import { useUpdateTimestamp } from '@/features/library/backend/useUpdateTimestamp';
|
||||
import { LibraryItemID } from '@/features/library/models/library';
|
||||
import { useUpdateTimestamp } from '@/features/library';
|
||||
|
||||
import { ICstMoveDTO, rsformsApi } from './api';
|
||||
|
||||
|
@ -17,6 +16,6 @@ export const useCstMove = () => {
|
|||
}
|
||||
});
|
||||
return {
|
||||
cstMove: (data: { itemID: LibraryItemID; data: ICstMoveDTO }) => mutation.mutateAsync(data)
|
||||
cstMove: (data: { itemID: number; data: ICstMoveDTO }) => mutation.mutateAsync(data)
|
||||
};
|
||||
};
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
import { useMutation, useQueryClient } from '@tanstack/react-query';
|
||||
|
||||
import { useUpdateTimestamp } from '@/features/library/backend/useUpdateTimestamp';
|
||||
import { LibraryItemID } from '@/features/library/models/library';
|
||||
import { useUpdateTimestamp } from '@/features/library';
|
||||
import { ossApi } from '@/features/oss/backend/api';
|
||||
|
||||
import { ICstRenameDTO, rsformsApi } from './api';
|
||||
|
@ -26,6 +25,6 @@ export const useCstRename = () => {
|
|||
}
|
||||
});
|
||||
return {
|
||||
cstRename: (data: { itemID: LibraryItemID; data: ICstRenameDTO }) => mutation.mutateAsync(data)
|
||||
cstRename: (data: { itemID: number; data: ICstRenameDTO }) => mutation.mutateAsync(data)
|
||||
};
|
||||
};
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
import { useMutation, useQueryClient } from '@tanstack/react-query';
|
||||
|
||||
import { useUpdateTimestamp } from '@/features/library/backend/useUpdateTimestamp';
|
||||
import { LibraryItemID } from '@/features/library/models/library';
|
||||
import { useUpdateTimestamp } from '@/features/library';
|
||||
import { ossApi } from '@/features/oss/backend/api';
|
||||
|
||||
import { ICstSubstitutionsDTO, rsformsApi } from './api';
|
||||
|
@ -26,6 +25,6 @@ export const useCstSubstitute = () => {
|
|||
}
|
||||
});
|
||||
return {
|
||||
cstSubstitute: (data: { itemID: LibraryItemID; data: ICstSubstitutionsDTO }) => mutation.mutateAsync(data)
|
||||
cstSubstitute: (data: { itemID: number; data: ICstSubstitutionsDTO }) => mutation.mutateAsync(data)
|
||||
};
|
||||
};
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
import { useMutation, useQueryClient } from '@tanstack/react-query';
|
||||
|
||||
import { useUpdateTimestamp } from '@/features/library/backend/useUpdateTimestamp';
|
||||
import { LibraryItemID } from '@/features/library/models/library';
|
||||
import { useUpdateTimestamp } from '@/features/library';
|
||||
import { ossApi } from '@/features/oss/backend/api';
|
||||
|
||||
import { ICstUpdateDTO, rsformsApi } from './api';
|
||||
|
@ -22,6 +21,6 @@ export const useCstUpdate = () => {
|
|||
}
|
||||
});
|
||||
return {
|
||||
cstUpdate: (data: { itemID: LibraryItemID; data: ICstUpdateDTO }) => mutation.mutateAsync(data)
|
||||
cstUpdate: (data: { itemID: number; data: ICstUpdateDTO }) => mutation.mutateAsync(data)
|
||||
};
|
||||
};
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
import { useMutation } from '@tanstack/react-query';
|
||||
|
||||
import { LibraryItemID, VersionID } from '@/features/library/models/library';
|
||||
|
||||
import { rsformsApi } from './api';
|
||||
|
||||
export const useDownloadRSForm = () => {
|
||||
|
@ -10,6 +8,6 @@ export const useDownloadRSForm = () => {
|
|||
mutationFn: rsformsApi.download
|
||||
});
|
||||
return {
|
||||
download: (data: { itemID: LibraryItemID; version?: VersionID }) => mutation.mutateAsync(data)
|
||||
download: (data: { itemID: number; version?: number }) => mutation.mutateAsync(data)
|
||||
};
|
||||
};
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import { useMutation, useQueryClient } from '@tanstack/react-query';
|
||||
|
||||
import { useUpdateTimestamp } from '@/features/library/backend/useUpdateTimestamp';
|
||||
import { useUpdateTimestamp } from '@/features/library';
|
||||
import { ossApi } from '@/features/oss/backend/api';
|
||||
|
||||
import { IInlineSynthesisDTO, rsformsApi } from './api';
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import { useIsMutating } from '@tanstack/react-query';
|
||||
|
||||
import { libraryApi } from '@/features/library/backend/api';
|
||||
import { libraryApi } from '@/features/library';
|
||||
|
||||
import { rsformsApi } from './api';
|
||||
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
import { useMutation, useQueryClient } from '@tanstack/react-query';
|
||||
|
||||
import { useUpdateTimestamp } from '@/features/library/backend/useUpdateTimestamp';
|
||||
import { LibraryItemID } from '@/features/library/models/library';
|
||||
import { useUpdateTimestamp } from '@/features/library';
|
||||
import { ossApi } from '@/features/oss/backend/api';
|
||||
|
||||
import { ITargetCst } from '../models/rsform';
|
||||
|
@ -27,7 +26,7 @@ export const useProduceStructure = () => {
|
|||
}
|
||||
});
|
||||
return {
|
||||
produceStructure: (data: { itemID: LibraryItemID; data: ITargetCst }) =>
|
||||
produceStructure: (data: { itemID: number; data: ITargetCst }) =>
|
||||
mutation.mutateAsync(data).then(response => response.cst_list)
|
||||
};
|
||||
};
|
||||
|
|
|
@ -1,12 +1,10 @@
|
|||
import { useQuery, useSuspenseQuery } from '@tanstack/react-query';
|
||||
|
||||
import { LibraryItemID, VersionID } from '@/features/library/models/library';
|
||||
|
||||
import { queryClient } from '../../../backend/queryClient';
|
||||
import { rsformsApi } from './api';
|
||||
import { RSFormLoader } from './RSFormLoader';
|
||||
|
||||
export function useRSForm({ itemID, version }: { itemID?: LibraryItemID; version?: VersionID }) {
|
||||
export function useRSForm({ itemID, version }: { itemID?: number; version?: number }) {
|
||||
const { data, isLoading, error } = useQuery({
|
||||
...rsformsApi.getRSFormQueryOptions({ itemID, version })
|
||||
});
|
||||
|
@ -15,7 +13,7 @@ export function useRSForm({ itemID, version }: { itemID?: LibraryItemID; version
|
|||
return { schema, isLoading, error };
|
||||
}
|
||||
|
||||
export function useRSFormSuspense({ itemID, version }: { itemID: LibraryItemID; version?: VersionID }) {
|
||||
export function useRSFormSuspense({ itemID, version }: { itemID: number; version?: number }) {
|
||||
const { data } = useSuspenseQuery({
|
||||
...rsformsApi.getRSFormQueryOptions({ itemID, version })
|
||||
});
|
||||
|
@ -23,7 +21,7 @@ export function useRSFormSuspense({ itemID, version }: { itemID: LibraryItemID;
|
|||
return { schema };
|
||||
}
|
||||
|
||||
export function prefetchRSForm({ itemID, version }: { itemID?: LibraryItemID; version?: VersionID }) {
|
||||
export function prefetchRSForm({ itemID, version }: { itemID?: number; version?: number }) {
|
||||
if (!itemID) {
|
||||
return null;
|
||||
}
|
||||
|
|
|
@ -1,12 +1,10 @@
|
|||
import { useSuspenseQueries } from '@tanstack/react-query';
|
||||
|
||||
import { LibraryItemID } from '@/features/library/models/library';
|
||||
|
||||
import { DELAYS } from '../../../backend/configuration';
|
||||
import { rsformsApi } from './api';
|
||||
import { RSFormLoader } from './RSFormLoader';
|
||||
|
||||
export function useRSForms(itemIDs: LibraryItemID[]) {
|
||||
export function useRSForms(itemIDs: number[]) {
|
||||
const results = useSuspenseQueries({
|
||||
queries: itemIDs.map(itemID => ({
|
||||
...rsformsApi.getRSFormQueryOptions({ itemID }),
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
import { useMutation, useQueryClient } from '@tanstack/react-query';
|
||||
|
||||
import { useUpdateTimestamp } from '@/features/library/backend/useUpdateTimestamp';
|
||||
import { LibraryItemID } from '@/features/library/models/library';
|
||||
import { useUpdateTimestamp } from '@/features/library';
|
||||
import { ossApi } from '@/features/oss/backend/api';
|
||||
|
||||
import { rsformsApi } from './api';
|
||||
|
@ -26,6 +25,6 @@ export const useResetAliases = () => {
|
|||
}
|
||||
});
|
||||
return {
|
||||
resetAliases: (data: { itemID: LibraryItemID }) => mutation.mutateAsync(data)
|
||||
resetAliases: (data: { itemID: number }) => mutation.mutateAsync(data)
|
||||
};
|
||||
};
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
import { useMutation, useQueryClient } from '@tanstack/react-query';
|
||||
|
||||
import { useUpdateTimestamp } from '@/features/library/backend/useUpdateTimestamp';
|
||||
import { LibraryItemID } from '@/features/library/models/library';
|
||||
import { useUpdateTimestamp } from '@/features/library';
|
||||
|
||||
import { rsformsApi } from './api';
|
||||
|
||||
|
@ -17,6 +16,6 @@ export const useRestoreOrder = () => {
|
|||
}
|
||||
});
|
||||
return {
|
||||
restoreOrder: (data: { itemID: LibraryItemID }) => mutation.mutateAsync(data)
|
||||
restoreOrder: (data: { itemID: number }) => mutation.mutateAsync(data)
|
||||
};
|
||||
};
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import { useMutation, useQueryClient } from '@tanstack/react-query';
|
||||
|
||||
import { libraryApi } from '@/features/library/backend/api';
|
||||
import { libraryApi } from '@/features/library';
|
||||
import { ILibraryItem } from '@/features/library/models/library';
|
||||
import { ossApi } from '@/features/oss/backend/api';
|
||||
|
||||
|
|
|
@ -9,8 +9,7 @@ import DataTable, { createColumnHelper, IConditionalStyle } from '@/components/D
|
|||
import { IconAccept, IconPageLeft, IconPageRight, IconRemove, IconReplace } from '@/components/Icons';
|
||||
import { CProps } from '@/components/props';
|
||||
import { NoData } from '@/components/View';
|
||||
import SelectLibraryItem from '@/features/library/components/SelectLibraryItem';
|
||||
import { ILibraryItem } from '@/features/library/models/library';
|
||||
import { ILibraryItem, SelectLibraryItem } from '@/features/library';
|
||||
import { IMultiSubstitution } from '@/features/oss/models/oss';
|
||||
import { APP_COLORS } from '@/styling/colors';
|
||||
import { errorMsg } from '@/utils/labels';
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
import { Dispatch, useEffect, useState } from 'react';
|
||||
|
||||
import { SelectSingle, TextArea } from '@/components/Input';
|
||||
import { useTemplatesSuspense } from '@/features/library/backend/useTemplates';
|
||||
import { useTemplatesSuspense } from '@/features/library';
|
||||
import PickConstituenta from '@/features/rsform/components/PickConstituenta';
|
||||
|
||||
import RSInput from '../../components/RSInput';
|
||||
|
|
|
@ -3,12 +3,10 @@
|
|||
import { useFormContext, useWatch } from 'react-hook-form';
|
||||
|
||||
import { TextInput } from '@/components/Input';
|
||||
import { useLibrary } from '@/features/library/backend/useLibrary';
|
||||
import { LibraryItemID, LibraryItemType } from '@/features/library/models/library';
|
||||
import { LibraryItemType, PickSchema, useLibrary } from '@/features/library';
|
||||
import { useDialogsStore } from '@/stores/dialogs';
|
||||
|
||||
import { IInlineSynthesisDTO } from '../../backend/api';
|
||||
import { PickSchema } from '../../components/PickSchema';
|
||||
import { sortItemsForInlineSynthesis } from '../../models/rsformAPI';
|
||||
import { DlgInlineSynthesisProps } from './DlgInlineSynthesis';
|
||||
|
||||
|
@ -21,7 +19,7 @@ function TabSource() {
|
|||
const selectedInfo = libraryItems.find(item => item.id === sourceID);
|
||||
const sortedItems = sortItemsForInlineSynthesis(receiver, libraryItems);
|
||||
|
||||
function handleSelectSource(newValue: LibraryItemID) {
|
||||
function handleSelectSource(newValue: number) {
|
||||
if (newValue === sourceID) {
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -4,13 +4,12 @@ import { useState } from 'react';
|
|||
|
||||
import { Checkbox, FileInput } from '@/components/Input';
|
||||
import { ModalForm } from '@/components/Modal';
|
||||
import { LibraryItemID } from '@/features/library/models/library';
|
||||
import { useUploadTRS } from '@/features/rsform/backend/useUploadTRS';
|
||||
import { useDialogsStore } from '@/stores/dialogs';
|
||||
import { EXTEOR_TRS_FILE } from '@/utils/constants';
|
||||
|
||||
export interface DlgUploadRSFormProps {
|
||||
itemID: LibraryItemID;
|
||||
itemID: number;
|
||||
}
|
||||
|
||||
function DlgUploadRSForm() {
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* Module: Models for formal representation for systems of concepts.
|
||||
*/
|
||||
|
||||
import { ILibraryItemReference, ILibraryItemVersioned, LibraryItemID } from '@/features/library/models/library';
|
||||
import { ILibraryItemReference, ILibraryItemVersioned } from '@/features/library/models/library';
|
||||
import { Graph } from '@/models/Graph';
|
||||
|
||||
import { IArgumentInfo, ParsingStatus, ValueClass } from './rslang';
|
||||
|
@ -94,8 +94,8 @@ export interface IConstituenta extends IConstituentaMeta {
|
|||
args: IArgumentInfo[];
|
||||
};
|
||||
|
||||
/** {@link LibraryItemID} of this {@link IConstituenta}. */
|
||||
schema: LibraryItemID;
|
||||
/** Identifier of {@link LibraryItem} containing this {@link IConstituenta}. */
|
||||
schema: number;
|
||||
|
||||
/** {@link CstClass} of this {@link IConstituenta}. */
|
||||
cst_class: CstClass;
|
||||
|
@ -111,8 +111,8 @@ export interface IConstituenta extends IConstituentaMeta {
|
|||
* 0 - not inherited, 1 - inherited by 1st schema, 2 - inherited by 2nd schema, etc.
|
||||
*/
|
||||
parent_schema_index: number;
|
||||
/** {@link LibraryItemID} that contains parent of this inherited {@link IConstituenta}. */
|
||||
parent_schema?: LibraryItemID;
|
||||
/** {@link LibraryItem} that contains parent of this inherited {@link IConstituenta}. */
|
||||
parent_schema?: number;
|
||||
/** Indicates if this {@link IConstituenta} is inherited. */
|
||||
is_inherited: boolean;
|
||||
/** Indicates if this {@link IConstituenta} has children that are inherited. */
|
||||
|
@ -169,9 +169,9 @@ export interface IRSFormStats {
|
|||
*/
|
||||
export interface IInheritanceInfo {
|
||||
child: ConstituentaID;
|
||||
child_source: LibraryItemID;
|
||||
child_source: number;
|
||||
parent: ConstituentaID;
|
||||
parent_source: LibraryItemID;
|
||||
parent_source: number;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -18,6 +18,7 @@ import {
|
|||
IconSave
|
||||
} from '@/components/Icons';
|
||||
import { BadgeHelp, HelpTopic } from '@/features/help';
|
||||
import { MiniSelectorOSS } from '@/features/library';
|
||||
import { useFindPredecessor } from '@/features/oss/backend/useFindPredecessor';
|
||||
import { useModificationStore } from '@/stores/modification';
|
||||
import { usePreferencesStore } from '@/stores/preferences';
|
||||
|
@ -26,7 +27,6 @@ import { tooltipText } from '@/utils/labels';
|
|||
import { prepareTooltip } from '@/utils/utils';
|
||||
|
||||
import { useMutatingRSForm } from '../../../backend/useMutatingRSForm';
|
||||
import MiniSelectorOSS from '../../../components/MiniSelectorOSS';
|
||||
import { ConstituentaID, IConstituenta } from '../../../models/rsform';
|
||||
import { RSTabID, useRSEdit } from '../RSEditContext';
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
import clsx from 'clsx';
|
||||
|
||||
import { FlexColumn } from '@/components/Container';
|
||||
import { EditorLibraryItem } from '@/features/library/components/EditorLibraryItem';
|
||||
import { EditorLibraryItem } from '@/features/library';
|
||||
import { useModificationStore } from '@/stores/modification';
|
||||
import { globals } from '@/utils/constants';
|
||||
|
||||
|
|
|
@ -10,16 +10,13 @@ import { urls, useConceptNavigation } from '@/app';
|
|||
import { SubmitButton } from '@/components/Control';
|
||||
import { IconSave } from '@/components/Icons';
|
||||
import { Label, TextArea, TextInput } from '@/components/Input';
|
||||
import { LibraryItemType, SelectVersion, ToolbarItemAccess, useUpdateItem } from '@/features/library';
|
||||
import { IUpdateLibraryItemDTO, schemaUpdateLibraryItem } from '@/features/library/backend/api';
|
||||
import { useUpdateItem } from '@/features/library/backend/useUpdateItem';
|
||||
import { LibraryItemType, VersionID } from '@/features/library/models/library';
|
||||
import { useModificationStore } from '@/stores/modification';
|
||||
import { globals } from '@/utils/constants';
|
||||
|
||||
import { useMutatingRSForm } from '../../../backend/useMutatingRSForm';
|
||||
import SelectVersion from '../../../components/SelectVersion';
|
||||
import { useRSEdit } from '../RSEditContext';
|
||||
import ToolbarItemAccess from './ToolbarItemAccess';
|
||||
import ToolbarVersioning from './ToolbarVersioning';
|
||||
|
||||
function FormRSForm() {
|
||||
|
@ -55,7 +52,7 @@ function FormRSForm() {
|
|||
setIsModified(isDirty);
|
||||
}, [isDirty, setIsModified]);
|
||||
|
||||
function handleSelectVersion(version?: VersionID) {
|
||||
function handleSelectVersion(version?: number) {
|
||||
router.push(urls.schema(controller.schema.id, version));
|
||||
}
|
||||
|
||||
|
|
|
@ -4,17 +4,14 @@ import { Overlay } from '@/components/Container';
|
|||
import { MiniButton } from '@/components/Control';
|
||||
import { IconDestroy, IconSave, IconShare } from '@/components/Icons';
|
||||
import { BadgeHelp, HelpTopic } from '@/features/help';
|
||||
import { useMutatingLibrary } from '@/features/library/backend/useMutatingLibrary';
|
||||
import { AccessPolicy, ILibraryItemEditor, LibraryItemType } from '@/features/library/models/library';
|
||||
import { useRoleStore } from '@/features/users';
|
||||
import { UserRole } from '@/features/users/models/user';
|
||||
import { ILibraryItemEditor, MiniSelectorOSS, useMutatingLibrary } from '@/features/library';
|
||||
import { AccessPolicy, LibraryItemType } from '@/features/library';
|
||||
import { useRoleStore, UserRole } from '@/features/users';
|
||||
import { useModificationStore } from '@/stores/modification';
|
||||
import { PARAMETER } from '@/utils/constants';
|
||||
import { tooltipText } from '@/utils/labels';
|
||||
import { prepareTooltip } from '@/utils/utils';
|
||||
import { sharePage } from '@/utils/utils';
|
||||
import { prepareTooltip, sharePage } from '@/utils/utils';
|
||||
|
||||
import MiniSelectorOSS from '../../../components/MiniSelectorOSS';
|
||||
import { IRSForm } from '../../../models/rsform';
|
||||
import { IRSEditContext } from '../RSEditContext';
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@ import { Overlay } from '@/components/Container';
|
|||
import { MiniButton } from '@/components/Control';
|
||||
import { IconNewVersion, IconUpload, IconVersions } from '@/components/Icons';
|
||||
import { BadgeHelp, HelpTopic } from '@/features/help';
|
||||
import { useVersionRestore } from '@/features/library/backend/useVersionRestore';
|
||||
import { useVersionRestore } from '@/features/library';
|
||||
import { useDialogsStore } from '@/stores/dialogs';
|
||||
import { useModificationStore } from '@/stores/modification';
|
||||
import { PARAMETER } from '@/utils/constants';
|
||||
|
|
|
@ -12,11 +12,11 @@ import {
|
|||
IconReset
|
||||
} from '@/components/Icons';
|
||||
import { BadgeHelp, HelpTopic } from '@/features/help';
|
||||
import { MiniSelectorOSS } from '@/features/library';
|
||||
import { prefixes } from '@/utils/constants';
|
||||
import { prepareTooltip } from '@/utils/utils';
|
||||
|
||||
import { useMutatingRSForm } from '../../../backend/useMutatingRSForm';
|
||||
import MiniSelectorOSS from '../../../components/MiniSelectorOSS';
|
||||
import { getCstTypeShortcut, labelCstType } from '../../../labels';
|
||||
import { CstType } from '../../../models/rsform';
|
||||
import { useRSEdit } from '../RSEditContext';
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
import { Tooltip } from '@/components/Container';
|
||||
import { IconHelp } from '@/components/Icons';
|
||||
import { useLibrary } from '@/features/library/backend/useLibrary';
|
||||
import { LibraryItemID } from '@/features/library/models/library';
|
||||
import { useLibrary } from '@/features/library';
|
||||
import { globals, prefixes } from '@/utils/constants';
|
||||
|
||||
import { colorBgSchemas } from '../../../colors';
|
||||
|
@ -15,7 +14,7 @@ function SchemasGuide({ schema }: SchemasGuideProps) {
|
|||
const { items: libraryItems } = useLibrary();
|
||||
|
||||
const schemas = (() => {
|
||||
const processed = new Set<LibraryItemID>();
|
||||
const processed = new Set<number>();
|
||||
const aliases: string[] = [];
|
||||
const indexes: number[] = [];
|
||||
schema.items.forEach(cst => {
|
||||
|
|
|
@ -14,11 +14,11 @@ import {
|
|||
IconTypeGraph
|
||||
} from '@/components/Icons';
|
||||
import { BadgeHelp, HelpTopic } from '@/features/help';
|
||||
import { MiniSelectorOSS } from '@/features/library';
|
||||
import { useDialogsStore } from '@/stores/dialogs';
|
||||
import { PARAMETER } from '@/utils/constants';
|
||||
|
||||
import { useMutatingRSForm } from '../../../backend/useMutatingRSForm';
|
||||
import MiniSelectorOSS from '../../../components/MiniSelectorOSS';
|
||||
import { useRSEdit } from '../RSEditContext';
|
||||
|
||||
interface ToolbarTermGraphProps {
|
||||
|
|
|
@ -34,8 +34,7 @@ import {
|
|||
import { useAuthSuspense } from '@/features/auth';
|
||||
import { AccessPolicy, LocationHead } from '@/features/library/models/library';
|
||||
import { OssTabID } from '@/features/oss/pages/OssPage/OssEditContext';
|
||||
import { useRoleStore } from '@/features/users';
|
||||
import { UserRole } from '@/features/users/models/user';
|
||||
import { useRoleStore, UserRole } from '@/features/users';
|
||||
import { useDialogsStore } from '@/stores/dialogs';
|
||||
import { useModificationStore } from '@/stores/modification';
|
||||
import { EXTEOR_TRS_FILE } from '@/utils/constants';
|
||||
|
|
|
@ -4,12 +4,9 @@ import { createContext, useContext, useEffect, useState } from 'react';
|
|||
|
||||
import { urls, useConceptNavigation } from '@/app';
|
||||
import { useAuthSuspense } from '@/features/auth';
|
||||
import { useDeleteItem } from '@/features/library/backend/useDeleteItem';
|
||||
import { ILibraryItemEditor, LibraryItemID, VersionID } from '@/features/library/models/library';
|
||||
import { useLibrarySearchStore } from '@/features/library/stores/librarySearch';
|
||||
import { ILibraryItemEditor, useDeleteItem, useLibrarySearchStore } from '@/features/library';
|
||||
import { OssTabID } from '@/features/oss/pages/OssPage/OssEditContext';
|
||||
import { useRoleStore } from '@/features/users';
|
||||
import { UserRole } from '@/features/users/models/user';
|
||||
import { useRoleStore, UserRole } from '@/features/users';
|
||||
import { useDialogsStore } from '@/stores/dialogs';
|
||||
import { useModificationStore } from '@/stores/modification';
|
||||
import { usePreferencesStore } from '@/stores/preferences';
|
||||
|
@ -35,7 +32,7 @@ export interface IRSEditContext extends ILibraryItemEditor {
|
|||
schema: IRSForm;
|
||||
selected: ConstituentaID[];
|
||||
activeCst?: IConstituenta;
|
||||
activeVersion?: VersionID;
|
||||
activeVersion?: number;
|
||||
|
||||
isOwned: boolean;
|
||||
isArchive: boolean;
|
||||
|
@ -44,10 +41,10 @@ export interface IRSEditContext extends ILibraryItemEditor {
|
|||
isAttachedToOSS: boolean;
|
||||
canDeleteSelected: boolean;
|
||||
|
||||
navigateVersion: (versionID: VersionID | undefined) => void;
|
||||
navigateVersion: (versionID: number | undefined) => void;
|
||||
navigateRSForm: ({ tab, activeID }: { tab: RSTabID; activeID?: ConstituentaID }) => void;
|
||||
navigateCst: (cstID: ConstituentaID) => void;
|
||||
navigateOss: (target: LibraryItemID, newTab?: boolean) => void;
|
||||
navigateOss: (ossID: number, newTab?: boolean) => void;
|
||||
|
||||
deleteSchema: () => void;
|
||||
|
||||
|
@ -75,9 +72,9 @@ export const useRSEdit = () => {
|
|||
};
|
||||
|
||||
interface RSEditStateProps {
|
||||
itemID: LibraryItemID;
|
||||
itemID: number;
|
||||
activeTab: RSTabID;
|
||||
activeVersion?: VersionID;
|
||||
activeVersion?: number;
|
||||
}
|
||||
|
||||
export const RSEditState = ({
|
||||
|
@ -127,12 +124,12 @@ export const RSEditState = ({
|
|||
[schema, adjustRole, isOwned, user, adminMode]
|
||||
);
|
||||
|
||||
function navigateVersion(versionID: VersionID | undefined) {
|
||||
function navigateVersion(versionID: number | undefined) {
|
||||
router.push(urls.schema(schema.id, versionID));
|
||||
}
|
||||
|
||||
function navigateOss(target: LibraryItemID, newTab?: boolean) {
|
||||
router.push(urls.oss(target), newTab);
|
||||
function navigateOss(ossID: number, newTab?: boolean) {
|
||||
router.push(urls.oss(ossID), newTab);
|
||||
}
|
||||
|
||||
function navigateRSForm({ tab, activeID }: { tab: RSTabID; activeID?: ConstituentaID }) {
|
||||
|
|
|
@ -10,7 +10,6 @@ import { isAxiosError } from '@/backend/apiTransport';
|
|||
import { Divider } from '@/components/Container';
|
||||
import { TextURL } from '@/components/Control';
|
||||
import { ErrorData } from '@/components/InfoError';
|
||||
import { LibraryItemID } from '@/features/library/models/library';
|
||||
import useQueryStrings from '@/hooks/useQueryStrings';
|
||||
import { useModificationStore } from '@/stores/modification';
|
||||
|
||||
|
@ -72,7 +71,7 @@ function ProcessError({
|
|||
}: {
|
||||
error: ErrorData;
|
||||
isArchive: boolean;
|
||||
itemID?: LibraryItemID;
|
||||
itemID?: number;
|
||||
}): React.ReactElement | null {
|
||||
if (isAxiosError(error) && error.response) {
|
||||
if (error.response.status === 404) {
|
||||
|
|
|
@ -3,8 +3,7 @@
|
|||
import clsx from 'clsx';
|
||||
import { useState } from 'react';
|
||||
|
||||
import { useRoleStore } from '@/features/users';
|
||||
import { UserRole } from '@/features/users/models/user';
|
||||
import { useRoleStore, UserRole } from '@/features/users';
|
||||
import useWindowSize from '@/hooks/useWindowSize';
|
||||
import { useFitHeight } from '@/stores/appLayout';
|
||||
import { PARAMETER } from '@/utils/constants';
|
||||
|
|
|
@ -3,4 +3,4 @@ export { useUsers } from './backend/useUsers';
|
|||
export { InfoUsers } from './components/InfoUsers';
|
||||
export { SelectUser } from './components/SelectUser';
|
||||
export { TableUsers } from './components/TableUsers';
|
||||
export { useRoleStore } from './stores/role';
|
||||
export { useRoleStore, UserRole } from './stores/role';
|
||||
|
|
|
@ -29,13 +29,3 @@ export interface IUserProfile extends Omit<IUser, 'is_staff'> {}
|
|||
* Represents user reference information.
|
||||
*/
|
||||
export interface IUserInfo extends Omit<IUserProfile, 'email' | 'username'> {}
|
||||
|
||||
/**
|
||||
* Represents user access mode.
|
||||
*/
|
||||
export enum UserRole {
|
||||
READER = 0,
|
||||
EDITOR,
|
||||
OWNER,
|
||||
ADMIN
|
||||
}
|
||||
|
|
|
@ -1,6 +1,14 @@
|
|||
import { create } from 'zustand';
|
||||
|
||||
import { UserRole } from '../models/user';
|
||||
/**
|
||||
* Represents user access mode.
|
||||
*/
|
||||
export enum UserRole {
|
||||
READER = 0,
|
||||
EDITOR,
|
||||
OWNER,
|
||||
ADMIN
|
||||
}
|
||||
|
||||
export interface RoleFlags {
|
||||
isOwner: boolean;
|
||||
|
|
|
@ -1,19 +1,19 @@
|
|||
import { create } from 'zustand';
|
||||
|
||||
import { DlgChangeLocationProps } from '@/features/library/dialogs/DlgChangeLocation';
|
||||
import { DlgCloneLibraryItemProps } from '@/features/library/dialogs/DlgCloneLibraryItem';
|
||||
import { DlgCreateVersionProps } from '@/features/library/dialogs/DlgCreateVersion';
|
||||
import { DlgEditEditorsProps } from '@/features/library/dialogs/DlgEditEditors/DlgEditEditors';
|
||||
import { DlgEditVersionsProps } from '@/features/library/dialogs/DlgEditVersions/DlgEditVersions';
|
||||
import { DlgChangeInputSchemaProps } from '@/features/oss/dialogs/DlgChangeInputSchema';
|
||||
import { DlgCreateOperationProps } from '@/features/oss/dialogs/DlgCreateOperation/DlgCreateOperation';
|
||||
import { DlgDeleteOperationProps } from '@/features/oss/dialogs/DlgDeleteOperation';
|
||||
import { DlgEditOperationProps } from '@/features/oss/dialogs/DlgEditOperation/DlgEditOperation';
|
||||
import { DlgRelocateConstituentsProps } from '@/features/oss/dialogs/DlgRelocateConstituents';
|
||||
import { DlgCloneLibraryItemProps } from '@/features/rsform/dialogs/DlgCloneLibraryItem';
|
||||
import { DlgCreateCstProps } from '@/features/rsform/dialogs/DlgCreateCst/DlgCreateCst';
|
||||
import { DlgCreateVersionProps } from '@/features/rsform/dialogs/DlgCreateVersion';
|
||||
import { DlgCstTemplateProps } from '@/features/rsform/dialogs/DlgCstTemplate/DlgCstTemplate';
|
||||
import { DlgDeleteCstProps } from '@/features/rsform/dialogs/DlgDeleteCst/DlgDeleteCst';
|
||||
import { DlgEditReferenceProps } from '@/features/rsform/dialogs/DlgEditReference/DlgEditReference';
|
||||
import { DlgEditVersionsProps } from '@/features/rsform/dialogs/DlgEditVersions/DlgEditVersions';
|
||||
import { DlgEditWordFormsProps } from '@/features/rsform/dialogs/DlgEditWordForms/DlgEditWordForms';
|
||||
import { DlgInlineSynthesisProps } from '@/features/rsform/dialogs/DlgInlineSynthesis/DlgInlineSynthesis';
|
||||
import { DlgRenameCstProps } from '@/features/rsform/dialogs/DlgRenameCst';
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
* Description is a long description used in tooltips.
|
||||
*/
|
||||
import { AccessPolicy, LibraryItemType } from '@/features/library/models/library';
|
||||
import { UserRole } from '@/features/users/models/user';
|
||||
import { UserRole } from '@/features/users/stores/role';
|
||||
|
||||
/**
|
||||
* Retrieves label for {@link UserRole}.
|
||||
|
|
Loading…
Reference in New Issue
Block a user