Just some linting

This commit is contained in:
Gender Shrapnel 2022-07-27 04:19:02 +02:00
parent 6b799308da
commit d9a97521a1
Signed by: modzero
GPG Key ID: 4E11A06C6D1E5213
8 changed files with 329 additions and 298 deletions

View File

@ -4,7 +4,7 @@
"beforeBuildCommand": "npm run build", "beforeBuildCommand": "npm run build",
"beforeDevCommand": "npm run dev", "beforeDevCommand": "npm run dev",
"devPath": "http://localhost:5173", "devPath": "http://localhost:5173",
"distDir": "../.svelte-kit/output/dist" "distDir": "../.svelte-kit/output/client"
}, },
"package": { "package": {
"productName": "ziemniak", "productName": "ziemniak",

View File

@ -1,4 +1,4 @@
import { invalidate } from '$app/navigation'; import { invalidate } from "$app/navigation";
// this action (https://svelte.dev/tutorial/actions) allows us to // this action (https://svelte.dev/tutorial/actions) allows us to
// progressively enhance a <form> that already works without JS // progressively enhance a <form> that already works without JS
@ -7,14 +7,20 @@ export function enhance(
{ {
pending, pending,
error, error,
result result,
}: { }: {
pending?: ({ data, form }: { data: FormData; form: HTMLFormElement }) => void; pending?: ({
data,
form,
}: {
data: FormData;
form: HTMLFormElement;
}) => void;
error?: ({ error?: ({
data, data,
form, form,
response, response,
error error,
}: { }: {
data: FormData; data: FormData;
form: HTMLFormElement; form: HTMLFormElement;
@ -24,7 +30,7 @@ export function enhance(
result?: ({ result?: ({
data, data,
form, form,
response response,
}: { }: {
data: FormData; data: FormData;
response: Response; response: Response;
@ -47,9 +53,9 @@ export function enhance(
const response = await fetch(form.action, { const response = await fetch(form.action, {
method: form.method, method: form.method,
headers: { headers: {
accept: 'application/json' accept: "application/json",
}, },
body: data body: data,
}); });
if (token !== current_token) return; if (token !== current_token) return;
@ -58,7 +64,7 @@ export function enhance(
if (result) result({ data, form, response }); if (result) result({ data, form, response });
const url = new URL(form.action); const url = new URL(form.action);
url.search = url.hash = ''; url.search = url.hash = "";
invalidate(url.href); invalidate(url.href);
} else if (error) { } else if (error) {
error({ data, form, error: null, response }); error({ data, form, error: null, response });
@ -74,11 +80,11 @@ export function enhance(
} }
} }
form.addEventListener('submit', handle_submit); form.addEventListener("submit", handle_submit);
return { return {
destroy() { destroy() {
form.removeEventListener('submit', handle_submit); form.removeEventListener("submit", handle_submit);
} },
}; };
} }

View File

@ -11,12 +11,16 @@
const base = "https://api.svelte.dev"; const base = "https://api.svelte.dev";
export function api(method: string, resource: string, data?: Record<string, unknown>) { export function api(
method: string,
resource: string,
data?: Record<string, unknown>
) {
return fetch(`${base}/${resource}`, { return fetch(`${base}/${resource}`, {
method, method,
headers: { headers: {
'content-type': 'application/json' "content-type": "application/json",
}, },
body: data && JSON.stringify(data) body: data && JSON.stringify(data),
}); });
} }

View File

@ -1,7 +1,7 @@
<script lang="ts"> <script lang="ts">
import { enhance } from '$lib/form'; import { enhance } from "$lib/form";
import { scale } from 'svelte/transition'; import { scale } from "svelte/transition";
import { flip } from 'svelte/animate'; import { flip } from "svelte/animate";
type Todo = { type Todo = {
uid: string; uid: string;
@ -29,10 +29,14 @@
use:enhance={{ use:enhance={{
result: async ({ form }) => { result: async ({ form }) => {
form.reset(); form.reset();
} },
}} }}
> >
<input name="text" aria-label="Add todo" placeholder="+ tap to add a todo" /> <input
name="text"
aria-label="Add todo"
placeholder="+ tap to add a todo"
/>
</form> </form>
{#each todos as todo (todo.uid)} {#each todos as todo (todo.uid)}
@ -47,18 +51,31 @@
method="post" method="post"
use:enhance={{ use:enhance={{
pending: ({ data }) => { pending: ({ data }) => {
todo.done = !!data.get('done'); todo.done = !!data.get("done");
} },
}} }}
> >
<input type="hidden" name="uid" value={todo.uid} /> <input type="hidden" name="uid" value={todo.uid} />
<input type="hidden" name="done" value={todo.done ? '' : 'true'} /> <input type="hidden" name="done" value={todo.done ? "" : "true"} />
<button class="toggle" aria-label="Mark todo as {todo.done ? 'not done' : 'done'}" /> <button
class="toggle"
aria-label="Mark todo as {todo.done ? 'not done' : 'done'}"
/>
</form> </form>
<form class="text" action="/todos?_method=PATCH" method="post" use:enhance> <form
class="text"
action="/todos?_method=PATCH"
method="post"
use:enhance
>
<input type="hidden" name="uid" value={todo.uid} /> <input type="hidden" name="uid" value={todo.uid} />
<input aria-label="Edit todo" type="text" name="text" value={todo.text} /> <input
aria-label="Edit todo"
type="text"
name="text"
value={todo.text}
/>
<button class="save" aria-label="Save todo" /> <button class="save" aria-label="Save todo" />
</form> </form>
@ -66,11 +83,15 @@
action="/todos?_method=DELETE" action="/todos?_method=DELETE"
method="post" method="post"
use:enhance={{ use:enhance={{
pending: () => (todo.pending_delete = true) pending: () => (todo.pending_delete = true),
}} }}
> >
<input type="hidden" name="uid" value={todo.uid} /> <input type="hidden" name="uid" value={todo.uid} />
<button class="delete" aria-label="Delete todo" disabled={todo.pending_delete} /> <button
class="delete"
aria-label="Delete todo"
disabled={todo.pending_delete}
/>
</form> </form>
</div> </div>
{/each} {/each}

View File

@ -1,38 +1,38 @@
import { api } from './_api'; import { api } from "./_api";
import type { RequestHandler } from './__types'; import type { RequestHandler } from "./__types";
export const GET: RequestHandler = async ({ locals }) => { export const GET: RequestHandler = async ({ locals }) => {
// locals.userid comes from src/hooks.js // locals.userid comes from src/hooks.js
const response = await api('GET', `todos/${locals.userid}`); const response = await api("GET", `todos/${locals.userid}`);
if (response.status === 404) { if (response.status === 404) {
// user hasn't created a todo list. // user hasn't created a todo list.
// start with an empty array // start with an empty array
return { return {
body: { body: {
todos: [] todos: [],
} },
}; };
} }
if (response.status === 200) { if (response.status === 200) {
return { return {
body: { body: {
todos: await response.json() todos: await response.json(),
} },
}; };
} }
return { return {
status: response.status status: response.status,
}; };
}; };
export const POST: RequestHandler = async ({ request, locals }) => { export const POST: RequestHandler = async ({ request, locals }) => {
const form = await request.formData(); const form = await request.formData();
await api('POST', `todos/${locals.userid}`, { await api("POST", `todos/${locals.userid}`, {
text: form.get('text') text: form.get("text"),
}); });
return {}; return {};
@ -43,16 +43,16 @@ export const POST: RequestHandler = async ({ request, locals }) => {
const redirect = { const redirect = {
status: 303, status: 303,
headers: { headers: {
location: '/todos' location: "/todos",
} },
}; };
export const PATCH: RequestHandler = async ({ request, locals }) => { export const PATCH: RequestHandler = async ({ request, locals }) => {
const form = await request.formData(); const form = await request.formData();
await api('PATCH', `todos/${locals.userid}/${form.get('uid')}`, { await api("PATCH", `todos/${locals.userid}/${form.get("uid")}`, {
text: form.has('text') ? form.get('text') : undefined, text: form.has("text") ? form.get("text") : undefined,
done: form.has('done') ? !!form.get('done') : undefined done: form.has("done") ? !!form.get("done") : undefined,
}); });
return redirect; return redirect;
@ -61,7 +61,7 @@ export const PATCH: RequestHandler = async ({ request, locals }) => {
export const DELETE: RequestHandler = async ({ request, locals }) => { export const DELETE: RequestHandler = async ({ request, locals }) => {
const form = await request.formData(); const form = await request.formData();
await api('DELETE', `todos/${locals.userid}/${form.get('uid')}`); await api("DELETE", `todos/${locals.userid}/${form.get("uid")}`);
return redirect; return redirect;
}; };

View File

@ -1,5 +1,5 @@
import adapter from '@sveltejs/adapter-auto'; import adapter from "@sveltejs/adapter-auto";
import preprocess from 'svelte-preprocess'; import preprocess from "svelte-preprocess";
/** @type {import('@sveltejs/kit').Config} */ /** @type {import('@sveltejs/kit').Config} */
const config = { const config = {
@ -12,9 +12,9 @@ const config = {
// Override http methods in the Todo forms // Override http methods in the Todo forms
methodOverride: { methodOverride: {
allowed: ['PATCH', 'DELETE'] allowed: ["PATCH", "DELETE"],
} },
} },
}; };
export default config; export default config;