Skip to content

Commit

Permalink
Merge branch 'main' into add-searchable-select
Browse files Browse the repository at this point in the history
  • Loading branch information
DTCurrie committed Aug 29, 2023
2 parents 6ac0922 + cc97ecd commit e7237b9
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 5 deletions.
2 changes: 1 addition & 1 deletion packages/core/package.json
@@ -1,6 +1,6 @@
{
"name": "@viamrobotics/prime-core",
"version": "0.0.19",
"version": "0.0.20",
"publishConfig": {
"access": "public"
},
Expand Down
4 changes: 3 additions & 1 deletion packages/core/src/lib/__tests__/click-outside.spec.svelte
Expand Up @@ -8,4 +8,6 @@ export let onClickOutside: () => void;
<div
data-testid="subject"
use:clickOutside={onClickOutside}
/>
>
<button data-testid="inside" />
</div>
19 changes: 18 additions & 1 deletion packages/core/src/lib/__tests__/click-outside.spec.ts
Expand Up @@ -11,15 +11,32 @@ describe('use:clickOutside', () => {
render(Subject, { onClickOutside });

const user = userEvent.setup();
const outsideButton = screen.getByTestId('outside');
const subject = screen.getByTestId('subject');
const insideButton = screen.getByTestId('inside');
const outsideButton = screen.getByTestId('outside');

await user.click(subject);
await user.click(insideButton);

expect(onClickOutside).not.toHaveBeenCalled();

await user.click(outsideButton);

expect(onClickOutside).toHaveBeenCalledOnce();
});

it('should not trigger if clicked element gets removed from the DOM', async () => {
render(Subject, { onClickOutside });

const user = userEvent.setup();
const insideButton = screen.getByTestId('inside');

insideButton.addEventListener('click', () => {
insideButton.remove();
});

await user.click(insideButton);

expect(onClickOutside).not.toHaveBeenCalled();
});
});
5 changes: 3 additions & 2 deletions packages/core/src/lib/click-outside.ts
Expand Up @@ -26,7 +26,7 @@ import type { Action } from 'svelte/action';
* @param handler The callback to run
* @returns The Svelte Action
*/
export const clickOutside: Action<HTMLElement, () => unknown> = (
export const clickOutside: Action<HTMLElement | undefined, () => unknown> = (
node,
handler
) => {
Expand All @@ -35,7 +35,8 @@ export const clickOutside: Action<HTMLElement, () => unknown> = (
const handleWindowClick = (event: MouseEvent): void => {
if (
node &&
!node.contains(event.target as Element | null) &&
window.document.contains(event.target as Element) &&
!node.contains(event.target as Element) &&
!event.defaultPrevented
) {
handleClickOutside();
Expand Down

0 comments on commit e7237b9

Please sign in to comment.