094c272294
As far as I can tell, the existing code was transforming the encoded protobuf data into UTF8, and we're just lucky it wasn't causing problems with the small message we were sending.
88 lines
2.5 KiB
Svelte
88 lines
2.5 KiB
Svelte
<!--
|
|
Copyright: Ankitects Pty Ltd and contributors
|
|
License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
|
-->
|
|
<script lang="typescript">
|
|
import type { Writable } from "svelte/store";
|
|
import type { PreferenceRaw, PreferencePayload } from "sveltelib/preferences";
|
|
|
|
import pb from "anki/backend_proto";
|
|
import { postRequest } from "anki/postrequest";
|
|
|
|
import useAsync from "sveltelib/async";
|
|
import useAsyncReactive from "sveltelib/asyncReactive";
|
|
import { getPreferences } from "sveltelib/preferences";
|
|
|
|
import { daysToRevlogRange } from "./graph-helpers";
|
|
|
|
export let search: Writable<string>;
|
|
export let days: Writable<number>;
|
|
|
|
async function getGraphData(
|
|
search: string,
|
|
days: number
|
|
): Promise<pb.BackendProto.GraphsOut> {
|
|
return pb.BackendProto.GraphsOut.decode(
|
|
await postRequest("/_anki/graphData", JSON.stringify({ search, days }))
|
|
);
|
|
}
|
|
|
|
async function getGraphPreferences(): Promise<pb.BackendProto.GraphPreferences> {
|
|
return pb.BackendProto.GraphPreferences.decode(
|
|
await postRequest("/_anki/graphPreferences", JSON.stringify({}))
|
|
);
|
|
}
|
|
|
|
async function setGraphPreferences(
|
|
prefs: PreferencePayload<pb.BackendProto.GraphPreferences>
|
|
): Promise<void> {
|
|
await postRequest(
|
|
"/_anki/setGraphPreferences",
|
|
pb.BackendProto.GraphPreferences.encode(prefs).finish()
|
|
);
|
|
}
|
|
|
|
const {
|
|
loading: graphLoading,
|
|
error: graphError,
|
|
value: graphValue,
|
|
} = useAsyncReactive(() => getGraphData($search, $days), [search, days]);
|
|
|
|
const {
|
|
loading: prefsLoading,
|
|
error: prefsError,
|
|
value: prefsValue,
|
|
} = useAsync(() =>
|
|
getPreferences(
|
|
getGraphPreferences,
|
|
setGraphPreferences,
|
|
pb.BackendProto.GraphPreferences.toObject.bind(
|
|
pb.BackendProto.GraphPreferences
|
|
) as (
|
|
preferences: pb.BackendProto.GraphPreferences,
|
|
options: { defaults: boolean }
|
|
) => PreferenceRaw<pb.BackendProto.GraphPreferences>
|
|
)
|
|
);
|
|
|
|
$: revlogRange = daysToRevlogRange($days);
|
|
|
|
$: {
|
|
if ($graphError) {
|
|
alert($graphError);
|
|
}
|
|
}
|
|
|
|
$: {
|
|
if ($prefsError) {
|
|
alert($prefsError);
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<slot
|
|
{revlogRange}
|
|
loading={$graphLoading || $prefsLoading}
|
|
sourceData={$graphValue}
|
|
preferences={$prefsValue} />
|