feat: add onSelect callback to preview interaction hook and reset panels on selection

This commit is contained in:
taDuc
2026-06-15 21:44:06 +07:00
parent 05af7f19f5
commit 3b90549202
3 changed files with 13 additions and 3 deletions
@@ -57,6 +57,8 @@ export default function ReplayPreviewOverlay({
position: "absolute",
inset: 0,
zIndex: 60,
// Intentional feature: block map interaction during replay preview mode to prevent conflicts/bugs
// Tính năng có chủ ý: chặn tương tác với bản đồ trong lúc chạy replay để tránh lỗi/xung đột
pointerEvents: isPreviewMode ? "auto" : "none",
}}
>
@@ -275,6 +275,11 @@ export default function PublicPreviewClientPage({
replayActiveWikiId: replayPreview.activeWikiId,
replayMode,
onWikiLinkNavigate: focusFirstWikiEntityGeometries,
onSelect: useCallback(() => {
setWikiSelectionPanelAnchor(null);
setGeometrySelectionPanel(null);
setRightPanelMode("wiki");
}, []),
});
const handlePanelWikiLinkRequest = useCallback((request: { slug: string; rect: DOMRect }) => {
@@ -41,8 +41,9 @@ export function usePublicPreviewInteraction(options: {
replayActiveWikiId?: string | null;
replayMode?: "idle" | "playing" | "paused";
onWikiLinkNavigate?: (wiki: Wiki) => void | Promise<void>;
onSelect?: () => void;
}) {
const { data, relations, setRelations, selectedFeatureIds, setSelectedFeatureIds, timelineYear, replayActiveWikiId, replayMode, onWikiLinkNavigate } = options;
const { data, relations, setRelations, selectedFeatureIds, setSelectedFeatureIds, timelineYear, replayActiveWikiId, replayMode, onWikiLinkNavigate, onSelect } = options;
const [activeEntityId, setActiveEntityId] = useState<string | null>(null);
const [activeWikiSlug, setActiveWikiSlug] = useState<string | null>(null);
const [isManualSidebarOpen, setIsManualSidebarOpen] = useState(false);
@@ -194,7 +195,8 @@ export function usePublicPreviewInteraction(options: {
if (selectOptions?.selectGeometry && selectOptions?.sourceFeatureId != null) {
setSelectedFeatureIds([selectOptions.sourceFeatureId]);
}
}, [relations.entitiesById, relations.entityWikisById, setRelations, setSelectedFeatureIds, wikiCache]);
onSelect?.();
}, [relations.entitiesById, relations.entityWikisById, setRelations, setSelectedFeatureIds, wikiCache, onSelect]);
const selectWiki = useCallback(async (
wiki: Wiki
@@ -224,7 +226,8 @@ export function usePublicPreviewInteraction(options: {
setActiveWikiError(null);
setLinkEntityPopup(null);
setIsManualSidebarOpen(true);
}, [relations.wikiEntityIdsById, selectEntity, wikiCache]);
onSelect?.();
}, [relations.wikiEntityIdsById, selectEntity, wikiCache, onSelect]);
useEffect(() => {
if (!selectedFeatureIds.length) {