diff --git a/app/routes/dashboard.tsx b/app/routes/dashboard.tsx
index e05cf4a..78b38e8 100644
--- a/app/routes/dashboard.tsx
+++ b/app/routes/dashboard.tsx
@@ -1,11 +1,12 @@
import { getAuth } from "@clerk/remix/ssr.server";
import { LoaderFunction, redirect } from "@remix-run/node";
import { Link } from "@remix-run/react";
-import { LogInIcon, TrashIcon } from "lucide-react";
+import { LogInIcon, ShieldIcon, TrashIcon } from "lucide-react";
import { useState } from "react";
import LoadingIndicator from "~/components/LoadingIndicator";
import { useEventSource } from "remix-utils/sse/react";
-import { useAuth } from "@clerk/remix";
+import { useUser } from "@clerk/remix";
+import { isAdmin, isVIP } from "~/services/helpers";
export const loader: LoaderFunction = async (args) => {
const { userId } = await getAuth(args);
@@ -36,8 +37,8 @@ type RoomsResponse =
| undefined;
export default function Dashboard() {
- const { userId } = useAuth();
- let roomsFromDb = useEventSource("/api/room/get/all", { event: userId! });
+ const { user, isLoaded } = useUser();
+ let roomsFromDb = useEventSource("/api/room/get/all", { event: user?.id! });
let roomsFromDbParsed = JSON.parse(roomsFromDb!) as RoomsResponse;
@@ -107,6 +108,16 @@ export default function Dashboard() {
+
+ Hi, {user?.firstName ?? user?.username}!{" "}
+ {isAdmin(user?.publicMetadata) && (
+
+ )}
+ {isVIP(user?.publicMetadata) && (
+
+ )}
+
+
{roomsFromDbParsed && roomsFromDbParsed.length > 0 && (
@@ -150,7 +161,7 @@ export default function Dashboard() {
New Room
- {!roomsFromDbParsed && }
+ {(!roomsFromDbParsed || !isLoaded) && }
);
}
diff --git a/package.json b/package.json
index 88b465f..c5eec41 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "sprintpadawan",
- "version": "4.0.1",
+ "version": "4.0.2",
"private": true,
"sideEffects": false,
"type": "module",
@@ -11,7 +11,7 @@
"typecheck": "tsc"
},
"dependencies": {
- "@clerk/remix": "^3.1.5",
+ "@clerk/remix": "^3.1.6",
"@libsql/client": "0.4.0-pre.2",
"@paralleldrive/cuid2": "^2.2.2",
"@remix-run/css-bundle": "^2.3.1",
@@ -21,10 +21,10 @@
"csv42": "^5.0.0",
"drizzle-orm": "^0.29.0",
"isbot": "^3.7.1",
- "lucide-react": "^0.292.0",
+ "lucide-react": "^0.293.0",
"react": "^18.2.0",
"react-dom": "^18.2.0",
- "remix-utils": "^7.1.0",
+ "remix-utils": "^7.2.0",
"svix": "^1.14.0"
},
"devDependencies": {
@@ -35,7 +35,7 @@
"@types/react-dom": "^18.2.17",
"autoprefixer": "^10.4.16",
"better-sqlite3": "^9.1.1",
- "daisyui": "^4.4.4",
+ "daisyui": "^4.4.6",
"dotenv": "^16.3.1",
"drizzle-kit": "^0.20.4",
"eslint": "^8.54.0",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 7c5f13c..b4b4b40 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -6,8 +6,8 @@ settings:
dependencies:
'@clerk/remix':
- specifier: ^3.1.5
- version: 3.1.5(@remix-run/react@2.3.1)(@remix-run/server-runtime@2.3.1)(react-dom@18.2.0)(react@18.2.0)
+ specifier: ^3.1.6
+ version: 3.1.6(@remix-run/react@2.3.1)(@remix-run/server-runtime@2.3.1)(react-dom@18.2.0)(react@18.2.0)
'@libsql/client':
specifier: 0.4.0-pre.2
version: 0.4.0-pre.2
@@ -36,8 +36,8 @@ dependencies:
specifier: ^3.7.1
version: 3.7.1
lucide-react:
- specifier: ^0.292.0
- version: 0.292.0(react@18.2.0)
+ specifier: ^0.293.0
+ version: 0.293.0(react@18.2.0)
react:
specifier: ^18.2.0
version: 18.2.0
@@ -45,8 +45,8 @@ dependencies:
specifier: ^18.2.0
version: 18.2.0(react@18.2.0)
remix-utils:
- specifier: ^7.1.0
- version: 7.1.0(@remix-run/node@2.3.1)(@remix-run/react@2.3.1)(react@18.2.0)
+ specifier: ^7.2.0
+ version: 7.2.0(@remix-run/node@2.3.1)(@remix-run/react@2.3.1)(react@18.2.0)
svix:
specifier: ^1.14.0
version: 1.14.0
@@ -74,8 +74,8 @@ devDependencies:
specifier: ^9.1.1
version: 9.1.1
daisyui:
- specifier: ^4.4.4
- version: 4.4.4(postcss@8.4.31)
+ specifier: ^4.4.6
+ version: 4.4.6(postcss@8.4.31)
dotenv:
specifier: ^16.3.1
version: 16.3.1
@@ -519,11 +519,11 @@ packages:
to-fast-properties: 2.0.0
dev: true
- /@clerk/backend@0.34.1(react@18.2.0):
- resolution: {integrity: sha512-I6u7vb7XHA0kNek5Ez4VVqBDZKxLepR6wJXlYUy5lGwsTdaQiFwy5Q0nKP2GdQQYtlKpXSAryLu19Cq5zaaNYg==}
+ /@clerk/backend@0.34.2(react@18.2.0):
+ resolution: {integrity: sha512-ouulkcT6kfbAPw3w0vbkl758KzQ2y9UUnuhRJ5dY3SPGNjJnpes1BNETLnA1O3llZVV5yYexluhee4XmFcwV3A==}
engines: {node: '>=14'}
dependencies:
- '@clerk/shared': 1.1.0(react@18.2.0)
+ '@clerk/shared': 1.1.1(react@18.2.0)
'@clerk/types': 3.58.0
'@peculiar/webcrypto': 1.4.1
'@types/node': 16.18.6
@@ -536,20 +536,20 @@ packages:
- react
dev: false
- /@clerk/clerk-react@4.28.0(react@18.2.0):
- resolution: {integrity: sha512-zMFdiqqXkwAks1xmheUrAS6GODDdlpsCHA3VEnNVlSL0XH3bE4jWNr7lr0SJMmcaEsmZE/JQ+uNPJ4qEvEDGjA==}
+ /@clerk/clerk-react@4.28.1(react@18.2.0):
+ resolution: {integrity: sha512-xfdLOqnbONwt+/kUh5+Fzs0wAJcLD4Bc0mM/af0Wlu1zdnggVR8da29fw+pZL5p8VGXavxP3hJdS9vvj5hFX+g==}
engines: {node: '>=14'}
peerDependencies:
react: '>=16'
dependencies:
- '@clerk/shared': 1.1.0(react@18.2.0)
+ '@clerk/shared': 1.1.1(react@18.2.0)
'@clerk/types': 3.58.0
react: 18.2.0
tslib: 2.4.1
dev: false
- /@clerk/remix@3.1.5(@remix-run/react@2.3.1)(@remix-run/server-runtime@2.3.1)(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-SWacZIwm/2zyZjsN3I1/DDYo+yoQ2B3BkcwEHwkGCLMkaJwipoS6nQtD04cr/RGbzrlBETBGR7gOUdEaIAtKOw==}
+ /@clerk/remix@3.1.6(@remix-run/react@2.3.1)(@remix-run/server-runtime@2.3.1)(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-xDLW52A+YQ2KnwnwFsFrr6+WDHlIilFF4x8Tq6UUM5xhGvkyFIJbYa3MDNBi2FJSNwcNTEq25U/Eq5ds7suZcg==}
engines: {node: '>=18.0.0'}
peerDependencies:
'@remix-run/react': ^2.0.0
@@ -557,9 +557,9 @@ packages:
react: '>=18.0.0'
react-dom: '>=18.0.0'
dependencies:
- '@clerk/backend': 0.34.1(react@18.2.0)
- '@clerk/clerk-react': 4.28.0(react@18.2.0)
- '@clerk/shared': 1.1.0(react@18.2.0)
+ '@clerk/backend': 0.34.2(react@18.2.0)
+ '@clerk/clerk-react': 4.28.1(react@18.2.0)
+ '@clerk/shared': 1.1.1(react@18.2.0)
'@clerk/types': 3.58.0
'@remix-run/react': 2.3.1(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.2)
'@remix-run/server-runtime': 2.3.1(typescript@5.3.2)
@@ -569,8 +569,8 @@ packages:
tslib: 2.4.1
dev: false
- /@clerk/shared@1.1.0(react@18.2.0):
- resolution: {integrity: sha512-rxQ6bxAERZsf/dzCU35qt3gRp9+a035Vrre8j8tyT60dbP8PQhXUbeNu+oVqqjpHWeyoWWt6fZGLXbDTXdXx7g==}
+ /@clerk/shared@1.1.1(react@18.2.0):
+ resolution: {integrity: sha512-pEzhalD1Yo/gGsOE2BQugVQTjlIl2aYmoeRld3BDXHRDV1jnk+yUE2CFOw6bojgFWN9sbeN/ph/47UWvvoCSOg==}
peerDependencies:
react: '>=16'
peerDependenciesMeta:
@@ -1716,7 +1716,7 @@ packages:
tar-fs: 2.1.1
tsconfig-paths: 4.2.0
typescript: 5.3.2
- undici: 5.27.2
+ undici: 5.28.0
ws: 7.5.9
transitivePeerDependencies:
- '@types/node'
@@ -1976,22 +1976,22 @@ packages:
/@types/node-fetch@2.6.9:
resolution: {integrity: sha512-bQVlnMLFJ2d35DkPNjEPmd9ueO/rh5EiaZt2bhqiSarPjZIuIV6bPQVqcrEyvNo+AfTrRGVazle1tl597w3gfA==}
dependencies:
- '@types/node': 20.9.4
+ '@types/node': 20.10.0
form-data: 4.0.0
dev: false
/@types/node-forge@1.3.10:
resolution: {integrity: sha512-y6PJDYN4xYBxwd22l+OVH35N+1fCYWiuC3aiP2SlXVE6Lo7SS+rSx9r89hLxrP4pn6n1lBGhHJ12pj3F3Mpttw==}
dependencies:
- '@types/node': 20.9.4
+ '@types/node': 20.10.0
dev: true
/@types/node@16.18.6:
resolution: {integrity: sha512-vmYJF0REqDyyU0gviezF/KHq/fYaUbFhkcNbQCuPGFQj6VTbXuHZoxs/Y7mutWe73C8AC6l9fFu8mSYiBAqkGA==}
dev: false
- /@types/node@20.9.4:
- resolution: {integrity: sha512-wmyg8HUhcn6ACjsn8oKYjkN/zUzQeNtMy44weTJSM6p4MMzEOuKbA3OjJ267uPCOW7Xex9dyrNTful8XTQYoDA==}
+ /@types/node@20.10.0:
+ resolution: {integrity: sha512-D0WfRmU9TQ8I9PFx9Yc+EBHw+vSpIub4IDvQivcp26PtPrdMGAq5SDcpXEo/epqa/DXotVpekHiLNTg3iaKXBQ==}
dependencies:
undici-types: 5.26.5
@@ -2028,7 +2028,7 @@ packages:
/@types/ws@8.5.10:
resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==}
dependencies:
- '@types/node': 20.9.4
+ '@types/node': 20.10.0
dev: false
/@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.54.0)(typescript@5.3.2):
@@ -2585,7 +2585,7 @@ packages:
hasBin: true
dependencies:
caniuse-lite: 1.0.30001564
- electron-to-chromium: 1.4.592
+ electron-to-chromium: 1.4.594
node-releases: 2.0.13
update-browserslist-db: 1.0.13(browserslist@4.22.1)
dev: true
@@ -2758,8 +2758,8 @@ packages:
restore-cursor: 3.1.0
dev: true
- /cli-spinners@2.9.1:
- resolution: {integrity: sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==}
+ /cli-spinners@2.9.2:
+ resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==}
engines: {node: '>=6'}
dev: true
@@ -2923,8 +2923,8 @@ packages:
type: 1.2.0
dev: true
- /daisyui@4.4.4(postcss@8.4.31):
- resolution: {integrity: sha512-ysp66uFOJNhkmaFYvifSQi+R+QSuSR6dX2Wts0GxT4Xzn6+PqpHwn2ka3SNK6HCmtjIPW3E3eIILycYY449bBw==}
+ /daisyui@4.4.6(postcss@8.4.31):
+ resolution: {integrity: sha512-Zum9dWsYufduID4IfwI1h/+qQIuoXBpVaG9l/rOlLOVbCmpvE7LQK/GDYE7YOT8NDXHOH+EqMqT8uzGqlbTFig==}
engines: {node: '>=16.9.0'}
dependencies:
css-selector-tokenizer: 0.8.0
@@ -3264,8 +3264,8 @@ packages:
jake: 10.8.7
dev: true
- /electron-to-chromium@1.4.592:
- resolution: {integrity: sha512-D3NOkROIlF+d5ixnz7pAf3Lu/AuWpd6AYgI9O67GQXMXTcCP1gJQRotOq35eQy5Sb4hez33XH1YdTtILA7Udww==}
+ /electron-to-chromium@1.4.594:
+ resolution: {integrity: sha512-xT1HVAu5xFn7bDfkjGQi9dNpMqGchUkebwf1GL7cZN32NSwwlHRPMSDJ1KN6HkS0bWUtndbSQZqvpQftKG2uFQ==}
dev: true
/emoji-regex@8.0.0:
@@ -4026,7 +4026,7 @@ packages:
resolution: {integrity: sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==}
engines: {node: '>= 0.8'}
dependencies:
- '@types/node': 20.9.4
+ '@types/node': 20.10.0
require-like: 0.1.2
dev: true
@@ -5196,8 +5196,8 @@ packages:
es5-ext: 0.10.62
dev: true
- /lucide-react@0.292.0(react@18.2.0):
- resolution: {integrity: sha512-rRgUkpEHWpa5VCT66YscInCQmQuPCB1RFRzkkxMxg4b+jaL0V12E3riWWR2Sh5OIiUhCwGW/ZExuEO4Az32E6Q==}
+ /lucide-react@0.293.0(react@18.2.0):
+ resolution: {integrity: sha512-g3AN0EYITCpAjNgLHrKrFWvIJzZy0Y9OPBaonyKw1cM+nZE6piOM+TiuQdYfha7oa76TMiDaWXQHE44CEqsrzw==}
peerDependencies:
react: ^16.5.1 || ^17.0.0 || ^18.0.0
dependencies:
@@ -5714,7 +5714,7 @@ packages:
glob-to-regexp: 0.4.1
source-map-support: 0.5.21
stoppable: 1.1.0
- undici: 5.27.2
+ undici: 5.28.0
workerd: 1.20231030.0
ws: 8.14.2
youch: 3.3.3
@@ -6127,7 +6127,7 @@ packages:
bl: 4.1.0
chalk: 4.1.2
cli-cursor: 3.1.0
- cli-spinners: 2.9.1
+ cli-spinners: 2.9.2
is-interactive: 1.0.0
is-unicode-supported: 0.1.0
log-symbols: 4.1.0
@@ -6752,8 +6752,8 @@ packages:
unified: 10.1.2
dev: true
- /remix-utils@7.1.0(@remix-run/node@2.3.1)(@remix-run/react@2.3.1)(react@18.2.0):
- resolution: {integrity: sha512-cceintceWvmNvgLLFeAUkWRcdWuOHGDLaWh0aeL0bLGWnMPBilIyT74Rira1az/ImS9owfh8tjLL4w/22AXJiA==}
+ /remix-utils@7.2.0(@remix-run/node@2.3.1)(@remix-run/react@2.3.1)(react@18.2.0):
+ resolution: {integrity: sha512-eFfwUZnGwKvINpC10HaF6fzywp0CsJ3cI/voNM7tv3NN+mbrqiwuOb/ANkVCOj51wdoXyGyvi1rix6j1IJf21w==}
engines: {node: '>=18.0.0'}
peerDependencies:
'@remix-run/cloudflare': ^2.0.0
@@ -7625,8 +7625,8 @@ packages:
/undici-types@5.26.5:
resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
- /undici@5.27.2:
- resolution: {integrity: sha512-iS857PdOEy/y3wlM3yRp+6SNQQ6xU0mmZcwRSriqk+et/cwWAtwmIGf6WkoDN2EK/AMdCO/dfXzIwi+rFMrjjQ==}
+ /undici@5.28.0:
+ resolution: {integrity: sha512-gM12DkXhlAc5+/TPe60iy9P6ETgVfqTuRJ6aQ4w8RYu0MqKuXhaq3/b86GfzDQnNA3NUO6aUNdvevrKH59D0Nw==}
engines: {node: '>=14.0'}
dependencies:
'@fastify/busboy': 2.1.0