diff --git a/.github/workflows/e2e-tests.yml b/.github/workflows/e2e-tests.yml index 2efeb4a4..ada5243a 100644 --- a/.github/workflows/e2e-tests.yml +++ b/.github/workflows/e2e-tests.yml @@ -10,7 +10,7 @@ on: env: WASP_TELEMETRY_DISABLE: 1 - WASP_VERSION: 0.13.2 + WASP_VERSION: 0.14.0-rc2 jobs: test: diff --git a/opensaas-sh/app_diff/.env.vault.diff b/opensaas-sh/app_diff/.env.vault.diff index 85024a81..ae2a40d6 100644 --- a/opensaas-sh/app_diff/.env.vault.diff +++ b/opensaas-sh/app_diff/.env.vault.diff @@ -7,20 +7,20 @@ +#/--------------------------------------------------/ + +# development -+DOTENV_VAULT_DEVELOPMENT="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" -+DOTENV_VAULT_DEVELOPMENT_VERSION=6 ++DOTENV_VAULT_DEVELOPMENT="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" ++DOTENV_VAULT_DEVELOPMENT_VERSION=8 + +# ci -+DOTENV_VAULT_CI="uIKC5RKdFeJiCAzoQ9e2oaT2EbR8usJcZIYlSoFl3HTFrh7J/qfo+Z+OqBgJKQllvCVIK4oQUsLICVWCRs+7yWp5j6gn2yu67lN4lKAfX0QCF/VFYNWa6u1NWZGT1bPRlvNIY7z/YnJZfgaq8Uj+mSU+C14KHMMCpKCSkbqqFX8AWlcPSkbjXaJP4IL3HxzPUGTMfq/+XbokI9r1UjBNYi1yus6jGjI4U2OtiDc61LZJ6Y0tsBeA8NA0iT2S+lwTJBjTmGHoMMjtK08Iw8GAXv9eejETvbHZfFTOpphIjeFXjFRUsgRfuPP3p/lErfncXofQ++9KNS5lhxINGBXQIKh2CRnjhajut38Xxr848YNAj4Ie4RKzeU1+aC6BXONhbD7qZQJmm63vtwTKwrUf8ML7T27DwdpV7dTdz5/W3UWnmbzhfI1pLeCHpBC1FrLBaxhFNFlkqsXiopen4iJf4ihWICn1hMCBGGRosKQJdj+y65FJMwraBbEVHa29FHYruhAPGFqGfEIWvQ++LXlPguJM/RL2txMoVppDanOwFCM3dMO3sF55BEuSSNJWX2s72ZDgTW4/Il7YiIBwwxChPs5vOQweYKqOd21HCl4t+ocu95ja3ZGROnhff72j2pCk7cahaVl/PS8WU7nZ1JQtkv5vNRR3nHgAH1nS9tSBDJ8twKEQ4bJcu2qdhGeQwenKRsV4nrKooGnQ8UlsvoTyozYYCseds2/iXX5vlc/lhL1fgcPPxoss2p+lDaS3AIIEMq0/TUCeRF2ImYUIMnnvCEb0T32Pz8bIfPblSThETdQ5A7ZRjyU9T9Ff6lpxqQwGUWO/ElKZ/CDsoeuj1UqOVLGRBwThrOHlU7LZ6kJnBvcy6AmWccE5fLsmf1l189FwMH6CimHIg2OC4ndCbiRKiP3+3OYHL0JSkTt8Lrsu/b+Mu0Kmiks1A16Sx2Lu1lUfPSsbAgYRYni7OkpgCOJ5DdnP607LTFVIichq4+KzQsc=" -+DOTENV_VAULT_CI_VERSION=4 ++DOTENV_VAULT_CI="sCTQ2ley6wx0rNsobpsTS2tN8aaMRg/3U9e7nQ8tMiCeRkEudHd4kchWXL5ya4b9eStIOuHDixdye2lnlucTc4t4cIaHg2oQE0oKuqB9U+UtBntYIyphqtXdkIuDVpJ2FRlG7ED9XhSB4XbbkBC07OqkgRJzcWaTARouCbVn8FBbyFVM9+huvR9o1xvSTATqH9F1VoiucdXuyy7ug65cFLYpm6HkKCusjnyu+xAQxOo3iLJSfjew4qigxscT2w1ciXUFn+t71qdyuGc1PI7GfXu6L6BWijJGT9bEgRJC+0CsGo3zOB3bBBdB3SuBcSekXrwyqKzymQ3OLAfWecTScBFpHyXfl5i0UgSsnQMzYn3ua000xcEor6//rZdWumI48BBNg0mzeF5zn4H8igsuKCc1e9n+PUBsH72rbEFkYOAAwhgs8JEIZ8qHF1LxZwKyOrN9Dis2Drj5+aCWpmTu1JlX8fcyP43+hsMe9cxQvtFsfA+nTaOIIt/IuPO5taNv2jW0vGsnyoahpFB0FyZOxEuPgSWrUJkrxgXMz7FwO/iLWtL4QImifAicuWgCjgMTBg+TP2sT5ekzRqjTARKVnkApi/LpL4nija6sIfqLxqtNLlAc5vuzHbkGGq+aR9l9IGeEmC/TPi0e9JCfu+oVC0m6du9nL72kOjAAqhAW0GWrBg1yffD27+xF9MJjddRtkBRBkPXGl1x79S6dURVwkspRK94VcuKCf7VY/9XcP74z9eYGhiduIzRpPLtXxWPSYi4+j6e3qzHPhdLQi+MpS8R1bkhUPpXG78a6l4qxELftctY8Njn2kJz5SRfYxaEoDBSx9Q8H7qXR/4mYBBG4q2Oc0vGuucrW8QyX6PaUXNM+irIYCK/QE3/Z5fEletW7KxV7rdf+pFSXuGyswQqkPH1kAruRyoMTMgH++//BNkwHeJn1Sq42R7hzF+jRmblC9e/e3StkP/4xN9dmjQ1xcJOg89GYNKxwwKBhX2O7bkfUBJI0tUe9aJLwkK1xHjxmSmy5d58dENzePtTSaoCCqDkvLuyOxxa8tEb23XAY" ++DOTENV_VAULT_CI_VERSION=5 + +# staging -+DOTENV_VAULT_STAGING="AYBNNrkUH2ZyFdg6vgjrUZ/KO98JEhP7+8mam67KujGAv0EXs7yRT5eLG21sa/2mE5dHaZML5f59wUZY4E88pWetEaeR6cXk3fl4OslEyFq/EOTMjd0yaY/I19337prDAM9JBL1NgUaIuy9VICukOw39fu3LW2oovt3w/jEPE9oky4NSD5+TOgS8LuzvcUrFDACIs7Ywiquwy7wUYMoa7JFrNVT50wCSoELDBUHhGaIg6uffZ/hafvSXy58OW5bZvHxjOme+Qx9TERQPd/XMFiFFX2xvFTK+O6xjsGp6Q7C/Ri3fmZq0x87PGovUuYeqfGURmYBFt/XwVhmX0txTPmswMMxZQn9Iom7sOpHMsF9vtXZuue+Xf3WKhgYi+0DeB45o3jf7x0ljlNG8L2KIlKHZOY4d6cWBFmANCZeGxYpswKPd1tYgjk4FRXlpTDXnmu9rmb4ZzsIJWJ/KlyecXmcgimtZTNnGBwTs7dAKt2XwPPwGQbCsGy3dbljlnTgNREijmAjE+4jtrmoQALIaGSp5dHoI2o1gZ9oWep9qF0EgwqOWznz1Z8DIj2xtq+x1sefVmkfhi7KoVNDUE1gERY+5wuPMPzLaqJOUmzqNk4pgBr1l3jDk5Fj+9bOmDgkTu2Tm/IuVs4VCJF0gPCQstNMomhSpF5XCTxQJyjsBFF7+G3/Yq2AP8rtGio+thKOYrZRPYzqPCk3k7HCm8FnWZkX/GuiyL6SJYRfXbBojTXFy1vfpQySollD2kItS+ZXE9FjLqdErLqz5CVcWK7QFnbN57+jvhH2+WKzMOKG0V3Ul3cVfMA732iK7ySnyPbkaCvT2x+jyw6yCFbzP5MyfSSRHk2G3lgdViEszIpSzuNzxGgcybGWFrqWtbVTv/P8/aAMLuIgkE0Ec139GIEaTxryOb+RU8f8lTh9dQNby2+V+Iebh1S7K1EwOj27t7hvysM8X5XaOB0J0SOK+5XZooxNyJBOdArKPn/x3Ql5HxVo=" -+DOTENV_VAULT_STAGING_VERSION=4 ++DOTENV_VAULT_STAGING="jjDTQ53mmWE6kp11sR82vF9lsPNWaWteMBL3HzKC4uM16cvWzCjukaDZ++sR1/IwkEI+NYDwXoE0wTKxTA3YOQq5WcV2FdBq+DeBiJOJnVh5ghqxSukEf4tXRYIliCZ8/+caFLU7/tlrVwGkwXgjyjF3B0wgueiOMOlmIuyanXVgChEz/G2wlgzupQVtRWWmNClVMK5otcW6pbaX+ASrI2VqNVsVJm1LohdvFhUzCmGgVGjQNd6Stnjqchh9q9g2qAqDexbXGITBd9rPvz1pGduqoukxIpEe5TG7U/Zxg7ZrP8zTZ7jei8w8vA7rJ5EA/NKSgLcqvLmeu441y0OvgbnTykODbz0GVZve3PWzHGGsJDo+CWXmE5kKt0mdDOj2XCgNMGsjdHRP9GzCroQZ5QLGMFAwHqd5LnmwRZxJkmfxrMNxeIHBg9LIQ0FzxXHn9f5RvFuwhe+3nAfQo79Um/D459bd7MeZ9+F1vb++IhsSMoIq6Rcv1qMIgXv5SK8a1WrAdmVj6+3WPr+rdEijYmwLvXuI6Ad/HQCzZJkhzCvnE0lZ3XuqR/GDOCaqnMxqQjapW5HP0PXmHyUqSK/Ravl8Grb+2Z8ywULxoqbhxmK7ej8k4Vfn7sa65aVMYmj3CZIzkbsE0IdrIm84Frwmadzp8i5KxM9o4HC3ntRuKc6S9gTVT8OxUkyGu96w4qpVVAE7iL38VkAw0CIDZvcK1VtBcu4JeFRa0ZjXznUxLr2S4HsDwGtMBlkX8Q96rwh/IIusis51xl50xO6lg3uP8QwzrLLKFtHhinTHfvVIePeSm2usJxUXIvrvNekfcCebPsGdllY7t12eAbZ0RLk83loT0UsPAHUMDmdZT2eARLz7nta1lKm+PscuJIn/QxKF1K+zoJw0IL3nZL+c0iXSxZhaBHBwao5nI3CaysWr8xCohUQP/GuGE8xsivXw2DwWr4wmAmtCcT1thZtG2iOSuHQV00hlGyrghyVys/3zpR4m3qdtu5a7qxvwEpr584g7smFEySFERPBwSbfxw1dLBUj2VcNrXpR0RTG9fmye" ++DOTENV_VAULT_STAGING_VERSION=5 + +# production -+DOTENV_VAULT_PRODUCTION="TepwfKk5dn/58biHM4NYALQtxgEAvSiLNKixJWONfgfIQ5UxyalX5xEKFQb/lK0bX++6HN6dEjXm4cvUSKMRZVzWn3l2ufge6Bzr3JqgM+i0ZV8XhVp6NdVFDqzJCNDLFN6zcL16ABu1SGtF83JinNooP28/sK78DeQDQpisa3oMDVitJ6uqdxKU+ysEWasXLbsj2reTOH/lbVOh2Tp266Qh449o7K6gyaLwo75Al7pACovB32LgYzSdphvhehMWmpcXrdswPBwAPL4RLUkDTCQDknHz++772hU2CjOb55BEda7fWm64bi4MqQkJdBPjiPAOOCEbdzW8HvUvCJwRM47nuU+AwoJgNdE0oSm3rGHmfXCKL/ZdE7m4zUGgYhuAMBffJNyI+qYwzOe0IBsZhdqBce6FYDIovV4qGnn3jAy6WGaAlu+u6mXMNTa+KYWWsmNXlXq37Vg5EAylpUT6uhzSSLypHKgZ5XgCLrWv9FA2tCdzL8cNrQpVrkuwfpJdAU8OvHH/mL7cGLnrqtjvYTM/nN5ecPVYJS5sxVBKomQlD2OVhC0eJL2+YfqCmhoFXzeam+Fn/suCba0GfGBYuG8KiSon18OEHjuqOtC23NYqfYcEiI4G05o9Hb8/ruDuQ/vS4YSBwJJb0Z2dYWg4J729HMkBj2Q5FYFTX7PgtfhtbfSxvHvknjkdENHkkvb3Z6ZM9fJGAapagfksCyFmpFZnBFZiKhMjWXSjQyHqclqp16KlAYuQor1zgc8rjrxN40X1JbKGDTVxNgE4WPhd7DBq6D1CgauuGgQcXjaoDQg2ln/Lt3doMkZPw2Pesz2CzQSEC9WFUnvsU1tc/1BBL8ItrspyU7Q6frKH1ZE2yWgTnMXJBQCP0hkgezwTDEm0EZ3mZfJk9H4s3qFVL+rcN1jwSP2Gg0JRL7ML3Teap0UG8yhDzG5RrN5CqpBrZ0z3GZMC+6mBKK/Zx55H0bupjhxiEsspkhdt06OfC0MKxWI=" -+DOTENV_VAULT_PRODUCTION_VERSION=4 ++DOTENV_VAULT_PRODUCTION="4LK0FEvptGga6hjj5y9Qh9RDQPj91hOLddcCxKemVjZamQUo2yrzzNYQvO0n4eASjGUHwruB8oggS5zJ5WS1mBlRv9QKuPnkQbBfYIHVEsWNM6uxIaBkbJPu/+fn5joHVujOMGcUninLV1vY6x7z4KieMlSiJ503rmoaGqCnctOp7QIm0SyCFFG7IzXWZz2X4Bs5d1DADV2GXo1VXB85qPjee579RdbqYPb/TU2DX1YFvGFztkugYvEBEHNb7OB42iz2EIUb7Oavc7IQ1YzeOF2lJz8jzWTqFYfws9qkgzXjSGr6iTrgXs4YgtcE6fp6zGd9QNLzZWeV5ORUrnqEuQcoV6/c/BdYR+TPeiMy+W2YcLvMHPcJDoLNYKIvO1C766CMwfohWzuTHYlrjKFwlkQka1CpyyFg/vpGrFu//djXDk6D2OLSjtTm/pZPdXhxNV81A+wp/GIzAViiUn65GXaKWM4hGs7OJXhheNl9Kg+DQ7p7lyV+UYJAyNHkPBexNxCsVphgb8Rgg2BhZXBzAnAQSwZt5+oOan5YKj8DxYLYEvuZlGI7mpbiwqDIa2taRFYTzejvtw/1wrSw3943nR8NBx6vsE9JD0AGGeFCkFwY07wmhETYrlKbXYc/XKp/77lUz0/zgLXdu55gwXHfHXaGHAWwhuDeUpdnDr9Syjd5lHzUAtQNNMg6IOrEhf9Nokp4aHcb6oOJmw/5hh+9tgaBk+jvGYGvsok1OXnpgAXuKL10C9zN3rR4/0tzZc1xqIe84ylevrhdkLekvxbbmOsymecMDIuSGhVYp9slvGbhRKtoPVwaujk/ds0YIUirp4pK83MVtdppg4O1iOspmXYPOLxp29LWVMany9PyqlkiFs2vPCJ8OgVp8DeZ0vVnC6Q6FLWHNEfSHPo/pd8w/JetZl//5V+pfKMDcKBUntzcUUqfHuLuE+8JUS1zob6IQ2P4GSLqOs/tE1Gfl3e3MKGFVDBx5faDcNyuQCuRRgXbUc3bk95rQZ7vDPWHJsyE/WH7ptPvK4ytyrxOaf/noEo/LAR8B16X0wpz4LW9" ++DOTENV_VAULT_PRODUCTION_VERSION=5 + +#/----------------settings/metadata-----------------/ +DOTENV_VAULT="vlt_47e3eeb0730e831e688049600e59f8975260a1f00302ae08684ed87ba67872d0" diff --git a/opensaas-sh/app_diff/main.wasp.diff b/opensaas-sh/app_diff/main.wasp.diff index fb47525e..937ed432 100644 --- a/opensaas-sh/app_diff/main.wasp.diff +++ b/opensaas-sh/app_diff/main.wasp.diff @@ -1,7 +1,7 @@ --- template/app/main.wasp +++ opensaas-sh/app/main.wasp @@ -3,24 +3,24 @@ - version: "^0.13.2" + version: "^0.14.0" }, - title: "My Open SaaS App", @@ -45,7 +45,7 @@ }, emailVerification: { clientRoute: EmailVerificationRoute, -@@ -44,16 +44,14 @@ +@@ -44,21 +44,18 @@ }, userSignupFields: import { getEmailUserFields } from "@src/auth/userSignupFields", }, @@ -59,6 +59,11 @@ - // userSignupFields: import { getGitHubUserFields } from "@src/auth/userSignupFields", - // configFn: import { getGitHubAuthConfig } from "@src/auth/userSignupFields", - // }, +- // Uncomment to enable Discord Auth (check https://wasp-lang.dev/docs/auth/social-auth/discord for setup instructions): +- // discord: { +- // userSignupFields: import { getDiscordUserFields } from "@src/auth/userSignupFields", +- // configFn: import { getDiscordAuthConfig } from "@src/auth/userSignupFields" +- // } + google: { + userSignupFields: import { getGoogleUserFields } from "@src/auth/userSignupFields", + configFn: import { getGoogleAuthConfig } from "@src/auth/userSignupFields", @@ -67,10 +72,14 @@ + userSignupFields: import { getGitHubUserFields } from "@src/auth/userSignupFields", + configFn: import { getGitHubAuthConfig } from "@src/auth/userSignupFields", + }, ++ discord: { ++ userSignupFields: import { getDiscordUserFields } from "@src/auth/userSignupFields", ++ configFn: import { getDiscordAuthConfig } from "@src/auth/userSignupFields" ++ } }, + onAfterSignup: import { onAfterSignup } from "@src/auth/hooks", onAuthFailedRedirectTo: "/login", - onAuthSucceededRedirectTo: "/demo-app", -@@ -76,11 +74,11 @@ +@@ -81,11 +78,11 @@ // NOTE: "Dummy" provider is just for local development purposes. // Make sure to check the server logs for the email confirmation url (it will not be sent to an address)! // Once you are ready for production, switch to e.g. "SendGrid" or "Mailgun" providers. Check out https://docs.opensaas.sh/guides/email-sending/ . @@ -84,15 +93,3 @@ }, }, } -@@ -125,7 +123,10 @@ - email String? @unique - username String? @unique - lastActiveTimestamp DateTime @default(now()) -- isAdmin Boolean @default(false) -+ isAdmin Boolean @default(true) -+ // isMockUser is an extra property for the demo app ensuring that all users can access -+ // the admin dashboard but won't be able to see the other users' data, only mock user data. -+ isMockUser Boolean @default(false) - - stripeId String? @unique - checkoutSessionId String? diff --git a/opensaas-sh/app_diff/migrations/20240715142249_version_14/migration.sql.diff b/opensaas-sh/app_diff/migrations/20240715142249_version_14/migration.sql.diff new file mode 100644 index 00000000..26cd803b --- /dev/null +++ b/opensaas-sh/app_diff/migrations/20240715142249_version_14/migration.sql.diff @@ -0,0 +1,19 @@ +--- template/app/migrations/20240715142249_version_14/migration.sql ++++ opensaas-sh/app/migrations/20240715142249_version_14/migration.sql +@@ -0,0 +1,16 @@ ++/* ++ Warnings: ++ ++ - You are about to drop the column `sendEmail` on the `User` table. All the data in the column will be lost. ++ - You are about to drop the column `subscriptionTier` on the `User` table. All the data in the column will be lost. ++ - A unique constraint covering the columns `[stripeId]` on the table `User` will be added. If there are existing duplicate values, this will fail. ++ ++*/ ++-- AlterTable ++ALTER TABLE "User" DROP COLUMN "sendEmail", ++DROP COLUMN "subscriptionTier", ++ADD COLUMN "sendNewsletter" BOOLEAN NOT NULL DEFAULT false, ++ADD COLUMN "subscriptionPlan" TEXT; ++ ++-- CreateIndex ++CREATE UNIQUE INDEX "User_stripeId_key" ON "User"("stripeId"); diff --git a/opensaas-sh/app_diff/schema.prisma.diff b/opensaas-sh/app_diff/schema.prisma.diff new file mode 100644 index 00000000..7f8fc9d2 --- /dev/null +++ b/opensaas-sh/app_diff/schema.prisma.diff @@ -0,0 +1,14 @@ +--- template/app/schema.prisma ++++ opensaas-sh/app/schema.prisma +@@ -14,7 +14,10 @@ + email String? @unique + username String? @unique + lastActiveTimestamp DateTime @default(now()) +- isAdmin Boolean @default(false) ++ isAdmin Boolean @default(true) ++ // isMockUser is an extra property for the demo app ensuring that all users can access ++ // the admin dashboard but won't be able to see the other users' data, only mock user data. ++ isMockUser Boolean @default(false) + + stripeId String? @unique + checkoutSessionId String? diff --git a/opensaas-sh/app_diff/src/admin/dashboards/analytics/AnalyticsDashboardPage.tsx.diff b/opensaas-sh/app_diff/src/admin/dashboards/analytics/AnalyticsDashboardPage.tsx.diff index 4a99931f..ab0c5301 100644 --- a/opensaas-sh/app_diff/src/admin/dashboards/analytics/AnalyticsDashboardPage.tsx.diff +++ b/opensaas-sh/app_diff/src/admin/dashboards/analytics/AnalyticsDashboardPage.tsx.diff @@ -1,20 +1,18 @@ --- template/app/src/admin/dashboards/analytics/AnalyticsDashboardPage.tsx +++ opensaas-sh/app/src/admin/dashboards/analytics/AnalyticsDashboardPage.tsx -@@ -1,4 +1,5 @@ - import { type User } from 'wasp/entities'; +@@ -1,4 +1,6 @@ ++import { Link } from "wasp/client/router"; + import { type AuthUser } from 'wasp/auth'; +import { useState, useEffect } from 'react'; import { useQuery, getDailyStats } from 'wasp/client/operations'; import TotalSignupsCard from './TotalSignupsCard'; import TotalPageViewsCard from './TotalPageViewsCard'; -@@ -10,6 +11,7 @@ - import { useHistory } from 'react-router-dom'; +@@ -10,12 +12,45 @@ + import { useRedirectHomeUnlessUserIsAdmin } from '../../useRedirectHomeUnlessUserIsAdmin' - const Dashboard = ({ user }: { user: User }) => { + const Dashboard = ({ user }: { user: AuthUser }) => { + const [isDemoInfoVisible, setIsDemoInfoVisible] = useState(false); - const history = useHistory(); - if (!user.isAdmin) { - history.push('/'); -@@ -17,8 +19,40 @@ + useRedirectHomeUnlessUserIsAdmin({ user }) const { data: stats, isLoading, error } = useQuery(getDailyStats); @@ -40,7 +38,7 @@ + }; + return ( - + + {/* Floating Demo Announcement */} + {isDemoInfoVisible && ( +
diff --git a/opensaas-sh/app_diff/src/admin/dashboards/users/UsersDashboardPage.tsx.diff b/opensaas-sh/app_diff/src/admin/dashboards/users/UsersDashboardPage.tsx.diff new file mode 100644 index 00000000..b0100446 --- /dev/null +++ b/opensaas-sh/app_diff/src/admin/dashboards/users/UsersDashboardPage.tsx.diff @@ -0,0 +1,54 @@ +--- template/app/src/admin/dashboards/users/UsersDashboardPage.tsx ++++ opensaas-sh/app/src/admin/dashboards/users/UsersDashboardPage.tsx +@@ -1,14 +1,50 @@ + import { type AuthUser } from 'wasp/auth'; ++import { useState, useEffect } from 'react'; + import UsersTable from './UsersTable'; + import Breadcrumb from '../../layout/Breadcrumb'; + import DefaultLayout from '../../layout/DefaultLayout'; + import { useRedirectHomeUnlessUserIsAdmin } from '../../useRedirectHomeUnlessUserIsAdmin'; + + const Users = ({ user }: { user: AuthUser }) => { +- useRedirectHomeUnlessUserIsAdmin({user}) ++ const [isDemoInfoVisible, setIsDemoInfoVisible] = useState(false); ++ useRedirectHomeUnlessUserIsAdmin({user}); ++ ++ useEffect(() => { ++ try { ++ if (localStorage.getItem('isDemoInfoVisible') === 'false') { ++ // do nothing ++ } else { ++ setIsDemoInfoVisible(true); ++ } ++ } catch (error) { ++ console.error(error); ++ } ++ }, []); ++ ++ const handleDemoInfoClose = () => { ++ try { ++ localStorage.setItem('isDemoInfoVisible', 'false'); ++ setIsDemoInfoVisible(false); ++ } catch (error) { ++ console.error(error); ++ } ++ }; + + return ( + ++ {/* Floating Demo Announcement */} ++ {isDemoInfoVisible && ( ++
++
++ ++ You are viewing mock user data only ;) ++ ++ ++
++
++ )} + +
+ diff --git a/opensaas-sh/app_diff/src/admin/dashboards/users/UsersTable.tsx.diff b/opensaas-sh/app_diff/src/admin/dashboards/users/UsersTable.tsx.diff index 98a91cf4..04ee01a2 100644 --- a/opensaas-sh/app_diff/src/admin/dashboards/users/UsersTable.tsx.diff +++ b/opensaas-sh/app_diff/src/admin/dashboards/users/UsersTable.tsx.diff @@ -1,56 +1,10 @@ --- template/app/src/admin/dashboards/users/UsersTable.tsx +++ opensaas-sh/app/src/admin/dashboards/users/UsersTable.tsx -@@ -9,8 +9,10 @@ +@@ -9,6 +9,7 @@ const [skip, setskip] = useState(0); const [page, setPage] = useState(1); const [email, setEmail] = useState(undefined); + const [isAdminFilter, setIsAdminFilter] = useState(undefined); const [statusOptions, setStatusOptions] = useState([]); -+ const [isDemoInfoVisible, setIsDemoInfoVisible] = useState(false); const { data, isLoading, error } = useQuery(getPaginatedUsers, { - skip, - emailContains: email, -@@ -26,8 +28,42 @@ - setskip((page - 1) * 10); - }, [page]); - -+ useEffect(() => { -+ try { -+ if (localStorage.getItem('isDemoInfoVisible') === 'false') { -+ // do nothing -+ } else { -+ setIsDemoInfoVisible(true); -+ } -+ } catch (error) { -+ console.error(error); -+ } -+ }, []); -+ -+ const handleDemoInfoClose = () => { -+ try { -+ localStorage.setItem('isDemoInfoVisible', 'false'); -+ setIsDemoInfoVisible(false); -+ } catch (error) { -+ console.error(error); -+ } -+ }; -+ - return ( -
-+ {/* Floating Demo Announcement */} -+ {isDemoInfoVisible && ( -+
-+
-+ -+ You are viewing mock user data only ;) -+ -+ -+
-+
-+ )} -
-
- Filters: diff --git a/opensaas-sh/app_diff/src/auth/userSignupFields.ts.diff b/opensaas-sh/app_diff/src/auth/userSignupFields.ts.diff new file mode 100644 index 00000000..5272c532 --- /dev/null +++ b/opensaas-sh/app_diff/src/auth/userSignupFields.ts.diff @@ -0,0 +1,47 @@ +--- template/app/src/auth/userSignupFields.ts ++++ opensaas-sh/app/src/auth/userSignupFields.ts +@@ -1,11 +1,8 @@ + import { z } from 'zod'; + import { defineUserSignupFields } from 'wasp/auth/providers/types'; + +-const adminEmails = process.env.ADMIN_EMAILS?.split(',') || []; +- + export const getEmailUserFields = defineUserSignupFields({ + username: (data: any) => data.email, +- isAdmin: (data: any) => adminEmails.includes(data.email), + email: (data: any) => data.email, + }); + +@@ -29,10 +26,6 @@ + const githubData = githubDataSchema.parse(data); + return githubData.profile.login; + }, +- isAdmin: (data) => { +- const githubData = githubDataSchema.parse(data); +- return adminEmails.includes(githubData.profile.emails[0].email); +- }, + }); + + // NOTE: if we don't want to access users' emails, we can use scope ["user:read"] +@@ -58,10 +51,6 @@ + const googleData = googleDataSchema.parse(data); + return googleData.profile.email; + }, +- isAdmin: (data) => { +- const googleData = googleDataSchema.parse(data); +- return adminEmails.includes(googleData.profile.email); +- }, + }); + + export function getGoogleAuthConfig() { +@@ -86,10 +75,6 @@ + const discordData = discordDataSchema.parse(data); + return discordData.profile.username; + }, +- isAdmin: (data) => { +- const email = discordDataSchema.parse(data).profile.email; +- return !!email && adminEmails.includes(email); +- }, + }); + + export function getDiscordAuthConfig() { diff --git a/opensaas-sh/app_diff/src/client/landing-page/Announcement.tsx.diff b/opensaas-sh/app_diff/src/client/landing-page/Announcement.tsx.diff deleted file mode 100644 index 19817b25..00000000 --- a/opensaas-sh/app_diff/src/client/landing-page/Announcement.tsx.diff +++ /dev/null @@ -1,60 +0,0 @@ ---- template/app/src/client/landing-page/Announcement.tsx -+++ opensaas-sh/app/src/client/landing-page/Announcement.tsx -@@ -0,0 +1,57 @@ -+import { useState, useEffect } from 'react'; -+import { AiFillGithub } from 'react-icons/ai'; -+ -+type TimeLeft = { hours: string; minutes: string; seconds: string }; -+ -+export default function Announcement() { -+ const [timeLeft, setTimeLeft] = useState( -+ calculateTimeLeft() -+ ); -+ -+ function calculateTimeLeft() { -+ const targetDate = '2024-01-30T08:01:00Z'; -+ let diff = new Date(targetDate).getTime() - new Date().getTime(); -+ let timeLeft: TimeLeft | undefined; -+ -+ if (diff > 0) { -+ timeLeft = { -+ hours: Math.floor((diff / (1000 * 60 * 60)) % 24).toString(), -+ minutes: Math.floor((diff / 1000 / 60) % 60).toString(), -+ // make sure seconds are always displayed as two digits, e.g. '02' -+ seconds: Math.floor((diff / 1000) % 60).toString(), -+ }; -+ } -+ if (!!timeLeft) { -+ if (timeLeft.seconds.length === 1) { -+ timeLeft.seconds = '0' + timeLeft.seconds; -+ } -+ if (timeLeft.minutes.length === 1) { -+ timeLeft.minutes = '0' + timeLeft.minutes; -+ } -+ } -+ return timeLeft; -+ } -+ -+ useEffect(() => { -+ const timer = setTimeout(() => { -+ setTimeLeft(calculateTimeLeft()); -+ }, 1000); -+ return () => clearTimeout(timer); -+ }); -+ -+ return ( -+
-+ Open SaaS trending on{' '} -+ -+ GitHub -+ -+ -+ ๐Ÿ“ˆ -+
-+ ); -+} diff --git a/opensaas-sh/app_diff/src/client/landing-page/LandingPage.tsx.diff b/opensaas-sh/app_diff/src/landing-page/LandingPage.tsx.diff similarity index 96% rename from opensaas-sh/app_diff/src/client/landing-page/LandingPage.tsx.diff rename to opensaas-sh/app_diff/src/landing-page/LandingPage.tsx.diff index 21022559..88f8440f 100644 --- a/opensaas-sh/app_diff/src/client/landing-page/LandingPage.tsx.diff +++ b/opensaas-sh/app_diff/src/landing-page/LandingPage.tsx.diff @@ -1,5 +1,5 @@ ---- template/app/src/client/landing-page/LandingPage.tsx -+++ opensaas-sh/app/src/client/landing-page/LandingPage.tsx +--- template/app/src/landing-page/LandingPage.tsx ++++ opensaas-sh/app/src/landing-page/LandingPage.tsx @@ -1,24 +1,45 @@ import { Link } from 'wasp/client/router'; import { useAuth } from 'wasp/client/auth'; @@ -10,9 +10,13 @@ +import { AiFillCloseCircle, AiFillGithub } from 'react-icons/ai'; import { HiBars3 } from 'react-icons/hi2'; import { BiLogIn } from 'react-icons/bi'; - import logo from '../static/logo.png'; --import openSaasBanner from '../static/open-saas-banner.png'; + import logo from '../client/static/logo.png'; +-import openSaasBanner from '../client/static/open-saas-banner.png'; -import { features, navigation, faqs, footerNavigation, testimonials } from './contentSections'; +-import DropdownUser from '../client/../user/DropdownUser'; +-import { UserMenuItems } from '../client/../user/UserMenuItems'; +-import { DocsUrl } from '../client/../shared/common'; + import DarkModeSwitcher from '../client/components/DarkModeSwitcher'; +import { + features, + navigation, @@ -20,11 +24,9 @@ + footerNavigation, + testimonials, +} from './contentSections'; - import DropdownUser from '../../user/DropdownUser'; - import { UserMenuItems } from '../../user/UserMenuItems'; --import { DocsUrl } from '../../shared/common'; -+import { DocsUrl, GithubUrl } from '../../shared/common'; - import DarkModeSwitcher from '../components/DarkModeSwitcher'; ++import DropdownUser from '../user/DropdownUser'; ++import { UserMenuItems } from '../user/UserMenuItems'; ++import { DocsUrl, GithubUrl } from '../shared/common'; export default function LandingPage() { const [mobileMenuOpen, setMobileMenuOpen] = useState(false); @@ -119,7 +121,7 @@ }} />
-@@ -152,30 +179,54 @@ +@@ -152,30 +179,47 @@
@@ -163,15 +165,13 @@
-
- -+ {/* App screenshot -+ /> */} ++
+