1
0
mirror of https://github.com/vbalien/voca.git synced 2025-12-06 11:26:21 +09:00

save state to localstorage

This commit is contained in:
2022-03-01 05:06:25 +09:00
parent 811fa8f036
commit 2579e69a85
3 changed files with 81 additions and 58 deletions

File diff suppressed because one or more lines are too long

View File

@@ -4,8 +4,14 @@ import { downloadVocaQuiz } from "../pdf.ts";
export default function DownloadForm() {
const [levels, setLevels] = React.useState<number[]>([6, 7]);
const [day, setDay] = React.useState<number>(1);
const [formEnable, setFormEnable] = React.useState<boolean>(true);
const handleSubmit: React.FormEventHandler = React.useCallback((ev) => {
downloadVocaQuiz(levels.sort(), day);
localStorage.setItem("voca-setting", JSON.stringify({ levels, day }));
setFormEnable(false);
downloadVocaQuiz(levels.sort(), day).then(() => {
setFormEnable(true);
});
ev.preventDefault();
}, [levels, day]);
@@ -25,10 +31,16 @@ export default function DownloadForm() {
}
};
React.useEffect(() => {
const setting = JSON.parse(localStorage.getItem("voca-setting") ?? "{}");
setting.level && setLevels(setting.levels);
setting.day && setDay(setting.day);
}, []);
return (
<>
<form onSubmit={handleSubmit}>
<fieldset>
<fieldset disabled={!formEnable}>
<legend> </legend>
<div>
<input
@@ -84,14 +96,19 @@ export default function DownloadForm() {
<div>
<label htmlFor="day"></label>
<select id="day" value={day} onChange={handleDayChange}>
<select
id="day"
value={day}
onChange={handleDayChange}
disabled={!formEnable}
>
{[...Array(30)].map((_, i) => <option value={i + 1}>{i + 1}
</option>)}
</select>
</div>
<div>
<button type="submit">PDF </button>
<button type="submit" disabled={!formEnable}>PDF </button>
</div>
</form>
</>

View File

@@ -11,6 +11,7 @@ import {
import { JSONType, Voca } from "../types.ts";
function downloadBuffer(buffer: Uint8Array, fileName: string) {
return new Promise<void>((resolve) => {
const a: HTMLAnchorElement = document.createElement("a");
const blob = new Blob([buffer], { type: "application/octet-stream" });
@@ -20,6 +21,8 @@ function downloadBuffer(buffer: Uint8Array, fileName: string) {
a.style.display = "none";
a.click();
a.remove();
resolve();
});
}
export async function makePdf(voca_list: Voca[]) {
@@ -174,5 +177,8 @@ export async function downloadVocaQuiz(levels: number[], day: number) {
levels.includes(chunk.level) && chunk.day === day
).flatMap((chunk) => chunk.voca_list);
const bufferPdf = await makePdf(shuffle(voca_list));
downloadBuffer(bufferPdf, `voca-${day}-${levels.join(",")}.pdf`);
await downloadBuffer(
bufferPdf,
`voca-day${day}-level(${levels.join(",")}).pdf`,
);
}