diff --git a/examples/setactive-with-slug/.next/server/app-paths-manifest.json b/examples/setactive-with-slug/.next/server/app-paths-manifest.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/examples/setactive-with-slug/.next/server/app-paths-manifest.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/examples/setactive-with-slug/.next/server/interception-route-rewrite-manifest.js b/examples/setactive-with-slug/.next/server/interception-route-rewrite-manifest.js new file mode 100644 index 0000000..82d3ab1 --- /dev/null +++ b/examples/setactive-with-slug/.next/server/interception-route-rewrite-manifest.js @@ -0,0 +1 @@ +self.__INTERCEPTION_ROUTE_REWRITE_MANIFEST="[]" \ No newline at end of file diff --git a/examples/setactive-with-slug/.next/server/middleware-manifest.json b/examples/setactive-with-slug/.next/server/middleware-manifest.json new file mode 100644 index 0000000..33872a3 --- /dev/null +++ b/examples/setactive-with-slug/.next/server/middleware-manifest.json @@ -0,0 +1,6 @@ +{ + "version": 3, + "middleware": {}, + "functions": {}, + "sortedMiddleware": [] +} \ No newline at end of file diff --git a/examples/setactive-with-slug/.next/server/pages-manifest.json b/examples/setactive-with-slug/.next/server/pages-manifest.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/examples/setactive-with-slug/.next/server/pages-manifest.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/examples/setactive-with-slug/.next/server/server-reference-manifest.js b/examples/setactive-with-slug/.next/server/server-reference-manifest.js new file mode 100644 index 0000000..f26d294 --- /dev/null +++ b/examples/setactive-with-slug/.next/server/server-reference-manifest.js @@ -0,0 +1 @@ +self.__RSC_SERVER_MANIFEST="{\n \"node\": {\n \"f872762b6cd8f0c1ab189355be859953710a4799\": {\n \"workers\": {\n \"app/_not-found/page\": \"(action-browser)/./node_modules/next/dist/build/webpack/loaders/next-flight-action-entry-loader.js?actions=%5B%5B%22%2FUsers%2Fizaak%2Fdev%2Forgs%2Fexamples%2Fsetactive-with-slug%2Fnode_modules%2F%40clerk%2Fnextjs%2Fdist%2Fesm%2Fapp-router%2Fserver-actions.js%22%2C%5B%22invalidateCacheAction%22%5D%5D%5D&__client_imported__=true!\",\n \"app/page\": \"(action-browser)/./node_modules/next/dist/build/webpack/loaders/next-flight-action-entry-loader.js?actions=%5B%5B%22%2FUsers%2Fizaak%2Fdev%2Forgs%2Fexamples%2Fsetactive-with-slug%2Fnode_modules%2F%40clerk%2Fnextjs%2Fdist%2Fesm%2Fapp-router%2Fserver-actions.js%22%2C%5B%22invalidateCacheAction%22%5D%5D%5D&__client_imported__=true!\",\n \"app/orgs/[orgSlug]/page\": \"(action-browser)/./node_modules/next/dist/build/webpack/loaders/next-flight-action-entry-loader.js?actions=%5B%5B%22%2FUsers%2Fizaak%2Fdev%2Forgs%2Fexamples%2Fsetactive-with-slug%2Fnode_modules%2F%40clerk%2Fnextjs%2Fdist%2Fesm%2Fapp-router%2Fserver-actions.js%22%2C%5B%22invalidateCacheAction%22%5D%5D%5D&__client_imported__=true!\"\n },\n \"layer\": {\n \"app/_not-found/page\": \"action-browser\",\n \"app/page\": \"action-browser\",\n \"app/orgs/[orgSlug]/page\": \"action-browser\"\n }\n }\n },\n \"edge\": {},\n \"encryptionKey\": \"PxeTPPy+DGe3J0wqKIHXjorA85/GqRvUEaahz1b2o4g=\"\n}" \ No newline at end of file diff --git a/examples/setactive-with-slug/.next/server/server-reference-manifest.json b/examples/setactive-with-slug/.next/server/server-reference-manifest.json new file mode 100644 index 0000000..13cf3dc --- /dev/null +++ b/examples/setactive-with-slug/.next/server/server-reference-manifest.json @@ -0,0 +1,18 @@ +{ + "node": { + "f872762b6cd8f0c1ab189355be859953710a4799": { + "workers": { + "app/_not-found/page": "(action-browser)/./node_modules/next/dist/build/webpack/loaders/next-flight-action-entry-loader.js?actions=%5B%5B%22%2FUsers%2Fizaak%2Fdev%2Forgs%2Fexamples%2Fsetactive-with-slug%2Fnode_modules%2F%40clerk%2Fnextjs%2Fdist%2Fesm%2Fapp-router%2Fserver-actions.js%22%2C%5B%22invalidateCacheAction%22%5D%5D%5D&__client_imported__=true!", + "app/page": "(action-browser)/./node_modules/next/dist/build/webpack/loaders/next-flight-action-entry-loader.js?actions=%5B%5B%22%2FUsers%2Fizaak%2Fdev%2Forgs%2Fexamples%2Fsetactive-with-slug%2Fnode_modules%2F%40clerk%2Fnextjs%2Fdist%2Fesm%2Fapp-router%2Fserver-actions.js%22%2C%5B%22invalidateCacheAction%22%5D%5D%5D&__client_imported__=true!", + "app/orgs/[orgSlug]/page": "(action-browser)/./node_modules/next/dist/build/webpack/loaders/next-flight-action-entry-loader.js?actions=%5B%5B%22%2FUsers%2Fizaak%2Fdev%2Forgs%2Fexamples%2Fsetactive-with-slug%2Fnode_modules%2F%40clerk%2Fnextjs%2Fdist%2Fesm%2Fapp-router%2Fserver-actions.js%22%2C%5B%22invalidateCacheAction%22%5D%5D%5D&__client_imported__=true!" + }, + "layer": { + "app/_not-found/page": "action-browser", + "app/page": "action-browser", + "app/orgs/[orgSlug]/page": "action-browser" + } + } + }, + "edge": {}, + "encryptionKey": "PxeTPPy+DGe3J0wqKIHXjorA85/GqRvUEaahz1b2o4g=" +} \ No newline at end of file diff --git a/examples/setactive-with-slug/.next/server/static/webpack/f68ca28999801d23.edge-runtime-webpack.hot-update.json b/examples/setactive-with-slug/.next/server/static/webpack/f68ca28999801d23.edge-runtime-webpack.hot-update.json new file mode 100644 index 0000000..b37ab4e --- /dev/null +++ b/examples/setactive-with-slug/.next/server/static/webpack/f68ca28999801d23.edge-runtime-webpack.hot-update.json @@ -0,0 +1 @@ +{"c":[],"r":["src/middleware","edge-runtime-webpack"],"m":["(middleware)/./node_modules/@clerk/backend/dist/chunk-7VE5X6MW.mjs","(middleware)/./node_modules/@clerk/backend/dist/chunk-HLOIKRRB.mjs","(middleware)/./node_modules/@clerk/backend/dist/chunk-P263NW7Z.mjs","(middleware)/./node_modules/@clerk/backend/dist/chunk-RDWIKGZP.mjs","(middleware)/./node_modules/@clerk/backend/dist/index.mjs","(middleware)/./node_modules/@clerk/backend/dist/internal.mjs","(middleware)/./node_modules/@clerk/backend/dist/runtime/browser/crypto.mjs","(middleware)/./node_modules/@clerk/nextjs/dist/esm/app-router/server/utils.js","(middleware)/./node_modules/@clerk/nextjs/dist/esm/constants.js","(middleware)/./node_modules/@clerk/nextjs/dist/esm/server/clerkClient.js","(middleware)/./node_modules/@clerk/nextjs/dist/esm/server/clerkMiddleware.js","(middleware)/./node_modules/@clerk/nextjs/dist/esm/server/constants.js","(middleware)/./node_modules/@clerk/nextjs/dist/esm/server/errorThrower.js","(middleware)/./node_modules/@clerk/nextjs/dist/esm/server/errors.js","(middleware)/./node_modules/@clerk/nextjs/dist/esm/server/nextFetcher.js","(middleware)/./node_modules/@clerk/nextjs/dist/esm/server/protect.js","(middleware)/./node_modules/@clerk/nextjs/dist/esm/server/routeMatcher.js","(middleware)/./node_modules/@clerk/nextjs/dist/esm/server/utils.js","(middleware)/./node_modules/@clerk/nextjs/dist/esm/utils/debugLogger.js","(middleware)/./node_modules/@clerk/nextjs/dist/esm/utils/logFormatter.js","(middleware)/./node_modules/@clerk/nextjs/dist/esm/utils/pathMatchers.js","(middleware)/./node_modules/@clerk/nextjs/dist/esm/utils/response.js","(middleware)/./node_modules/@clerk/nextjs/dist/esm/utils/serverRedirectWithAuth.js","(middleware)/./node_modules/@clerk/shared/dist/apiUrlFromPublishableKey.mjs","(middleware)/./node_modules/@clerk/shared/dist/callWithRetry.mjs","(middleware)/./node_modules/@clerk/shared/dist/chunk-4PW5MDZA.mjs","(middleware)/./node_modules/@clerk/shared/dist/chunk-6NDGN2IU.mjs","(middleware)/./node_modules/@clerk/shared/dist/chunk-7ELT755Q.mjs","(middleware)/./node_modules/@clerk/shared/dist/chunk-7U7QHXU6.mjs","(middleware)/./node_modules/@clerk/shared/dist/chunk-CYDR2ZSA.mjs","(middleware)/./node_modules/@clerk/shared/dist/chunk-IC4FGZI3.mjs","(middleware)/./node_modules/@clerk/shared/dist/chunk-K64INQ4C.mjs","(middleware)/./node_modules/@clerk/shared/dist/chunk-KOH7GTJO.mjs","(middleware)/./node_modules/@clerk/shared/dist/chunk-L45N5DM5.mjs","(middleware)/./node_modules/@clerk/shared/dist/chunk-QE2A7CJI.mjs","(middleware)/./node_modules/@clerk/shared/dist/chunk-SHMQZLCH.mjs","(middleware)/./node_modules/@clerk/shared/dist/chunk-T5VTDOY6.mjs","(middleware)/./node_modules/@clerk/shared/dist/chunk-TETGTEI2.mjs","(middleware)/./node_modules/@clerk/shared/dist/chunk-TRWMHODU.mjs","(middleware)/./node_modules/@clerk/shared/dist/chunk-TUVJ3GI6.mjs","(middleware)/./node_modules/@clerk/shared/dist/chunk-X2FYR5U6.mjs","(middleware)/./node_modules/@clerk/shared/dist/deprecated.mjs","(middleware)/./node_modules/@clerk/shared/dist/devBrowser.mjs","(middleware)/./node_modules/@clerk/shared/dist/error.mjs","(middleware)/./node_modules/@clerk/shared/dist/handleValueOrFn.mjs","(middleware)/./node_modules/@clerk/shared/dist/isomorphicAtob.mjs","(middleware)/./node_modules/@clerk/shared/dist/keys.mjs","(middleware)/./node_modules/@clerk/shared/dist/logger.mjs","(middleware)/./node_modules/@clerk/shared/dist/proxy.mjs","(middleware)/./node_modules/@clerk/shared/dist/telemetry.mjs","(middleware)/./node_modules/@clerk/shared/dist/underscore.mjs","(middleware)/./node_modules/@clerk/shared/dist/url.mjs","(middleware)/./node_modules/cookie/index.js","(middleware)/./node_modules/crypto-js/aes.js","(middleware)/./node_modules/crypto-js/cipher-core.js","(middleware)/./node_modules/crypto-js/core.js","(middleware)/./node_modules/crypto-js/enc-base64.js","(middleware)/./node_modules/crypto-js/enc-utf8.js","(middleware)/./node_modules/crypto-js/evpkdf.js","(middleware)/./node_modules/crypto-js/hmac-sha1.js","(middleware)/./node_modules/crypto-js/hmac.js","(middleware)/./node_modules/crypto-js/md5.js","(middleware)/./node_modules/crypto-js/sha1.js","(middleware)/./node_modules/dot-case/dist.es2015/index.js","(middleware)/./node_modules/lower-case/dist.es2015/index.js","(middleware)/./node_modules/map-obj/index.js","(middleware)/./node_modules/next/dist/build/webpack/loaders/next-middleware-loader.js?absolutePagePath=%2FUsers%2Fizaak%2Fdev%2Forgs%2Fexamples%2Fsetactive-with-slug%2Fsrc%2Fmiddleware.ts&page=%2Fsrc%2Fmiddleware&rootDir=%2FUsers%2Fizaak%2Fdev%2Forgs%2Fexamples%2Fsetactive-with-slug&matchers=&preferredRegion=&middlewareConfig=e30%3D!","(middleware)/./node_modules/next/dist/compiled/@edge-runtime/cookies/index.js","(middleware)/./node_modules/next/dist/compiled/@opentelemetry/api/index.js","(middleware)/./node_modules/next/dist/compiled/cookie/index.js","(middleware)/./node_modules/next/dist/compiled/ua-parser-js/ua-parser.js","(middleware)/./node_modules/next/dist/esm/api/headers.js","(middleware)/./node_modules/next/dist/esm/api/server.js","(middleware)/./node_modules/next/dist/esm/client/components/app-router-headers.js","(middleware)/./node_modules/next/dist/esm/client/components/draft-mode.js","(middleware)/./node_modules/next/dist/esm/client/components/headers.js","(middleware)/./node_modules/next/dist/esm/client/components/hooks-server-context.js","(middleware)/./node_modules/next/dist/esm/client/components/static-generation-bailout.js","(middleware)/./node_modules/next/dist/esm/lib/constants.js","(middleware)/./node_modules/next/dist/esm/lib/url.js","(middleware)/./node_modules/next/dist/esm/server/api-utils/index.js","(middleware)/./node_modules/next/dist/esm/server/app-render/dynamic-rendering.js","(middleware)/./node_modules/next/dist/esm/server/async-storage/draft-mode-provider.js","(middleware)/./node_modules/next/dist/esm/server/async-storage/request-async-storage-wrapper.js","(middleware)/./node_modules/next/dist/esm/server/internal-utils.js","(middleware)/./node_modules/next/dist/esm/server/lib/trace/constants.js","(middleware)/./node_modules/next/dist/esm/server/lib/trace/tracer.js","(middleware)/./node_modules/next/dist/esm/server/web/adapter.js","(middleware)/./node_modules/next/dist/esm/server/web/error.js","(middleware)/./node_modules/next/dist/esm/server/web/exports/index.js","(middleware)/./node_modules/next/dist/esm/server/web/globals.js","(middleware)/./node_modules/next/dist/esm/server/web/next-url.js","(middleware)/./node_modules/next/dist/esm/server/web/spec-extension/adapters/headers.js","(middleware)/./node_modules/next/dist/esm/server/web/spec-extension/adapters/reflect.js","(middleware)/./node_modules/next/dist/esm/server/web/spec-extension/adapters/request-cookies.js","(middleware)/./node_modules/next/dist/esm/server/web/spec-extension/cookies.js","(middleware)/./node_modules/next/dist/esm/server/web/spec-extension/fetch-event.js","(middleware)/./node_modules/next/dist/esm/server/web/spec-extension/image-response.js","(middleware)/./node_modules/next/dist/esm/server/web/spec-extension/request.js","(middleware)/./node_modules/next/dist/esm/server/web/spec-extension/response.js","(middleware)/./node_modules/next/dist/esm/server/web/spec-extension/url-pattern.js","(middleware)/./node_modules/next/dist/esm/server/web/spec-extension/user-agent.js","(middleware)/./node_modules/next/dist/esm/server/web/utils.js","(middleware)/./node_modules/next/dist/esm/shared/lib/constants.js","(middleware)/./node_modules/next/dist/esm/shared/lib/get-hostname.js","(middleware)/./node_modules/next/dist/esm/shared/lib/i18n/detect-domain-locale.js","(middleware)/./node_modules/next/dist/esm/shared/lib/i18n/normalize-locale-path.js","(middleware)/./node_modules/next/dist/esm/shared/lib/modern-browserslist-target.js","(middleware)/./node_modules/next/dist/esm/shared/lib/page-path/ensure-leading-slash.js","(middleware)/./node_modules/next/dist/esm/shared/lib/router/utils/add-locale.js","(middleware)/./node_modules/next/dist/esm/shared/lib/router/utils/add-path-prefix.js","(middleware)/./node_modules/next/dist/esm/shared/lib/router/utils/add-path-suffix.js","(middleware)/./node_modules/next/dist/esm/shared/lib/router/utils/app-paths.js","(middleware)/./node_modules/next/dist/esm/shared/lib/router/utils/format-next-pathname-info.js","(middleware)/./node_modules/next/dist/esm/shared/lib/router/utils/get-next-pathname-info.js","(middleware)/./node_modules/next/dist/esm/shared/lib/router/utils/parse-path.js","(middleware)/./node_modules/next/dist/esm/shared/lib/router/utils/path-has-prefix.js","(middleware)/./node_modules/next/dist/esm/shared/lib/router/utils/relativize-url.js","(middleware)/./node_modules/next/dist/esm/shared/lib/router/utils/remove-path-prefix.js","(middleware)/./node_modules/next/dist/esm/shared/lib/router/utils/remove-trailing-slash.js","(middleware)/./node_modules/next/dist/esm/shared/lib/segment.js","(middleware)/./node_modules/next/dist/experimental/testmode/context.js","(middleware)/./node_modules/next/dist/experimental/testmode/fetch.js","(middleware)/./node_modules/next/dist/experimental/testmode/server-edge.js","(middleware)/./node_modules/next/package.json","(middleware)/./node_modules/no-case/dist.es2015/index.js","(middleware)/./node_modules/path-to-regexp/dist.es2015/index.js","(middleware)/./node_modules/react/cjs/react.development.js","(middleware)/./node_modules/react/index.js","(middleware)/./node_modules/snake-case/dist.es2015/index.js","(middleware)/./node_modules/snakecase-keys/index.js","(middleware)/./node_modules/tslib/tslib.es6.mjs","(middleware)/./src/middleware.ts","(shared)/./node_modules/next/dist/esm/client/components/action-async-storage-instance.js","(shared)/./node_modules/next/dist/esm/client/components/action-async-storage.external.js","(shared)/./node_modules/next/dist/esm/client/components/async-local-storage.js","(shared)/./node_modules/next/dist/esm/client/components/request-async-storage-instance.js","(shared)/./node_modules/next/dist/esm/client/components/request-async-storage.external.js","(shared)/./node_modules/next/dist/esm/client/components/static-generation-async-storage-instance.js","(shared)/./node_modules/next/dist/esm/client/components/static-generation-async-storage.external.js","?599d","buffer","node:async_hooks",""]} \ No newline at end of file diff --git a/examples/setactive-with-slug/.next/types/package.json b/examples/setactive-with-slug/.next/types/package.json new file mode 100644 index 0000000..1632c2c --- /dev/null +++ b/examples/setactive-with-slug/.next/types/package.json @@ -0,0 +1 @@ +{"type": "module"} \ No newline at end of file diff --git a/examples/setactive-with-slug/src/app/layout.tsx b/examples/setactive-with-slug/src/app/layout.tsx deleted file mode 100644 index 31e83db..0000000 --- a/examples/setactive-with-slug/src/app/layout.tsx +++ /dev/null @@ -1,125 +0,0 @@ -import type { Metadata } from "next"; -import { Button } from "@/components/ui/button"; -import { Inter } from "next/font/google"; -import "./globals.css"; -import Link from "next/link"; -import { - ClerkProvider, - OrganizationSwitcher, - SignInButton, - SignedIn, - SignedOut, - UserButton, -} from "@clerk/nextjs"; - -const inter = Inter({ subsets: ["latin"] }); - -export const metadata: Metadata = { - title: "Clerk Orgs: Set Active via URL", - description: "", -}; - -export default function RootLayout({ - children, -}: Readonly<{ - children: React.ReactNode; -}>) { - return ( - - - -
-
-
-
-
- -
-
- -
-
-
-
-
- - Home - -
-

Dashboard

-
-
- -
-
-
- {children} -
-
-
-
-
-
- Orgs: {""} -
- - - - - - - - - -
-
-
-
- {children} -
-
-
- - -
- ); -} diff --git a/examples/setactive-with-slug/src/app/page.tsx b/examples/setactive-with-slug/src/app/page.tsx deleted file mode 100644 index cfca4de..0000000 --- a/examples/setactive-with-slug/src/app/page.tsx +++ /dev/null @@ -1,3 +0,0 @@ -export default function Home() { - return

You are signed in

; -} diff --git a/examples/setactive-with-slug/.env.local.example b/examples/sync-org-with-url/.env.local.example similarity index 100% rename from examples/setactive-with-slug/.env.local.example rename to examples/sync-org-with-url/.env.local.example diff --git a/examples/setactive-with-slug/.eslintrc.json b/examples/sync-org-with-url/.eslintrc.json similarity index 100% rename from examples/setactive-with-slug/.eslintrc.json rename to examples/sync-org-with-url/.eslintrc.json diff --git a/examples/setactive-with-slug/.gitignore b/examples/sync-org-with-url/.gitignore similarity index 100% rename from examples/setactive-with-slug/.gitignore rename to examples/sync-org-with-url/.gitignore diff --git a/examples/setactive-with-slug/README.md b/examples/sync-org-with-url/README.md similarity index 93% rename from examples/setactive-with-slug/README.md rename to examples/sync-org-with-url/README.md index 24982f9..9dbfad8 100644 --- a/examples/setactive-with-slug/README.md +++ b/examples/sync-org-with-url/README.md @@ -1,4 +1,4 @@ -# templates: default +# templates: sync-org-with-url This is a base template to bootstrap a new orgs example diff --git a/examples/setactive-with-slug/components.json b/examples/sync-org-with-url/components.json similarity index 100% rename from examples/setactive-with-slug/components.json rename to examples/sync-org-with-url/components.json diff --git a/examples/setactive-with-slug/next.config.mjs b/examples/sync-org-with-url/next.config.mjs similarity index 100% rename from examples/setactive-with-slug/next.config.mjs rename to examples/sync-org-with-url/next.config.mjs diff --git a/examples/setactive-with-slug/package-lock.json b/examples/sync-org-with-url/package-lock.json similarity index 99% rename from examples/setactive-with-slug/package-lock.json rename to examples/sync-org-with-url/package-lock.json index c81e3da..c10a156 100644 --- a/examples/setactive-with-slug/package-lock.json +++ b/examples/sync-org-with-url/package-lock.json @@ -8,7 +8,7 @@ "name": "my-app", "version": "0.1.0", "dependencies": { - "@clerk/nextjs": "^5.2.8", + "@clerk/nextjs": "5.2.9", "@radix-ui/react-slot": "^1.1.0", "class-variance-authority": "^0.7.0", "clsx": "^2.1.1", @@ -42,12 +42,12 @@ } }, "node_modules/@clerk/backend": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/@clerk/backend/-/backend-1.4.3.tgz", - "integrity": "sha512-wj4qsZO6iNiY9vF7vLH5v1f3oLh1yCLgFa0PedLzJAIJgepZl23C1/ubrRm7vyewjQEMHZwod4816mZlHDfoqA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@clerk/backend/-/backend-1.5.0.tgz", + "integrity": "sha512-uJUcA4oIDfTkjhjcjnlnarjuLXp5rVvtXB1/HtFKLXfvm8SveH5D3w97IeiUDNMvggxBo1Q/faBDBjEJxTV9Cw==", "dependencies": { - "@clerk/shared": "2.4.1", - "@clerk/types": "4.9.1", + "@clerk/shared": "2.4.2", + "@clerk/types": "4.10.0", "cookie": "0.5.0", "snakecase-keys": "5.4.4", "tslib": "2.4.1" @@ -62,12 +62,12 @@ "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" }, "node_modules/@clerk/clerk-react": { - "version": "5.2.10", - "resolved": "https://registry.npmjs.org/@clerk/clerk-react/-/clerk-react-5.2.10.tgz", - "integrity": "sha512-qJZ79aiB80cUuqccKqhk6QImGIji4y1bjK1xbGnqiAthtMegxFShLJwEsrF7nl0Rw5yM9cphiwETEqBWfIPL4Q==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@clerk/clerk-react/-/clerk-react-5.3.0.tgz", + "integrity": "sha512-sKJrIHwkfeemSolI4pU+jwNFYFG+HfwZ+Anx1JvnvlLDELUrsQMFCVOKCE7TOEs+Y/9loEK7xFdanzvxL+uasA==", "dependencies": { - "@clerk/shared": "2.4.1", - "@clerk/types": "4.9.1", + "@clerk/shared": "2.4.2", + "@clerk/types": "4.10.0", "tslib": "2.4.1" }, "engines": { @@ -84,14 +84,14 @@ "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" }, "node_modules/@clerk/nextjs": { - "version": "5.2.8", - "resolved": "https://registry.npmjs.org/@clerk/nextjs/-/nextjs-5.2.8.tgz", - "integrity": "sha512-dy4K1e2ygWBsDjnLmQKtoeRpoToCNFRXMu6GN4VesE9/mOYNXKiyJE2/DY6lGV3oR2f8Qr9YjcXzphRnf1d/OQ==", - "dependencies": { - "@clerk/backend": "1.4.3", - "@clerk/clerk-react": "5.2.10", - "@clerk/shared": "2.4.1", - "@clerk/types": "4.9.1", + "version": "5.2.9", + "resolved": "https://registry.npmjs.org/@clerk/nextjs/-/nextjs-5.2.9.tgz", + "integrity": "sha512-7RKF5Pnv80n58niDS+8Fkn03HTm4/zkceplQh2fN0bjH8WDwRXxB/YWtgC1IFLbZ0PeiHzo1nVRguTSuUqo1+Q==", + "dependencies": { + "@clerk/backend": "1.5.0", + "@clerk/clerk-react": "5.3.0", + "@clerk/shared": "2.4.2", + "@clerk/types": "4.10.0", "crypto-js": "4.2.0", "path-to-regexp": "6.2.2", "server-only": "0.0.1", @@ -112,12 +112,12 @@ "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" }, "node_modules/@clerk/shared": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@clerk/shared/-/shared-2.4.1.tgz", - "integrity": "sha512-sApuz6hDRIai4Jwo/fBcihX74+DdrKLt08LkEVrooh/7zc0ipDOSGlqmAy15yNuKPaxpemp/9nW4T8gq6uIr9Q==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@clerk/shared/-/shared-2.4.2.tgz", + "integrity": "sha512-8AZg7Qus7nGBwhbdJINV1NR0vAbOYtv/m8C9VdASHW/DzamNJvyf9d61E1DLZGTTjQw/Fja9zolq9CcWT5d6NA==", "hasInstallScript": true, "dependencies": { - "@clerk/types": "4.9.1", + "@clerk/types": "4.10.0", "glob-to-regexp": "0.4.1", "js-cookie": "3.0.5", "std-env": "^3.7.0", @@ -140,9 +140,9 @@ } }, "node_modules/@clerk/types": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@clerk/types/-/types-4.9.1.tgz", - "integrity": "sha512-fCmqzPBFh0rH9TlUVPpvPW225DtGJDuCv5GecwuuzD8hcgwGetTfRSDRNl5Dub5aJuqYWGQQCCnKfnfCrhZvrA==", + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@clerk/types/-/types-4.10.0.tgz", + "integrity": "sha512-Yy4m+aCrvVHT8BVNGDi40hcSUTwMf5o+cBHhAQQTofzCikc+DRI6yL7aYT6nf2YJ5gfm7WdeUwPM8Zz08TDzNA==", "dependencies": { "csstype": "3.1.1" }, diff --git a/examples/setactive-with-slug/package.json b/examples/sync-org-with-url/package.json similarity index 91% rename from examples/setactive-with-slug/package.json rename to examples/sync-org-with-url/package.json index f7b7645..192042c 100644 --- a/examples/setactive-with-slug/package.json +++ b/examples/sync-org-with-url/package.json @@ -9,7 +9,7 @@ "lint": "next lint" }, "dependencies": { - "@clerk/nextjs": "^5.2.8", + "@clerk/nextjs": "5.2.9", "@radix-ui/react-slot": "^1.1.0", "class-variance-authority": "^0.7.0", "clsx": "^2.1.1", @@ -29,5 +29,6 @@ "postcss": "^8", "tailwindcss": "^3.4.1", "typescript": "^5" - } + }, + "packageManager": "pnpm@6.32.4" } diff --git a/examples/setactive-with-slug/postcss.config.mjs b/examples/sync-org-with-url/postcss.config.mjs similarity index 100% rename from examples/setactive-with-slug/postcss.config.mjs rename to examples/sync-org-with-url/postcss.config.mjs diff --git a/examples/setactive-with-slug/public/.gitkeep b/examples/sync-org-with-url/public/.gitkeep similarity index 100% rename from examples/setactive-with-slug/public/.gitkeep rename to examples/sync-org-with-url/public/.gitkeep diff --git a/examples/setactive-with-slug/src/app/globals.css b/examples/sync-org-with-url/src/app/globals.css similarity index 100% rename from examples/setactive-with-slug/src/app/globals.css rename to examples/sync-org-with-url/src/app/globals.css diff --git a/examples/sync-org-with-url/src/app/layout.tsx b/examples/sync-org-with-url/src/app/layout.tsx new file mode 100644 index 0000000..45f7f58 --- /dev/null +++ b/examples/sync-org-with-url/src/app/layout.tsx @@ -0,0 +1,40 @@ +import type { Metadata } from "next"; +import { Button } from "@/components/ui/button"; +import { Inter } from "next/font/google"; +import "./globals.css"; +import Link from "next/link"; +import { + ClerkProvider, + OrganizationSwitcher, + SignInButton, + SignedIn, + SignedOut, + UserButton, +} from "@clerk/nextjs"; +import {OrganizationSync} from "@/app/utils/organization-sync"; + +const inter = Inter({ subsets: ["latin"] }); + +export const metadata: Metadata = { + title: "Clerk Orgs: Set Active via URL", + description: "", +}; + +export default function RootLayout({ + children, +}: Readonly<{ + children: React.ReactNode; +}>) { + return ( + // + + + +
+ {children} +
+ + +
+ ); +} diff --git a/examples/sync-org-with-url/src/app/orgs/[orgSlug]/layout.tsx b/examples/sync-org-with-url/src/app/orgs/[orgSlug]/layout.tsx new file mode 100644 index 0000000..385aed0 --- /dev/null +++ b/examples/sync-org-with-url/src/app/orgs/[orgSlug]/layout.tsx @@ -0,0 +1,131 @@ +'use client'; + +import { Button } from "@/components/ui/button"; +import { Inter } from "next/font/google"; +import "../../globals.css"; +import Link from "next/link"; +import { + OrganizationSwitcher, + SignInButton, + SignedIn, + SignedOut, + UserButton, useAuth, +} from "@clerk/nextjs"; +import {OrganizationSync} from "@/app/utils/organization-sync"; +import {useParams, usePathname} from "next/navigation"; + +const inter = Inter({ subsets: ["latin"] }); + +export default function Layout({ + children, + params, +}: Readonly<{ + children: React.ReactNode; + params: { orgSlug: string }; +}>) { + + const pathname = usePathname(); + const { orgSlug } = useAuth(); + return ( +
+ +
+
+
+
+ +
+
+ +
+
+
+
+
+ + Home + +
+

Dashboard

+
+
+ +
+
+
+ {children} +
+
+
+
+
+
+ Orgs: {""} +
+ + + + + + + + + +
+
+
+
+ {children} +
+
+
+ +
+ ); +} diff --git a/examples/sync-org-with-url/src/app/orgs/[orgSlug]/page.tsx b/examples/sync-org-with-url/src/app/orgs/[orgSlug]/page.tsx new file mode 100644 index 0000000..556aabc --- /dev/null +++ b/examples/sync-org-with-url/src/app/orgs/[orgSlug]/page.tsx @@ -0,0 +1,33 @@ +import { auth } from '@clerk/nextjs/server'; + +export default function Home({params}):{ + params: { slug: string } +} { + const {orgSlug} = auth(); + + // console.log("I'm the server and I got this slug: ", orgSlug); + + return ( + <> + +

From auth(), I know your org slug is: {orgSlug}

+
+ + ) +} + +export function SSRSyncActiveOrganizationFromUrlToSession( + { children, orgSlug }: { children: React.ReactNode, orgSlug: string } +): React.ReactElement | null { + const sessionAuth = auth(); + if (sessionAuth.orgSlug != orgSlug) { + console.log("Mismatch - returning nothing for now...", sessionAuth.orgSlug, orgSlug) + return null + } + + return( + <> + {children} + + ) +} \ No newline at end of file diff --git a/examples/sync-org-with-url/src/app/orgs/[orgSlug]/settings/[[...rest]]/page.tsx b/examples/sync-org-with-url/src/app/orgs/[orgSlug]/settings/[[...rest]]/page.tsx new file mode 100644 index 0000000..4cd9f0c --- /dev/null +++ b/examples/sync-org-with-url/src/app/orgs/[orgSlug]/settings/[[...rest]]/page.tsx @@ -0,0 +1,10 @@ +"use client"; + +import {OrganizationProfile, useAuth} from "@clerk/nextjs"; + +export default function Home() { + const {orgSlug} = useAuth() + return <> + + +} \ No newline at end of file diff --git a/examples/sync-org-with-url/src/app/page.tsx b/examples/sync-org-with-url/src/app/page.tsx new file mode 100644 index 0000000..7fc088e --- /dev/null +++ b/examples/sync-org-with-url/src/app/page.tsx @@ -0,0 +1,46 @@ +"use client"; + +import {OrganizationList, useOrganizationList} from "@clerk/nextjs"; +import Link from "next/link"; + +export default function Home() { + return ( +
+

There's not much you can do in this app outside of an organization.

+

Select an organization to continue:

+ +
+ ) +} + +function OrgPicker() { + const {isLoaded, userMemberships} = useOrganizationList( + { + userMemberships: { + memberships: { + pageSize: 100, // TODO(izaak): Brittle - figure out pagination + keepPreviousData: true, + }, + } + } + ); + + if (!isLoaded) { + return <>Loading...; + } + + return ( +
+ {userMemberships?.data?.map((mem) => ( + + {mem.organization.name} + + ))} +
+ ) +} diff --git a/examples/sync-org-with-url/src/app/utils/organization-sync.tsx b/examples/sync-org-with-url/src/app/utils/organization-sync.tsx new file mode 100644 index 0000000..9d90401 --- /dev/null +++ b/examples/sync-org-with-url/src/app/utils/organization-sync.tsx @@ -0,0 +1,61 @@ +"use client" + +import {useEffect, useLayoutEffect, useState} from "react" +import {useParams} from "next/navigation" +import {OrganizationList, useAuth, useOrganizationList, useUser} from "@clerk/nextjs" + + + +export function OrganizationSync( + { children, pathnameSlug }: { children: React.ReactNode, pathnameSlug: string } +): React.ReactElement | null { + const { setActive, isLoaded } = useOrganizationList(); + + // Get the organization slug from the session + const {orgSlug} = useAuth(); + + const {user} = useUser() + + // Get the organization slug from the URL + + const [isMember, setIsMember] = useState(false); + + useLayoutEffect(() => { + if (!isLoaded) return; + + if (pathnameSlug) { + const reallyIsMember = user?.organizationMemberships?.some((mem) => + mem.organization.slug === pathnameSlug + ) + setIsMember(reallyIsMember || false); + } + + // If the org slug in the URL is not the same as the org slug in the session (the active organization), + // set the active organization to be the org from the URL. + if (pathnameSlug !== orgSlug) { + void setActive({ + organization: pathnameSlug + }); + } + }, [orgSlug, isLoaded, setActive, pathnameSlug]) + + if (pathnameSlug !== orgSlug) { + return null + } + + return ( + <> + {pathnameSlug && !isMember && +
+ +
+ } + {children} + + ) +} \ No newline at end of file diff --git a/examples/setactive-with-slug/src/components/ui/button.tsx b/examples/sync-org-with-url/src/components/ui/button.tsx similarity index 100% rename from examples/setactive-with-slug/src/components/ui/button.tsx rename to examples/sync-org-with-url/src/components/ui/button.tsx diff --git a/examples/setactive-with-slug/src/lib/utils.ts b/examples/sync-org-with-url/src/lib/utils.ts similarity index 100% rename from examples/setactive-with-slug/src/lib/utils.ts rename to examples/sync-org-with-url/src/lib/utils.ts diff --git a/examples/setactive-with-slug/src/middleware.ts b/examples/sync-org-with-url/src/middleware.ts similarity index 85% rename from examples/setactive-with-slug/src/middleware.ts rename to examples/sync-org-with-url/src/middleware.ts index 9090da2..37cecb7 100644 --- a/examples/setactive-with-slug/src/middleware.ts +++ b/examples/sync-org-with-url/src/middleware.ts @@ -1,9 +1,12 @@ import { clerkMiddleware, createRouteMatcher } from "@clerk/nextjs/server"; const isProtectedRoute = createRouteMatcher(["(.*)"]); +const isOrgSlugPrefix = createRouteMatcher(["/orgs/"]); export default clerkMiddleware((auth, req) => { if (isProtectedRoute(req)) auth().protect(); +}, { + orgSlugPrefix: isOrgSlugPrefix, }); export const config = { diff --git a/examples/setactive-with-slug/tailwind.config.ts b/examples/sync-org-with-url/tailwind.config.ts similarity index 100% rename from examples/setactive-with-slug/tailwind.config.ts rename to examples/sync-org-with-url/tailwind.config.ts diff --git a/examples/setactive-with-slug/tsconfig.json b/examples/sync-org-with-url/tsconfig.json similarity index 100% rename from examples/setactive-with-slug/tsconfig.json rename to examples/sync-org-with-url/tsconfig.json