feat: add onSelect callback to preview interaction hook and reset panels on selection
This commit is contained in:
@@ -57,6 +57,8 @@ export default function ReplayPreviewOverlay({
|
|||||||
position: "absolute",
|
position: "absolute",
|
||||||
inset: 0,
|
inset: 0,
|
||||||
zIndex: 60,
|
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",
|
pointerEvents: isPreviewMode ? "auto" : "none",
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
|
|||||||
@@ -275,6 +275,11 @@ export default function PublicPreviewClientPage({
|
|||||||
replayActiveWikiId: replayPreview.activeWikiId,
|
replayActiveWikiId: replayPreview.activeWikiId,
|
||||||
replayMode,
|
replayMode,
|
||||||
onWikiLinkNavigate: focusFirstWikiEntityGeometries,
|
onWikiLinkNavigate: focusFirstWikiEntityGeometries,
|
||||||
|
onSelect: useCallback(() => {
|
||||||
|
setWikiSelectionPanelAnchor(null);
|
||||||
|
setGeometrySelectionPanel(null);
|
||||||
|
setRightPanelMode("wiki");
|
||||||
|
}, []),
|
||||||
});
|
});
|
||||||
|
|
||||||
const handlePanelWikiLinkRequest = useCallback((request: { slug: string; rect: DOMRect }) => {
|
const handlePanelWikiLinkRequest = useCallback((request: { slug: string; rect: DOMRect }) => {
|
||||||
|
|||||||
@@ -41,8 +41,9 @@ export function usePublicPreviewInteraction(options: {
|
|||||||
replayActiveWikiId?: string | null;
|
replayActiveWikiId?: string | null;
|
||||||
replayMode?: "idle" | "playing" | "paused";
|
replayMode?: "idle" | "playing" | "paused";
|
||||||
onWikiLinkNavigate?: (wiki: Wiki) => void | Promise<void>;
|
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 [activeEntityId, setActiveEntityId] = useState<string | null>(null);
|
||||||
const [activeWikiSlug, setActiveWikiSlug] = useState<string | null>(null);
|
const [activeWikiSlug, setActiveWikiSlug] = useState<string | null>(null);
|
||||||
const [isManualSidebarOpen, setIsManualSidebarOpen] = useState(false);
|
const [isManualSidebarOpen, setIsManualSidebarOpen] = useState(false);
|
||||||
@@ -194,7 +195,8 @@ export function usePublicPreviewInteraction(options: {
|
|||||||
if (selectOptions?.selectGeometry && selectOptions?.sourceFeatureId != null) {
|
if (selectOptions?.selectGeometry && selectOptions?.sourceFeatureId != null) {
|
||||||
setSelectedFeatureIds([selectOptions.sourceFeatureId]);
|
setSelectedFeatureIds([selectOptions.sourceFeatureId]);
|
||||||
}
|
}
|
||||||
}, [relations.entitiesById, relations.entityWikisById, setRelations, setSelectedFeatureIds, wikiCache]);
|
onSelect?.();
|
||||||
|
}, [relations.entitiesById, relations.entityWikisById, setRelations, setSelectedFeatureIds, wikiCache, onSelect]);
|
||||||
|
|
||||||
const selectWiki = useCallback(async (
|
const selectWiki = useCallback(async (
|
||||||
wiki: Wiki
|
wiki: Wiki
|
||||||
@@ -224,7 +226,8 @@ export function usePublicPreviewInteraction(options: {
|
|||||||
setActiveWikiError(null);
|
setActiveWikiError(null);
|
||||||
setLinkEntityPopup(null);
|
setLinkEntityPopup(null);
|
||||||
setIsManualSidebarOpen(true);
|
setIsManualSidebarOpen(true);
|
||||||
}, [relations.wikiEntityIdsById, selectEntity, wikiCache]);
|
onSelect?.();
|
||||||
|
}, [relations.wikiEntityIdsById, selectEntity, wikiCache, onSelect]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!selectedFeatureIds.length) {
|
if (!selectedFeatureIds.length) {
|
||||||
|
|||||||
Reference in New Issue
Block a user