R: library feature boundary

This commit is contained in:
Ivan 2025-02-12 15:12:59 +03:00
parent 1ab4ce2556
commit 53a795d3ec
88 changed files with 275 additions and 324 deletions

View File

@ -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'));

View File

@ -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;

View File

@ -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';

View File

@ -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) =>

View File

@ -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;
}

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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';

View File

@ -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;
}

View File

@ -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>({

View File

@ -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) {

View File

@ -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);

View 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';

View File

@ -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.
*/

View File

@ -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';

View File

@ -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 {

View File

@ -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[]) {

View File

@ -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: {

View File

@ -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)
};
};

View File

@ -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)
};
};

View File

@ -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';

View File

@ -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;
}

View File

@ -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)
};
};

View File

@ -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)
};
};

View File

@ -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)
};
};

View File

@ -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)
};
};

View File

@ -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';

View File

@ -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)

View File

@ -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';

View File

@ -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);

View File

@ -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', []);

View File

@ -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 });

View File

@ -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>;
}

View File

@ -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[]) {

View File

@ -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';

View File

@ -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';

View File

@ -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';

View File

@ -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';

View File

@ -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>) => {

View File

@ -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);

View File

@ -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 }

View File

@ -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
};

View File

@ -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)
};
};

View File

@ -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)
};
};

View File

@ -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)
};
};

View File

@ -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)
};
};

View File

@ -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)
};
};

View File

@ -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)
};
};

View File

@ -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)
};
};

View File

@ -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';

View File

@ -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';

View File

@ -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)
};
};

View File

@ -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;
}

View File

@ -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 }),

View File

@ -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)
};
};

View File

@ -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)
};
};

View File

@ -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';

View File

@ -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';

View File

@ -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';

View File

@ -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;
}

View File

@ -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() {

View File

@ -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;
}
/**

View File

@ -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';

View File

@ -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';

View File

@ -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));
}

View File

@ -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';

View File

@ -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';

View File

@ -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';

View File

@ -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 => {

View File

@ -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 {

View File

@ -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';

View File

@ -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 }) {

View File

@ -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) {

View File

@ -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';

View File

@ -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';

View File

@ -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
}

View File

@ -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;

View File

@ -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';

View File

@ -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}.