Skip to content

Commit dbea9a0

Browse files
committed
入力をキャッシュする機能を追加
1 parent 4ae0d9e commit dbea9a0

File tree

4 files changed

+41
-24
lines changed

4 files changed

+41
-24
lines changed

frontend/src/App.svelte

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,20 @@
55
import Message from "./components/Message.svelte";
66
77
import { Loader } from "@lucide/svelte";
8-
import { type Problem } from "./utils/types";
9-
import { recordLastInput, loadLastInput, DiffRange } from "./memorizer";
8+
import { type Problem, type ClosedRange, createValidRange } from "./utils/types";
9+
import { cacheInput, loadLastInput } from "./cacher";
1010
11-
let lastRange : DiffRange | null = loadLastInput();
11+
let cachedInput : ClosedRange | null = loadLastInput();
12+
let currentInput : ClosedRange | null;
1213
13-
let under_diff = $state<string>(lastRange ? lastRange.under.toString():"0");
14-
let over_diff = $state<string>("3854");
14+
let under_diff = $state<number>(cachedInput ? cachedInput.min : 0);
15+
let over_diff = $state<number>(cachedInput ? cachedInput.max : 3854);
1516
1617
let errors = $derived({
17-
rangeError: parseInt(under_diff) > parseInt(over_diff),
18-
isMinusUnderDiff: parseInt(under_diff) < 0,
19-
isMinusOverDiff: parseInt(over_diff) < 0,
18+
rangeError: under_diff > over_diff,
19+
isMinusUnderDiff: under_diff < 0,
20+
isMinusOverDiff: over_diff < 0,
21+
invalidRange: !(currentInput = createValidRange(under_diff, over_diff))
2022
});
2123
2224
let result = $state<Problem | null>(null);
@@ -77,7 +79,9 @@
7779
<div class="flex items-center gap-2">
7880
<Input type="number" placeholder="最低Diffを入力してください。" isErrors={errors} bind:value={under_diff} />
7981
<Input type="number" placeholder="最高Diffを入力してください。" isErrors={errors} bind:value={over_diff} />
80-
<Button onclick={sendQuery} class="shrink-0 w-24 h-12 flex justify-center items-center" disabled={loading}>
82+
<!--TODO: ここのonClickに入力値保存機能をつける-->
83+
<Button onclick={() =>{sendQuery(), cacheInput(currentInput!)}} class="shrink-0 w-24 h-12 flex justify-center items-center" disabled={loading}>
84+
<!--ここまで-->
8185
{#if loading}
8286
<div class="animate-spin [animation-duration: 1.05s]">
8387
<Loader size="1.5rem" />

frontend/src/cacher.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import type { ClosedRange } from './utils/types';
2+
3+
const rangeKey : string = 'lastDiff';
4+
5+
export function cacheInput(range : ClosedRange): void {
6+
localStorage.setItem(rangeKey, JSON.stringify(range));
7+
}
8+
export function loadLastInput(): ClosedRange | null {
9+
const data = localStorage.getItem(rangeKey);
10+
return data ? JSON.parse(data) as ClosedRange : null;
11+
}

frontend/src/memorizer.ts

Lines changed: 0 additions & 14 deletions
This file was deleted.

frontend/src/utils/types.ts

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,20 @@ export interface Problem {
33
contest_id: string;
44
name: string;
55
difficulty: number;
6-
};
6+
};
7+
8+
export type ClosedRange = {
9+
min: number;
10+
max: number;
11+
} & { readonly __brand: unique symbol };
12+
13+
// for validation
14+
export function createValidRange(min: number, max: number): ClosedRange | null {
15+
if (min > max) return null;
16+
17+
return {
18+
min,
19+
max,
20+
__brand: Symbol('ClosedRange') as never
21+
};
22+
}

0 commit comments

Comments
 (0)