grungnet/src/hooks/useMapSelection.tsx

60 lines
1.6 KiB
TypeScript
Raw Normal View History

2021-07-22 05:24:35 +00:00
import { useEffect, useState } from "react";
2021-07-22 03:16:44 +00:00
import SelectionMenu from "../components/selection/SelectionMenu";
import SelectTool from "../components/tools/SelectTool";
import { SelectionItemsChangeEventHandler } from "../types/Events";
import { Map, MapToolId } from "../types/Map";
import { MapState } from "../types/MapState";
2021-07-22 03:16:44 +00:00
import { Selection } from "../types/Select";
import { SelectToolSettings } from "../types/Select";
function useMapSelection(
map: Map | null,
mapState: MapState | null,
2021-07-22 03:16:44 +00:00
onSelectionItemsChange: SelectionItemsChangeEventHandler,
selectedToolId: MapToolId,
settings: SelectToolSettings
) {
const [isSelectionMenuOpen, setIsSelectionMenuOpen] =
useState<boolean>(false);
const [selection, setSelection] = useState<Selection | null>(null);
function handleSelectionMenuOpen(open: boolean) {
setIsSelectionMenuOpen(open);
}
2021-07-22 05:24:35 +00:00
const active = selectedToolId === "select";
useEffect(() => {
if (!active) {
setSelection(null);
setIsSelectionMenuOpen(false);
}
}, [active]);
2021-07-22 03:16:44 +00:00
const selectionTool = (
<SelectTool
2021-07-22 05:24:35 +00:00
active={active}
2021-07-22 03:16:44 +00:00
toolSettings={settings}
onSelectionItemsChange={onSelectionItemsChange}
selection={selection}
onSelectionChange={setSelection}
onSelectionMenuOpen={handleSelectionMenuOpen}
/>
);
const selectionMenu = (
<SelectionMenu
isOpen={isSelectionMenuOpen}
onRequestClose={() => setIsSelectionMenuOpen(false)}
selection={selection}
onSelectionItemsChange={onSelectionItemsChange}
map={map}
mapState={mapState}
2021-07-22 03:16:44 +00:00
/>
);
return { selectionTool, selectionMenu };
}
export default useMapSelection;