import {Dispatch, useMemo, useReducer} from "react"; import {appStateReducer} from "../reducers/AppStateReducer"; import {AppState} from "../state/AppState"; import {ServerConnectionState} from "../state/NetworkState"; import {sizeFromLinesAndCells} from "../../../common/src/state/Coordinates"; import {AppAction} from "../../../common/src/actions/AppAction"; import {USER_ACTIVE_COLOR} from "../../../common/src/actions/UserAction"; import HexColorPicker from "./HexColorPicker"; import HexMapRenderer from "./HexMapRenderer"; import {DispatchContext} from "./context/DispatchContext"; import "./App.css"; import {WebsocketReactAdapter} from "./WebsocketReactAdapter"; function App() { const defaultState: AppState = { localState: null, network: { serverState: null, connectionState: ServerConnectionState.OFFLINE, specialMessage: null, nextID: 0, sentActions: [], pendingActions: [], goodbyeCode: 1000, goodbyeReason: "", autoReconnectAt: null, reconnectAttempts: null }, }; const [state, dispatch]: [AppState, Dispatch] = useReducer(appStateReducer, defaultState, undefined); const {user, map} = state.localState || {user: null, map: null} const offsets = useMemo(() => (!!map ? { top: 10, left: 10, size: 50, layout: map.layout } : null), [map]) const mapElement = !!offsets && !!map ? : null; const {width, height} = useMemo(() => !!offsets && !!map ? sizeFromLinesAndCells({ bottomMargin: 10, cells: map.cellsPerLine, lines: map.lines, offsets: offsets, rightMargin: 10, }) : {width: 1, height: 1}, [map, offsets]); const colorPickerElement = !!user ? dispatch({ type: USER_ACTIVE_COLOR, color: colorResult.hex })} /> : null return (
e.preventDefault()}> {mapElement}
{colorPickerElement}
); } export default App;