Upgrade to Pro — share decks privately, control downloads, hide ads and more …

SvelteKit × Supabaseで オレオレカンバンボード作ってみた

SvelteKit × Supabaseで オレオレカンバンボード作ってみた

せっかくカンバンボードを導入したのに、動かすのを忘れた…
みなさんきっとある経験ですよね。

それを解決すべく、タイマー付きのカンバンボードをSvelteで作ってみたお話です。

HIBIKI CUBE

March 22, 2024
Tweet

More Decks by HIBIKI CUBE

Other Decks in Technology

Transcript

  1. Svelte DND Action <div use:dndzone={{ items: lane.Items, flipDurationMs }} on:consider={e

    => DndConsider(e, lane.id)} on:finalize={e => DndFinalize(e, lane.id)} > {#each lane.Items as item (item.id)} <div animate:flip={{ duration: flipDurationMs }}> <Card {item} isRunning={lane.runsTimer} /> </div> {/each} </div>
  2. DndFinalize export const DndFinalize = async (e: CustomEvent<DndEvent<Item>>, laneId: bigint)

    => { // 並べ替えの更新 // タイマーの開始・停止 // DBの更新 }
  3. タイマーの制御(開始) import { timers } from '$lib/timers'; //...なんやかんや if (!$timers[item.id])

    { $timers[item.id] = { started_at: new Date(), sessionOffset: 0, duration: 0, }; } $timers[item.id].started_at = new Date();
  4. Prismaでデータにアクセス async ({ request }) => { const data =

    await request.formData(); const itemId = Number(data.get('id')); const timerControl = String(data.get('timerControl')); if (timerControl === 'start') { await prisma.logs.create({ data: { item: itemId, }, }); } }