<script lang="ts">
  import Graph from "./Graph.svelte";
  import { loadTasks } from "./tasks";
  import type { TasksFile, TaskDescriptor } from "./tasks";
  import TasksLoader from "./TasksLoader.svelte";
  import TaskPanel from "./TaskPanel.svelte";

  const tasksPromise: Promise<TasksFile> = loadTasks();

  // react to hash changes
  let hash = window.location.hash.substr(1);
  window.onhashchange = () => {
    hash = window.location.hash.substr(1);
    window.setTimeout(() => window.scrollTo({
        top: 0,
        left: 0,
        behavior: 'smooth'
    }), 50)
  };
  $: selectedTaskId = (/^task\/([^\/]*)/.exec(hash) || [null, null])[1];
</script>

<style>
  main {
    text-align: center;
    margin: 0 auto;
    min-height: 420px;
  }
</style>

<main>
  <TasksLoader promise={tasksPromise} let:data={t}>
    <TaskPanel tasks={t} {selectedTaskId} />
    <div style="height: 100%">
      <Graph
        tasks={t}
        on:closeTask={() => { location.hash = ""}}
        on:selectTask={(e) => { if (e.detail.type != "label") (location.hash = `#task/${e.detail.id}`)}}/>
    </div>
  </TasksLoader>
</main>