fix(web): close edit faces panel on Escape key press (#27519)

Move `showEditFaces` state to `assetViewerManager` so the edit faces
panel open/close state is globally accessible. Add Escape key handling
to `PersonSidePanel` that closes the assign-face sub-panel first, then
the edit faces panel. Guard the asset viewer's global Escape-to-close
action so it doesn't fire while either face panel is open.

Change-Id: I0c947fe0758aef0eac473f4cc72f6a3b6a6a6964
This commit is contained in:
Min Idzelis
2026-04-15 21:22:20 -04:00
committed by GitHub
parent 37abbeba52
commit d5d2ebd9bf
5 changed files with 40 additions and 7 deletions
@@ -44,6 +44,7 @@ class AssetViewerManager extends BaseEventManager<Events> {
isPlayingMotionPhoto = $state(false);
isShowEditor = $state(false);
#isFaceEditMode = $state(false);
#isEditFacesPanelOpen = $state(false);
#viewingAssetStoreState = $state<AssetResponseDto>();
#viewState = $state<boolean>(false);
gridScrollTarget = $state<AssetGridRouteSearchParams | null | undefined>();
@@ -72,6 +73,10 @@ class AssetViewerManager extends BaseEventManager<Events> {
return this.#isFaceEditMode;
}
get isEditFacesPanelOpen() {
return this.#isEditFacesPanelOpen;
}
get zoomState() {
return this.#zoomState;
}
@@ -186,6 +191,20 @@ class AssetViewerManager extends BaseEventManager<Events> {
this.#isFaceEditMode = false;
}
openEditFacesPanel() {
this.#isEditFacesPanelOpen = true;
}
closeEditFacesPanel() {
this.#isEditFacesPanelOpen = false;
}
resetPanelState() {
this.closeEditor();
this.closeFaceEditMode();
this.closeEditFacesPanel();
}
setAsset(asset: AssetResponseDto) {
this.#viewingAssetStoreState = asset;
this.#viewState = true;