import React, { useMemo } from "react" import { useAppState } from "../../../001_provider/001_AppStateProvider" import { useGuiState } from "../001_GuiStateProvider" import { useMessageBuilder } from "../../../hooks/useMessageBuilder" export type ModelSlotAreaProps = { } export const ModelSlotArea = (_props: ModelSlotAreaProps) => { const { serverSetting, getInfo } = useAppState() const guiState = useGuiState() const messageBuilderState = useMessageBuilder() useMemo(() => { messageBuilderState.setMessage(__filename, "edit", { "ja": "編集", "en": "edit" }) }, []) const modelTiles = useMemo(() => { if (!serverSetting.serverSetting.slotInfos) { return [] } return serverSetting.serverSetting.slotInfos.map((x, index) => { if (x.voiceChangerType == null) { return null } if (x.modelFile.length == 0) { return null } const tileContainerClass = index == serverSetting.serverSetting.slotIndex ? "model-slot-tile-container-selected" : "model-slot-tile-container" const name = x.name.length > 8 ? x.name.substring(0, 7) + "..." : x.name const iconElem = x.iconFile.length > 0 ? {x.name} :
no image
const clickAction = async () => { const dummyModelSlotIndex = (Math.floor(Date.now() / 1000)) * 1000 + index await serverSetting.updateServerSettings({ ...serverSetting.serverSetting, slotIndex: dummyModelSlotIndex }) setTimeout(() => { // quick hack getInfo() }, 1000 * 2) } return (
{iconElem}
{name}
) }).filter(x => x != null) }, [serverSetting.serverSetting.slotInfos, serverSetting.serverSetting.slotIndex]) const modelSlotArea = useMemo(() => { const onModelSlotEditClicked = () => { guiState.stateControls.showModelSlotManagerCheckbox.updateState(true) } return (
{modelTiles}
{messageBuilderState.getMessage(__filename, "edit")}
) }, [modelTiles]) return modelSlotArea }