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 { 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>
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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}`);
|
||||||
});
|
});
|
||||||
|
|
|
@ -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(
|
||||||
|
|
|
@ -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}`);
|
||||||
});
|
});
|
||||||
|
|
|
@ -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='Создание конституенты из шаблона'
|
||||||
|
|
|
@ -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(
|
||||||
() => {
|
() => {
|
||||||
|
|
|
@ -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',
|
||||||
|
|
Loading…
Reference in New Issue
Block a user