From 6aebae46884fe974ac2a305a96c79cecf420dcb9 Mon Sep 17 00:00:00 2001 From: Bradley Shellnut Date: Mon, 4 Apr 2022 17:29:04 -0700 Subject: [PATCH] Fetch tweets in an api and design how it shows up in the feed. --- src/components/tweet.svelte | 219 +++++++++++++++++++++++++++++++++++ src/lib/date.ts | 24 ++++ src/lib/prisma.ts | 5 + src/routes/api/index.svelte | 10 ++ src/routes/api/index.ts | 27 +++++ src/routes/home/index.svelte | 13 ++- src/routes/home/index.ts | 43 +++++++ src/types/index.ts | 11 ++ 8 files changed, 351 insertions(+), 1 deletion(-) create mode 100644 src/components/tweet.svelte create mode 100644 src/lib/date.ts create mode 100644 src/lib/prisma.ts create mode 100644 src/routes/api/index.svelte create mode 100644 src/routes/api/index.ts create mode 100644 src/routes/home/index.ts create mode 100644 src/types/index.ts diff --git a/src/components/tweet.svelte b/src/components/tweet.svelte new file mode 100644 index 0000000..f9aaa0d --- /dev/null +++ b/src/components/tweet.svelte @@ -0,0 +1,219 @@ + + +
+ + {tweet.name} + + +
+
+ + {tweet.name} + + {tweet.handle} + · {tweet.posted} +
+ +
+
+ {tweet.content} +
+ +
+
+ + +
+ + + +
+ + +
+
+
+
+
+ + diff --git a/src/lib/date.ts b/src/lib/date.ts new file mode 100644 index 0000000..7777ffa --- /dev/null +++ b/src/lib/date.ts @@ -0,0 +1,24 @@ +export function timePosted(createdAt: Date): string { + try { + const posted = new Date(createdAt).getTime() + const currentTime = new Date().getTime() + const difference = currentTime - posted + const seconds = difference / 1000 + const minutes = seconds / 60 + const hours = minutes / 60 + + if (minutes <= 60) { + return `${minutes.toFixed()}m` + } + + if (hours <= 24) { + return `${hours.toFixed()}h` + } + + return Intl.DateTimeFormat('en-US', { + dateStyle: 'medium' + }).format(posted) + } catch (error) { + throw new Error(`💩 Something went wrong: ${error}`) + } +} diff --git a/src/lib/prisma.ts b/src/lib/prisma.ts new file mode 100644 index 0000000..df6e6db --- /dev/null +++ b/src/lib/prisma.ts @@ -0,0 +1,5 @@ +import { PrismaClient } from "@prisma/client"; + +const prisma = new PrismaClient() + +export default prisma diff --git a/src/routes/api/index.svelte b/src/routes/api/index.svelte new file mode 100644 index 0000000..311e9e9 --- /dev/null +++ b/src/routes/api/index.svelte @@ -0,0 +1,10 @@ + + +

{item}

+ +
+ + +
\ No newline at end of file diff --git a/src/routes/api/index.ts b/src/routes/api/index.ts new file mode 100644 index 0000000..4c51537 --- /dev/null +++ b/src/routes/api/index.ts @@ -0,0 +1,27 @@ +let item = 'banana' + +export function get() { + return { + status: 200, + headers: { + 'Content-Type': 'application/json' + }, + body: { + item + } + } +} + +export async function post({ request }) { + const form = await request.formData() + const newItem = form.get('item') + + item = newItem; + + return { + status: 303, + headers: { + location: '/api' + } + } +} \ No newline at end of file diff --git a/src/routes/home/index.svelte b/src/routes/home/index.svelte index 1f4c9bf..b9ed7c1 100644 --- a/src/routes/home/index.svelte +++ b/src/routes/home/index.svelte @@ -1,9 +1,20 @@ + + - Home + Home

Feed

+{#each tweets as tweet (tweet.id)} + +{/each} +