R: Unify naming convention for frontend APIs

This commit is contained in:
Ivan 2025-04-20 16:21:06 +03:00
parent 12fffd0087
commit 6064da8008
51 changed files with 262 additions and 253 deletions

View File

@ -15,12 +15,12 @@ import {
type AccessPolicy,
type ICloneLibraryItemDTO,
type ICreateLibraryItemDTO,
type ICreateVersionDTO,
type ILibraryItem,
type IRenameLocationDTO,
type IUpdateLibraryItemDTO,
type IVersionCreateDTO,
type IUpdateVersionDTO,
type IVersionExInfo,
type IVersionUpdateDTO,
schemaLibraryItem,
schemaLibraryItemArray,
schemaVersionExInfo
@ -136,8 +136,8 @@ export const libraryApi = {
}
}),
versionCreate: ({ itemID, data }: { itemID: number; data: IVersionCreateDTO }) =>
axiosPost<IVersionCreateDTO, IVersionCreatedResponse>({
createVersion: ({ itemID, data }: { itemID: number; data: ICreateVersionDTO }) =>
axiosPost<ICreateVersionDTO, IVersionCreatedResponse>({
schema: schemaVersionCreatedResponse,
endpoint: `/api/library/${itemID}/create-version`,
request: {
@ -145,7 +145,7 @@ export const libraryApi = {
successMessage: infoMsg.newVersion(data.version)
}
}),
versionRestore: ({ versionID }: { versionID: number }) =>
restoreVersion: ({ versionID }: { versionID: number }) =>
axiosPatch<undefined, IRSFormDTO>({
schema: schemaRSForm,
endpoint: `/api/versions/${versionID}/restore`,
@ -153,8 +153,8 @@ export const libraryApi = {
successMessage: infoMsg.versionRestored
}
}),
versionUpdate: (data: { itemID: number; version: IVersionUpdateDTO }) =>
axiosPatch<IVersionUpdateDTO, IVersionExInfo>({
updateVersion: (data: { itemID: number; version: IUpdateVersionDTO }) =>
axiosPatch<IUpdateVersionDTO, IVersionExInfo>({
schema: schemaVersionExInfo,
endpoint: `/api/versions/${data.version.id}`,
request: {
@ -162,7 +162,7 @@ export const libraryApi = {
successMessage: infoMsg.changesSaved
}
}),
versionDelete: (data: { itemID: number; versionID: number }) =>
deleteVersion: (data: { itemID: number; versionID: number }) =>
axiosDelete({
endpoint: `/api/versions/${data.versionID}`,
request: {

View File

@ -49,10 +49,10 @@ export type ICreateLibraryItemDTO = z.infer<typeof schemaCreateLibraryItem>;
export type IUpdateLibraryItemDTO = z.infer<typeof schemaUpdateLibraryItem>;
/** Create version metadata in persistent storage. */
export type IVersionCreateDTO = z.infer<typeof schemaVersionCreate>;
export type ICreateVersionDTO = z.infer<typeof schemaCreateVersion>;
/** Represents version data, intended to update version metadata in persistent storage. */
export type IVersionUpdateDTO = z.infer<typeof schemaVersionUpdate>;
export type IUpdateVersionDTO = z.infer<typeof schemaUpdateVersion>;
// ======= SCHEMAS =========
export const schemaLibraryItemType = z.enum(Object.values(LibraryItemType) as [LibraryItemType, ...LibraryItemType[]]);
@ -140,13 +140,13 @@ export const schemaVersionExInfo = schemaVersionInfo.extend({
item: z.number()
});
export const schemaVersionUpdate = z.strictObject({
export const schemaUpdateVersion = z.strictObject({
id: z.number(),
version: z.string().nonempty(errorMsg.requiredField),
description: z.string()
});
export const schemaVersionCreate = z.strictObject({
export const schemaCreateVersion = z.strictObject({
version: z.string(),
description: z.string(),
items: z.array(z.number())

View File

@ -3,15 +3,15 @@ import { useMutation, useQueryClient } from '@tanstack/react-query';
import { KEYS } from '@/backend/configuration';
import { libraryApi } from './api';
import { type IVersionCreateDTO } from './types';
import { type ICreateVersionDTO } from './types';
import { useUpdateTimestamp } from './use-update-timestamp';
export const useVersionCreate = () => {
export const useCreateVersion = () => {
const client = useQueryClient();
const { updateTimestamp } = useUpdateTimestamp();
const mutation = useMutation({
mutationKey: [KEYS.global_mutation, libraryApi.baseKey, 'create-version'],
mutationFn: libraryApi.versionCreate,
mutationFn: libraryApi.createVersion,
onSuccess: data => {
client.setQueryData(KEYS.composite.rsItem({ itemID: data.schema.id }), data.schema);
updateTimestamp(data.schema.id);
@ -19,7 +19,7 @@ export const useVersionCreate = () => {
onError: () => client.invalidateQueries()
});
return {
versionCreate: (data: { itemID: number; data: IVersionCreateDTO }) =>
createVersion: (data: { itemID: number; data: ICreateVersionDTO }) =>
mutation.mutateAsync(data).then(response => response.version)
};
};

View File

@ -6,11 +6,11 @@ import { KEYS } from '@/backend/configuration';
import { libraryApi } from './api';
export const useVersionDelete = () => {
export const useDeleteVersion = () => {
const client = useQueryClient();
const mutation = useMutation({
mutationKey: [KEYS.global_mutation, libraryApi.baseKey, 'delete-version'],
mutationFn: libraryApi.versionDelete,
mutationFn: libraryApi.deleteVersion,
onSuccess: (_, variables) => {
client.setQueryData(KEYS.composite.rsItem({ itemID: variables.itemID }), (prev: IRSFormDTO | undefined) =>
!prev
@ -24,6 +24,6 @@ export const useVersionDelete = () => {
onError: () => client.invalidateQueries()
});
return {
versionDelete: (data: { itemID: number; versionID: number }) => mutation.mutateAsync(data)
deleteVersion: (data: { itemID: number; versionID: number }) => mutation.mutateAsync(data)
};
};

View File

@ -4,11 +4,11 @@ import { KEYS } from '@/backend/configuration';
import { libraryApi } from './api';
export const useVersionRestore = () => {
export const useRestoreVersion = () => {
const client = useQueryClient();
const mutation = useMutation({
mutationKey: [KEYS.global_mutation, libraryApi.baseKey, 'restore-version'],
mutationFn: libraryApi.versionRestore,
mutationFn: libraryApi.restoreVersion,
onSuccess: data => {
client.setQueryData(KEYS.composite.rsItem({ itemID: data.id }), data);
return client.invalidateQueries({ queryKey: [libraryApi.baseKey] });
@ -16,6 +16,6 @@ export const useVersionRestore = () => {
onError: () => client.invalidateQueries()
});
return {
versionRestore: (data: { versionID: number }) => mutation.mutateAsync(data)
restoreVersion: (data: { versionID: number }) => mutation.mutateAsync(data)
};
};

View File

@ -5,13 +5,13 @@ import { type IRSFormDTO } from '@/features/rsform';
import { KEYS } from '@/backend/configuration';
import { libraryApi } from './api';
import { type IVersionUpdateDTO } from './types';
import { type IUpdateVersionDTO } from './types';
export const useVersionUpdate = () => {
export const useUpdateVersion = () => {
const client = useQueryClient();
const mutation = useMutation({
mutationKey: [KEYS.global_mutation, libraryApi.baseKey, 'update-version'],
mutationFn: libraryApi.versionUpdate,
mutationFn: libraryApi.updateVersion,
onSuccess: (data, variables) => {
client.setQueryData(KEYS.composite.rsItem({ itemID: variables.itemID }), (prev: IRSFormDTO | undefined) =>
!prev
@ -41,6 +41,6 @@ export const useVersionUpdate = () => {
onError: () => client.invalidateQueries()
});
return {
versionUpdate: (data: { itemID: number; version: IVersionUpdateDTO }) => mutation.mutateAsync(data)
updateVersion: (data: { itemID: number; version: IUpdateVersionDTO }) => mutation.mutateAsync(data)
};
};

View File

@ -8,8 +8,8 @@ import { ModalForm } from '@/components/modal';
import { useDialogsStore } from '@/stores/dialogs';
import { errorMsg } from '@/utils/labels';
import { type IVersionCreateDTO, type IVersionInfo, schemaVersionCreate } from '../backend/types';
import { useVersionCreate } from '../backend/use-version-create';
import { type ICreateVersionDTO, type IVersionInfo, schemaCreateVersion } from '../backend/types';
import { useCreateVersion } from '../backend/use-create-version';
import { nextVersion } from '../models/library-api';
export interface DlgCreateVersionProps {
@ -24,10 +24,10 @@ export function DlgCreateVersion() {
const { itemID, versions, selected, totalCount, onCreate } = useDialogsStore(
state => state.props as DlgCreateVersionProps
);
const { versionCreate } = useVersionCreate();
const { createVersion: versionCreate } = useCreateVersion();
const { register, handleSubmit, control } = useForm<IVersionCreateDTO>({
resolver: zodResolver(schemaVersionCreate),
const { register, handleSubmit, control } = useForm<ICreateVersionDTO>({
resolver: zodResolver(schemaCreateVersion),
defaultValues: {
version: versions.length > 0 ? nextVersion(versions[versions.length - 1].version) : '1.0.0',
description: '',
@ -37,7 +37,7 @@ export function DlgCreateVersion() {
const version = useWatch({ control, name: 'version' });
const canSubmit = !versions.find(ver => ver.version === version);
function onSubmit(data: IVersionCreateDTO) {
function onSubmit(data: ICreateVersionDTO) {
return versionCreate({ itemID, data }).then(onCreate);
}

View File

@ -14,10 +14,10 @@ import { ModalView } from '@/components/modal';
import { useDialogsStore } from '@/stores/dialogs';
import { errorMsg } from '@/utils/labels';
import { type IVersionUpdateDTO, schemaVersionUpdate } from '../../backend/types';
import { type IUpdateVersionDTO, schemaUpdateVersion } from '../../backend/types';
import { useDeleteVersion } from '../../backend/use-delete-version';
import { useMutatingLibrary } from '../../backend/use-mutating-library';
import { useVersionDelete } from '../../backend/use-version-delete';
import { useVersionUpdate } from '../../backend/use-version-update';
import { useUpdateVersion } from '../../backend/use-update-version';
import { TableVersions } from './table-versions';
@ -31,8 +31,8 @@ export function DlgEditVersions() {
const hideDialog = useDialogsStore(state => state.hideDialog);
const { schema } = useRSFormSuspense({ itemID });
const isProcessing = useMutatingLibrary();
const { versionDelete } = useVersionDelete();
const { versionUpdate } = useVersionUpdate();
const { deleteVersion: versionDelete } = useDeleteVersion();
const { updateVersion: versionUpdate } = useUpdateVersion();
const {
register,
@ -40,8 +40,8 @@ export function DlgEditVersions() {
control,
reset,
formState: { isDirty, errors: formErrors }
} = useForm<IVersionUpdateDTO>({
resolver: zodResolver(schemaVersionUpdate),
} = useForm<IUpdateVersionDTO>({
resolver: zodResolver(schemaUpdateVersion),
defaultValues: {
id: schema.versions[schema.versions.length - 1].id,
version: schema.versions[schema.versions.length - 1].version,
@ -77,7 +77,7 @@ export function DlgEditVersions() {
});
}
function onUpdate(data: IVersionUpdateDTO) {
function onUpdate(data: IUpdateVersionDTO) {
if (!isDirty || isProcessing || !isValid) {
return;
}

View File

@ -6,16 +6,16 @@ import { infoMsg } from '@/utils/labels';
import {
type IConstituentaReference,
type ICstRelocateDTO,
type ICreateOperationDTO,
type IDeleteOperationDTO,
type IInputCreatedResponse,
type IInputUpdateDTO,
type IOperationCreatedResponse,
type IOperationCreateDTO,
type IOperationDeleteDTO,
type IOperationSchemaDTO,
type IOperationUpdateDTO,
type IOssLayout,
type IRelocateConstituentsDTO,
type ITargetOperation,
type IUpdateInputDTO,
type IUpdateOperationDTO,
schemaConstituentaReference,
schemaInputCreatedResponse,
schemaOperationCreatedResponse,
@ -49,8 +49,8 @@ export const ossApi = {
}
}),
operationCreate: ({ itemID, data }: { itemID: number; data: IOperationCreateDTO }) =>
axiosPost<IOperationCreateDTO, IOperationCreatedResponse>({
createOperation: ({ itemID, data }: { itemID: number; data: ICreateOperationDTO }) =>
axiosPost<ICreateOperationDTO, IOperationCreatedResponse>({
schema: schemaOperationCreatedResponse,
endpoint: `/api/oss/${itemID}/create-operation`,
request: {
@ -58,8 +58,8 @@ export const ossApi = {
successMessage: response => infoMsg.newOperation(response.new_operation.alias)
}
}),
operationDelete: ({ itemID, data }: { itemID: number; data: IOperationDeleteDTO }) =>
axiosPatch<IOperationDeleteDTO, IOperationSchemaDTO>({
deleteOperation: ({ itemID, data }: { itemID: number; data: IDeleteOperationDTO }) =>
axiosPatch<IDeleteOperationDTO, IOperationSchemaDTO>({
schema: schemaOperationSchema,
endpoint: `/api/oss/${itemID}/delete-operation`,
request: {
@ -67,7 +67,7 @@ export const ossApi = {
successMessage: infoMsg.operationDestroyed
}
}),
inputCreate: ({ itemID, data }: { itemID: number; data: ITargetOperation }) =>
createInput: ({ itemID, data }: { itemID: number; data: ITargetOperation }) =>
axiosPatch<ITargetOperation, IInputCreatedResponse>({
schema: schemaInputCreatedResponse,
endpoint: `/api/oss/${itemID}/create-input`,
@ -76,8 +76,8 @@ export const ossApi = {
successMessage: infoMsg.newLibraryItem
}
}),
inputUpdate: ({ itemID, data }: { itemID: number; data: IInputUpdateDTO }) =>
axiosPatch<IInputUpdateDTO, IOperationSchemaDTO>({
updateInput: ({ itemID, data }: { itemID: number; data: IUpdateInputDTO }) =>
axiosPatch<IUpdateInputDTO, IOperationSchemaDTO>({
schema: schemaOperationSchema,
endpoint: `/api/oss/${itemID}/set-input`,
request: {
@ -85,8 +85,8 @@ export const ossApi = {
successMessage: infoMsg.changesSaved
}
}),
operationUpdate: ({ itemID, data }: { itemID: number; data: IOperationUpdateDTO }) =>
axiosPatch<IOperationUpdateDTO, IOperationSchemaDTO>({
updateOperation: ({ itemID, data }: { itemID: number; data: IUpdateOperationDTO }) =>
axiosPatch<IUpdateOperationDTO, IOperationSchemaDTO>({
schema: schemaOperationSchema,
endpoint: `/api/oss/${itemID}/update-operation`,
request: {
@ -94,7 +94,7 @@ export const ossApi = {
successMessage: infoMsg.changesSaved
}
}),
operationExecute: ({ itemID, data }: { itemID: number; data: ITargetOperation }) =>
executeOperation: ({ itemID, data }: { itemID: number; data: ITargetOperation }) =>
axiosPost<ITargetOperation, IOperationSchemaDTO>({
schema: schemaOperationSchema,
endpoint: `/api/oss/${itemID}/execute-operation`,
@ -104,8 +104,8 @@ export const ossApi = {
}
}),
relocateConstituents: (data: ICstRelocateDTO) =>
axiosPost<ICstRelocateDTO, IOperationSchemaDTO>({
relocateConstituents: (data: IRelocateConstituentsDTO) =>
axiosPost<IRelocateConstituentsDTO, IOperationSchemaDTO>({
schema: schemaOperationSchema,
endpoint: `/api/oss/relocate-constituents`,
request: {

View File

@ -1,7 +1,7 @@
import { z } from 'zod';
import { schemaLibraryItem } from '@/features/library/backend/types';
import { schemaCstSubstitute } from '@/features/rsform/backend/types';
import { schemaSubstituteConstituents } from '@/features/rsform/backend/types';
import { errorMsg } from '@/utils/labels';
@ -28,7 +28,7 @@ export type IOperationSchemaDTO = z.infer<typeof schemaOperationSchema>;
export type IOssLayout = z.infer<typeof schemaOssLayout>;
/** Represents {@link IOperation} data, used in creation process. */
export type IOperationCreateDTO = z.infer<typeof schemaOperationCreate>;
export type ICreateOperationDTO = z.infer<typeof schemaCreateOperation>;
/** Represents data response when creating {@link IOperation}. */
export type IOperationCreatedResponse = z.infer<typeof schemaOperationCreatedResponse>;
@ -41,19 +41,19 @@ export interface ITargetOperation {
}
/** Represents {@link IOperation} data, used in destruction process. */
export type IOperationDeleteDTO = z.infer<typeof schemaOperationDelete>;
export type IDeleteOperationDTO = z.infer<typeof schemaDeleteOperation>;
/** Represents data response when creating {@link IRSForm} for Input {@link IOperation}. */
export type IInputCreatedResponse = z.infer<typeof schemaInputCreatedResponse>;
/** Represents {@link IOperation} data, used in setInput process. */
export type IInputUpdateDTO = z.infer<typeof schemaInputUpdate>;
export type IUpdateInputDTO = z.infer<typeof schemaUpdateInput>;
/** Represents {@link IOperation} data, used in update process. */
export type IOperationUpdateDTO = z.infer<typeof schemaOperationUpdate>;
export type IUpdateOperationDTO = z.infer<typeof schemaUpdateOperation>;
/** Represents data, used relocating {@link IConstituenta}s between {@link ILibraryItem}s. */
export type ICstRelocateDTO = z.infer<typeof schemaCstRelocate>;
export type IRelocateConstituentsDTO = z.infer<typeof schemaRelocateConstituents>;
/** Represents {@link IConstituenta} reference. */
export type IConstituentaReference = z.infer<typeof schemaConstituentaReference>;
@ -80,7 +80,7 @@ export const schemaBlock = z.strictObject({
parent: z.number().nullable()
});
export const schemaCstSubstituteInfo = schemaCstSubstitute.extend({
export const schemaCstSubstituteInfo = schemaSubstituteConstituents.extend({
operation: z.number(),
original_alias: z.string(),
original_term: z.string(),
@ -121,7 +121,7 @@ export const schemaOperationSchema = schemaLibraryItem.extend({
substitutions: z.array(schemaCstSubstituteInfo)
});
export const schemaOperationCreate = z.strictObject({
export const schemaCreateOperation = z.strictObject({
layout: schemaOssLayout,
item_data: z.strictObject({
alias: z.string().nonempty(),
@ -142,14 +142,14 @@ export const schemaOperationCreatedResponse = z.strictObject({
oss: schemaOperationSchema
});
export const schemaOperationDelete = z.strictObject({
export const schemaDeleteOperation = z.strictObject({
target: z.number(),
layout: schemaOssLayout,
keep_constituents: z.boolean(),
delete_schema: z.boolean()
});
export const schemaInputUpdate = z.strictObject({
export const schemaUpdateInput = z.strictObject({
target: z.number(),
layout: schemaOssLayout,
input: z.number().nullable()
@ -160,7 +160,7 @@ export const schemaInputCreatedResponse = z.strictObject({
oss: schemaOperationSchema
});
export const schemaOperationUpdate = z.strictObject({
export const schemaUpdateOperation = z.strictObject({
target: z.number(),
layout: schemaOssLayout,
item_data: z.strictObject({
@ -169,10 +169,10 @@ export const schemaOperationUpdate = z.strictObject({
description: z.string()
}),
arguments: z.array(z.number()),
substitutions: z.array(schemaCstSubstitute)
substitutions: z.array(schemaSubstituteConstituents)
});
export const schemaCstRelocate = z.strictObject({
export const schemaRelocateConstituents = z.strictObject({
destination: z.number().nullable(),
items: z.array(z.number()).refine(data => data.length > 0)
});

View File

@ -5,11 +5,11 @@ import { KEYS } from '@/backend/configuration';
import { ossApi } from './api';
import { type ITargetOperation } from './types';
export const useInputCreate = () => {
export const useCreateInput = () => {
const client = useQueryClient();
const mutation = useMutation({
mutationKey: [KEYS.global_mutation, ossApi.baseKey, 'input-create'],
mutationFn: ossApi.inputCreate,
mutationFn: ossApi.createInput,
onSuccess: data => {
client.setQueryData(ossApi.getOssQueryOptions({ itemID: data.oss.id }).queryKey, data.oss);
return Promise.allSettled([
@ -20,7 +20,7 @@ export const useInputCreate = () => {
onError: () => client.invalidateQueries()
});
return {
inputCreate: (data: { itemID: number; data: ITargetOperation }) =>
createInput: (data: { itemID: number; data: ITargetOperation }) =>
mutation.mutateAsync(data).then(response => response.new_schema)
};
};

View File

@ -5,14 +5,14 @@ import { useUpdateTimestamp } from '@/features/library/backend/use-update-timest
import { KEYS } from '@/backend/configuration';
import { ossApi } from './api';
import { type IOperationCreateDTO } from './types';
import { type ICreateOperationDTO } from './types';
export const useOperationCreate = () => {
export const useCreateOperation = () => {
const client = useQueryClient();
const { updateTimestamp } = useUpdateTimestamp();
const mutation = useMutation({
mutationKey: [KEYS.global_mutation, ossApi.baseKey, 'operation-create'],
mutationFn: ossApi.operationCreate,
mutationFn: ossApi.createOperation,
onSuccess: response => {
client.setQueryData(ossApi.getOssQueryOptions({ itemID: response.oss.id }).queryKey, response.oss);
updateTimestamp(response.oss.id);
@ -20,6 +20,6 @@ export const useOperationCreate = () => {
onError: () => client.invalidateQueries()
});
return {
operationCreate: (data: { itemID: number; data: IOperationCreateDTO }) => mutation.mutateAsync(data)
createOperation: (data: { itemID: number; data: ICreateOperationDTO }) => mutation.mutateAsync(data)
};
};

View File

@ -3,13 +3,13 @@ import { useMutation, useQueryClient } from '@tanstack/react-query';
import { KEYS } from '@/backend/configuration';
import { ossApi } from './api';
import { type IOperationDeleteDTO } from './types';
import { type IDeleteOperationDTO } from './types';
export const useOperationDelete = () => {
export const useDeleteOperation = () => {
const client = useQueryClient();
const mutation = useMutation({
mutationKey: [KEYS.global_mutation, ossApi.baseKey, 'operation-delete'],
mutationFn: ossApi.operationDelete,
mutationFn: ossApi.deleteOperation,
onSuccess: data => {
client.setQueryData(ossApi.getOssQueryOptions({ itemID: data.id }).queryKey, data);
return Promise.allSettled([
@ -20,6 +20,6 @@ export const useOperationDelete = () => {
onError: () => client.invalidateQueries()
});
return {
operationDelete: (data: { itemID: number; data: IOperationDeleteDTO }) => mutation.mutateAsync(data)
deleteOperation: (data: { itemID: number; data: IDeleteOperationDTO }) => mutation.mutateAsync(data)
};
};

View File

@ -5,11 +5,11 @@ import { KEYS } from '@/backend/configuration';
import { ossApi } from './api';
import { type ITargetOperation } from './types';
export const useOperationExecute = () => {
export const useExecuteOperation = () => {
const client = useQueryClient();
const mutation = useMutation({
mutationKey: [KEYS.global_mutation, ossApi.baseKey, 'operation-execute'],
mutationFn: ossApi.operationExecute,
mutationFn: ossApi.executeOperation,
onSuccess: data => {
client.setQueryData(ossApi.getOssQueryOptions({ itemID: data.id }).queryKey, data);
return Promise.allSettled([
@ -20,6 +20,6 @@ export const useOperationExecute = () => {
onError: () => client.invalidateQueries()
});
return {
operationExecute: (data: { itemID: number; data: ITargetOperation }) => mutation.mutateAsync(data)
executeOperation: (data: { itemID: number; data: ITargetOperation }) => mutation.mutateAsync(data)
};
};

View File

@ -3,7 +3,7 @@ import { useMutation, useQueryClient } from '@tanstack/react-query';
import { KEYS } from '@/backend/configuration';
import { ossApi } from './api';
import { type ICstRelocateDTO } from './types';
import { type IRelocateConstituentsDTO } from './types';
export const useRelocateConstituents = () => {
const client = useQueryClient();
@ -20,6 +20,6 @@ export const useRelocateConstituents = () => {
onError: () => client.invalidateQueries()
});
return {
relocateConstituents: (data: ICstRelocateDTO) => mutation.mutateAsync(data)
relocateConstituents: (data: IRelocateConstituentsDTO) => mutation.mutateAsync(data)
};
};

View File

@ -3,13 +3,13 @@ import { useMutation, useQueryClient } from '@tanstack/react-query';
import { KEYS } from '@/backend/configuration';
import { ossApi } from './api';
import { type IInputUpdateDTO } from './types';
import { type IUpdateInputDTO } from './types';
export const useInputUpdate = () => {
export const useUpdateInput = () => {
const client = useQueryClient();
const mutation = useMutation({
mutationKey: [KEYS.global_mutation, ossApi.baseKey, 'input-update'],
mutationFn: ossApi.inputUpdate,
mutationFn: ossApi.updateInput,
onSuccess: data => {
client.setQueryData(ossApi.getOssQueryOptions({ itemID: data.id }).queryKey, data);
return Promise.allSettled([
@ -20,6 +20,6 @@ export const useInputUpdate = () => {
onError: () => client.invalidateQueries()
});
return {
inputUpdate: (data: { itemID: number; data: IInputUpdateDTO }) => mutation.mutateAsync(data)
updateInput: (data: { itemID: number; data: IUpdateInputDTO }) => mutation.mutateAsync(data)
};
};

View File

@ -5,13 +5,13 @@ import { type ILibraryItem } from '@/features/library';
import { KEYS } from '@/backend/configuration';
import { ossApi } from './api';
import { type IOperationUpdateDTO } from './types';
import { type IUpdateOperationDTO } from './types';
export const useOperationUpdate = () => {
export const useUpdateOperation = () => {
const client = useQueryClient();
const mutation = useMutation({
mutationKey: [KEYS.global_mutation, ossApi.baseKey, 'operation-update'],
mutationFn: ossApi.operationUpdate,
mutationFn: ossApi.updateOperation,
onSuccess: (data, variables) => {
client.setQueryData(KEYS.composite.ossItem({ itemID: data.id }), data);
const schemaID = data.operations.find(item => item.id === variables.data.target)?.result;
@ -32,6 +32,6 @@ export const useOperationUpdate = () => {
onError: () => client.invalidateQueries()
});
return {
operationUpdate: (data: { itemID: number; data: IOperationUpdateDTO }) => mutation.mutateAsync(data)
updateOperation: (data: { itemID: number; data: IUpdateOperationDTO }) => mutation.mutateAsync(data)
};
};

View File

@ -13,8 +13,8 @@ import { Label } from '@/components/input';
import { ModalForm } from '@/components/modal';
import { useDialogsStore } from '@/stores/dialogs';
import { type IInputUpdateDTO, type IOssLayout, schemaInputUpdate } from '../backend/types';
import { useInputUpdate } from '../backend/use-input-update';
import { type IOssLayout, type IUpdateInputDTO, schemaUpdateInput } from '../backend/types';
import { useUpdateInput } from '../backend/use-update-input';
import { type IOperation, type IOperationSchema } from '../models/oss';
import { sortItemsForOSS } from '../models/oss-api';
@ -26,10 +26,10 @@ export interface DlgChangeInputSchemaProps {
export function DlgChangeInputSchema() {
const { oss, target, layout } = useDialogsStore(state => state.props as DlgChangeInputSchemaProps);
const { inputUpdate } = useInputUpdate();
const { updateInput: inputUpdate } = useUpdateInput();
const { setValue, handleSubmit, control } = useForm<IInputUpdateDTO>({
resolver: zodResolver(schemaInputUpdate),
const { setValue, handleSubmit, control } = useForm<IUpdateInputDTO>({
resolver: zodResolver(schemaUpdateInput),
defaultValues: {
target: target.id,
layout: layout,
@ -44,7 +44,7 @@ export function DlgChangeInputSchema() {
return !oss.schemas.includes(item.id) || item.id === target.result;
}
function onSubmit(data: IInputUpdateDTO) {
function onSubmit(data: IUpdateInputDTO) {
return inputUpdate({ itemID: oss.id, data: data });
}

View File

@ -10,8 +10,8 @@ import { ModalForm } from '@/components/modal';
import { TabLabel, TabList, TabPanel, Tabs } from '@/components/tabs';
import { useDialogsStore } from '@/stores/dialogs';
import { type IOperationCreateDTO, type IOssLayout, OperationType, schemaOperationCreate } from '../../backend/types';
import { useOperationCreate } from '../../backend/use-operation-create';
import { type ICreateOperationDTO, type IOssLayout, OperationType, schemaCreateOperation } from '../../backend/types';
import { useCreateOperation } from '../../backend/use-create-operation';
import { describeOperationType, labelOperationType } from '../../labels';
import { type IOperationSchema } from '../../models/oss';
import { calculateInsertPosition } from '../../models/oss-api';
@ -35,14 +35,14 @@ export const TabID = {
export type TabID = (typeof TabID)[keyof typeof TabID];
export function DlgCreateOperation() {
const { operationCreate } = useOperationCreate();
const { createOperation: operationCreate } = useCreateOperation();
const { oss, layout, initialInputs, onCreate, defaultX, defaultY } = useDialogsStore(
state => state.props as DlgCreateOperationProps
);
const methods = useForm<IOperationCreateDTO>({
resolver: zodResolver(schemaOperationCreate),
const methods = useForm<ICreateOperationDTO>({
resolver: zodResolver(schemaCreateOperation),
defaultValues: {
item_data: {
operation_type: initialInputs.length === 0 ? OperationType.INPUT : OperationType.SYNTHESIS,
@ -64,7 +64,7 @@ export function DlgCreateOperation() {
const [activeTab, setActiveTab] = useState(initialInputs.length === 0 ? TabID.INPUT : TabID.SYNTHESIS);
const isValid = !!alias && !oss.operations.some(operation => operation.alias === alias);
function onSubmit(data: IOperationCreateDTO) {
function onSubmit(data: ICreateOperationDTO) {
const target = calculateInsertPosition(oss, data.arguments, layout, {
x: defaultX,
y: defaultY

View File

@ -11,7 +11,7 @@ import { IconReset } from '@/components/icons';
import { Checkbox, Label, TextArea, TextInput } from '@/components/input';
import { useDialogsStore } from '@/stores/dialogs';
import { type IOperationCreateDTO } from '../../backend/types';
import { type ICreateOperationDTO } from '../../backend/types';
import { sortItemsForOSS } from '../../models/oss-api';
import { type DlgCreateOperationProps } from './dlg-create-operation';
@ -26,7 +26,7 @@ export function TabInputOperation() {
control,
setValue,
formState: { errors }
} = useFormContext<IOperationCreateDTO>();
} = useFormContext<ICreateOperationDTO>();
const createSchema = useWatch({ control, name: 'create_schema' });
function baseFilter(item: ILibraryItem) {

View File

@ -3,7 +3,7 @@ import { Controller, useFormContext, useWatch } from 'react-hook-form';
import { Label, TextArea, TextInput } from '@/components/input';
import { useDialogsStore } from '@/stores/dialogs';
import { type IOperationCreateDTO } from '../../backend/types';
import { type ICreateOperationDTO } from '../../backend/types';
import { PickMultiOperation } from '../../components/pick-multi-operation';
import { type DlgCreateOperationProps } from './dlg-create-operation';
@ -14,7 +14,7 @@ export function TabSynthesisOperation() {
register,
control,
formState: { errors }
} = useFormContext<IOperationCreateDTO>();
} = useFormContext<ICreateOperationDTO>();
const inputs = useWatch({ control, name: 'arguments' });
return (

View File

@ -9,8 +9,8 @@ import { Checkbox, TextInput } from '@/components/input';
import { ModalForm } from '@/components/modal';
import { useDialogsStore } from '@/stores/dialogs';
import { type IOperationDeleteDTO, type IOssLayout, schemaOperationDelete } from '../backend/types';
import { useOperationDelete } from '../backend/use-operation-delete';
import { type IDeleteOperationDTO, type IOssLayout, schemaDeleteOperation } from '../backend/types';
import { useDeleteOperation } from '../backend/use-delete-operation';
import { type IOperation, type IOperationSchema } from '../models/oss';
export interface DlgDeleteOperationProps {
@ -21,10 +21,10 @@ export interface DlgDeleteOperationProps {
export function DlgDeleteOperation() {
const { oss, target, layout } = useDialogsStore(state => state.props as DlgDeleteOperationProps);
const { operationDelete } = useOperationDelete();
const { deleteOperation: operationDelete } = useDeleteOperation();
const { handleSubmit, control } = useForm<IOperationDeleteDTO>({
resolver: zodResolver(schemaOperationDelete),
const { handleSubmit, control } = useForm<IDeleteOperationDTO>({
resolver: zodResolver(schemaDeleteOperation),
defaultValues: {
target: target.id,
layout: layout,
@ -33,7 +33,7 @@ export function DlgDeleteOperation() {
}
});
function onSubmit(data: IOperationDeleteDTO) {
function onSubmit(data: IDeleteOperationDTO) {
return operationDelete({ itemID: oss.id, data: data });
}

View File

@ -11,8 +11,8 @@ import { ModalForm } from '@/components/modal';
import { TabLabel, TabList, TabPanel, Tabs } from '@/components/tabs';
import { useDialogsStore } from '@/stores/dialogs';
import { type IOperationUpdateDTO, type IOssLayout, OperationType, schemaOperationUpdate } from '../../backend/types';
import { useOperationUpdate } from '../../backend/use-operation-update';
import { type IOssLayout, type IUpdateOperationDTO, OperationType, schemaUpdateOperation } from '../../backend/types';
import { useUpdateOperation } from '../../backend/use-update-operation';
import { type IOperation, type IOperationSchema } from '../../models/oss';
import { TabArguments } from './tab-arguments';
@ -34,10 +34,10 @@ export type TabID = (typeof TabID)[keyof typeof TabID];
export function DlgEditOperation() {
const { oss, target, layout } = useDialogsStore(state => state.props as DlgEditOperationProps);
const { operationUpdate } = useOperationUpdate();
const { updateOperation: operationUpdate } = useUpdateOperation();
const methods = useForm<IOperationUpdateDTO>({
resolver: zodResolver(schemaOperationUpdate),
const methods = useForm<IUpdateOperationDTO>({
resolver: zodResolver(schemaUpdateOperation),
defaultValues: {
target: target.id,
item_data: {
@ -56,7 +56,7 @@ export function DlgEditOperation() {
});
const [activeTab, setActiveTab] = useState<TabID>(TabID.CARD);
function onSubmit(data: IOperationUpdateDTO) {
function onSubmit(data: IUpdateOperationDTO) {
return operationUpdate({ itemID: oss.id, data });
}

View File

@ -4,13 +4,13 @@ import { Controller, useFormContext } from 'react-hook-form';
import { Label } from '@/components/input';
import { useDialogsStore } from '@/stores/dialogs';
import { type IOperationUpdateDTO } from '../../backend/types';
import { type IUpdateOperationDTO } from '../../backend/types';
import { PickMultiOperation } from '../../components/pick-multi-operation';
import { type DlgEditOperationProps } from './dlg-edit-operation';
export function TabArguments() {
const { control, setValue } = useFormContext<IOperationUpdateDTO>();
const { control, setValue } = useFormContext<IUpdateOperationDTO>();
const { oss, target } = useDialogsStore(state => state.props as DlgEditOperationProps);
const potentialCycle = [target.id, ...oss.graph.expandAllOutputs([target.id])];
const filtered = oss.operations.filter(item => !potentialCycle.includes(item.id));

View File

@ -2,13 +2,13 @@ import { useFormContext } from 'react-hook-form';
import { TextArea, TextInput } from '@/components/input';
import { type IOperationUpdateDTO } from '../../backend/types';
import { type IUpdateOperationDTO } from '../../backend/types';
export function TabOperation() {
const {
register,
formState: { errors }
} = useFormContext<IOperationUpdateDTO>();
} = useFormContext<IUpdateOperationDTO>();
return (
<div className='cc-fade-in cc-column'>

View File

@ -8,14 +8,14 @@ import { PickSubstitutions } from '@/features/rsform/components';
import { TextArea } from '@/components/input';
import { useDialogsStore } from '@/stores/dialogs';
import { type IOperationUpdateDTO } from '../../backend/types';
import { type IUpdateOperationDTO } from '../../backend/types';
import { SubstitutionValidator } from '../../models/oss-api';
import { type DlgEditOperationProps } from './dlg-edit-operation';
export function TabSynthesis() {
const { oss } = useDialogsStore(state => state.props as DlgEditOperationProps);
const { control } = useFormContext<IOperationUpdateDTO>();
const { control } = useFormContext<IUpdateOperationDTO>();
const inputs = useWatch({ control, name: 'arguments' });
const substitutions = useWatch({ control, name: 'substitutions' });

View File

@ -16,7 +16,7 @@ import { Loader } from '@/components/loader';
import { ModalForm } from '@/components/modal';
import { useDialogsStore } from '@/stores/dialogs';
import { type ICstRelocateDTO, type IOssLayout, schemaCstRelocate } from '../backend/types';
import { type IOssLayout, type IRelocateConstituentsDTO, schemaRelocateConstituents } from '../backend/types';
import { useRelocateConstituents } from '../backend/use-relocate-constituents';
import { useUpdateLayout } from '../backend/use-update-layout';
import { IconRelocationUp } from '../components/icon-relocation-up';
@ -40,8 +40,8 @@ export function DlgRelocateConstituents() {
control,
setValue,
formState: { isValid }
} = useForm<ICstRelocateDTO>({
resolver: zodResolver(schemaCstRelocate),
} = useForm<IRelocateConstituentsDTO>({
resolver: zodResolver(schemaRelocateConstituents),
defaultValues: {
items: []
},
@ -97,7 +97,7 @@ export function DlgRelocateConstituents() {
setValue('items', []);
}
function onSubmit(data: ICstRelocateDTO) {
function onSubmit(data: IRelocateConstituentsDTO) {
if (!layout || JSON.stringify(layout) === JSON.stringify(oss.layout)) {
return relocateConstituents(data);
} else {

View File

@ -5,8 +5,8 @@ import { toast } from 'react-toastify';
import { urls, useConceptNavigation } from '@/app';
import { useLibrary } from '@/features/library/backend/use-library';
import { useInputCreate } from '@/features/oss/backend/use-input-create';
import { useOperationExecute } from '@/features/oss/backend/use-operation-execute';
import { useCreateInput } from '@/features/oss/backend/use-create-input';
import { useExecuteOperation } from '@/features/oss/backend/use-execute-operation';
import { Dropdown, DropdownButton } from '@/components/dropdown';
import {
@ -51,8 +51,8 @@ export function NodeContextMenu({ isOpen, operation, cursorX, cursorY, onHide }:
const isProcessing = useMutatingOss();
const getLayout = useGetLayout();
const { inputCreate } = useInputCreate();
const { operationExecute } = useOperationExecute();
const { createInput: inputCreate } = useCreateInput();
const { executeOperation: operationExecute } = useExecuteOperation();
const showEditInput = useDialogsStore(state => state.showChangeInputSchema);
const showRelocateConstituents = useDialogsStore(state => state.showRelocateConstituents);

View File

@ -4,7 +4,7 @@ import { useReactFlow } from 'reactflow';
import { HelpTopic } from '@/features/help';
import { BadgeHelp } from '@/features/help/components';
import { useOperationExecute } from '@/features/oss/backend/use-operation-execute';
import { useExecuteOperation } from '@/features/oss/backend/use-execute-operation';
import { useUpdateLayout } from '@/features/oss/backend/use-update-layout';
import { MiniButton } from '@/components/control';
@ -63,7 +63,7 @@ export function ToolbarOssGraph({
const toggleEdgeStraight = useOSSGraphStore(state => state.toggleEdgeStraight);
const { updateLayout: updatePositions } = useUpdateLayout();
const { operationExecute } = useOperationExecute();
const { executeOperation: operationExecute } = useExecuteOperation();
const showEditOperation = useDialogsStore(state => state.showEditOperation);

View File

@ -7,20 +7,20 @@ import { infoMsg } from '@/utils/labels';
import {
type ICheckConstituentaDTO,
type IConstituentaBasicsDTO,
type IConstituentaCreatedResponse,
type IConstituentaList,
type ICstCreatedResponse,
type ICstCreateDTO,
type ICstMoveDTO,
type ICstRenameDTO,
type ICstSubstitutionsDTO,
type ICstUpdateDTO,
type ICreateConstituentaDTO,
type IExpressionParseDTO,
type IInlineSynthesisDTO,
type IMoveConstituentsDTO,
type IProduceStructureResponse,
type IRenameConstituentaDTO,
type IRSFormDTO,
type IRSFormUploadDTO,
type ISubstitutionsDTO,
type IUpdateConstituentaDTO,
schemaConstituentaBasics,
schemaCstCreatedResponse,
schemaConstituentaCreatedResponse,
schemaExpressionParse,
schemaProduceStructureResponse,
schemaRSForm
@ -64,17 +64,17 @@ export const rsformsApi = {
}
}),
cstCreate: ({ itemID, data }: { itemID: number; data: ICstCreateDTO }) =>
axiosPost<ICstCreateDTO, ICstCreatedResponse>({
schema: schemaCstCreatedResponse,
createConstituenta: ({ itemID, data }: { itemID: number; data: ICreateConstituentaDTO }) =>
axiosPost<ICreateConstituentaDTO, IConstituentaCreatedResponse>({
schema: schemaConstituentaCreatedResponse,
endpoint: `/api/rsforms/${itemID}/create-cst`,
request: {
data: data,
successMessage: response => infoMsg.newConstituent(response.new_cst.alias)
}
}),
cstUpdate: ({ itemID, data }: { itemID: number; data: ICstUpdateDTO }) =>
axiosPatch<ICstUpdateDTO, IConstituentaBasicsDTO>({
updateConstituenta: ({ itemID, data }: { itemID: number; data: IUpdateConstituentaDTO }) =>
axiosPatch<IUpdateConstituentaDTO, IConstituentaBasicsDTO>({
schema: schemaConstituentaBasics,
endpoint: `/api/rsforms/${itemID}/update-cst`,
request: {
@ -82,7 +82,7 @@ export const rsformsApi = {
successMessage: infoMsg.changesSaved
}
}),
cstDelete: ({ itemID, data }: { itemID: number; data: IConstituentaList }) =>
deleteConstituents: ({ itemID, data }: { itemID: number; data: IConstituentaList }) =>
axiosPatch<IConstituentaList, IRSFormDTO>({
schema: schemaRSForm,
endpoint: `/api/rsforms/${itemID}/delete-multiple-cst`,
@ -91,17 +91,17 @@ export const rsformsApi = {
successMessage: infoMsg.constituentsDestroyed(data.items.length)
}
}),
cstRename: ({ itemID, data }: { itemID: number; data: ICstRenameDTO }) =>
axiosPatch<ICstRenameDTO, ICstCreatedResponse>({
schema: schemaCstCreatedResponse,
renameConstituenta: ({ itemID, data }: { itemID: number; data: IRenameConstituentaDTO }) =>
axiosPatch<IRenameConstituentaDTO, IConstituentaCreatedResponse>({
schema: schemaConstituentaCreatedResponse,
endpoint: `/api/rsforms/${itemID}/rename-cst`,
request: {
data: data,
successMessage: infoMsg.changesSaved
}
}),
cstSubstitute: ({ itemID, data }: { itemID: number; data: ICstSubstitutionsDTO }) =>
axiosPatch<ICstSubstitutionsDTO, IRSFormDTO>({
substituteConstituents: ({ itemID, data }: { itemID: number; data: ISubstitutionsDTO }) =>
axiosPatch<ISubstitutionsDTO, IRSFormDTO>({
schema: schemaRSForm,
endpoint: `/api/rsforms/${itemID}/substitute`,
request: {
@ -109,8 +109,8 @@ export const rsformsApi = {
successMessage: infoMsg.substituteSingle
}
}),
cstMove: ({ itemID, data }: { itemID: number; data: ICstMoveDTO }) =>
axiosPatch<ICstMoveDTO, IRSFormDTO>({
moveConstituents: ({ itemID, data }: { itemID: number; data: IMoveConstituentsDTO }) =>
axiosPatch<IMoveConstituentsDTO, IRSFormDTO>({
schema: schemaRSForm,
endpoint: `/api/rsforms/${itemID}/move-cst`,
request: { data: data }

View File

@ -56,19 +56,19 @@ export interface IRSFormUploadDTO {
}
/** Represents {@link IConstituenta} data, used in creation process. */
export type ICstCreateDTO = z.infer<typeof schemaCstCreate>;
export type ICreateConstituentaDTO = z.infer<typeof schemaCreateConstituenta>;
/** Represents data response when creating {@link IConstituenta}. */
export type ICstCreatedResponse = z.infer<typeof schemaCstCreatedResponse>;
export type IConstituentaCreatedResponse = z.infer<typeof schemaConstituentaCreatedResponse>;
/** Represents data, used in updating persistent attributes in {@link IConstituenta}. */
export type ICstUpdateDTO = z.infer<typeof schemaCstUpdate>;
export type IUpdateConstituentaDTO = z.infer<typeof schemaUpdateConstituenta>;
/** Represents data, used in renaming {@link IConstituenta}. */
export type ICstRenameDTO = z.infer<typeof schemaCstRename>;
export type IRenameConstituentaDTO = z.infer<typeof schemaRenameConstituenta>;
/** Represents data, used in ordering a list of {@link IConstituenta}. */
export interface ICstMoveDTO {
export interface IMoveConstituentsDTO {
items: number[];
move_to: number; // Note: 0-base index
}
@ -77,7 +77,7 @@ export interface ICstMoveDTO {
export type IProduceStructureResponse = z.infer<typeof schemaProduceStructureResponse>;
/** Represents data, used in merging single {@link IConstituenta}. */
export type ICstSubstitute = z.infer<typeof schemaCstSubstitute>;
export type ISubstituteConstituents = z.infer<typeof schemaSubstituteConstituents>;
/** Represents input data for inline synthesis. */
export type IInlineSynthesisDTO = z.infer<typeof schemaInlineSynthesis>;
@ -90,7 +90,7 @@ export interface ICheckConstituentaDTO {
}
/** Represents data, used in merging multiple {@link IConstituenta}. */
export type ICstSubstitutionsDTO = z.infer<typeof schemaCstSubstitutions>;
export type ISubstitutionsDTO = z.infer<typeof schemaSubstitutions>;
/**
* Represents Constituenta list.
@ -322,7 +322,7 @@ export const schemaVersionCreatedResponse = z.strictObject({
schema: schemaRSForm
});
export const schemaCstCreate = schemaConstituentaBasics
export const schemaCreateConstituenta = schemaConstituentaBasics
.pick({
cst_type: true,
alias: true,
@ -336,12 +336,12 @@ export const schemaCstCreate = schemaConstituentaBasics
insert_after: z.number().nullable()
});
export const schemaCstCreatedResponse = z.strictObject({
export const schemaConstituentaCreatedResponse = z.strictObject({
new_cst: schemaConstituentaBasics,
schema: schemaRSForm
});
export const schemaCstUpdate = z.strictObject({
export const schemaUpdateConstituenta = z.strictObject({
target: z.number(),
item_data: z.strictObject({
convention: z.string().optional(),
@ -352,7 +352,7 @@ export const schemaCstUpdate = z.strictObject({
})
});
export const schemaCstRename = z.strictObject({
export const schemaRenameConstituenta = z.strictObject({
target: z.number(),
alias: z.string(),
cst_type: schemaCstType
@ -363,20 +363,20 @@ export const schemaProduceStructureResponse = z.strictObject({
schema: schemaRSForm
});
export const schemaCstSubstitute = z.strictObject({
export const schemaSubstituteConstituents = z.strictObject({
original: z.number(),
substitution: z.number()
});
export const schemaCstSubstitutions = z.strictObject({
substitutions: z.array(schemaCstSubstitute).min(1, { message: errorMsg.emptySubstitutions })
export const schemaSubstitutions = z.strictObject({
substitutions: z.array(schemaSubstituteConstituents).min(1, { message: errorMsg.emptySubstitutions })
});
export const schemaInlineSynthesis = z.strictObject({
receiver: z.number(),
source: z.number().nullable(),
items: z.array(z.number()),
substitutions: z.array(schemaCstSubstitute)
substitutions: z.array(schemaSubstituteConstituents)
});
export const schemaRSErrorDescription = z.strictObject({

View File

@ -5,14 +5,14 @@ import { useUpdateTimestamp } from '@/features/library/backend/use-update-timest
import { KEYS } from '@/backend/configuration';
import { rsformsApi } from './api';
import { type ICstCreateDTO } from './types';
import { type ICreateConstituentaDTO } from './types';
export const useCstCreate = () => {
export const useCreateConstituenta = () => {
const client = useQueryClient();
const { updateTimestamp } = useUpdateTimestamp();
const mutation = useMutation({
mutationKey: [KEYS.global_mutation, rsformsApi.baseKey, 'create-cst'],
mutationFn: rsformsApi.cstCreate,
mutationFn: rsformsApi.createConstituenta,
onSuccess: data => {
client.setQueryData(rsformsApi.getRSFormQueryOptions({ itemID: data.schema.id }).queryKey, data.schema);
updateTimestamp(data.schema.id);
@ -28,7 +28,7 @@ export const useCstCreate = () => {
onError: () => client.invalidateQueries()
});
return {
cstCreate: (data: { itemID: number; data: ICstCreateDTO }) =>
createConstituenta: (data: { itemID: number; data: ICreateConstituentaDTO }) =>
mutation.mutateAsync(data).then(response => response.new_cst)
};
};

View File

@ -7,12 +7,12 @@ import { KEYS } from '@/backend/configuration';
import { rsformsApi } from './api';
import { type IConstituentaList } from './types';
export const useCstDelete = () => {
export const useDeleteConstituents = () => {
const client = useQueryClient();
const { updateTimestamp } = useUpdateTimestamp();
const mutation = useMutation({
mutationKey: [KEYS.global_mutation, rsformsApi.baseKey, 'delete-multiple-cst'],
mutationFn: rsformsApi.cstDelete,
mutationFn: rsformsApi.deleteConstituents,
onSuccess: data => {
client.setQueryData(rsformsApi.getRSFormQueryOptions({ itemID: data.id }).queryKey, data);
updateTimestamp(data.id);
@ -28,6 +28,6 @@ export const useCstDelete = () => {
onError: () => client.invalidateQueries()
});
return {
cstDelete: (data: { itemID: number; data: IConstituentaList }) => mutation.mutateAsync(data)
deleteConstituents: (data: { itemID: number; data: IConstituentaList }) => mutation.mutateAsync(data)
};
};

View File

@ -5,14 +5,14 @@ import { useUpdateTimestamp } from '@/features/library/backend/use-update-timest
import { KEYS } from '@/backend/configuration';
import { rsformsApi } from './api';
import { type ICstMoveDTO } from './types';
import { type IMoveConstituentsDTO } from './types';
export const useCstMove = () => {
export const useMoveConstituents = () => {
const client = useQueryClient();
const { updateTimestamp } = useUpdateTimestamp();
const mutation = useMutation({
mutationKey: [KEYS.global_mutation, rsformsApi.baseKey, 'move-cst'],
mutationFn: rsformsApi.cstMove,
mutationFn: rsformsApi.moveConstituents,
onSuccess: data => {
client.setQueryData(rsformsApi.getRSFormQueryOptions({ itemID: data.id }).queryKey, data);
updateTimestamp(data.id);
@ -20,6 +20,6 @@ export const useCstMove = () => {
onError: () => client.invalidateQueries()
});
return {
cstMove: (data: { itemID: number; data: ICstMoveDTO }) => mutation.mutateAsync(data)
moveConstituents: (data: { itemID: number; data: IMoveConstituentsDTO }) => mutation.mutateAsync(data)
};
};

View File

@ -5,14 +5,14 @@ import { useUpdateTimestamp } from '@/features/library/backend/use-update-timest
import { KEYS } from '@/backend/configuration';
import { rsformsApi } from './api';
import { type ICstRenameDTO } from './types';
import { type IRenameConstituentaDTO } from './types';
export const useCstRename = () => {
export const useRenameConstituenta = () => {
const client = useQueryClient();
const { updateTimestamp } = useUpdateTimestamp();
const mutation = useMutation({
mutationKey: [KEYS.global_mutation, rsformsApi.baseKey, 'rename-cst'],
mutationFn: rsformsApi.cstRename,
mutationFn: rsformsApi.renameConstituenta,
onSuccess: data => {
client.setQueryData(rsformsApi.getRSFormQueryOptions({ itemID: data.schema.id }).queryKey, data.schema);
updateTimestamp(data.schema.id);
@ -28,6 +28,6 @@ export const useCstRename = () => {
onError: () => client.invalidateQueries()
});
return {
cstRename: (data: { itemID: number; data: ICstRenameDTO }) => mutation.mutateAsync(data)
renameConstituenta: (data: { itemID: number; data: IRenameConstituentaDTO }) => mutation.mutateAsync(data)
};
};

View File

@ -5,14 +5,14 @@ import { useUpdateTimestamp } from '@/features/library/backend/use-update-timest
import { KEYS } from '@/backend/configuration';
import { rsformsApi } from './api';
import { type ICstSubstitutionsDTO } from './types';
import { type ISubstitutionsDTO } from './types';
export const useCstSubstitute = () => {
export const useSubstituteConstituents = () => {
const client = useQueryClient();
const { updateTimestamp } = useUpdateTimestamp();
const mutation = useMutation({
mutationKey: [KEYS.global_mutation, rsformsApi.baseKey, 'substitute-cst'],
mutationFn: rsformsApi.cstSubstitute,
mutationFn: rsformsApi.substituteConstituents,
onSuccess: data => {
client.setQueryData(rsformsApi.getRSFormQueryOptions({ itemID: data.id }).queryKey, data);
updateTimestamp(data.id);
@ -28,6 +28,6 @@ export const useCstSubstitute = () => {
onError: () => client.invalidateQueries()
});
return {
cstSubstitute: (data: { itemID: number; data: ICstSubstitutionsDTO }) => mutation.mutateAsync(data)
substituteConstituents: (data: { itemID: number; data: ISubstitutionsDTO }) => mutation.mutateAsync(data)
};
};

View File

@ -5,14 +5,14 @@ import { useUpdateTimestamp } from '@/features/library/backend/use-update-timest
import { KEYS } from '@/backend/configuration';
import { rsformsApi } from './api';
import { type ICstUpdateDTO } from './types';
import { type IUpdateConstituentaDTO } from './types';
export const useCstUpdate = () => {
export const useUpdateConstituenta = () => {
const client = useQueryClient();
const { updateTimestamp } = useUpdateTimestamp();
const mutation = useMutation({
mutationKey: [KEYS.global_mutation, rsformsApi.baseKey, 'update-cst'],
mutationFn: rsformsApi.cstUpdate,
mutationFn: rsformsApi.updateConstituenta,
onSuccess: (_, variables) => {
updateTimestamp(variables.itemID);
@ -24,6 +24,6 @@ export const useCstUpdate = () => {
onError: () => client.invalidateQueries()
});
return {
cstUpdate: (data: { itemID: number; data: ICstUpdateDTO }) => mutation.mutateAsync(data)
updateConstituenta: (data: { itemID: number; data: IUpdateConstituentaDTO }) => mutation.mutateAsync(data)
};
};

View File

@ -14,7 +14,7 @@ import { cn } from '@/components/utils';
import { NoData } from '@/components/view';
import { errorMsg } from '@/utils/labels';
import { type ICstSubstitute } from '../backend/types';
import { type ISubstituteConstituents } from '../backend/types';
import { type IConstituenta, type IRSForm } from '../models/rsform';
import { BadgeConstituenta } from './badge-constituenta';
@ -29,10 +29,10 @@ interface IMultiSubstitution {
}
interface PickSubstitutionsProps extends Styling {
value: ICstSubstitute[];
onChange: (newValue: ICstSubstitute[]) => void;
value: ISubstituteConstituents[];
onChange: (newValue: ISubstituteConstituents[]) => void;
suggestions?: ICstSubstitute[];
suggestions?: ISubstituteConstituents[];
rows?: number;
allowSelfSubstitution?: boolean;
@ -75,7 +75,7 @@ export function PickSubstitutions({
const [deleteRight, setDeleteRight] = useState(true);
const toggleDelete = () => setDeleteRight(prev => !prev);
const [ignores, setIgnores] = useState<ICstSubstitute[]>([]);
const [ignores, setIgnores] = useState<ISubstituteConstituents[]>([]);
const filteredSuggestions =
suggestions?.filter(
item => !ignores.find(ignore => ignore.original === item.original && ignore.substitution === item.substitution)
@ -122,7 +122,7 @@ export function PickSubstitutions({
if (!leftCst || !rightCst) {
return;
}
const newSubstitution: ICstSubstitute = {
const newSubstitution: ISubstituteConstituents = {
original: deleteRight ? rightCst.id : leftCst.id,
substitution: deleteRight ? leftCst.id : rightCst.id
};

View File

@ -7,32 +7,36 @@ import { ModalForm } from '@/components/modal';
import { useDialogsStore } from '@/stores/dialogs';
import { errorMsg } from '@/utils/labels';
import { type IConstituentaBasicsDTO, type ICstCreateDTO, schemaCstCreate } from '../../backend/types';
import { useCstCreate } from '../../backend/use-cst-create';
import {
type IConstituentaBasicsDTO,
type ICreateConstituentaDTO,
schemaCreateConstituenta
} from '../../backend/types';
import { useCreateConstituenta } from '../../backend/use-create-constituenta';
import { type IRSForm } from '../../models/rsform';
import { validateNewAlias } from '../../models/rsform-api';
import { FormCreateCst } from './form-create-cst';
export interface DlgCreateCstProps {
initial: ICstCreateDTO;
initial: ICreateConstituentaDTO;
schema: IRSForm;
onCreate: (data: IConstituentaBasicsDTO) => void;
}
export function DlgCreateCst() {
const { initial, schema, onCreate } = useDialogsStore(state => state.props as DlgCreateCstProps);
const { cstCreate } = useCstCreate();
const { createConstituenta: cstCreate } = useCreateConstituenta();
const methods = useForm<ICstCreateDTO>({
resolver: zodResolver(schemaCstCreate),
const methods = useForm<ICreateConstituentaDTO>({
resolver: zodResolver(schemaCreateConstituenta),
defaultValues: { ...initial }
});
const alias = useWatch({ control: methods.control, name: 'alias' });
const cst_type = useWatch({ control: methods.control, name: 'cst_type' });
const isValid = validateNewAlias(alias, cst_type, schema);
function onSubmit(data: ICstCreateDTO) {
function onSubmit(data: ICreateConstituentaDTO) {
return cstCreate({ itemID: schema.id, data }).then(onCreate);
}

View File

@ -8,7 +8,7 @@ import { BadgeHelp } from '@/features/help/components';
import { TextArea, TextInput } from '@/components/input';
import { CstType, type ICstCreateDTO } from '../../backend/types';
import { CstType, type ICreateConstituentaDTO } from '../../backend/types';
import { RSInput } from '../../components/rs-input';
import { SelectCstType } from '../../components/select-cst-type';
import { type IRSForm } from '../../models/rsform';
@ -24,7 +24,7 @@ export function FormCreateCst({ schema }: FormCreateCstProps) {
register,
control,
formState: { errors }
} = useFormContext<ICstCreateDTO>();
} = useFormContext<ICreateConstituentaDTO>();
const [forceComment, setForceComment] = useState(false);
const cst_type = useWatch({ control, name: 'cst_type' });

View File

@ -11,8 +11,13 @@ import { ModalForm } from '@/components/modal';
import { TabLabel, TabList, TabPanel, Tabs } from '@/components/tabs';
import { useDialogsStore } from '@/stores/dialogs';
import { CstType, type IConstituentaBasicsDTO, type ICstCreateDTO, schemaCstCreate } from '../../backend/types';
import { useCstCreate } from '../../backend/use-cst-create';
import {
CstType,
type IConstituentaBasicsDTO,
type ICreateConstituentaDTO,
schemaCreateConstituenta
} from '../../backend/types';
import { useCreateConstituenta } from '../../backend/use-create-constituenta';
import { type IRSForm } from '../../models/rsform';
import { generateAlias, validateNewAlias } from '../../models/rsform-api';
import { FormCreateCst } from '../dlg-create-cst/form-create-cst';
@ -36,10 +41,10 @@ export type TabID = (typeof TabID)[keyof typeof TabID];
export function DlgCstTemplate() {
const { schema, onCreate, insertAfter } = useDialogsStore(state => state.props as DlgCstTemplateProps);
const { cstCreate } = useCstCreate();
const { createConstituenta: cstCreate } = useCreateConstituenta();
const methods = useForm<ICstCreateDTO>({
resolver: zodResolver(schemaCstCreate),
const methods = useForm<ICreateConstituentaDTO>({
resolver: zodResolver(schemaCreateConstituenta),
defaultValues: {
cst_type: CstType.TERM,
insert_after: insertAfter ?? null,
@ -57,7 +62,7 @@ export function DlgCstTemplate() {
const [activeTab, setActiveTab] = useState<TabID>(TabID.TEMPLATE);
function onSubmit(data: ICstCreateDTO) {
function onSubmit(data: ICreateConstituentaDTO) {
return cstCreate({ itemID: schema.id, data }).then(onCreate);
}

View File

@ -10,7 +10,7 @@ import { IconAccept, IconRemove, IconReset } from '@/components/icons';
import { NoData } from '@/components/view';
import { useDialogsStore } from '@/stores/dialogs';
import { type ICstCreateDTO } from '../../backend/types';
import { type ICreateConstituentaDTO } from '../../backend/types';
import { PickConstituenta } from '../../components/pick-constituenta';
import { RSInput } from '../../components/rs-input';
import { type IConstituenta } from '../../models/rsform';
@ -23,7 +23,7 @@ const argumentsHelper = createColumnHelper<IArgumentValue>();
export function TabArguments() {
const { schema } = useDialogsStore(state => state.props as DlgCstTemplateProps);
const { control } = useFormContext<ICstCreateDTO>();
const { control } = useFormContext<ICreateConstituentaDTO>();
const { args, onChangeArguments } = useTemplateContext();
const definition = useWatch({ control, name: 'definition_formal' });

View File

@ -5,7 +5,7 @@ import { useFormContext } from 'react-hook-form';
import { useDialogsStore } from '@/stores/dialogs';
import { type ICstCreateDTO } from '../../backend/types';
import { type ICreateConstituentaDTO } from '../../backend/types';
import { type IConstituenta } from '../../models/rsform';
import { generateAlias } from '../../models/rsform-api';
import { type IArgumentValue } from '../../models/rslang';
@ -16,7 +16,7 @@ import { TemplateContext } from './template-context';
export const TemplateState = ({ children }: React.PropsWithChildren) => {
const { schema } = useDialogsStore(state => state.props as DlgCstTemplateProps);
const { setValue } = useFormContext<ICstCreateDTO>();
const { setValue } = useFormContext<ICreateConstituentaDTO>();
const [templateID, setTemplateID] = useState<number | null>(null);
const [args, setArguments] = useState<IArgumentValue[]>([]);
const [prototype, setPrototype] = useState<IConstituenta | null>(null);

View File

@ -7,7 +7,7 @@ import { ModalForm } from '@/components/modal';
import { useDialogsStore } from '@/stores/dialogs';
import { prefixes } from '@/utils/constants';
import { useCstDelete } from '../../backend/use-cst-delete';
import { useDeleteConstituents } from '../../backend/use-delete-constituents';
import { type IRSForm } from '../../models/rsform';
import { ListConstituents } from './list-constituents';
@ -20,7 +20,7 @@ export interface DlgDeleteCstProps {
export function DlgDeleteCst() {
const { selected, schema, afterDelete } = useDialogsStore(state => state.props as DlgDeleteCstProps);
const { cstDelete } = useCstDelete();
const { deleteConstituents: cstDelete } = useDeleteConstituents();
const [expandOut, setExpandOut] = useState(false);
const expansion: number[] = schema.graph.expandAllOutputs(selected);

View File

@ -15,7 +15,7 @@ import { useGenerateLexeme } from '../../backend/cctext/use-generate-lexeme';
import { useInflectText } from '../../backend/cctext/use-inflect-text';
import { useIsProcessingCctext } from '../../backend/cctext/use-is-processing-cctext';
import { useParseText } from '../../backend/cctext/use-parse-text';
import { useCstUpdate } from '../../backend/use-cst-update';
import { useUpdateConstituenta } from '../../backend/use-update-constituenta';
import { SelectMultiGrammeme } from '../../components/select-multi-grammeme';
import { type Grammeme, type IWordForm, supportedGrammemes } from '../../models/language';
import { parseGrammemes, wordFormEquals } from '../../models/language-api';
@ -30,7 +30,7 @@ export interface DlgEditWordFormsProps {
export function DlgEditWordForms() {
const { itemID, target } = useDialogsStore(state => state.props as DlgEditWordFormsProps);
const { cstUpdate } = useCstUpdate();
const { updateConstituenta: cstUpdate } = useUpdateConstituenta();
const isProcessing = useIsProcessingCctext();
const { inflectText } = useInflectText();

View File

@ -9,8 +9,8 @@ import { TextInput } from '@/components/input';
import { ModalForm } from '@/components/modal';
import { useDialogsStore } from '@/stores/dialogs';
import { type CstType, type ICstRenameDTO, schemaCstRename } from '../backend/types';
import { useCstRename } from '../backend/use-cst-rename';
import { type CstType, type IRenameConstituentaDTO, schemaRenameConstituenta } from '../backend/types';
import { useRenameConstituenta } from '../backend/use-rename-constituenta';
import { SelectCstType } from '../components/select-cst-type';
import { type IConstituenta, type IRSForm } from '../models/rsform';
import { generateAlias, validateNewAlias } from '../models/rsform-api';
@ -22,10 +22,10 @@ export interface DlgRenameCstProps {
export function DlgRenameCst() {
const { schema, target } = useDialogsStore(state => state.props as DlgRenameCstProps);
const { cstRename } = useCstRename();
const { renameConstituenta: cstRename } = useRenameConstituenta();
const { register, setValue, handleSubmit, control } = useForm<ICstRenameDTO>({
resolver: zodResolver(schemaCstRename),
const { register, setValue, handleSubmit, control } = useForm<IRenameConstituentaDTO>({
resolver: zodResolver(schemaRenameConstituenta),
defaultValues: {
target: target.id,
alias: target.alias,
@ -36,7 +36,7 @@ export function DlgRenameCst() {
const cst_type = useWatch({ control, name: 'cst_type' });
const isValid = alias !== target.alias && validateNewAlias(alias, cst_type, schema);
function onSubmit(data: ICstRenameDTO) {
function onSubmit(data: IRenameConstituentaDTO) {
return cstRename({ itemID: schema.id, data: data });
}

View File

@ -9,33 +9,33 @@ import { ErrorField } from '@/components/input';
import { ModalForm } from '@/components/modal';
import { useDialogsStore } from '@/stores/dialogs';
import { type ICstSubstitutionsDTO, schemaCstSubstitutions } from '../backend/types';
import { useCstSubstitute } from '../backend/use-cst-substitute';
import { type ISubstitutionsDTO, schemaSubstitutions } from '../backend/types';
import { useSubstituteConstituents } from '../backend/use-substitute-constituents';
import { PickSubstitutions } from '../components/pick-substitutions';
import { type IRSForm } from '../models/rsform';
export interface DlgSubstituteCstProps {
schema: IRSForm;
onSubstitute: (data: ICstSubstitutionsDTO) => void;
onSubstitute: (data: ISubstitutionsDTO) => void;
}
export function DlgSubstituteCst() {
const { onSubstitute, schema } = useDialogsStore(state => state.props as DlgSubstituteCstProps);
const { cstSubstitute } = useCstSubstitute();
const { substituteConstituents: cstSubstitute } = useSubstituteConstituents();
const {
handleSubmit,
control,
formState: { errors, isValid }
} = useForm<ICstSubstitutionsDTO>({
resolver: zodResolver(schemaCstSubstitutions),
} = useForm<ISubstitutionsDTO>({
resolver: zodResolver(schemaSubstitutions),
defaultValues: {
substitutions: []
},
mode: 'onChange'
});
function onSubmit(data: ICstSubstitutionsDTO) {
function onSubmit(data: ISubstitutionsDTO) {
return cstSubstitute({ itemID: schema.id, data: data }).then(() => onSubstitute(data));
}

View File

@ -1,6 +1,6 @@
export {
CstType,
type ICstSubstitute,
type ISubstituteConstituents as ICstSubstitute,
type IRSFormDTO,
type IVersionCreatedResponse,
ParsingStatus,

View File

@ -17,13 +17,13 @@ import { promptUnsaved } from '@/utils/utils';
import {
CstType,
type ICstUpdateDTO,
type IExpressionParseDTO,
type IUpdateConstituentaDTO,
ParsingStatus,
schemaCstUpdate
schemaUpdateConstituenta
} from '../../../backend/types';
import { useCstUpdate } from '../../../backend/use-cst-update';
import { useMutatingRSForm } from '../../../backend/use-mutating-rsform';
import { useUpdateConstituenta } from '../../../backend/use-update-constituenta';
import { RefsInput } from '../../../components/refs-input';
import { labelCstTypification, labelTypification } from '../../../labels';
import { type IConstituenta, type IRSForm } from '../../../models/rsform';
@ -50,9 +50,9 @@ export function FormConstituenta({ disabled, id, toggleReset, schema, activeCst,
control,
reset,
formState: { isDirty }
} = useForm<ICstUpdateDTO>({ resolver: zodResolver(schemaCstUpdate) });
} = useForm<IUpdateConstituentaDTO>({ resolver: zodResolver(schemaUpdateConstituenta) });
const { cstUpdate } = useCstUpdate();
const { updateConstituenta: cstUpdate } = useUpdateConstituenta();
const showTypification = useDialogsStore(state => state.showShowTypeGraph);
const showEditTerm = useDialogsStore(state => state.showEditWordForms);
const showRenameCst = useDialogsStore(state => state.showRenameCst);
@ -104,7 +104,7 @@ export function FormConstituenta({ disabled, id, toggleReset, schema, activeCst,
return () => setIsModified(false);
}, [isDirty, activeCst, setIsModified]);
function onSubmit(data: ICstUpdateDTO) {
function onSubmit(data: IUpdateConstituentaDTO) {
return cstUpdate({ itemID: schema.id, data }).then(() => reset({ ...data }));
}

View File

@ -4,7 +4,7 @@ import clsx from 'clsx';
import { HelpTopic } from '@/features/help';
import { BadgeHelp } from '@/features/help/components';
import { useVersionRestore } from '@/features/library/backend/use-version-restore';
import { useRestoreVersion } from '@/features/library/backend/use-restore-version';
import { MiniButton } from '@/components/control';
import { IconNewVersion, IconUpload, IconVersions } from '@/components/icons';
@ -22,7 +22,7 @@ interface ToolbarVersioningProps {
export function ToolbarVersioning({ blockReload, className }: ToolbarVersioningProps) {
const { isModified } = useModificationStore();
const { versionRestore } = useVersionRestore();
const { restoreVersion: versionRestore } = useRestoreVersion();
const { schema, isMutable, isContentEditable, navigateVersion, activeVersion, selected } = useRSEdit();
const showCreateVersion = useDialogsStore(state => state.showCreateVersion);

View File

@ -15,9 +15,9 @@ import { PARAMETER, prefixes } from '@/utils/constants';
import { promptText } from '@/utils/labels';
import { promptUnsaved } from '@/utils/utils';
import { CstType, type IConstituentaBasicsDTO, type ICstCreateDTO } from '../../backend/types';
import { useCstCreate } from '../../backend/use-cst-create';
import { useCstMove } from '../../backend/use-cst-move';
import { CstType, type IConstituentaBasicsDTO, type ICreateConstituentaDTO } from '../../backend/types';
import { useCreateConstituenta } from '../../backend/use-create-constituenta';
import { useMoveConstituents } from '../../backend/use-move-constituents';
import { useRSFormSuspense } from '../../backend/use-rsform';
import { type IConstituenta } from '../../models/rsform';
import { generateAlias } from '../../models/rsform-api';
@ -59,8 +59,8 @@ export const RSEditState = ({
const activeCst = selected.length === 0 ? null : schema.cstByID.get(selected[selected.length - 1])!;
const { cstCreate } = useCstCreate();
const { cstMove } = useCstMove();
const { createConstituenta: cstCreate } = useCreateConstituenta();
const { moveConstituents: cstMove } = useMoveConstituents();
const { deleteItem } = useDeleteItem();
const showCreateCst = useDialogsStore(state => state.showCreateCst);
@ -206,7 +206,7 @@ export const RSEditState = ({
function createCst(type: CstType | null, skipDialog: boolean, definition?: string) {
const targetType = type ?? activeCst?.cst_type ?? CstType.BASE;
const data: ICstCreateDTO = {
const data: ICreateConstituentaDTO = {
insert_after: activeCst?.id ?? null,
cst_type: targetType,
alias: generateAlias(targetType, schema),