diff --git a/.playwright/scripts/__tests__/extensionContributions.e2e.mjs b/.playwright/scripts/__tests__/extensionContributions.e2e.mjs index 3743126fa..d334f7673 100644 --- a/.playwright/scripts/__tests__/extensionContributions.e2e.mjs +++ b/.playwright/scripts/__tests__/extensionContributions.e2e.mjs @@ -49,6 +49,15 @@ test('plugin-owned preferences activate contributions, yield native content and await expect(alpha.getByText('tests.alpha content')).toBeVisible() await expect(nativeFooter()).toHaveCount(0) const identity = await alpha.evaluate(() => window.fixture.instance) + await page.getByTestId('context-panel-toggle').click() + await page.getByTestId('context-panel-swap').click() + await page.getByTestId('context-panel-maximize').click() + await expect.poll(() => visible('alpha')).toBe(false) + await page.getByTestId('context-panel-maximize').click() + await expect.poll(() => visible('alpha')).toBe(true) + expect(await alpha.evaluate(() => window.fixture.instance)).toBe(identity) + await page.getByTestId('context-panel-swap').click() + await page.getByTestId('context-panel-toggle').click() const alphaActions = await pluginFrame('alpha', 'actions') await alphaActions.getByRole('checkbox', { name: 'Content tests.alpha' }).uncheck() await expect(nativeFooter()).toBeVisible() diff --git a/apps/buddy/src/app/workbench/DesktopWorkbenchArea.vue b/apps/buddy/src/app/workbench/DesktopWorkbenchArea.vue index 47a8f15c7..3998b4093 100644 --- a/apps/buddy/src/app/workbench/DesktopWorkbenchArea.vue +++ b/apps/buddy/src/app/workbench/DesktopWorkbenchArea.vue @@ -3,18 +3,22 @@ import type { ComponentPublicInstance } from 'vue' import type { DesktopShellBindings } from '../shell/desktopShellBindings' import { NSpin } from 'naive-ui' import { computed, watch } from 'vue' -import { RouterView } from 'vue-router' +import { RouterView, useRoute } from 'vue-router' import { DesktopTaskIndexView, DesktopTaskResourcePanel } from '@/modules/tasks/ui' import { useDesktopUi } from '@/shared/ui/desktopUiContext' import WorkbenchLayout from '@/workbench/browser/layout/WorkbenchLayout.vue' import WorkbenchMountPoint from '@/workbench/browser/mounts/WorkbenchMountPoint.vue' import { useWorkbench } from '@/workbench/browser/workbenchContext' import WorkbenchLayoutNode from '@/workbench/browser/WorkbenchLayoutNode.vue' +import WorkbenchResourcePanelActions from '@/workbench/browser/WorkbenchResourcePanelActions.vue' import WorkbenchSurface from '@/workbench/browser/WorkbenchSurface.vue' import DesktopDirectoryFileSurface from './DesktopDirectoryFileSurface.vue' const props = defineProps<{ bindings: DesktopShellBindings, tasksVisible: boolean }>() -const { controller, layout, revision, labels } = useWorkbench() +const { controller, layout, revision, labels, panels } = useWorkbench() +const route = useRoute() +const contextVisible = computed(() => (props.tasksVisible || props.bindings.contextPanelGlobal.value) && props.bindings.resources.isOpen.value) +watch([contextVisible, () => route.path], panels.restore) const pendingTaskIds = computed(() => { void revision.value return [...controller.navigation.entries.values()].filter(entry => entry.status === 'loading' && entry.view.resource.scheme === 'task').map(entry => entry.view.resource.id) @@ -49,27 +53,32 @@ function focusContext() { diff --git a/apps/buddy/src/modules/tasks/widgets/context-panel/DesktopTaskResourcePanel.vue b/apps/buddy/src/modules/tasks/widgets/context-panel/DesktopTaskResourcePanel.vue index b3516d150..423209164 100644 --- a/apps/buddy/src/modules/tasks/widgets/context-panel/DesktopTaskResourcePanel.vue +++ b/apps/buddy/src/modules/tasks/widgets/context-panel/DesktopTaskResourcePanel.vue @@ -58,6 +58,9 @@ function add(kind: 'changes' | 'files' | 'browser') {