Files
VRCT/src-ui/logics/useMessage.js

79 lines
2.3 KiB
JavaScript

import {
useMessageLogsStatus,
} from "@store";
import { useStdoutToPython } from "./useStdoutToPython";
export const useMessage = () => {
const { currentMessageLogsStatus, addMessageLogsStatus, updateMessageLogsStatus } = useMessageLogsStatus();
const { asyncStdoutToPython } = useStdoutToPython();
return {
sendMessage: (message) => {
const uuid = crypto.randomUUID();
const send_message_object = {
id: uuid,
message: message,
};
asyncStdoutToPython("/controller/callback_messagebox_send", send_message_object);
addMessageLogsStatus({
id: uuid,
category: "sent",
status: "pending",
created_at: generateTimeData(),
messages: {
original: message,
translated: [],
},
});
},
currentMessageLogsStatus: currentMessageLogsStatus,
updateSentMessageLog: (payload) => {
const data = payload.data;
updateMessageLogsStatus(updateItemById(data.id));
},
addSentMessageLog: (payload) => {
const data = payload.data;
const message_object = generateMessageObject(data, "sent");
addMessageLogsStatus(message_object);
},
addReceivedMessageLog: (payload) => {
const data = payload.data;
const message_object = generateMessageObject(data, "received");
addMessageLogsStatus(message_object);
},
};
};
const generateTimeData = () => {
const data = new Date().toLocaleTimeString(
"ja-JP",
{hour12: false, hour: "2-digit", minute: "2-digit"},
);
return data;
};
const generateMessageObject = (data, category) => {
return {
id: crypto.randomUUID(),
created_at: generateTimeData(),
category: category,
status: "ok",
messages: {
original: data.message,
translated: [],
},
};
};
const updateItemById = (id) => (prev_items) => {
return prev_items.map(item => {
if (item.id === id) {
item.status = "ok";
}
return item;
});
};