mirror of
https://github.com/IRBorisov/ConceptPortal.git
synced 2025-06-26 13:00:39 +03:00
Prepare fontend templates integration
This commit is contained in:
parent
72052d186b
commit
639d274714
|
@ -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>
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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}`);
|
||||
});
|
||||
|
|
|
@ -28,7 +28,7 @@ function LibraryPage() {
|
|||
|
||||
useLayoutEffect(
|
||||
() => {
|
||||
setItems(library.filter(filter));
|
||||
setItems(library.applyFilter(filter));
|
||||
}, [library, filter, filter.query]);
|
||||
|
||||
const resetQuery = useCallback(
|
||||
|
|
|
@ -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}`);
|
||||
});
|
||||
|
|
|
@ -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='Создание конституенты из шаблона'
|
||||
|
|
|
@ -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(
|
||||
() => {
|
||||
|
|
|
@ -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',
|
||||
|
|
Loading…
Reference in New Issue
Block a user