fix(map): align canonical map actions

This commit is contained in:
DCCONSTRUCTIONS
2026-07-29 17:00:50 +03:00
parent 8e3710b493
commit f2a4dfe863
3 changed files with 69 additions and 59 deletions
@@ -1,7 +1,6 @@
import {
useCallback,
useEffect,
useMemo,
useRef,
useState,
type CSSProperties,
@@ -24,7 +23,6 @@ import {
MapGlassSurface,
RangeControl,
StatusBadge,
Toolbar,
Window,
WindowFooterActions,
} from "@nodedc/ui-react";
@@ -48,8 +46,6 @@ const editableInspectorSections = new Set<MapInspectorSection>([
"tile-cache",
]);
type ToolbarAction = "settings" | "layers" | "reset-view";
export function WorldMapWorkspace({
definition,
}: {
@@ -105,15 +101,6 @@ export function WorldMapWorkspace({
}
}, [controller, draft]);
const resetRenderer = useCallback(() => {
operatorCameraInteraction.current = false;
updateDraft((current) => {
current.view.camera = null;
return current;
});
setRendererGeneration((generation) => generation + 1);
}, [updateDraft]);
const retryRenderer = useCallback(() => {
operatorCameraInteraction.current = false;
setRendererGeneration((generation) => generation + 1);
@@ -137,35 +124,6 @@ export function WorldMapWorkspace({
});
}, [updateDraft]);
const toolbarItems = useMemo(() => [
{
id: "settings" as const,
label: "Настройки карты",
icon: "settings" as const,
active: settingsOpen,
onSelect: () => {
setSettingsOpen((open) => !open);
setLayersOpen(false);
},
},
{
id: "layers" as const,
label: "Слои карты",
icon: "grid" as const,
active: layersOpen,
onSelect: () => {
setLayersOpen((open) => !open);
setSettingsOpen(false);
},
},
{
id: "reset-view" as const,
label: "Сбросить камеру",
icon: "target" as const,
onSelect: resetRenderer,
},
], [layersOpen, resetRenderer, settingsOpen]);
const status = runtimePresentation(runtimeState);
const viewBlocking = !viewInitialized && controller.state !== "ready";
const runtimeBlocking = runtimeState.phase === "gateway-unavailable"
@@ -234,15 +192,30 @@ export function WorldMapWorkspace({
/>
) : null}
<Toolbar<ToolbarAction>
className="mission-map__toolbar"
placement="bottom"
label="Инструменты карты"
minSize={42}
maxSize={54}
lensCount={3}
items={toolbarItems}
/>
<div className="mission-map__map-actions" aria-label="Управление картой">
<IconButton
className="mission-map__map-action"
label="Настройки карты"
aria-pressed={settingsOpen}
onClick={() => {
setSettingsOpen((open) => !open);
setLayersOpen(false);
}}
>
<Icon name="settings" size={18} />
</IconButton>
<IconButton
className="mission-map__map-action"
label="Слои карты"
aria-pressed={layersOpen}
onClick={() => {
setLayersOpen((open) => !open);
setSettingsOpen(false);
}}
>
<Icon name="grid" size={18} />
</IconButton>
</div>
{layersOpen ? (
<MapGlassSurface