54 lines
1.8 KiB
TypeScript
54 lines
1.8 KiB
TypeScript
import * as React from 'react';
|
|
import { IHistoryState } from '../../Interfaces/IHistoryState';
|
|
import { IGetFeedbackRequest } from '../../Interfaces/IGetFeedbackRequest';
|
|
import { IGetFeedbackResponse } from '../../Interfaces/IGetFeedbackResponse';
|
|
import { IMessage } from '../../Interfaces/IMessage';
|
|
import { GetCircularReplacerToDotnet } from '../../utils/saveload';
|
|
|
|
// eslint-disable-next-line @typescript-eslint/strict-boolean-expressions
|
|
const myWorker = window.Worker && new Worker('workers/message_worker.js');
|
|
|
|
export function UseWorker(
|
|
state: IHistoryState,
|
|
setMessages: React.Dispatch<React.SetStateAction<IMessage[]>>): void {
|
|
React.useEffect(() => {
|
|
// use webworker for the stringify to avoid freezing
|
|
myWorker.postMessage({
|
|
state,
|
|
url: import.meta.env.VITE_API_GET_FEEDBACK_URL
|
|
});
|
|
|
|
return () => {
|
|
};
|
|
}, [state]);
|
|
|
|
React.useEffect(() => {
|
|
myWorker.onmessage = (event) => {
|
|
setMessages(event.data as IMessage[]);
|
|
};
|
|
}, [setMessages]);
|
|
}
|
|
export function UseAsync(
|
|
state: IHistoryState,
|
|
setMessages: React.Dispatch<React.SetStateAction<IMessage[]>>): void {
|
|
React.useEffect(() => {
|
|
const request: IGetFeedbackRequest = {
|
|
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
ApplicationState: state
|
|
};
|
|
const dataParsed = JSON.stringify(request, GetCircularReplacerToDotnet());
|
|
fetch(import.meta.env.VITE_API_GET_FEEDBACK_URL, {
|
|
method: 'POST',
|
|
headers: new Headers({
|
|
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
'Content-Type': 'application/json'
|
|
}),
|
|
body: dataParsed
|
|
})
|
|
.then(async (response) => await response.json()
|
|
)
|
|
.then(async (json: IGetFeedbackResponse) => {
|
|
setMessages(json.messages);
|
|
});
|
|
}, [state]);
|
|
}
|