2023-12-13 14:32:57 +03:00
|
|
|
'use client';
|
|
|
|
|
2023-12-05 01:22:44 +03:00
|
|
|
import { createContext, useCallback, useContext, useMemo, useState } from 'react';
|
2023-07-25 20:27:29 +03:00
|
|
|
|
|
|
|
import {
|
2023-12-28 14:04:44 +03:00
|
|
|
type DataCallback,
|
|
|
|
deleteUnsubscribe,
|
2024-03-04 19:22:22 +03:00
|
|
|
deleteVersion,
|
2023-12-13 14:32:57 +03:00
|
|
|
getTRSFile,
|
2023-12-28 14:04:44 +03:00
|
|
|
patchConstituenta,
|
|
|
|
patchDeleteConstituenta,
|
2024-05-27 20:42:34 +03:00
|
|
|
patchEditorsSet as patchSetEditors,
|
2024-03-23 21:42:50 +03:00
|
|
|
patchInlineSynthesis,
|
2023-12-13 14:32:57 +03:00
|
|
|
patchLibraryItem,
|
2023-12-28 14:04:44 +03:00
|
|
|
patchMoveConstituenta,
|
2024-03-15 12:34:41 +03:00
|
|
|
patchProduceStructure,
|
2023-12-28 14:04:44 +03:00
|
|
|
patchRenameConstituenta,
|
|
|
|
patchResetAliases,
|
2024-04-24 10:27:17 +03:00
|
|
|
patchRestoreOrder,
|
2024-05-18 19:22:26 +03:00
|
|
|
patchRestoreVersion,
|
2024-06-02 23:41:46 +03:00
|
|
|
patchSetAccessPolicy,
|
|
|
|
patchSetLocation,
|
2024-05-27 20:42:34 +03:00
|
|
|
patchSetOwner,
|
2024-03-27 22:54:24 +03:00
|
|
|
patchSubstituteConstituents,
|
2023-12-28 14:04:44 +03:00
|
|
|
patchUploadTRS,
|
2024-03-04 19:22:22 +03:00
|
|
|
patchVersion,
|
|
|
|
postCreateVersion,
|
2023-12-28 14:04:44 +03:00
|
|
|
postNewConstituenta,
|
|
|
|
postSubscribe
|
2024-04-24 10:27:17 +03:00
|
|
|
} from '@/app/backendAPI';
|
|
|
|
import { type ErrorData } from '@/components/info/InfoError';
|
|
|
|
import useRSFormDetails from '@/hooks/useRSFormDetails';
|
2024-06-02 23:41:46 +03:00
|
|
|
import { AccessPolicy, ILibraryItem, IVersionData, VersionID } from '@/models/library';
|
2024-04-24 10:27:17 +03:00
|
|
|
import { ILibraryUpdateData } from '@/models/library';
|
|
|
|
import {
|
|
|
|
ConstituentaID,
|
|
|
|
IConstituentaList,
|
|
|
|
IConstituentaMeta,
|
|
|
|
ICstCreateData,
|
|
|
|
ICstMovetoData,
|
|
|
|
ICstRenameData,
|
|
|
|
ICstSubstituteData,
|
|
|
|
ICstUpdateData,
|
|
|
|
IInlineSynthesisData,
|
|
|
|
IRSForm,
|
|
|
|
IRSFormData,
|
2024-05-26 14:54:02 +03:00
|
|
|
IRSFormUploadData,
|
|
|
|
ITargetCst
|
2024-04-24 10:27:17 +03:00
|
|
|
} from '@/models/rsform';
|
2024-05-27 20:42:34 +03:00
|
|
|
import { UserID } from '@/models/user';
|
2023-12-13 14:32:57 +03:00
|
|
|
|
2023-12-05 01:22:44 +03:00
|
|
|
import { useAuth } from './AuthContext';
|
|
|
|
import { useLibrary } from './LibraryContext';
|
2023-07-15 17:46:19 +03:00
|
|
|
|
|
|
|
interface IRSFormContext {
|
2023-12-28 14:04:44 +03:00
|
|
|
schema?: IRSForm;
|
2024-03-04 19:22:22 +03:00
|
|
|
schemaID: string;
|
2024-05-18 19:22:26 +03:00
|
|
|
versionID?: string;
|
2023-07-24 22:34:03 +03:00
|
|
|
|
2023-12-28 14:04:44 +03:00
|
|
|
loading: boolean;
|
2024-06-02 23:41:46 +03:00
|
|
|
errorLoading: ErrorData;
|
2023-12-28 14:04:44 +03:00
|
|
|
processing: boolean;
|
2024-06-02 23:41:46 +03:00
|
|
|
processingError: ErrorData;
|
2023-07-24 22:34:03 +03:00
|
|
|
|
2024-03-04 19:22:22 +03:00
|
|
|
isArchive: boolean;
|
2023-12-28 14:04:44 +03:00
|
|
|
isOwned: boolean;
|
|
|
|
isSubscribed: boolean;
|
2023-08-11 19:28:12 +03:00
|
|
|
|
2023-12-28 14:04:44 +03:00
|
|
|
update: (data: ILibraryUpdateData, callback?: DataCallback<ILibraryItem>) => void;
|
|
|
|
download: (callback: DataCallback<Blob>) => void;
|
|
|
|
upload: (data: IRSFormUploadData, callback: () => void) => void;
|
2023-07-23 21:38:04 +03:00
|
|
|
|
2024-05-27 20:42:34 +03:00
|
|
|
subscribe: (callback?: () => void) => void;
|
|
|
|
unsubscribe: (callback?: () => void) => void;
|
|
|
|
setOwner: (newOwner: UserID, callback?: () => void) => void;
|
2024-06-02 23:41:46 +03:00
|
|
|
setAccessPolicy: (newPolicy: AccessPolicy, callback?: () => void) => void;
|
|
|
|
setLocation: (newLocation: string, callback?: () => void) => void;
|
2024-05-27 20:42:34 +03:00
|
|
|
setEditors: (newEditors: UserID[], callback?: () => void) => void;
|
|
|
|
|
2023-12-28 14:04:44 +03:00
|
|
|
resetAliases: (callback: () => void) => void;
|
2024-04-24 10:27:17 +03:00
|
|
|
restoreOrder: (callback: () => void) => void;
|
2024-05-26 14:54:02 +03:00
|
|
|
produceStructure: (data: ITargetCst, callback?: DataCallback<ConstituentaID[]>) => void;
|
2024-03-23 21:42:50 +03:00
|
|
|
inlineSynthesis: (data: IInlineSynthesisData, callback?: DataCallback<IRSFormData>) => void;
|
2023-12-28 14:04:44 +03:00
|
|
|
|
|
|
|
cstCreate: (data: ICstCreateData, callback?: DataCallback<IConstituentaMeta>) => void;
|
|
|
|
cstRename: (data: ICstRenameData, callback?: DataCallback<IConstituentaMeta>) => void;
|
2024-03-01 18:19:33 +03:00
|
|
|
cstSubstitute: (data: ICstSubstituteData, callback?: () => void) => void;
|
2023-12-28 14:04:44 +03:00
|
|
|
cstUpdate: (data: ICstUpdateData, callback?: DataCallback<IConstituentaMeta>) => void;
|
|
|
|
cstDelete: (data: IConstituentaList, callback?: () => void) => void;
|
|
|
|
cstMoveTo: (data: ICstMovetoData, callback?: () => void) => void;
|
2024-03-04 19:22:22 +03:00
|
|
|
|
2024-05-27 20:42:34 +03:00
|
|
|
versionCreate: (data: IVersionData, callback?: (version: VersionID) => void) => void;
|
|
|
|
versionUpdate: (target: VersionID, data: IVersionData, callback?: () => void) => void;
|
|
|
|
versionDelete: (target: VersionID, callback?: () => void) => void;
|
2024-05-18 19:22:26 +03:00
|
|
|
versionRestore: (target: string, callback?: () => void) => void;
|
2023-07-15 17:46:19 +03:00
|
|
|
}
|
|
|
|
|
2023-12-28 14:04:44 +03:00
|
|
|
const RSFormContext = createContext<IRSFormContext | null>(null);
|
2023-07-24 22:34:03 +03:00
|
|
|
export const useRSForm = () => {
|
2023-12-28 14:04:44 +03:00
|
|
|
const context = useContext(RSFormContext);
|
2023-08-22 20:29:07 +03:00
|
|
|
if (context === null) {
|
2023-12-05 01:22:44 +03:00
|
|
|
throw new Error('useRSForm has to be used within <RSFormState.Provider>');
|
2023-07-24 22:34:03 +03:00
|
|
|
}
|
2023-12-05 01:22:44 +03:00
|
|
|
return context;
|
2023-12-28 14:04:44 +03:00
|
|
|
};
|
2023-07-15 17:46:19 +03:00
|
|
|
|
|
|
|
interface RSFormStateProps {
|
2023-12-28 14:04:44 +03:00
|
|
|
schemaID: string;
|
2024-03-04 19:22:22 +03:00
|
|
|
versionID?: string;
|
2023-12-28 14:04:44 +03:00
|
|
|
children: React.ReactNode;
|
2023-07-15 17:46:19 +03:00
|
|
|
}
|
|
|
|
|
2024-03-04 19:22:22 +03:00
|
|
|
export const RSFormState = ({ schemaID, versionID, children }: RSFormStateProps) => {
|
2023-08-27 15:39:49 +03:00
|
|
|
const library = useLibrary();
|
2023-08-09 17:19:12 +03:00
|
|
|
const { user } = useAuth();
|
2024-03-04 19:22:22 +03:00
|
|
|
const {
|
|
|
|
schema, // prettier: split lines
|
|
|
|
reload,
|
2024-06-02 23:41:46 +03:00
|
|
|
error: errorLoading,
|
2024-03-04 19:22:22 +03:00
|
|
|
setSchema,
|
|
|
|
loading
|
|
|
|
} = useRSFormDetails({
|
|
|
|
target: schemaID,
|
|
|
|
version: versionID
|
|
|
|
});
|
2023-12-05 01:22:44 +03:00
|
|
|
const [processing, setProcessing] = useState(false);
|
2024-06-02 23:41:46 +03:00
|
|
|
const [processingError, setProcessingError] = useState<ErrorData>(undefined);
|
2023-07-15 17:46:19 +03:00
|
|
|
|
2023-12-05 01:22:44 +03:00
|
|
|
const [toggleTracking, setToggleTracking] = useState(false);
|
2023-07-20 17:11:03 +03:00
|
|
|
|
2023-12-28 14:04:44 +03:00
|
|
|
const isOwned = useMemo(() => {
|
2023-08-25 22:51:20 +03:00
|
|
|
return user?.id === schema?.owner || false;
|
|
|
|
}, [user, schema?.owner]);
|
|
|
|
|
2024-03-04 19:22:22 +03:00
|
|
|
const isArchive = useMemo(() => !!versionID, [versionID]);
|
|
|
|
|
2023-12-28 14:04:44 +03:00
|
|
|
const isSubscribed = useMemo(() => {
|
2023-08-26 19:39:49 +03:00
|
|
|
if (!user || !schema || !user.id) {
|
2023-08-26 17:26:49 +03:00
|
|
|
return false;
|
|
|
|
}
|
|
|
|
return schema.subscribers.includes(user.id);
|
2023-12-28 14:04:44 +03:00
|
|
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
2023-08-26 17:26:49 +03:00
|
|
|
}, [user, schema, toggleTracking]);
|
2023-07-20 17:11:03 +03:00
|
|
|
|
2023-07-23 21:38:04 +03:00
|
|
|
const update = useCallback(
|
2023-12-28 14:04:44 +03:00
|
|
|
(data: ILibraryUpdateData, callback?: DataCallback<ILibraryItem>) => {
|
|
|
|
if (!schema) {
|
|
|
|
return;
|
2023-07-26 23:11:00 +03:00
|
|
|
}
|
2024-06-02 23:41:46 +03:00
|
|
|
setProcessingError(undefined);
|
2023-12-28 14:04:44 +03:00
|
|
|
patchLibraryItem(schemaID, {
|
|
|
|
data: data,
|
|
|
|
showError: true,
|
|
|
|
setLoading: setProcessing,
|
2024-06-02 23:41:46 +03:00
|
|
|
onError: setProcessingError,
|
2023-12-28 14:04:44 +03:00
|
|
|
onSuccess: newData => {
|
|
|
|
setSchema(Object.assign(schema, newData));
|
|
|
|
library.localUpdateItem(newData);
|
|
|
|
if (callback) callback(newData);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
},
|
2024-06-02 23:41:46 +03:00
|
|
|
[schemaID, setSchema, schema, library]
|
2023-12-28 14:04:44 +03:00
|
|
|
);
|
|
|
|
|
2023-07-27 22:04:25 +03:00
|
|
|
const upload = useCallback(
|
2023-12-28 14:04:44 +03:00
|
|
|
(data: IRSFormUploadData, callback?: () => void) => {
|
|
|
|
if (!schema) {
|
|
|
|
return;
|
2023-07-27 22:04:25 +03:00
|
|
|
}
|
2024-06-02 23:41:46 +03:00
|
|
|
setProcessingError(undefined);
|
2023-12-28 14:04:44 +03:00
|
|
|
patchUploadTRS(schemaID, {
|
|
|
|
data: data,
|
|
|
|
showError: true,
|
|
|
|
setLoading: setProcessing,
|
2024-06-02 23:41:46 +03:00
|
|
|
onError: setProcessingError,
|
2023-12-28 14:04:44 +03:00
|
|
|
onSuccess: newData => {
|
|
|
|
setSchema(newData);
|
|
|
|
library.localUpdateItem(newData);
|
|
|
|
if (callback) callback();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
},
|
2024-06-02 23:41:46 +03:00
|
|
|
[schemaID, setSchema, schema, library]
|
2023-12-28 14:04:44 +03:00
|
|
|
);
|
2023-07-15 17:46:19 +03:00
|
|
|
|
2023-12-28 14:04:44 +03:00
|
|
|
const subscribe = useCallback(
|
|
|
|
(callback?: () => void) => {
|
|
|
|
if (!schema || !user) {
|
|
|
|
return;
|
2023-08-26 17:26:49 +03:00
|
|
|
}
|
2024-06-02 23:41:46 +03:00
|
|
|
setProcessingError(undefined);
|
2023-12-28 14:04:44 +03:00
|
|
|
postSubscribe(schemaID, {
|
|
|
|
showError: true,
|
|
|
|
setLoading: setProcessing,
|
2024-06-02 23:41:46 +03:00
|
|
|
onError: setProcessingError,
|
2023-12-28 14:04:44 +03:00
|
|
|
onSuccess: () => {
|
|
|
|
if (user.id && !schema.subscribers.includes(user.id)) {
|
|
|
|
schema.subscribers.push(user.id);
|
|
|
|
}
|
|
|
|
if (!user.subscriptions.includes(schema.id)) {
|
|
|
|
user.subscriptions.push(schema.id);
|
|
|
|
}
|
|
|
|
setToggleTracking(prev => !prev);
|
|
|
|
if (callback) callback();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
},
|
2024-06-02 23:41:46 +03:00
|
|
|
[schemaID, schema, user]
|
2023-12-28 14:04:44 +03:00
|
|
|
);
|
2023-08-26 17:26:49 +03:00
|
|
|
|
|
|
|
const unsubscribe = useCallback(
|
2023-12-28 14:04:44 +03:00
|
|
|
(callback?: () => void) => {
|
|
|
|
if (!schema || !user) {
|
|
|
|
return;
|
2023-08-26 17:26:49 +03:00
|
|
|
}
|
2024-06-02 23:41:46 +03:00
|
|
|
setProcessingError(undefined);
|
2023-12-28 14:04:44 +03:00
|
|
|
deleteUnsubscribe(schemaID, {
|
|
|
|
showError: true,
|
|
|
|
setLoading: setProcessing,
|
2024-06-02 23:41:46 +03:00
|
|
|
onError: setProcessingError,
|
2023-12-28 14:04:44 +03:00
|
|
|
onSuccess: () => {
|
|
|
|
if (user.id && schema.subscribers.includes(user.id)) {
|
|
|
|
schema.subscribers.splice(schema.subscribers.indexOf(user.id), 1);
|
|
|
|
}
|
|
|
|
if (user.subscriptions.includes(schema.id)) {
|
|
|
|
user.subscriptions.splice(user.subscriptions.indexOf(schema.id), 1);
|
|
|
|
}
|
|
|
|
setToggleTracking(prev => !prev);
|
|
|
|
if (callback) callback();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
},
|
2024-06-02 23:41:46 +03:00
|
|
|
[schemaID, schema, user]
|
2023-12-28 14:04:44 +03:00
|
|
|
);
|
2023-07-15 17:46:19 +03:00
|
|
|
|
2024-05-27 20:42:34 +03:00
|
|
|
const setOwner = useCallback(
|
|
|
|
(newOwner: UserID, callback?: () => void) => {
|
|
|
|
if (!schema) {
|
|
|
|
return;
|
|
|
|
}
|
2024-06-02 23:41:46 +03:00
|
|
|
setProcessingError(undefined);
|
2024-05-27 20:42:34 +03:00
|
|
|
patchSetOwner(schemaID, {
|
|
|
|
data: {
|
|
|
|
user: newOwner
|
|
|
|
},
|
|
|
|
showError: true,
|
|
|
|
setLoading: setProcessing,
|
2024-06-02 23:41:46 +03:00
|
|
|
onError: setProcessingError,
|
2024-05-27 20:42:34 +03:00
|
|
|
onSuccess: () => {
|
|
|
|
schema.owner = newOwner;
|
2024-06-04 02:06:52 +03:00
|
|
|
library.localUpdateItem(schema);
|
2024-05-27 20:42:34 +03:00
|
|
|
if (callback) callback();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
},
|
2024-06-04 02:06:52 +03:00
|
|
|
[schemaID, schema, library]
|
2024-06-02 23:41:46 +03:00
|
|
|
);
|
|
|
|
|
|
|
|
const setAccessPolicy = useCallback(
|
|
|
|
(newPolicy: AccessPolicy, callback?: () => void) => {
|
|
|
|
if (!schema) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
setProcessingError(undefined);
|
|
|
|
patchSetAccessPolicy(schemaID, {
|
|
|
|
data: {
|
|
|
|
access_policy: newPolicy
|
|
|
|
},
|
|
|
|
showError: true,
|
|
|
|
setLoading: setProcessing,
|
|
|
|
onError: setProcessingError,
|
|
|
|
onSuccess: () => {
|
|
|
|
schema.access_policy = newPolicy;
|
2024-06-04 02:06:52 +03:00
|
|
|
library.localUpdateItem(schema);
|
2024-06-02 23:41:46 +03:00
|
|
|
if (callback) callback();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
},
|
2024-06-04 02:06:52 +03:00
|
|
|
[schemaID, schema, library]
|
2024-06-02 23:41:46 +03:00
|
|
|
);
|
|
|
|
|
|
|
|
const setLocation = useCallback(
|
|
|
|
(newLocation: string, callback?: () => void) => {
|
|
|
|
if (!schema) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
setProcessingError(undefined);
|
|
|
|
patchSetLocation(schemaID, {
|
|
|
|
data: {
|
|
|
|
location: newLocation
|
|
|
|
},
|
|
|
|
showError: true,
|
|
|
|
setLoading: setProcessing,
|
|
|
|
onError: setProcessingError,
|
|
|
|
onSuccess: () => {
|
|
|
|
schema.location = newLocation;
|
2024-06-04 02:06:52 +03:00
|
|
|
library.localUpdateItem(schema);
|
2024-06-02 23:41:46 +03:00
|
|
|
if (callback) callback();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
},
|
2024-06-04 02:06:52 +03:00
|
|
|
[schemaID, schema, library]
|
2024-05-27 20:42:34 +03:00
|
|
|
);
|
|
|
|
|
|
|
|
const setEditors = useCallback(
|
|
|
|
(newEditors: UserID[], callback?: () => void) => {
|
|
|
|
if (!schema) {
|
|
|
|
return;
|
|
|
|
}
|
2024-06-02 23:41:46 +03:00
|
|
|
setProcessingError(undefined);
|
2024-05-27 20:42:34 +03:00
|
|
|
patchSetEditors(schemaID, {
|
|
|
|
data: {
|
|
|
|
users: newEditors
|
|
|
|
},
|
|
|
|
showError: true,
|
|
|
|
setLoading: setProcessing,
|
2024-06-02 23:41:46 +03:00
|
|
|
onError: setProcessingError,
|
2024-05-27 20:42:34 +03:00
|
|
|
onSuccess: () => {
|
|
|
|
schema.editors = newEditors;
|
|
|
|
if (callback) callback();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
},
|
2024-06-02 23:41:46 +03:00
|
|
|
[schemaID, schema]
|
2024-05-27 20:42:34 +03:00
|
|
|
);
|
|
|
|
|
2023-07-27 22:04:25 +03:00
|
|
|
const resetAliases = useCallback(
|
2023-12-28 14:04:44 +03:00
|
|
|
(callback?: () => void) => {
|
|
|
|
if (!schema || !user) {
|
|
|
|
return;
|
2023-07-27 22:04:25 +03:00
|
|
|
}
|
2024-06-02 23:41:46 +03:00
|
|
|
setProcessingError(undefined);
|
2023-12-28 14:04:44 +03:00
|
|
|
patchResetAliases(schemaID, {
|
|
|
|
showError: true,
|
|
|
|
setLoading: setProcessing,
|
2024-06-02 23:41:46 +03:00
|
|
|
onError: setProcessingError,
|
2023-12-28 14:04:44 +03:00
|
|
|
onSuccess: newData => {
|
|
|
|
setSchema(Object.assign(schema, newData));
|
|
|
|
library.localUpdateTimestamp(newData.id);
|
|
|
|
if (callback) callback();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
},
|
2024-06-02 23:41:46 +03:00
|
|
|
[schemaID, schema, library, user, setSchema]
|
2023-12-28 14:04:44 +03:00
|
|
|
);
|
2023-07-27 22:04:25 +03:00
|
|
|
|
2024-04-24 10:27:17 +03:00
|
|
|
const restoreOrder = useCallback(
|
|
|
|
(callback?: () => void) => {
|
|
|
|
if (!schema || !user) {
|
|
|
|
return;
|
|
|
|
}
|
2024-06-02 23:41:46 +03:00
|
|
|
setProcessingError(undefined);
|
2024-04-24 10:27:17 +03:00
|
|
|
patchRestoreOrder(schemaID, {
|
|
|
|
showError: true,
|
|
|
|
setLoading: setProcessing,
|
2024-06-02 23:41:46 +03:00
|
|
|
onError: setProcessingError,
|
2024-04-24 10:27:17 +03:00
|
|
|
onSuccess: newData => {
|
|
|
|
setSchema(Object.assign(schema, newData));
|
|
|
|
library.localUpdateTimestamp(newData.id);
|
|
|
|
if (callback) callback();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
},
|
2024-06-02 23:41:46 +03:00
|
|
|
[schemaID, schema, library, user, setSchema]
|
2024-04-24 10:27:17 +03:00
|
|
|
);
|
|
|
|
|
2024-03-15 12:34:41 +03:00
|
|
|
const produceStructure = useCallback(
|
2024-05-26 14:54:02 +03:00
|
|
|
(data: ITargetCst, callback?: DataCallback<ConstituentaID[]>) => {
|
2024-06-02 23:41:46 +03:00
|
|
|
setProcessingError(undefined);
|
2024-03-15 12:34:41 +03:00
|
|
|
patchProduceStructure(schemaID, {
|
|
|
|
data: data,
|
|
|
|
showError: true,
|
|
|
|
setLoading: setProcessing,
|
2024-06-02 23:41:46 +03:00
|
|
|
onError: setProcessingError,
|
2024-03-15 12:34:41 +03:00
|
|
|
onSuccess: newData => {
|
|
|
|
setSchema(newData.schema);
|
|
|
|
library.localUpdateTimestamp(newData.schema.id);
|
|
|
|
if (callback) callback(newData.cst_list);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
},
|
2024-06-02 23:41:46 +03:00
|
|
|
[setSchema, library, schemaID]
|
2024-03-15 12:34:41 +03:00
|
|
|
);
|
|
|
|
|
2023-07-23 21:38:04 +03:00
|
|
|
const download = useCallback(
|
2023-12-28 14:04:44 +03:00
|
|
|
(callback: DataCallback<Blob>) => {
|
2024-06-02 23:41:46 +03:00
|
|
|
setProcessingError(undefined);
|
2024-03-12 18:03:31 +03:00
|
|
|
getTRSFile(schemaID, String(schema?.version ?? ''), {
|
2023-12-28 14:04:44 +03:00
|
|
|
showError: true,
|
|
|
|
setLoading: setProcessing,
|
2024-06-02 23:41:46 +03:00
|
|
|
onError: setProcessingError,
|
2023-12-28 14:04:44 +03:00
|
|
|
onSuccess: callback
|
|
|
|
});
|
|
|
|
},
|
2024-06-02 23:41:46 +03:00
|
|
|
[schemaID, schema]
|
2023-12-28 14:04:44 +03:00
|
|
|
);
|
2023-07-16 22:25:23 +03:00
|
|
|
|
2023-07-26 23:11:00 +03:00
|
|
|
const cstCreate = useCallback(
|
2023-12-28 14:04:44 +03:00
|
|
|
(data: ICstCreateData, callback?: DataCallback<IConstituentaMeta>) => {
|
2024-06-02 23:41:46 +03:00
|
|
|
setProcessingError(undefined);
|
2023-12-28 14:04:44 +03:00
|
|
|
postNewConstituenta(schemaID, {
|
|
|
|
data: data,
|
|
|
|
showError: true,
|
|
|
|
setLoading: setProcessing,
|
2024-06-02 23:41:46 +03:00
|
|
|
onError: setProcessingError,
|
2023-12-28 14:04:44 +03:00
|
|
|
onSuccess: newData => {
|
|
|
|
setSchema(newData.schema);
|
|
|
|
library.localUpdateTimestamp(newData.schema.id);
|
|
|
|
if (callback) callback(newData.new_cst);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
},
|
2024-06-02 23:41:46 +03:00
|
|
|
[schemaID, library, setSchema]
|
2023-12-28 14:04:44 +03:00
|
|
|
);
|
2023-07-18 14:55:40 +03:00
|
|
|
|
2023-07-26 23:11:00 +03:00
|
|
|
const cstDelete = useCallback(
|
2023-12-28 14:04:44 +03:00
|
|
|
(data: IConstituentaList, callback?: () => void) => {
|
2024-06-02 23:41:46 +03:00
|
|
|
setProcessingError(undefined);
|
2023-12-28 14:04:44 +03:00
|
|
|
patchDeleteConstituenta(schemaID, {
|
|
|
|
data: data,
|
|
|
|
showError: true,
|
|
|
|
setLoading: setProcessing,
|
2024-06-02 23:41:46 +03:00
|
|
|
onError: setProcessingError,
|
2023-12-28 14:04:44 +03:00
|
|
|
onSuccess: newData => {
|
|
|
|
setSchema(newData);
|
|
|
|
library.localUpdateTimestamp(newData.id);
|
|
|
|
if (callback) callback();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
},
|
2024-06-02 23:41:46 +03:00
|
|
|
[schemaID, library, setSchema]
|
2023-12-28 14:04:44 +03:00
|
|
|
);
|
2023-07-23 21:38:04 +03:00
|
|
|
|
2023-07-26 23:11:00 +03:00
|
|
|
const cstUpdate = useCallback(
|
2023-12-28 14:04:44 +03:00
|
|
|
(data: ICstUpdateData, callback?: DataCallback<IConstituentaMeta>) => {
|
2024-06-02 23:41:46 +03:00
|
|
|
setProcessingError(undefined);
|
2023-12-28 14:04:44 +03:00
|
|
|
patchConstituenta(String(data.id), {
|
|
|
|
data: data,
|
|
|
|
showError: true,
|
|
|
|
setLoading: setProcessing,
|
2024-06-02 23:41:46 +03:00
|
|
|
onError: setProcessingError,
|
2023-12-28 14:04:44 +03:00
|
|
|
onSuccess: newData =>
|
|
|
|
reload(setProcessing, () => {
|
|
|
|
library.localUpdateTimestamp(Number(schemaID));
|
|
|
|
if (callback) callback(newData);
|
|
|
|
})
|
|
|
|
});
|
|
|
|
},
|
2024-06-02 23:41:46 +03:00
|
|
|
[schemaID, library, reload]
|
2023-12-28 14:04:44 +03:00
|
|
|
);
|
2023-07-25 20:27:29 +03:00
|
|
|
|
2023-08-23 01:36:17 +03:00
|
|
|
const cstRename = useCallback(
|
2023-12-28 14:04:44 +03:00
|
|
|
(data: ICstRenameData, callback?: DataCallback<IConstituentaMeta>) => {
|
2024-06-02 23:41:46 +03:00
|
|
|
setProcessingError(undefined);
|
2023-12-28 14:04:44 +03:00
|
|
|
patchRenameConstituenta(schemaID, {
|
|
|
|
data: data,
|
|
|
|
showError: true,
|
|
|
|
setLoading: setProcessing,
|
2024-06-02 23:41:46 +03:00
|
|
|
onError: setProcessingError,
|
2023-12-28 14:04:44 +03:00
|
|
|
onSuccess: newData => {
|
|
|
|
setSchema(newData.schema);
|
|
|
|
library.localUpdateTimestamp(newData.schema.id);
|
|
|
|
if (callback) callback(newData.new_cst);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
},
|
2024-06-02 23:41:46 +03:00
|
|
|
[setSchema, library, schemaID]
|
2023-12-28 14:04:44 +03:00
|
|
|
);
|
2023-08-23 01:36:17 +03:00
|
|
|
|
2024-03-01 18:19:33 +03:00
|
|
|
const cstSubstitute = useCallback(
|
|
|
|
(data: ICstSubstituteData, callback?: () => void) => {
|
2024-06-02 23:41:46 +03:00
|
|
|
setProcessingError(undefined);
|
2024-03-27 22:54:24 +03:00
|
|
|
patchSubstituteConstituents(schemaID, {
|
2024-03-01 18:19:33 +03:00
|
|
|
data: data,
|
|
|
|
showError: true,
|
|
|
|
setLoading: setProcessing,
|
2024-06-02 23:41:46 +03:00
|
|
|
onError: setProcessingError,
|
2024-03-01 18:19:33 +03:00
|
|
|
onSuccess: newData => {
|
|
|
|
setSchema(newData);
|
|
|
|
library.localUpdateTimestamp(newData.id);
|
|
|
|
if (callback) callback();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
},
|
2024-06-02 23:41:46 +03:00
|
|
|
[setSchema, library, schemaID]
|
2024-03-01 18:19:33 +03:00
|
|
|
);
|
|
|
|
|
2023-07-25 20:27:29 +03:00
|
|
|
const cstMoveTo = useCallback(
|
2023-12-28 14:04:44 +03:00
|
|
|
(data: ICstMovetoData, callback?: () => void) => {
|
2024-06-02 23:41:46 +03:00
|
|
|
setProcessingError(undefined);
|
2023-12-28 14:04:44 +03:00
|
|
|
patchMoveConstituenta(schemaID, {
|
|
|
|
data: data,
|
|
|
|
showError: true,
|
|
|
|
setLoading: setProcessing,
|
2024-06-02 23:41:46 +03:00
|
|
|
onError: setProcessingError,
|
2023-12-28 14:04:44 +03:00
|
|
|
onSuccess: newData => {
|
|
|
|
setSchema(newData);
|
|
|
|
library.localUpdateTimestamp(Number(schemaID));
|
|
|
|
if (callback) callback();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
},
|
2024-06-02 23:41:46 +03:00
|
|
|
[schemaID, library, setSchema]
|
2023-12-28 14:04:44 +03:00
|
|
|
);
|
2023-07-23 15:23:01 +03:00
|
|
|
|
2024-03-04 19:22:22 +03:00
|
|
|
const versionCreate = useCallback(
|
2024-03-08 18:39:08 +03:00
|
|
|
(data: IVersionData, callback?: (version: number) => void) => {
|
2024-06-02 23:41:46 +03:00
|
|
|
setProcessingError(undefined);
|
2024-03-04 19:22:22 +03:00
|
|
|
postCreateVersion(schemaID, {
|
|
|
|
data: data,
|
|
|
|
showError: true,
|
|
|
|
setLoading: setProcessing,
|
2024-06-02 23:41:46 +03:00
|
|
|
onError: setProcessingError,
|
2024-03-04 19:22:22 +03:00
|
|
|
onSuccess: newData => {
|
|
|
|
setSchema(newData.schema);
|
|
|
|
library.localUpdateTimestamp(Number(schemaID));
|
2024-03-08 18:39:08 +03:00
|
|
|
if (callback) callback(newData.version);
|
2024-03-04 19:22:22 +03:00
|
|
|
}
|
|
|
|
});
|
|
|
|
},
|
2024-06-02 23:41:46 +03:00
|
|
|
[schemaID, library, setSchema]
|
2024-03-04 19:22:22 +03:00
|
|
|
);
|
|
|
|
|
|
|
|
const versionUpdate = useCallback(
|
|
|
|
(target: number, data: IVersionData, callback?: () => void) => {
|
2024-06-02 23:41:46 +03:00
|
|
|
setProcessingError(undefined);
|
2024-03-04 19:22:22 +03:00
|
|
|
patchVersion(String(target), {
|
|
|
|
data: data,
|
|
|
|
showError: true,
|
|
|
|
setLoading: setProcessing,
|
2024-06-02 23:41:46 +03:00
|
|
|
onError: setProcessingError,
|
2024-03-04 19:22:22 +03:00
|
|
|
onSuccess: () => {
|
|
|
|
schema!.versions = schema!.versions.map(prev => {
|
|
|
|
if (prev.id === target) {
|
|
|
|
prev.description = data.description;
|
|
|
|
prev.version = data.version;
|
|
|
|
return prev;
|
|
|
|
} else {
|
|
|
|
return prev;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
setSchema(schema);
|
|
|
|
if (callback) callback();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
},
|
2024-06-02 23:41:46 +03:00
|
|
|
[schema, setSchema]
|
2024-03-04 19:22:22 +03:00
|
|
|
);
|
|
|
|
|
|
|
|
const versionDelete = useCallback(
|
|
|
|
(target: number, callback?: () => void) => {
|
2024-06-02 23:41:46 +03:00
|
|
|
setProcessingError(undefined);
|
2024-03-04 19:22:22 +03:00
|
|
|
deleteVersion(String(target), {
|
|
|
|
showError: true,
|
|
|
|
setLoading: setProcessing,
|
2024-06-02 23:41:46 +03:00
|
|
|
onError: setProcessingError,
|
2024-03-04 19:22:22 +03:00
|
|
|
onSuccess: () => {
|
|
|
|
schema!.versions = schema!.versions.filter(prev => prev.id !== target);
|
|
|
|
setSchema(schema);
|
|
|
|
if (callback) callback();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
},
|
2024-06-02 23:41:46 +03:00
|
|
|
[schema, setSchema]
|
2024-03-04 19:22:22 +03:00
|
|
|
);
|
|
|
|
|
2024-05-18 19:22:26 +03:00
|
|
|
const versionRestore = useCallback(
|
|
|
|
(target: string, callback?: () => void) => {
|
2024-06-02 23:41:46 +03:00
|
|
|
setProcessingError(undefined);
|
2024-05-18 19:22:26 +03:00
|
|
|
patchRestoreVersion(target, {
|
|
|
|
showError: true,
|
|
|
|
setLoading: setProcessing,
|
2024-06-02 23:41:46 +03:00
|
|
|
onError: setProcessingError,
|
2024-05-18 19:22:26 +03:00
|
|
|
onSuccess: () => {
|
|
|
|
setSchema(schema);
|
2024-06-04 02:06:52 +03:00
|
|
|
library.localUpdateItem(schema!);
|
2024-05-18 19:22:26 +03:00
|
|
|
if (callback) callback();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
},
|
2024-06-04 02:06:52 +03:00
|
|
|
[schema, setSchema, library]
|
2024-05-18 19:22:26 +03:00
|
|
|
);
|
|
|
|
|
2024-03-23 21:42:50 +03:00
|
|
|
const inlineSynthesis = useCallback(
|
|
|
|
(data: IInlineSynthesisData, callback?: DataCallback<IRSFormData>) => {
|
2024-06-02 23:41:46 +03:00
|
|
|
setProcessingError(undefined);
|
2024-03-23 21:42:50 +03:00
|
|
|
patchInlineSynthesis({
|
|
|
|
data: data,
|
|
|
|
showError: true,
|
|
|
|
setLoading: setProcessing,
|
2024-06-02 23:41:46 +03:00
|
|
|
onError: setProcessingError,
|
2024-03-23 21:42:50 +03:00
|
|
|
onSuccess: newData => {
|
|
|
|
setSchema(newData);
|
|
|
|
library.localUpdateTimestamp(Number(schemaID));
|
|
|
|
if (callback) callback(newData);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
},
|
2024-06-02 23:41:46 +03:00
|
|
|
[library, schemaID, setSchema]
|
2024-03-23 21:42:50 +03:00
|
|
|
);
|
|
|
|
|
2023-07-15 17:46:19 +03:00
|
|
|
return (
|
2023-12-28 14:04:44 +03:00
|
|
|
<RSFormContext.Provider
|
|
|
|
value={{
|
|
|
|
schema,
|
2024-03-04 19:22:22 +03:00
|
|
|
schemaID,
|
2024-05-18 19:22:26 +03:00
|
|
|
versionID,
|
2023-12-28 14:04:44 +03:00
|
|
|
loading,
|
2024-06-02 23:41:46 +03:00
|
|
|
errorLoading,
|
2023-12-28 14:04:44 +03:00
|
|
|
processing,
|
2024-06-02 23:41:46 +03:00
|
|
|
processingError,
|
2023-12-28 14:04:44 +03:00
|
|
|
isOwned,
|
|
|
|
isSubscribed,
|
2024-03-04 19:22:22 +03:00
|
|
|
isArchive,
|
2023-12-28 14:04:44 +03:00
|
|
|
update,
|
|
|
|
download,
|
|
|
|
upload,
|
2024-04-24 10:27:17 +03:00
|
|
|
restoreOrder,
|
2023-12-28 14:04:44 +03:00
|
|
|
resetAliases,
|
2024-03-15 12:34:41 +03:00
|
|
|
produceStructure,
|
2024-03-23 21:42:50 +03:00
|
|
|
inlineSynthesis,
|
2024-05-27 20:42:34 +03:00
|
|
|
|
2023-12-28 14:04:44 +03:00
|
|
|
subscribe,
|
|
|
|
unsubscribe,
|
2024-05-27 20:42:34 +03:00
|
|
|
setOwner,
|
|
|
|
setEditors,
|
2024-06-02 23:41:46 +03:00
|
|
|
setAccessPolicy,
|
|
|
|
setLocation,
|
2024-05-27 20:42:34 +03:00
|
|
|
|
2023-12-28 14:04:44 +03:00
|
|
|
cstUpdate,
|
|
|
|
cstCreate,
|
|
|
|
cstRename,
|
2024-03-01 18:19:33 +03:00
|
|
|
cstSubstitute,
|
2023-12-28 14:04:44 +03:00
|
|
|
cstDelete,
|
2024-03-04 19:22:22 +03:00
|
|
|
cstMoveTo,
|
|
|
|
versionCreate,
|
|
|
|
versionUpdate,
|
2024-05-18 19:22:26 +03:00
|
|
|
versionDelete,
|
|
|
|
versionRestore
|
2023-12-28 14:04:44 +03:00
|
|
|
}}
|
|
|
|
>
|
|
|
|
{children}
|
|
|
|
</RSFormContext.Provider>
|
|
|
|
);
|
|
|
|
};
|