Skip to content

Commit 9c3fbfb

Browse files
committed
chore: simplify
1 parent 32bc6b4 commit 9c3fbfb

File tree

9 files changed

+103
-142
lines changed

9 files changed

+103
-142
lines changed

packages/svelte-file-tree/src/lib/internal/helpers.ts

+5-5
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@ export function isControlOrMeta(event: KeyboardEvent | MouseEvent): boolean {
99
return event.ctrlKey;
1010
}
1111

12-
export function composeEventHandlers<TEvent extends Event, TTarget extends EventTarget>(
13-
a: EventHandler<TEvent, TTarget> | null | undefined,
14-
b: EventHandler<TEvent, TTarget>,
15-
): EventHandler<TEvent, TTarget> {
16-
return (event) => {
12+
export function composeEventHandlers<TEvent extends Event>(
13+
a: ((event: TEvent) => void) | null | undefined,
14+
b: (event: TEvent) => void,
15+
) {
16+
return (event: TEvent) => {
1717
if (a != null) {
1818
a(event);
1919

sites/preview/src/lib/components/tree/NameConflictDialog.svelte

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
onClose: (result: NameConflictResolution) => void;
1616
} = $props();
1717
18-
function handleOpenChange(open: boolean): void {
18+
function handleOpenChange(open: boolean) {
1919
if (!open) {
2020
onClose("cancel");
2121
}

sites/preview/src/lib/components/tree/NameFormDialog.svelte

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
onClose: () => void;
1919
} = $props();
2020
21-
function handleOpenChange(open: boolean): void {
21+
function handleOpenChange(open: boolean) {
2222
if (!open) {
2323
onClose();
2424
}

sites/preview/src/lib/components/tree/Tree.svelte

+13-16
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@
7575
ref: () => fileInput,
7676
});
7777
78-
const pasteDirection: string | undefined = $derived.by(() => {
78+
const pasteDirection = $derived.by(() => {
7979
if (pasteOperation === undefined || focusedItemId === undefined) {
8080
return;
8181
}
@@ -87,11 +87,11 @@
8787
return "After";
8888
});
8989
90-
function showAlreadyExistsToast(name: string): void {
90+
function showAlreadyExistsToast(name: string) {
9191
toast.error(`An item with the name "${name}" already exists`);
9292
}
9393
94-
function handleRename(target: TreeItemState): void {
94+
function handleRename(target: TreeItemState) {
9595
nameFormDialogState.show({
9696
title: "Rename",
9797
name: target.node.name,
@@ -117,7 +117,7 @@
117117
});
118118
}
119119
120-
async function handleUploadFiles({ target, files }: UploadFilesArgs): Promise<void> {
120+
async function handleUploadFiles({ target, files }: UploadFilesArgs) {
121121
for (const child of target.children) {
122122
for (const file of files) {
123123
if (child.name === file.name) {
@@ -178,11 +178,8 @@
178178
}
179179
};
180180
181-
function handleResolveNameConflict({
182-
operation,
183-
name,
184-
}: ResolveNameConflictArgs): Promise<NameConflictResolution> {
185-
return new Promise((resolve) => {
181+
function handleResolveNameConflict({ operation, name }: ResolveNameConflictArgs) {
182+
return new Promise<NameConflictResolution>((resolve) => {
186183
let title: string;
187184
switch (operation) {
188185
case "move": {
@@ -206,19 +203,19 @@
206203
function handleCircularReferenceError({
207204
target,
208205
position,
209-
}: CircularReferenceErrorArgs<FileTreeNode>): void {
206+
}: CircularReferenceErrorArgs<FileTreeNode>) {
210207
toast.error(`Cannot move "${target.name}" ${position} itself`);
211208
}
212209
213-
function handleExpand(target: TreeItemState): void {
210+
function handleExpand(target: TreeItemState) {
214211
expandedIds.add(target.node.id);
215212
}
216213
217-
function handleCollapse(target: TreeItemState): void {
214+
function handleCollapse(target: TreeItemState) {
218215
expandedIds.delete(target.node.id);
219216
}
220217
221-
function handleItemFocusIn(target: TreeItemState): void {
218+
function handleItemFocusIn(target: TreeItemState) {
222219
focusedItemId = target.node.id;
223220
}
224221
@@ -269,7 +266,7 @@
269266
event.preventDefault();
270267
};
271268
272-
function handleCleanup(target: TreeItemState): void {
269+
function handleCleanup(target: TreeItemState) {
273270
if (focusedItemId === target.node.id) {
274271
focusedItemId = undefined;
275272
}
@@ -411,8 +408,8 @@
411408
type="file"
412409
multiple
413410
class="hidden"
414-
onchange={fileInputState.onChange}
415-
oncancel={fileInputState.onCancel}
411+
onchange={fileInputState.onchange}
412+
oncancel={fileInputState.oncancel}
416413
/>
417414

418415
<style>

sites/preview/src/lib/components/tree/TreeContextMenu.svelte

+2-2
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,11 @@
2828
onClose: () => void;
2929
} = $props();
3030
31-
function open(): boolean {
31+
function open() {
3232
return target !== undefined;
3333
}
3434
35-
function handleOpenChange(open: boolean): void {
35+
function handleOpenChange(open: boolean) {
3636
if (!open) {
3737
onClose();
3838
}

sites/preview/src/lib/components/tree/state.svelte.ts

+62-98
Original file line numberDiff line numberDiff line change
@@ -9,31 +9,29 @@ export function createNameConflictDialogState() {
99
let description = $state.raw("");
1010
let onClose: ((result: NameConflictResolution) => void) | undefined;
1111

12-
function show(args: {
12+
type ShowArgs = {
1313
title: string;
1414
description: string;
1515
onClose: (result: NameConflictResolution) => void;
16-
}): void {
17-
open = true;
18-
title = args.title;
19-
description = args.description;
20-
onClose = args.onClose;
21-
}
22-
23-
function close(result: NameConflictResolution): void {
24-
open = false;
25-
title = "";
26-
description = "";
27-
onClose!(result);
28-
onClose = undefined;
29-
}
16+
};
3017

3118
return {
3219
open: () => open,
3320
title: () => title,
3421
description: () => description,
35-
show,
36-
close,
22+
show: (args: ShowArgs) => {
23+
open = true;
24+
title = args.title;
25+
description = args.description;
26+
onClose = args.onClose;
27+
},
28+
close: (result: NameConflictResolution) => {
29+
open = false;
30+
title = "";
31+
description = "";
32+
onClose!(result);
33+
onClose = undefined;
34+
},
3735
};
3836
}
3937

@@ -43,36 +41,32 @@ export function createNameFormDialogState() {
4341
let title = $state.raw("");
4442
let onSubmit: ((name: string) => void) | undefined;
4543

46-
function setName(value: string): void {
47-
name = value;
48-
}
49-
50-
function show(args: { title: string; onSubmit: (name: string) => void; name?: string }): void {
51-
name = args.name ?? "";
52-
open = true;
53-
title = args.title;
54-
onSubmit = args.onSubmit;
55-
}
56-
57-
function submit(): void {
58-
onSubmit!(name);
59-
}
60-
61-
function close(): void {
62-
name = "";
63-
open = false;
64-
title = "";
65-
onSubmit = undefined;
66-
}
44+
type ShowArgs = {
45+
title: string;
46+
onSubmit: (name: string) => void;
47+
name?: string;
48+
};
6749

6850
return {
6951
name: () => name,
70-
setName,
52+
setName: (value: string) => {
53+
name = value;
54+
},
7155
open: () => open,
7256
title: () => title,
73-
show,
74-
submit,
75-
close,
57+
show: (args: ShowArgs) => {
58+
name = args.name ?? "";
59+
open = true;
60+
title = args.title;
61+
onSubmit = args.onSubmit;
62+
},
63+
submit: () => onSubmit!(name),
64+
close: () => {
65+
name = "";
66+
open = false;
67+
title = "";
68+
onSubmit = undefined;
69+
},
7670
};
7771
}
7872

@@ -105,11 +99,7 @@ export function createContextMenuState({
10599
}) {
106100
let target: TreeContextMenuTarget | undefined = $state.raw();
107101

108-
function setTarget(value: TreeContextMenuTarget): void {
109-
target = value;
110-
}
111-
112-
function item(): TreeItemState {
102+
function item() {
113103
switch (target!.type) {
114104
case "tree": {
115105
throw new Error("Expected an item");
@@ -120,7 +110,7 @@ export function createContextMenuState({
120110
}
121111
}
122112

123-
function folderOrTree(): FolderNode | FileTree {
113+
function folderOrTree() {
124114
switch (target!.type) {
125115
case "tree": {
126116
return target!.tree();
@@ -135,61 +125,32 @@ export function createContextMenuState({
135125
}
136126
}
137127

138-
function rename(): void {
139-
onRename(item());
140-
}
141-
142-
function copy(): void {
143-
onCopy(item());
144-
}
145-
146-
function cut(): void {
147-
onCut(item());
148-
}
149-
150-
function paste(): void {
151-
onPaste(item());
152-
}
153-
154-
function remove(): void {
155-
onRemove(item());
156-
}
157-
158-
function createFolder(): void {
159-
onCreateFolder(folderOrTree());
160-
}
161-
162-
function uploadFiles(): void {
163-
onUploadFiles(folderOrTree());
164-
}
165-
166-
function close(): void {
167-
target = undefined;
168-
}
169-
170128
return {
171129
target: () => target,
172-
setTarget,
173-
rename,
174-
copy,
175-
cut,
176-
paste,
177-
remove,
178-
createFolder,
179-
uploadFiles,
180-
close,
130+
setTarget: (value: TreeContextMenuTarget) => {
131+
target = value;
132+
},
133+
rename: () => onRename(item()),
134+
copy: () => onCopy(item()),
135+
cut: () => onCut(item()),
136+
paste: () => onPaste(item()),
137+
remove: () => onRemove(item()),
138+
createFolder: () => onCreateFolder(folderOrTree()),
139+
uploadFiles: () => onUploadFiles(folderOrTree()),
140+
close: () => {
141+
target = undefined;
142+
},
181143
};
182144
}
183145

184146
export function createFileInputState({ ref }: { ref: () => HTMLInputElement | null }) {
185147
let onPick: ((files: FileList) => void) | undefined;
186148

187-
function showPicker(args: { onPick: (files: FileList) => void }): void {
188-
onPick = args.onPick;
189-
ref()!.click();
190-
}
149+
type ShowPickerArgs = {
150+
onPick: (files: FileList) => void;
151+
};
191152

192-
const onChange: EventHandler<Event, HTMLInputElement> = (event) => {
153+
const onchange: EventHandler<Event, HTMLInputElement> = (event) => {
193154
const { files } = event.currentTarget;
194155
if (files !== null && files.length !== 0) {
195156
onPick!(files);
@@ -199,13 +160,16 @@ export function createFileInputState({ ref }: { ref: () => HTMLInputElement | nu
199160
event.currentTarget.value = "";
200161
};
201162

202-
const onCancel: EventHandler<Event, HTMLInputElement> = () => {
163+
const oncancel: EventHandler<Event, HTMLInputElement> = () => {
203164
onPick = undefined;
204165
};
205166

206167
return {
207-
showPicker,
208-
onChange,
209-
onCancel,
168+
showPicker: (args: ShowPickerArgs) => {
169+
onPick = args.onPick;
170+
ref()!.click();
171+
},
172+
onchange,
173+
oncancel,
210174
};
211175
}

sites/preview/src/lib/tree.svelte.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import * as tree from "svelte-file-tree";
22

3-
function getTotalSize(nodes: Array<FileTreeNode>): number {
3+
function getTotalSize(nodes: Array<FileTreeNode>) {
44
let size = 0;
55
for (const node of nodes) {
66
size += node.size;
@@ -24,7 +24,7 @@ export class FileNode extends tree.FileNode {
2424
this.size = props.size;
2525
}
2626

27-
readonly kind: string = $derived.by(() => {
27+
readonly kind = $derived.by(() => {
2828
const { name } = this;
2929
const dotIndex = name.lastIndexOf(".");
3030
if (dotIndex === -1) {
@@ -225,7 +225,7 @@ export class FileNode extends tree.FileNode {
225225
}
226226
});
227227

228-
copy(): FileNode {
228+
copy() {
229229
return new FileNode({
230230
id: crypto.randomUUID(),
231231
name: this.name,

0 commit comments

Comments
 (0)