Portal/rsconcept/frontend/src/hooks/useOssDetails.ts

77 lines
2.0 KiB
TypeScript
Raw Normal View History

2024-06-07 20:17:03 +03:00
'use client';
import { useCallback, useEffect, useState } from 'react';
import { getOssDetails } from '@/app/backendAPI';
import { type ErrorData } from '@/components/info/InfoError';
import { IOperationSchema, IOperationSchemaData } from '@/models/oss';
import { OssLoader } from '@/models/OssLoader';
2024-06-21 19:56:30 +03:00
import { AccessPolicy, LibraryItemType } from '@/models/library.ts';
2024-06-07 20:17:03 +03:00
function useOssDetails({ target }: { target?: string }) {
const [schema, setInner] = useState<IOperationSchema | undefined>(undefined);
const [loading, setLoading] = useState(false);
const [error, setError] = useState<ErrorData>(undefined);
function setSchema(data?: IOperationSchemaData) {
if (!data) {
setInner(undefined);
return;
}
const newSchema = new OssLoader(data).produceOSS();
setInner(newSchema);
}
const reload = useCallback(
(setCustomLoading?: typeof setLoading, callback?: () => void) => {
setError(undefined);
if (!target) {
return;
}
2024-06-21 19:56:30 +03:00
const staticData = {
id: Number(target),
comment: '123',
alias: 'oss1',
access_policy: AccessPolicy.PUBLIC,
editors: [],
owner: 1,
item_type: LibraryItemType.OSS,
location: '/U',
read_only: false,
subscribers: [],
time_create: '0',
time_update: '0',
title: 'TestOss',
visible: false
};
2024-06-07 20:17:03 +03:00
getOssDetails(target, {
showError: true,
setLoading: setCustomLoading ?? setLoading,
onError: error => {
setInner(undefined);
setError(error);
},
onSuccess: schema => {
2024-06-21 19:56:30 +03:00
const combinedData = {
...staticData,
...schema
}
setSchema(combinedData);
2024-06-07 20:17:03 +03:00
if (callback) callback();
}
});
},
[target]
);
useEffect(() => {
reload();
}, [reload]);
return { schema, setSchema, reload, error, setError, loading };
}
export default useOssDetails;