Skip to content

Commit fbf092e

Browse files
committed
refactor: extract dialog opener component
1 parent d4eaf85 commit fbf092e

File tree

7 files changed

+27
-47
lines changed

7 files changed

+27
-47
lines changed

src/components/PackageSearchOpener.astro

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import LucideSearch from "~icons/lucide/search";
33
---
44

55
<button
6-
x-data="packageSearchOpener()"
6+
x-data="dialogOpener('#package-search')"
77
class="btn btn-outline w-full justify-between border-base-content/20"
88
@click="open()"
99
@keydown.ctrl.shift.f.window.prevent="open()"
@@ -14,7 +14,7 @@ import LucideSearch from "~icons/lucide/search";
1414
Search npm packages &hellip;
1515
</div>
1616
<kbd x-cloak>
17-
<kbd class="hidden font-normal text-base-content lg:kbd lg:kbd-sm" x-text="cmdSymbol()">⌘</kbd>
17+
<kbd class="hidden font-normal text-base-content lg:kbd lg:kbd-sm" x-text="cmdKey"></kbd>
1818
<kbd class="hidden font-normal text-base-content lg:kbd lg:kbd-sm">Shift</kbd>
1919
<kbd class="hidden font-normal text-base-content lg:kbd lg:kbd-sm">F</kbd>
2020
</kbd>

src/components/QuickSearchOpener.astro

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import LucideFileSearch from "~icons/lucide/file-search";
33
---
44

55
<button
6-
x-data="quickSearchOpener()"
6+
x-data="dialogOpener('#quick-search')"
77
class="btn btn-outline w-full justify-between border-base-content/50"
88
@click="open()"
99
@keydown.ctrl.k.window.prevent="open()"
@@ -14,7 +14,7 @@ import LucideFileSearch from "~icons/lucide/file-search";
1414
Quick search &hellip;
1515
</div>
1616
<kbd x-cloak>
17-
<kbd class="hidden font-normal text-base-content lg:kbd lg:kbd-sm" x-text="cmdSymbol()">⌘</kbd>
17+
<kbd class="hidden font-normal text-base-content lg:kbd lg:kbd-sm" x-text="cmdKey"></kbd>
1818
<kbd class="hidden font-normal text-base-content lg:kbd lg:kbd-sm">K</kbd>
1919
</kbd>
2020
</button>

src/scripts/alpine.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import type { Alpine } from "alpinejs";
2-
import { packageSearch, packageSearchOpener } from "./package-search";
3-
import { quickSearch, quickSearchOpener } from "./quick-search";
2+
import { dialogOpener } from "./dialog-opener";
3+
import { packageSearch } from "./package-search";
4+
import { quickSearch } from "./quick-search";
45
import { timeAgo } from "./time-ago";
56

67
export default (Alpine: Alpine) => {
78
Alpine.data("timeAgo", timeAgo);
8-
Alpine.data("packageSearchOpener", packageSearchOpener);
9+
Alpine.data("dialogOpener", dialogOpener);
910
Alpine.data("packageSearch", packageSearch);
10-
Alpine.data("quickSearchOpener", quickSearchOpener);
1111
Alpine.data("quickSearch", quickSearch);
1212
};

src/scripts/dialog-opener.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { defineComponent } from "./define-component";
2+
import { scrollIntoView } from "./scroll-into-view";
3+
4+
export const dialogOpener = defineComponent((dialogId: string) => ({
5+
dialog: undefined as HTMLDialogElement | undefined,
6+
results: undefined as HTMLUListElement | undefined,
7+
cmdKey: "",
8+
init() {
9+
this.dialog = document.querySelector<HTMLDialogElement>(dialogId) ?? undefined;
10+
this.results = document.querySelector<HTMLUListElement>(`${dialogId}-results`) ?? undefined;
11+
this.cmdKey = navigator.userAgent.includes("Mac") ? "⌘" : "Ctrl";
12+
},
13+
open() {
14+
if (this.dialog && !this.dialog.open) {
15+
this.dialog.showModal();
16+
scrollIntoView(this.results, 0);
17+
}
18+
},
19+
}));

src/scripts/is-mac.ts

Lines changed: 0 additions & 1 deletion
This file was deleted.

src/scripts/package-search.ts

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,7 @@
11
import { mod } from "../../lib/mod";
22
import { defineComponent } from "./define-component";
3-
import { isMac } from "./is-mac";
43
import { scrollIntoView } from "./scroll-into-view";
54

6-
export const packageSearchOpener = defineComponent(() => ({
7-
dialog: undefined as HTMLDialogElement | undefined,
8-
resultsList: undefined as HTMLUListElement | undefined,
9-
init() {
10-
this.dialog = findDialog();
11-
this.resultsList = findResultsList();
12-
},
13-
open() {
14-
if (this.dialog && !this.dialog.open) {
15-
this.dialog.showModal();
16-
scrollIntoView(this.resultsList, 0);
17-
}
18-
},
19-
cmdSymbol(): string {
20-
return isMac() ? "⌘" : "Ctrl";
21-
},
22-
}));
23-
245
type NpmPackage = {
256
name: string;
267
description: string;

src/scripts/quick-search.ts

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,27 +3,8 @@ import Fuse from "fuse.js/basic";
33
import { mod } from "../../lib/mod";
44
import { shortKind } from "../../lib/short-kind";
55
import { defineComponent } from "./define-component";
6-
import { isMac } from "./is-mac";
76
import { scrollIntoView } from "./scroll-into-view";
87

9-
export const quickSearchOpener = defineComponent(() => ({
10-
dialog: undefined as HTMLDialogElement | undefined,
11-
resultsList: undefined as HTMLUListElement | undefined,
12-
init() {
13-
this.dialog = findDialog();
14-
this.resultsList = findResultsList();
15-
},
16-
open() {
17-
if (this.dialog && !this.dialog.open) {
18-
this.dialog.showModal();
19-
scrollIntoView(this.resultsList, 0);
20-
}
21-
},
22-
cmdSymbol(): string {
23-
return isMac() ? "⌘" : "Ctrl";
24-
},
25-
}));
26-
278
type QuickSearchDeclaration = {
289
headingId: string;
2910
declarationId: string;

0 commit comments

Comments
 (0)