Implement simple routing for TaskPanel
This commit is contained in:
parent
4e1db0168b
commit
f4601a782b
2 changed files with 15 additions and 8 deletions
|
@ -15,8 +15,9 @@ import type { detach } from "svelte/internal";
|
|||
// react to hash changes
|
||||
let hash = window.location.hash.substr(1);
|
||||
window.onhashchange = () => {
|
||||
hash = window.location.hash.substr(1);
|
||||
hash = window.location.hash.substr(1);
|
||||
}
|
||||
$: selectedTaskId = (/^task\/([^\/]*)/.exec(hash) || [null, null])[1]
|
||||
</script>
|
||||
|
||||
<style>
|
||||
|
@ -34,10 +35,10 @@ import type { detach } from "svelte/internal";
|
|||
</TasksLoader>
|
||||
{:else}
|
||||
<TasksLoader promise={tasksPromise} let:data={t}>
|
||||
<TaskPanel bind:this={taskPanel} />
|
||||
<TaskPanel tasks={t} bind:this={taskPanel} {selectedTaskId} />
|
||||
<div style="height: 100%">
|
||||
<Graph tasks={t}
|
||||
on:selectTask={e => taskPanel.select(e.detail)}
|
||||
on:selectTask={e => location.hash=`#task/${e.detail.id}`}
|
||||
on:preSelectTask={e => taskPanel.preSelect(e.detail)}
|
||||
on:unPreSelectTask={e => taskPanel.unPreselect(e.detail)} />
|
||||
</div>
|
||||
|
|
|
@ -4,8 +4,9 @@
|
|||
import type { TasksFile, TaskDescriptor } from "./task-loader";
|
||||
import TaskDisplay from "./TaskDisplay.svelte";
|
||||
|
||||
// export let tasks: TasksFile;
|
||||
export let tasks: TasksFile;
|
||||
let selectedTask: TaskDescriptor | null = null
|
||||
export let selectedTaskId: string | null = null
|
||||
|
||||
let heightClass: "collapsed" | "full" | "preview" = "collapsed"
|
||||
|
||||
|
@ -24,12 +25,17 @@ import TaskDisplay from "./TaskDisplay.svelte";
|
|||
}, 10);
|
||||
}
|
||||
|
||||
export function select(task: TaskDescriptor) {
|
||||
selectedTask = task
|
||||
heightClass = "full"
|
||||
$: {
|
||||
if (selectedTaskId) {
|
||||
heightClass = "full"
|
||||
selectedTask = tasks.tasks.find(t => t.id == selectedTaskId) ?? null
|
||||
} else {
|
||||
heightClass = "collapsed"
|
||||
}
|
||||
}
|
||||
|
||||
function close() {
|
||||
location.hash = ""
|
||||
heightClass = "collapsed"
|
||||
window.setTimeout(() => window.scrollTo({
|
||||
top: 0,
|
||||
|
@ -81,7 +87,7 @@ import TaskDisplay from "./TaskDisplay.svelte";
|
|||
</style>
|
||||
|
||||
<div class="panel {heightClass}"
|
||||
on:click={() => selectedTask && select(selectedTask)}>
|
||||
on:click={() => location.hash = `#task/${selectedTask?.id}`}>
|
||||
<TaskDisplay taskId={selectedTask?.id} />
|
||||
<button type=button class="closeButton" on:click|stopPropagation={close}></button>
|
||||
</div>
|
||||
|
|
Reference in a new issue