Merge pull request #49 from atridadl/dev

Even Edgier
🚧 Switched to a new edge friendly CSV lib
This commit is contained in:
Atridad Lahiji 2023-09-04 19:57:48 -06:00 committed by GitHub
commit 264f93b91c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 30 additions and 43 deletions

View file

@ -28,9 +28,9 @@
"@upstash/ratelimit": "^0.4.4",
"@upstash/redis": "^1.22.0",
"autoprefixer": "^10.4.15",
"csv42": "^4.0.0",
"dotenv": "^16.3.1",
"drizzle-orm": "^0.28.5",
"json2csv": "6.0.0-alpha.2",
"next": "^13.4.19",
"nextjs-cors": "^2.1.2",
"postcss": "^8.4.29",

33
pnpm-lock.yaml generated
View file

@ -50,15 +50,15 @@ dependencies:
autoprefixer:
specifier: ^10.4.15
version: 10.4.15(postcss@8.4.29)
csv42:
specifier: ^4.0.0
version: 4.0.0
dotenv:
specifier: ^16.3.1
version: 16.3.1
drizzle-orm:
specifier: ^0.28.5
version: 0.28.5(@neondatabase/serverless@0.6.0)(pg@8.11.3)
json2csv:
specifier: 6.0.0-alpha.2
version: 6.0.0-alpha.2
next:
specifier: ^13.4.19
version: 13.4.19(react-dom@18.2.0)(react@18.2.0)
@ -1122,10 +1122,6 @@ packages:
engines: {node: '>=10'}
dev: false
/@streamparser/json@0.0.6:
resolution: {integrity: sha512-vL9EVn/v+OhZ+Wcs6O4iKE9EUpwHUqHmCtNUMWjqp+6dr85+XPOSGTEsqYNq1Vn04uk9SWlOVmx9J48ggJVT2Q==}
dev: false
/@swc/helpers@0.5.1:
resolution: {integrity: sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==}
dependencies:
@ -2114,11 +2110,6 @@ packages:
engines: {node: '>= 6'}
dev: false
/commander@6.2.1:
resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==}
engines: {node: '>= 6'}
dev: false
/commander@9.4.1:
resolution: {integrity: sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==}
engines: {node: ^12.20.0 || >=14}
@ -2201,6 +2192,10 @@ packages:
resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==}
dev: true
/csv42@4.0.0:
resolution: {integrity: sha512-9sHplbzkaJ1MIbitR+w381TjUl2xFWVDby0bvbf1Qg5EYHNBJEQmFRuA/3tmO/sdzlgA2O1wpTulXDoo3Z1rwQ==}
dev: false
/d@1.0.1:
resolution: {integrity: sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==}
dependencies:
@ -3835,16 +3830,6 @@ packages:
resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
dev: true
/json2csv@6.0.0-alpha.2:
resolution: {integrity: sha512-nJ3oP6QxN8z69IT1HmrJdfVxhU1kLTBVgMfRnNZc37YEY+jZ4nU27rBGxT4vaqM/KUCavLRhntmTuBFqZLBUcA==}
engines: {node: '>= 12', npm: '>= 6.13.0'}
hasBin: true
dependencies:
'@streamparser/json': 0.0.6
commander: 6.2.1
lodash.get: 4.4.2
dev: false
/json5@1.0.2:
resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
hasBin: true
@ -3936,10 +3921,6 @@ packages:
p-locate: 5.0.0
dev: true
/lodash.get@4.4.2:
resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==}
dev: false
/lodash.merge@4.6.2:
resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
dev: true

View file

@ -21,11 +21,10 @@ import Link from "next/link";
import { FaShieldAlt } from "react-icons/fa";
import { RiVipCrownFill } from "react-icons/ri";
import { env } from "@/env.mjs";
import { isAdmin, isVIP } from "@/utils/helpers";
import { isAdmin, isVIP, jsonToCsv } from "@/utils/helpers";
import type { PresenceItem } from "@/utils/types";
import { trpc } from "@/app/_trpc/client";
import Loading from "@/app/_components/Loading";
import { parse } from "json2csv";
import { User } from "@clerk/nextjs/dist/types/server";
export const dynamic = "force-dynamic";
@ -162,16 +161,7 @@ const VoteUI = ({ user }: { user: Partial<User> }) => {
}),
});
const csv = parse(jsonObject);
const blob = new Blob([csv], { type: "text/csv;charset=utf-8;" });
const url = URL.createObjectURL(blob);
const link = document.createElement("a");
link.setAttribute("href", url);
link.setAttribute("download", `sp_${roomId}.csv`);
link.style.visibility = "hidden";
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
jsonToCsv(jsonObject, `sp_${roomId}.csv`);
}
};

View file

@ -4,9 +4,8 @@ import { GiStarFormation } from "react-icons/gi";
import { isAdmin, isVIP } from "@/utils/helpers";
import { currentUser } from "@clerk/nextjs";
export const dynamic = "force-dynamic";
export const revalidate = 0;
export const fetchCache = "force-no-store";
export const runtime = "edge";
export const preferredRegion = ["pdx1"];
export default async function Dashboard() {
const user = await currentUser();

View file

@ -2,7 +2,8 @@ import { currentUser } from "@clerk/nextjs";
import Loading from "@/app/_components/Loading";
import VoteUI from "@/app/_components/VoteUI";
export const dynamic = "force-dynamic";
export const runtime = "edge";
export const preferredRegion = ["pdx1"];
export default async function Room() {
const user = await currentUser();

View file

@ -1,3 +1,19 @@
import { json2csv } from "csv42";
export function jsonToCsv(jsonObject: Array<object>, fileName: string) {
const csv = json2csv(jsonObject);
const blob = new Blob([csv], { type: "text/csv;charset=utf-8;" });
const url = URL.createObjectURL(blob);
const link = document.createElement("a");
link.setAttribute("href", url);
link.setAttribute("download", fileName);
link.style.visibility = "hidden";
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
export function isAdmin(meta: UserPublicMetadata | undefined) {
return (meta?.isAdmin as boolean | undefined) || false;
}