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

View File

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

View File

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

View File

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

View File

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

View File

@ -61,27 +61,6 @@ function DlgTemplates({ hideWindow, schema, onCreate }: DlgTemplatesProps) {
} }
}, [alias, selectedType, schema]); }, [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 ( return (
<Modal <Modal
title='Создание конституенты из шаблона' title='Создание конституенты из шаблона'

View File

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