+4
-2
src/lib/Overlay.svelte
+4
-2
src/lib/Overlay.svelte
···
3
3
import { Button, Group, Tooltip } from '@svelteuidev/core';
4
4
import Options from "./Options.svelte";
5
5
import ProjectSelector from "src/lib/ProjectSelector.svelte"
6
-
import { MessageRequest } from "../utils.ts"
6
+
import { MessageRequest, getOrderedProjects } from "../utils.ts"
7
7
8
8
let settings: Settings = {
9
9
show: false,
10
10
alignment: "right"
11
11
};
12
+
let projects = [];
12
13
let isHovering = false;
13
14
14
15
onMount(async () => {
15
16
settings = await chrome.runtime.sendMessage({type: MessageRequest.GET_SETTINGS});
17
+
projects = await getOrderedProjects()
16
18
});
17
19
18
20
function changeAlignment(event) {
···
65
67
</Group>
66
68
</div>
67
69
<div class="selector">
68
-
<ProjectSelector handleProjectChange={handleProjectChange} />
70
+
<ProjectSelector projects={projects} handleProjectChange={handleProjectChange} />
69
71
</div>
70
72
<div>
71
73
<Options/>
+2
-27
src/lib/ProjectSelector.svelte
+2
-27
src/lib/ProjectSelector.svelte
···
4
4
import { MessageRequest } from "../utils.ts"
5
5
6
6
export let handleProjectChange;
7
-
let projects = [];
8
-
let unsortedProjects = [];
9
-
10
-
onMount(async () => {
11
-
await makeActiveProjectFirst();
12
-
});
13
-
14
-
async function makeActiveProjectFirst() {
15
-
unsortedProjects = await chrome.runtime.sendMessage({type: MessageRequest.GET_ALL_PROJECTS});
16
-
const activeProject = await chrome.runtime.sendMessage({ type: MessageRequest.GET_ACTIVE_PROJECT });
17
-
18
-
// FIXME: what even....
19
-
projects = unsortedProjects;
20
-
21
-
for (let i = 0; i < projects.length; i++) {
22
-
if (projects[i].name === activeProject.name) {
23
-
projects.splice(i, 1);
24
-
}
25
-
}
26
-
projects.unshift(activeProject);
27
-
}
28
-
29
-
async function handleProjectChangeWrapper(event) {
30
-
await handleProjectChange(event);
31
-
await makeActiveProjectFirst();
32
-
}
7
+
export let projects = [];
33
8
</script>
34
9
35
10
<div>
36
11
<NativeSelect data={projects.map(p => { return { label: p.name, value: p.id }; })}
37
-
on:change={handleProjectChangeWrapper}
12
+
on:change={handleProjectChange}
38
13
/>
39
14
</div>
+5
-1
src/lib/Rabbithole.svelte
+5
-1
src/lib/Rabbithole.svelte
···
2
2
import { onMount } from "svelte";
3
3
import Timeline from "src/lib/Timeline.svelte"
4
4
import Sidebar from "src/lib/Sidebar.svelte"
5
-
import { MessageRequest } from "../utils"
5
+
import { MessageRequest, getOrderedProjects } from "../utils"
6
6
import { SvelteUIProvider, fns, AppShell, Aside, Navbar, Header, Title, Divider } from "@svelteuidev/core";
7
7
8
8
let activeProject = {};
9
9
let websites = [];
10
+
let projects = [];
10
11
let isDark = true;
11
12
let opened = false;
12
13
13
14
onMount(async () => {
15
+
projects = await getOrderedProjects()
14
16
activeProject = await chrome.runtime.sendMessage({ type: MessageRequest.GET_ACTIVE_PROJECT })
15
17
updateWebsites();
16
18
});
···
57
59
newName: event.detail.newActiveProjectName,
58
60
projectId: activeProject.id
59
61
});
62
+
projects = await getOrderedProjects();
60
63
}
61
64
62
65
async function updateWebsites() {
···
91
94
}}
92
95
hidden={!opened}>
93
96
<Sidebar
97
+
projects={projects}
94
98
on:projectChange={updateActiveProject}
95
99
on:newProject={createNewProject}
96
100
on:newProjectSync={createNewProjectFromWindow}
+3
-2
src/lib/Sidebar.svelte
+3
-2
src/lib/Sidebar.svelte
···
7
7
8
8
// FIXME: why aren't types working here?
9
9
const dispatch = createEventDispatcher();
10
+
11
+
export let projects;
12
+
10
13
let newRabbitholeName = "";
11
14
let isHovering = false;
12
-
13
-
let projects = [];
14
15
15
16
async function handleProjectChange(event) {
16
17
dispatch('projectChange', {
+16
src/utils.ts
+16
src/utils.ts
···
1
+
import type { Project } from "./storage/db";
2
+
1
3
// Can these be reordered without breaking older versions?
2
4
// seems like no because they are bound to ints
3
5
export enum MessageRequest {
···
16
18
PING,
17
19
RENAME_PROJECT
18
20
}
21
+
22
+
export async function getOrderedProjects(): Promise<Project[]> {
23
+
let projects = await chrome.runtime.sendMessage({ type: MessageRequest.GET_ALL_PROJECTS });
24
+
const activeProject = await chrome.runtime.sendMessage({ type: MessageRequest.GET_ACTIVE_PROJECT });
25
+
26
+
27
+
for (let i = 0; i < projects.length; i++) {
28
+
if (projects[i].name === activeProject.name) {
29
+
projects.splice(i, 1);
30
+
}
31
+
}
32
+
projects.unshift(activeProject);
33
+
return projects
34
+
}