Skip to content

Commit 8651bb1

Browse files
committed
fix: hide legacy tasks manager when user clicks outside of it
Signed-off-by: Denis Golovin <[email protected]>
1 parent 46e6c0b commit 8651bb1

File tree

2 files changed

+29
-2
lines changed

2 files changed

+29
-2
lines changed

packages/renderer/src/lib/task-manager/LegacyTaskManager.spec.ts

+17
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import '@testing-library/jest-dom/vitest';
2020

2121
import { fireEvent, render, screen } from '@testing-library/svelte';
2222
import userEvent from '@testing-library/user-event';
23+
import { tick } from 'svelte';
2324
import { beforeAll, expect, test, vi } from 'vitest';
2425

2526
import { tasksInfo } from '/@/stores/tasks';
@@ -109,6 +110,22 @@ test('Expect that the tasks manager is hidden if user click on the hide button',
109110
expect(tasksManager).not.toBeInTheDocument();
110111
});
111112

113+
test('Expect that the task manager is hidden if user clicks outside of it', async () => {
114+
render(LegacyTaskManager, { showTaskManager: true });
115+
116+
let legacyTasksManager = screen.queryByTitle('Tasks manager');
117+
expect(legacyTasksManager).toBeInTheDocument();
118+
119+
// Click "outside" the tasks manager element
120+
const event = new MouseEvent('click', { bubbles: true });
121+
document.body.dispatchEvent(event);
122+
123+
await tick();
124+
125+
legacyTasksManager = screen.queryByTitle('Tasks manager');
126+
expect(legacyTasksManager).not.toBeInTheDocument();
127+
});
128+
112129
test('Expect no tasks', async () => {
113130
render(LegacyTaskManager, { showTaskManager: true });
114131

packages/renderer/src/lib/task-manager/LegacyTaskManager.svelte

+12-2
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import LegacyTaskManagerGroup from './LegacyTaskManagerGroup.svelte';
1111
1212
// display or not the tasks manager (defaut is false)
1313
export let showTaskManager = false;
14+
let outsideWindow: HTMLDivElement;
1415
1516
$: runningTasks = $tasksInfo.filter(task => task.state === 'running');
1617
$: completedTasks = $tasksInfo.filter(task => task.state !== 'running');
@@ -35,13 +36,22 @@ function handleEscape({ key }: any) {
3536
window.events?.receive('toggle-legacy-task-manager', () => {
3637
showTaskManager = !showTaskManager;
3738
});
39+
40+
function onWindowClick(e: MouseEvent): void {
41+
const target = e.target as HTMLElement;
42+
// Listen to anything **but** the button that has "data-task-button" attribute with a value of "Help"
43+
// Ignore if task manager not visible
44+
if (showTaskManager && target && target.getAttribute('data-task-button') !== 'Tasks') {
45+
showTaskManager = outsideWindow?.contains(target);
46+
}
47+
}
3848
</script>
3949

4050
<!-- track keys like "ESC" -->
41-
<svelte:window on:keyup={handleEscape} />
51+
<svelte:window on:keyup={handleEscape} on:click={onWindowClick}/>
4252

4353
{#if showTaskManager}
44-
<div title="Tasks manager" class="fixed bottom-9 right-4 bg-[var(--pd-modal-bg)] h-96 w-80 z-40">
54+
<div title="Tasks manager" class="fixed bottom-9 right-4 bg-[var(--pd-modal-bg)] h-96 w-80 z-40" bind:this={outsideWindow}>
4555
<!-- Draw the arrow below the box-->
4656
<div
4757
class="absolute bottom-0 z-50 right-[17px] transform -translate-x-1/2 translate-y-1/2 rotate-45 w-4 h-4 {$tasksInfo.length >

0 commit comments

Comments
 (0)