Create search and days writable in GraphsPage to allow browserSearch to work

This commit is contained in:
Henrik Giesel 2021-03-22 02:44:08 +01:00
parent 9a864120b2
commit 0bbe38ebde
5 changed files with 25 additions and 44 deletions

View file

@ -1,10 +0,0 @@
<script lang="typescript">
import { bridgeCommand } from "anki/bridgecommand";
export let search: Readable<string>;
export let query: string;
$: {
bridgeCommand(`browserSearch: ${$search} ${query}`);
}
</script>

View file

@ -2,10 +2,11 @@
import "../sass/core.css"; import "../sass/core.css";
import type { SvelteComponent } from "svelte/internal"; import type { SvelteComponent } from "svelte/internal";
import { writable } from "svelte/store";
import type { I18n } from "anki/i18n"; import type { I18n } from "anki/i18n";
import { bridgeCommand } from "anki/bridgecommand";
import WithGraphData from "./WithGraphData.svelte"; import WithGraphData from "./WithGraphData.svelte";
import BrowserSearch from "./BrowserSearch.svelte";
export let i18n: I18n; export let i18n: I18n;
export let nightMode: boolean; export let nightMode: boolean;
@ -15,11 +16,12 @@
export let initialDays: number; export let initialDays: number;
export let controller: SvelteComponent | null; export let controller: SvelteComponent | null;
let query: string; const search = writable(initialSearch);
const days = writable(initialDays);
const activateBrowserSearch = (event: CustomEvent): void => { function browserSearch(event: CustomEvent) {
query = event.detail.query; bridgeCommand(`browserSearch: ${$search} ${event.detail.query}`);
}; }
</script> </script>
<style lang="scss"> <style lang="scss">
@ -32,10 +34,8 @@
<div> <div>
<WithGraphData <WithGraphData
{initialSearch} {search}
{initialDays} {days}
let:search
let:days
let:loading let:loading
let:sourceData let:sourceData
let:preferences let:preferences
@ -53,10 +53,8 @@
{revlogRange} {revlogRange}
{i18n} {i18n}
{nightMode} {nightMode}
on:search={activateBrowserSearch} /> on:search={browserSearch} />
{/each} {/each}
{/if} {/if}
<BrowserSearch {search} {query} />
</WithGraphData> </WithGraphData>
</div> </div>

View file

@ -20,7 +20,8 @@
export let search: Writable<string>; export let search: Writable<string>;
let revlogRange = daysToRevlogRange($days); let revlogRange = daysToRevlogRange($days);
let searchRange = $search === "deck:current" let searchRange =
$search === "deck:current"
? SearchRange.Deck ? SearchRange.Deck
: $search === "" : $search === ""
? SearchRange.Collection ? SearchRange.Collection

View file

@ -1,52 +1,40 @@
<script lang="typescript"> <script lang="typescript">
import { onMount } from "svelte";
import { writable } from "svelte/store";
import useAsync from "./async"; import useAsync from "./async";
import useAsyncReactive from "./asyncReactive"; import useAsyncReactive from "./asyncReactive";
import { getGraphData, RevlogRange, daysToRevlogRange } from "./graph-helpers"; import { getGraphData, RevlogRange, daysToRevlogRange } from "./graph-helpers";
import { getPreferences } from "./preferences"; import { getPreferences } from "./preferences";
export let initialSearch: string; export let search: Writable<string>;
export let initialDays: number; export let days: Writable<number>;
const search = writable(initialSearch);
const days = writable(initialDays);
const { const {
loading: graphLoading, loading: graphLoading,
error: graphError, error: graphError,
value: graphValue, value: graphValue,
} = useAsyncReactive(() => getGraphData($search, $days), [ } = useAsyncReactive(() => getGraphData($search, $days), [search, days]);
search,
days,
]);
const preferencesPromise = getPreferences(); const preferencesPromise = getPreferences();
const { const { loading: prefsLoading, error: prefsError, value: prefsValue } = useAsync(
loading: prefsLoading, () => preferencesPromise
error: prefsError, );
value: prefsValue,
} = useAsync(() => preferencesPromise);
$: revlogRange = daysToRevlogRange($days); $: revlogRange = daysToRevlogRange($days);
$: { $: {
if ($graphError) { if ($graphError) {
alert($graphError) alert($graphError);
} }
} }
$: { $: {
if ($prefsError) { if ($prefsError) {
alert($prefsError) alert($prefsError);
} }
} }
</script> </script>
<slot <slot
{search}
{days}
{revlogRange} {revlogRange}
loading={$graphLoading || $prefsLoading} loading={$graphLoading || $prefsLoading}
sourceData={$graphValue} sourceData={$graphValue}

View file

@ -11,7 +11,11 @@ function useAsyncReactive<T, E>(
asyncFunction: () => Promise<T>, asyncFunction: () => Promise<T>,
dependencies: [Readable<unknown>, ...Readable<unknown>[]] dependencies: [Readable<unknown>, ...Readable<unknown>[]]
): AsyncReativeData<T, E> { ): AsyncReativeData<T, E> {
const promise = derived(dependencies, (_, set) => set(asyncFunction()), asyncFunction()); const promise = derived(
dependencies,
(_, set) => set(asyncFunction()),
asyncFunction()
);
const value = derived( const value = derived(
promise, promise,