import { DEFAULT_MAP_FILTERS, MAP_OBJECT_TYPES } from "../../lib/locationMapUtils"; function objectZoneId(object) { return object?.zone_id ? String(object.zone_id) : ""; } const DISPLAY_CONTROLS = [ ["showZones", "Zones"], ["showLabels", "Labels"], ["showCounts", "Counts"], ["showPins", "Pins"], ["showMyItems", "Mine"], ["showOtherItems", "Others"], ["showCompleted", "Done"], ["showUnmapped", "Unmapped"], ]; export default function LocationMapBottomSheet({ mode, editorTool, canManage, filters, setFilters, layersOpen, setLayersOpen, selectedObject, selectedZoneItems, visibleUnmappedItems, history, future, saving, savingAction, hasUnsavedChanges, mapState, mapSize, onAddObject, onUndo, onRedo, onSaveDraft, onPublish, onPreviewDraft, onPanMode, onEditObjects, onEditMode, onObjectField, onZoneLinkChange, onClearSelection, onDuplicateObject, onDeleteObject, }) { const selectedTitle = selectedObject?.label || selectedObject?.zone_name || "Map Area"; const selectedAssignedItems = selectedObject?.zone_id ? (mapState?.items || []).filter((item) => String(item.zone_id || "") === objectZoneId(selectedObject)) : []; const hasHiddenSelectedItems = selectedAssignedItems.length > 0 && selectedZoneItems.length === 0; const selectedItemCountLabel = hasHiddenSelectedItems ? "0 shown" : `${selectedZoneItems.length} item${selectedZoneItems.length === 1 ? "" : "s"}`; const sheetTitle = mode === "edit" ? selectedObject && editorTool === "edit" ? selectedTitle : editorTool === "edit" ? "Edit Objects" : "Pan Mode" : selectedObject ? selectedTitle : "Map Details"; const sheetDescription = selectedObject && editorTool === "edit" ? "Move, resize, link, rename, or nudge with arrow keys." : editorTool === "edit" ? "Tap an area to select it." : "Drag and zoom without changing objects."; const showHeaderItemCount = mode !== "edit" && Boolean(selectedObject); const showEditorControls = mode === "edit" && canManage; const showSelectedObjectForm = Boolean(mode === "edit" && editorTool === "edit" && selectedObject); const changedLayerCount = DISPLAY_CONTROLS.filter(([key]) => filters[key] !== DEFAULT_MAP_FILTERS[key]).length; const unmappedItemPreview = visibleUnmappedItems.slice(0, 8); const hiddenUnmappedItemCount = visibleUnmappedItems.length - unmappedItemPreview.length; const selectedWidth = Number(selectedObject?.width) || 40; const selectedHeight = Number(selectedObject?.height) || 40; const maxX = Math.max(0, Math.round((mapSize?.width || selectedWidth) - selectedWidth)); const maxY = Math.max(0, Math.round((mapSize?.height || selectedHeight) - selectedHeight)); const maxWidth = Math.max(40, Math.round(mapSize?.width || selectedWidth)); const maxHeight = Math.max(40, Math.round(mapSize?.height || selectedHeight)); const saveDraftLabel = savingAction === "save" ? "Saving..." : "Save Draft"; const publishLabel = savingAction === "publish" ? "Publishing..." : "Publish"; const showSelectedZoneItems = () => { setFilters((current) => ({ ...current, showMyItems: true, showOtherItems: true, showCompleted: true, })); }; const primaryDraftActions = showEditorControls ? (