Files
OptimCloud-gw-ui/src/hooks/Network/Scripts.ts
Charles 21452d091f [WIFI-11542] AP Scripts
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-12-01 16:12:30 +00:00

102 lines
2.9 KiB
TypeScript

import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
import { axiosGw } from 'constants/axiosInstances';
import { UserRole } from 'models/User';
export type Script = {
id: string;
name: string;
description: string;
uri: string;
defaultUploadURI: string;
content: string;
version: string;
deferred: boolean;
timeout: number;
type: 'shell' | 'bundle';
created: number;
modified: number;
author: string;
restricted: UserRole[];
};
type ScriptResponse = {
scripts: Script[];
};
const getScripts = (limit: number, offset: number) =>
axiosGw.get(`scripts?limit=${limit}&offset=${offset}`).then((response) => response.data as ScriptResponse);
const getAllScripts = async () => {
let offset = 0;
let scripts: Script[] = [];
let response: ScriptResponse;
do {
// eslint-disable-next-line no-await-in-loop
response = await getScripts(100, offset);
scripts = scripts.concat(response.scripts);
offset += 100;
} while (response.scripts.length === 500);
return scripts;
};
export const useGetAllDeviceScripts = () =>
useQuery(['deviceScripts', 'all'], getAllScripts, {
staleTime: 30000,
keepPreviousData: true,
});
const getScript = (id: string) => axiosGw.get(`script/${id}`).then((response) => response.data as Script);
export const useGetDeviceScript = ({ id }: { id?: string }) =>
useQuery(['deviceScript', id], () => getScript(id ?? ''), {
enabled: !!id,
staleTime: 30000,
keepPreviousData: true,
});
const deleteScript = async (id: string) => axiosGw.delete(`script/${id}`);
export const useDeleteScript = ({ id }: { id?: string }) => {
const queryClient = useQueryClient();
return useMutation(deleteScript, {
onSuccess: () => {
queryClient.invalidateQueries(['deviceScripts']);
queryClient.invalidateQueries(['deviceScript', id]);
},
});
};
const updateScript = async (data: {
id: string;
description?: string;
name?: string;
uri?: string;
content?: string;
defaultUploadURI?: string;
version?: string;
deferred?: boolean;
timeout?: number;
}) => axiosGw.put(`script/${data.id}`, data).then((response) => response.data as Script);
export const useUpdateScript = ({ id }: { id?: string }) => {
const queryClient = useQueryClient();
return useMutation(updateScript, {
onSuccess: (response) => {
queryClient.invalidateQueries(['deviceScripts']);
queryClient.setQueryData(['deviceScript', id], response);
},
});
};
const createScript = async (data: Partial<Script>) =>
axiosGw.post(`script/0`, data).then((response) => response.data as Script);
export const useCreateScript = () => {
const queryClient = useQueryClient();
return useMutation(createScript, {
onSuccess: (response) => {
queryClient.invalidateQueries(['deviceScripts']);
queryClient.setQueryData(['deviceScript', response.id], response);
},
});
};