Prepare fontend templates integration

This commit is contained in:
IRBorisov 2023-11-01 13:41:32 +03:00
parent 72052d186b
commit 639d274714
8 changed files with 38 additions and 43 deletions

View File

@ -1,24 +1,25 @@
import { createContext, useCallback, useContext, useEffect, useState } from 'react';
import { ErrorInfo } from '../components/BackendError';
import { ILibraryFilter } from '../models/miscelanious';
import { IRSFormCreateData, IRSFormData } from '../models/rsform';
import { matchLibraryItem } from '../models/library';
import { ILibraryItem } from '../models/library';
import { DataCallback, deleteLibraryItem, getLibrary, postCloneLibraryItem, postNewRSForm } from '../utils/backendAPI';
import { ILibraryFilter } from '../models/miscelanious';
import { IRSFormCreateData, IRSFormData } from '../models/rsform';
import { DataCallback, deleteLibraryItem, getLibrary, getTemplates, postCloneLibraryItem, postNewRSForm } from '../utils/backendAPI';
import { useAuth } from './AuthContext';
interface ILibraryContext {
items: ILibraryItem[]
templates: ILibraryItem[]
loading: boolean
processing: boolean
error: ErrorInfo
setError: (error: ErrorInfo) => void
filter: (params: ILibraryFilter) => ILibraryItem[]
createSchema: (data: IRSFormCreateData, callback?: DataCallback<ILibraryItem>) => void
cloneSchema: (target: number, data: IRSFormCreateData, callback: DataCallback<IRSFormData>) => void
destroySchema: (target: number, callback?: () => void) => void
applyFilter: (params: ILibraryFilter) => ILibraryItem[]
createItem: (data: IRSFormCreateData, callback?: DataCallback<ILibraryItem>) => void
cloneItem: (target: number, data: IRSFormCreateData, callback: DataCallback<IRSFormData>) => void
destroyItem: (target: number, callback?: () => void) => void
}
const LibraryContext = createContext<ILibraryContext | null>(null)
@ -38,12 +39,13 @@ interface LibraryStateProps {
export const LibraryState = ({ children }: LibraryStateProps) => {
const [ items, setItems ] = useState<ILibraryItem[]>([])
const [ templates, setTemplates ] = useState<ILibraryItem[]>([])
const [ loading, setLoading ] = useState(false);
const [ processing, setProcessing ] = useState(false);
const [ error, setError ] = useState<ErrorInfo>(undefined);
const { user } = useAuth();
const filter = useCallback(
const applyFilter = useCallback(
(params: ILibraryFilter) => {
let result = items;
if (params.is_owned) {
@ -80,13 +82,19 @@ export const LibraryState = ({ children }: LibraryStateProps) => {
if (callback) callback();
}
});
setTemplates([]);
getTemplates({
showError: true,
onSuccess: newData => setTemplates(newData)
});
}, []);
useEffect(() => {
reload();
}, [reload, user]);
const createSchema = useCallback(
const createItem = useCallback(
(data: IRSFormCreateData, callback?: DataCallback<ILibraryItem>) => {
setError(undefined);
postNewRSForm({
@ -103,7 +111,7 @@ export const LibraryState = ({ children }: LibraryStateProps) => {
});
}, [reload, user]);
const destroySchema = useCallback(
const destroyItem = useCallback(
(target: number, callback?: () => void) => {
setError(undefined)
deleteLibraryItem(String(target), {
@ -119,7 +127,7 @@ export const LibraryState = ({ children }: LibraryStateProps) => {
});
}, [setError, reload, user]);
const cloneSchema = useCallback(
const cloneItem = useCallback(
(target: number, data: IRSFormCreateData, callback: DataCallback<IRSFormData>) => {
if (!user) {
return;
@ -141,8 +149,8 @@ export const LibraryState = ({ children }: LibraryStateProps) => {
return (
<LibraryContext.Provider value={{
items, loading, processing, error, setError,
filter, createSchema, cloneSchema, destroySchema
items, templates, loading, processing, error, setError,
applyFilter, createItem, cloneItem, destroyItem
}}>
{ children }
</LibraryContext.Provider>

View File

@ -3,12 +3,12 @@ import { createContext, useCallback, useContext, useMemo, useState } from 'react
import { type ErrorInfo } from '../components/BackendError'
import { useRSFormDetails } from '../hooks/useRSFormDetails'
import { ILibraryItem } from '../models/library'
import { ILibraryUpdateData } from '../models/library'
import {
IConstituentaList, IConstituentaMeta, ICstCreateData,
ICstMovetoData, ICstRenameData, ICstUpdateData,
IRSForm, IRSFormUploadData
} from '../models/rsform'
import { ILibraryUpdateData } from '../models/library'
import {
type DataCallback, deleteUnsubscribe,
getTRSFile,

View File

@ -22,7 +22,7 @@ import { EXTEOR_TRS_FILE } from '../utils/constants';
function CreateRSFormPage() {
const location = useLocation();
const { navigateTo, navigateHistory } = useConceptNavigation();
const { createSchema, error, setError, processing } = useLibrary();
const { createItem, error, setError, processing } = useLibrary();
const [title, setTitle] = useState('');
const [alias, setAlias] = useState('');
@ -60,7 +60,7 @@ function CreateRSFormPage() {
file: file,
fileName: file?.name
};
createSchema(data, (newSchema) => {
createItem(data, (newSchema) => {
toast.success('Схема успешно создана');
navigateTo(`/rsforms/${newSchema.id}`);
});

View File

@ -28,7 +28,7 @@ function LibraryPage() {
useLayoutEffect(
() => {
setItems(library.filter(filter));
setItems(library.applyFilter(filter));
}, [library, filter, filter.query]);
const resetQuery = useCallback(

View File

@ -22,7 +22,7 @@ function DlgCloneRSForm({ hideWindow }: DlgCloneRSFormProps) {
const [common, setCommon] = useState(false);
const [canonical, setCanonical] = useState(false);
const { cloneSchema } = useLibrary();
const { cloneItem } = useLibrary();
const { schema } = useRSForm();
useEffect(() => {
@ -47,7 +47,7 @@ function DlgCloneRSForm({ hideWindow }: DlgCloneRSFormProps) {
is_common: common,
is_canonical: canonical
};
cloneSchema(schema.id, data, newSchema => {
cloneItem(schema.id, data, newSchema => {
toast.success(`Схема создана: ${newSchema.alias}`);
navigateTo(`/rsforms/${newSchema.id}`);
});

View File

@ -61,27 +61,6 @@ function DlgTemplates({ hideWindow, schema, onCreate }: DlgTemplatesProps) {
}
}, [alias, selectedType, schema]);
{/* <SwitchButton
value={type}
isSelected={isSelected}
onSelect={onSelect}
dimensions='min-w-[12rem] h-fit'
label={labelReferenceType(type)}
/> */}
// <div className='flex items-center self-center flex-start'>
// <ReferenceTypeButton
// type={ReferenceType.ENTITY}
// onSelect={setType}
// isSelected={type === ReferenceType.ENTITY}
// />
// <ReferenceTypeButton
// type={ReferenceType.SYNTACTIC}
// onSelect={setType}
// isSelected={type === ReferenceType.SYNTACTIC}
// />
// </div>
return (
<Modal
title='Создание конституенты из шаблона'

View File

@ -59,7 +59,7 @@ function RSTabs() {
error, schema, loading, claim, download, isTracking,
cstCreate, cstDelete, cstRename, subscribe, unsubscribe, cstUpdate
} = useRSForm();
const { destroySchema } = useLibrary();
const { destroyItem } = useLibrary();
const { setNoFooter, noNavigation } = useConceptTheme();
const { isModified, setIsModified } = useModificationPrompt();
@ -241,11 +241,11 @@ function RSTabs() {
if (!schema || !window.confirm('Вы уверены, что хотите удалить данную схему?')) {
return;
}
destroySchema(schema.id, () => {
destroyItem(schema.id, () => {
toast.success('Схема удалена');
navigateTo('/library');
});
}, [schema, destroySchema, navigateTo]);
}, [schema, destroyItem, navigateTo]);
const onClaimSchema = useCallback(
() => {

View File

@ -131,6 +131,14 @@ export function getLibrary(request: FrontPull<ILibraryItem[]>) {
});
}
export function getTemplates(request: FrontPull<ILibraryItem[]>) {
AxiosGet({
title: 'Available LibraryItems list',
endpoint: '/api/library/templates',
request: request
});
}
export function postNewRSForm(request: FrontExchange<IRSFormCreateData, ILibraryItem>) {
AxiosPost({
title: 'New RSForm',