From 43263af423f3db769119e1ab8d192d3ad53346c4 Mon Sep 17 00:00:00 2001 From: steve-chavez Date: Thu, 20 Apr 2023 18:44:29 -0500 Subject: [PATCH 001/909] blog post for PostgREST v11 --- apps/www/_blog/2023-04-20-postgrest-11.mdx | 223 +++++++++++++++++++++ 1 file changed, 223 insertions(+) create mode 100644 apps/www/_blog/2023-04-20-postgrest-11.mdx diff --git a/apps/www/_blog/2023-04-20-postgrest-11.mdx b/apps/www/_blog/2023-04-20-postgrest-11.mdx new file mode 100644 index 00000000000..27eb84930c7 --- /dev/null +++ b/apps/www/_blog/2023-04-20-postgrest-11.mdx @@ -0,0 +1,223 @@ +--- +title: 'PostgREST v11: configurable role settings, isolation level and more' +description: 'PostgREST v11 new features' +author: steve_chavez +image: lw6-community/postgrest.png +thumb: lw6-community/postgrest.png +tags: + - postgres + - rest + - isolation level + - transactions + - roles + - planetpg +date: '2023-04-20' +toc_depth: 3 +--- + +PostgREST 11 was just released. In addition to the [pre-release](https://supabase.com/blog/postgrest-11-prerelease) features, we’ve added security, configuration and querying improvements. + +## Configurable Role Settings + +Role settings are now applied on every request, you can set these with a regular `ALTER ROLE SET `. This is useful, for example, to prevent web users from running expensive queries. + +Let’s try it by setting a statement timeout and cost limit. + +### Statement timeout + +`statement_timeout` aborts any statement that takes more than the specified amount of time. Let’s set it for the usual `anon`, `authenticated` and `service_role` roles: + +```sql +-- anon users can only run queries that take 100 milliseconds max +alter role anon set statement_timeout = '100ms'; + +-- authenticated users can only run queries that take 5 seconds max +alter role authenticated set statement_timeout = '5s'; + +-- service_role users can only run queries that take 15 seconds max +alter role service_role set statement_timeout = '15s'; +``` + +You need to reload PostgREST config cache to apply these changes. + +```sql +NOTIFY pgrst, 'reload config'; +``` + +Now, suppose you have a big table and you apply a filter on an unindexed column: + +```jsx +const { data, error } = await supabase + .from('big_table') + .select() + .eq('unindexed_column', 'value') +``` + +Then, after 5 seconds, the request will be aborted and the response will be: + +```json +{ + "hint": null, + "details": null, + "code": "57014", + "message": "canceling statement due to statement timeout" +} +``` + +### Statement cost limit + +With `statement_timeout`, queries will still run for that length of time, consuming resources until they’re terminated. To prevent this, you can abort queries based on their plan cost — this is determined at the planning phase, before they get executed. + +```sql +-- anon users can only run cheap queries +ALTER USER anon SET plan_filter.statement_cost_limit = 10000; + +-- authenticated users can run more expensive queries +ALTER USER authenticated SET plan_filter.statement_cost_limit = 1e6; + +-- service_role can run any query +ALTER USER service_role SET plan_filter.statement_cost_limit = 0; + +NOTIFY pgrst, 'reload config'; -- reload postgREST config cache to apply changes +``` + +Let’s repeat the previous example. + +```jsx +const { data, error } = await supabase + .from('big_table') + .select() + .eq('unindexed_column', 'value') +``` + +Then, immediately, the request will be aborted and the response will be: + +```jsx +{ + "hint": null, + "details": null, + "code": "54001", + "message": "plan cost limit exceeded" +} +``` + +This uses the [pg_plan_filter](https://github.com/pgexperts/pg_plan_filter) extension(available on the Supabase platform) and requires tuning to get the cost limit right. You should use this with care as it can invalidate legitimate queries. + +## Configurable transaction isolation level + +By default, all queries in PostgREST run in a transaction with the default *Read Committed* isolation level. + +```sql +BEGIN ISOLATION LEVEL READ COMMITTED; +-- +COMMIT; +``` + +Now you can change this by settting `default_transaction_isolation`. + +You can do it per-function: + +```sql +create function hello() +returns text as $$ + select 'hello'; +$$ language sql +set default_transaction_isolation = 'repeatable read'; +``` + +Or per-role, which will affect all queries ran by that role: + +```sql +alter role service_role set default_transaction_isolation = 'serializable'; +NOTIFY pgrst, 'reload config'; -- reload postgREST config cache +``` + +Trying out the function above. + +```jsx +const { data, error } = await supabase + .rpc('hello') +``` + +Will result in PostgREST running the query with the *Repeatable Read* isolation level: + +```sql +BEGIN ISOLATION LEVEL REPEATABLE READ; +-- SELECT hello(); +COMMIT; +``` + +Note that the default *Read Committed* is good enough for almost all use cases. Using higher isolation levels will incur in overhead as they use more sophisticated locking. + +## Bulk insert JSON with default values + +A long wanted feature was bulk inserting JSON while considering columns' default values. + +Having the following sample table. + +```sql +create table foo +( id bigint generated by default as identity primary key +, bar text +, baz int default 100 +); +``` + +You can now do it like this: + +```jsx +const { error } = await supabase + .from('foo') + .insert([ + { "bar": "val1" + } + , { "bar": "val2" + , "baz": 15 + } + ], defaultToNull: false) + .select() +``` + +And the respone will be: + +```json +[ + { "id": 1 + , "bar": "val1" + , "baz": 100 + } +, { "id": 2 + , "bar": "val2" + , "baz": 15 + } +] +``` + +As you can see, `id` and `baz` took their default values. + +## ANY/ALL filter modifiers + +To avoid unwieldy `OR` filters, you can now use `any` modifiers on various filters. Take the `like` filter as an example: + +```jsx +const res = await postgrest + .from('users') + .select() + .likeAnyOf('username', ['%supa%', '%kiwi%']) +``` + +This is equivalent to the following in SQL. + +```sql +SELECT * FROM users WHERE username like any('{%supa%,%kiwi%}'); +``` + +`any` modifiers are available for the `eq,like,ilike,gt,gte,lt,lte,match,imatch` filters. + +For completeness, the `all` modifier is also added. + +## Closing up + +There you have it, now you can make your API more secure with role settings and use higher isolation levels without resorting to direct PostgreSQL connections. + +PostgREST v11 is being rolled on the Supabase platform, it will be available for new projects on the coming week. From 9488391a318dfb724ea6b5aba4a78ee050c919ab Mon Sep 17 00:00:00 2001 From: steve-chavez Date: Fri, 21 Apr 2023 11:55:36 -0500 Subject: [PATCH 002/909] improve wording for OR queries --- apps/www/_blog/2023-04-20-postgrest-11.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/www/_blog/2023-04-20-postgrest-11.mdx b/apps/www/_blog/2023-04-20-postgrest-11.mdx index 27eb84930c7..7b42dee7de2 100644 --- a/apps/www/_blog/2023-04-20-postgrest-11.mdx +++ b/apps/www/_blog/2023-04-20-postgrest-11.mdx @@ -197,7 +197,7 @@ As you can see, `id` and `baz` took their default values. ## ANY/ALL filter modifiers -To avoid unwieldy `OR` filters, you can now use `any` modifiers on various filters. Take the `like` filter as an example: +As a shortcut to `OR` filters, you can now use `any` modifiers on various filters. Take the `like` filter as an example: ```jsx const res = await postgrest @@ -209,7 +209,7 @@ const res = await postgrest This is equivalent to the following in SQL. ```sql -SELECT * FROM users WHERE username like any('{%supa%,%kiwi%}'); +SELECT * FROM users WHERE username LIKE ANY('{%supa%,%kiwi%}'); ``` `any` modifiers are available for the `eq,like,ilike,gt,gte,lt,lte,match,imatch` filters. From d90cc4f4c7a19aab3d9fbfc0ee277d6e17a08345 Mon Sep 17 00:00:00 2001 From: steve-chavez Date: Fri, 21 Apr 2023 14:22:16 -0500 Subject: [PATCH 003/909] improve wording --- apps/www/_blog/2023-04-20-postgrest-11.mdx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/www/_blog/2023-04-20-postgrest-11.mdx b/apps/www/_blog/2023-04-20-postgrest-11.mdx index 7b42dee7de2..6ffe0944a01 100644 --- a/apps/www/_blog/2023-04-20-postgrest-11.mdx +++ b/apps/www/_blog/2023-04-20-postgrest-11.mdx @@ -44,7 +44,7 @@ You need to reload PostgREST config cache to apply these changes. NOTIFY pgrst, 'reload config'; ``` -Now, suppose you have a big table and you apply a filter on an unindexed column: +Now, suppose you do an expensive query, by having a big table and a filter on an unindexed column(this will cause a full table scan): ```jsx const { data, error } = await supabase @@ -81,7 +81,7 @@ ALTER USER service_role SET plan_filter.statement_cost_limit = 0; NOTIFY pgrst, 'reload config'; -- reload postgREST config cache to apply changes ``` -Let’s repeat the previous example. +Let’s repeat the previous expensive query. ```jsx const { data, error } = await supabase @@ -178,7 +178,7 @@ const { error } = await supabase .select() ``` -And the respone will be: +And the response will be: ```json [ @@ -214,7 +214,7 @@ SELECT * FROM users WHERE username LIKE ANY('{%supa%,%kiwi%}'); `any` modifiers are available for the `eq,like,ilike,gt,gte,lt,lte,match,imatch` filters. -For completeness, the `all` modifier is also added. +For completeness, the `all` modifier is also included. ## Closing up From 5027727232adeacc98b8aa7b71c42360b354aadc Mon Sep 17 00:00:00 2001 From: steve-chavez Date: Mon, 24 Apr 2023 12:33:21 -0500 Subject: [PATCH 004/909] clarify --- apps/www/_blog/2023-04-20-postgrest-11.mdx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/www/_blog/2023-04-20-postgrest-11.mdx b/apps/www/_blog/2023-04-20-postgrest-11.mdx index 6ffe0944a01..50bebccfa02 100644 --- a/apps/www/_blog/2023-04-20-postgrest-11.mdx +++ b/apps/www/_blog/2023-04-20-postgrest-11.mdx @@ -28,13 +28,13 @@ Let’s try it by setting a statement timeout and cost limit. `statement_timeout` aborts any statement that takes more than the specified amount of time. Let’s set it for the usual `anon`, `authenticated` and `service_role` roles: ```sql --- anon users can only run queries that take 100 milliseconds max +-- anonymous users can only run queries that take 100 milliseconds max alter role anon set statement_timeout = '100ms'; -- authenticated users can only run queries that take 5 seconds max alter role authenticated set statement_timeout = '5s'; --- service_role users can only run queries that take 15 seconds max +-- backend-only users can only run queries that take 15 seconds max alter role service_role set statement_timeout = '15s'; ``` @@ -69,13 +69,13 @@ Then, after 5 seconds, the request will be aborted and the response will be: With `statement_timeout`, queries will still run for that length of time, consuming resources until they’re terminated. To prevent this, you can abort queries based on their plan cost — this is determined at the planning phase, before they get executed. ```sql --- anon users can only run cheap queries +-- anonymous users can only run cheap queries ALTER USER anon SET plan_filter.statement_cost_limit = 10000; -- authenticated users can run more expensive queries ALTER USER authenticated SET plan_filter.statement_cost_limit = 1e6; --- service_role can run any query +-- backend-only users can run any query ALTER USER service_role SET plan_filter.statement_cost_limit = 0; NOTIFY pgrst, 'reload config'; -- reload postgREST config cache to apply changes @@ -109,7 +109,7 @@ By default, all queries in PostgREST run in a transaction with the default *Read ```sql BEGIN ISOLATION LEVEL READ COMMITTED; --- +-- COMMIT; ``` From 27c8f9bfaee42b990e66d5de206f1bf90cc2beda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ramiro=20Nu=C3=B1ez=20Dosio?= Date: Wed, 3 May 2023 14:38:25 +0100 Subject: [PATCH 005/909] Update date. --- ...st-11.mdx => 2023-05-03-postgrest-11-release.mdx} | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) rename apps/www/_blog/{2023-04-20-postgrest-11.mdx => 2023-05-03-postgrest-11-release.mdx} (87%) diff --git a/apps/www/_blog/2023-04-20-postgrest-11.mdx b/apps/www/_blog/2023-05-03-postgrest-11-release.mdx similarity index 87% rename from apps/www/_blog/2023-04-20-postgrest-11.mdx rename to apps/www/_blog/2023-05-03-postgrest-11-release.mdx index 50bebccfa02..c09012c3cc9 100644 --- a/apps/www/_blog/2023-04-20-postgrest-11.mdx +++ b/apps/www/_blog/2023-05-03-postgrest-11-release.mdx @@ -11,11 +11,11 @@ tags: - transactions - roles - planetpg -date: '2023-04-20' +date: '2023-05-03' toc_depth: 3 --- -PostgREST 11 was just released. In addition to the [pre-release](https://supabase.com/blog/postgrest-11-prerelease) features, we’ve added security, configuration and querying improvements. +PostgREST 11 is now fully released! In addition to the [pre-release](https://supabase.com/blog/postgrest-11-prerelease) features, we’ve added security, configuration, and querying improvements. Here is what's new: ## Configurable Role Settings @@ -221,3 +221,11 @@ For completeness, the `all` modifier is also included. There you have it, now you can make your API more secure with role settings and use higher isolation levels without resorting to direct PostgreSQL connections. PostgREST v11 is being rolled on the Supabase platform, it will be available for new projects on the coming week. + +## More Postgres resources + +- [Storing OpenAI embeddings in Postgres with pgvector](https://supabase.com/blog/openai-embeddings-postgres-vector) +- [Choosing a Postgres Primary Key](https://supabase.com/blog/choosing-a-postgres-primary-key) +- [SQL or NoSQL? Why not use both (with PostgreSQL)?](https://supabase.com/blog/sql-or-nosql-both-with-postgresql) +- [pg_jsonschema: JSON Schema support for Postgres](https://supabase.com/blog/pg-jsonschema-a-postgres-extension-for-json-validation) +- [Implementing "seen by" functionality with Postgres](https://supabase.com/blog/seen-by-in-postgresql) From 0067e1ac3f991aa2f6e7d17ede876fee1fc6363b Mon Sep 17 00:00:00 2001 From: hwr12 Date: Thu, 11 May 2023 18:52:38 +0900 Subject: [PATCH 006/909] added Kakao Auth docs --- .../NavigationMenu.constants.ts | 5 + apps/docs/data/authProviders.ts | 10 ++ apps/docs/pages/guides/auth.mdx | 1 - .../guides/auth/social-login/auth-kakao.mdx | 88 ++++++++++++++++++ .../auth-kakao/kakao-developers-page.png | Bin 0 -> 469724 bytes apps/docs/public/img/icons/kakao-icon.svg | 1 + package-lock.json | 2 +- 7 files changed, 105 insertions(+), 2 deletions(-) create mode 100644 apps/docs/pages/guides/auth/social-login/auth-kakao.mdx create mode 100644 apps/docs/public/img/guides/auth-kakao/kakao-developers-page.png create mode 100644 apps/docs/public/img/icons/kakao-icon.svg diff --git a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts b/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts index 840c07ac2a0..45fc485898a 100644 --- a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts +++ b/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts @@ -391,6 +391,11 @@ export const SocialLoginItems = [ icon: '/docs/img/icons/zoom-icon', url: '/guides/auth/social-login/auth-zoom', }, + { + name: 'Kakao', + icon: '/docs/img/icons/kakao-icon', + url: '/guides/auth/social-login/auth-kakao', + }, ] export const PhoneLoginsItems = [ diff --git a/apps/docs/data/authProviders.ts b/apps/docs/data/authProviders.ts index ea5855061bd..483bee4b837 100644 --- a/apps/docs/data/authProviders.ts +++ b/apps/docs/data/authProviders.ts @@ -79,6 +79,16 @@ const authProviders = [ selfHosted: true, authType: 'social', }, + { + name: 'Kakao', + logo: '/docs/img/icons/kakao-icon', + href: '/guides/auth/social-login/auth-kakao', + official: true, + supporter: 'Supabase', + platform: true, + selfHosted: true, + authType: 'social', + }, { name: 'Keycloak', logo: '/docs/img/icons/keycloak-icon', diff --git a/apps/docs/pages/guides/auth.mdx b/apps/docs/pages/guides/auth.mdx index 2e6760545b4..b379d55ba90 100644 --- a/apps/docs/pages/guides/auth.mdx +++ b/apps/docs/pages/guides/auth.mdx @@ -1,6 +1,5 @@ import Layout from '~/layouts/DefaultGuideLayout' -import { useRouter } from 'next/router' export const meta = { id: 'auth', diff --git a/apps/docs/pages/guides/auth/social-login/auth-kakao.mdx b/apps/docs/pages/guides/auth/social-login/auth-kakao.mdx new file mode 100644 index 00000000000..e7a8d14324f --- /dev/null +++ b/apps/docs/pages/guides/auth/social-login/auth-kakao.mdx @@ -0,0 +1,88 @@ +import Layout from '~/layouts/DefaultGuideLayout' + +export const meta = { + id: 'auth-kakao', + title: 'Login with Kakao', + description: 'Add Kakao OAuth to your Supabase project', +} + +To enable Kakao Auth for your project, you need to set up an Kakao OAuth application and add the application credentials to your Supabase Dashboard. + +## Overview + +Kakao OAuth consists of six broad steps: + +- Create and configure your app in the [Kakao Developer Portal](https://developers.kakao.com). +- Obtaining a `REST API key` - this will serve as the `client_id`. +- Generating the `client_secret` using the `Client secret code`. +- Add your `client id` and `client secret` keys to your [Supabase Project](https://app.supabase.com). +- Add the login code to your [Supabase JS Client App](https://github.com/supabase/supabase-js). + +## Access your Kakao Developer account + +- Go to [Kakao Developers Portal](https://developers.kakao.com). +- Click on `Login` at the top right to log in. + +![Kakao Developers Portal.](/docs/img/guides/auth-kakao/kakao-developers-page.png) + +## Create and configure your app + +- Go to `My Application`. +- Click on `Add an application` at the top. +- Fill out your app information: + - App icon. + - App name. + - Company name. + - Click `Save` at the bottom right. + +## Obtain a REST API key + +This will serve as the `client_id` when you make API calls to authenticate the user. + +- Go to `My Application`. +- Click on your app that you have just created. +- You will be redirected to `Summary` tab of your app. +- In the `App Keys` section you will see `REST API key` -- this ID will become your `client_id` later. + +## Find your callback URL + + + +## Generate and activate a `client_secret` + +- Go to `Product settings` > `Kakao Login` > `Security`. +- Click on the `Kakao Login` switch to enable Kakao Login. +- Click on `generate code` at the bottom to generate the `Client secret code` -- this will serve as a `client_secret` for your supabase project. +- Make sure you enabled `Client sercet code` by selecting `enable` from the `Activation state` section. + +## Add your OAuth credentials to Supabase + + + +## Add login code to your client app + +When your user signs in, call [signInWithOAuth()](/docs/reference/javascript/auth-signinwithoauth) with `kakao` as the `provider`: + +```js +async function signInWithApple() { + const { data, error } = await supabase.auth.signInWithOAuth({ + provider: 'kakao', + }) +} +``` + +When your user signs out, call [signOut()](/docs/reference/javascript/auth-signout) to remove them from the browser session and any objects from localStorage: + +```js +async function signout() { + const { error } = await supabase.auth.signOut() +} +``` + +## Resources + +- [Kakao Developers Portal](https://developers.kakao.com). + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/public/img/guides/auth-kakao/kakao-developers-page.png b/apps/docs/public/img/guides/auth-kakao/kakao-developers-page.png new file mode 100644 index 0000000000000000000000000000000000000000..81d30550eb6875073ab0c4fb2b3db82b5189205f GIT binary patch literal 469724 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

Ng;h(drSGZ@y)1Z8&IC%tBSk%A&ggyq; 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

!6lfI?sd9dps?W4PK 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� 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 \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index d3c3ed3179d..955ac2ff1d5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -70213,4 +70213,4 @@ "integrity": "sha512-Bq0B+ixT/DMyG8kgX2xWcI5jUvCwqrMxSFam7m0lAf78nf04hv6lNCsyLYdyYTrCVMqNDY/206K7eExYCeSyUQ==" } } -} \ No newline at end of file +} From be76d34bfbc4baef7ab6b92d5f88ed632dd4edc1 Mon Sep 17 00:00:00 2001 From: hwr12 Date: Thu, 11 May 2023 18:54:39 +0900 Subject: [PATCH 007/909] undelete import statement --- apps/docs/pages/guides/auth.mdx | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/docs/pages/guides/auth.mdx b/apps/docs/pages/guides/auth.mdx index b379d55ba90..2e6760545b4 100644 --- a/apps/docs/pages/guides/auth.mdx +++ b/apps/docs/pages/guides/auth.mdx @@ -1,5 +1,6 @@ import Layout from '~/layouts/DefaultGuideLayout' +import { useRouter } from 'next/router' export const meta = { id: 'auth', From b93f6a76f8d8dd7505a324af0247ffca7283447f Mon Sep 17 00:00:00 2001 From: Hyeonwoo Rue <54504396+hwr12@users.noreply.github.com> Date: Fri, 12 May 2023 00:44:26 +0900 Subject: [PATCH 008/909] Update apps/docs/pages/guides/auth/social-login/auth-kakao.mdx Co-authored-by: Kang Ming --- apps/docs/pages/guides/auth/social-login/auth-kakao.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/docs/pages/guides/auth/social-login/auth-kakao.mdx b/apps/docs/pages/guides/auth/social-login/auth-kakao.mdx index e7a8d14324f..e564d5642d0 100644 --- a/apps/docs/pages/guides/auth/social-login/auth-kakao.mdx +++ b/apps/docs/pages/guides/auth/social-login/auth-kakao.mdx @@ -33,7 +33,7 @@ Kakao OAuth consists of six broad steps: - App icon. - App name. - Company name. - - Click `Save` at the bottom right. +- Click `Save` at the bottom right. ## Obtain a REST API key From 1b6bae7458eefa6f44451921020065c4a2b0f96e Mon Sep 17 00:00:00 2001 From: Hyeonwoo Rue <54504396+hwr12@users.noreply.github.com> Date: Fri, 12 May 2023 00:48:19 +0900 Subject: [PATCH 009/909] Update apps/docs/pages/guides/auth/social-login/auth-kakao.mdx Co-authored-by: Kang Ming --- apps/docs/pages/guides/auth/social-login/auth-kakao.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/docs/pages/guides/auth/social-login/auth-kakao.mdx b/apps/docs/pages/guides/auth/social-login/auth-kakao.mdx index e564d5642d0..6838f225da1 100644 --- a/apps/docs/pages/guides/auth/social-login/auth-kakao.mdx +++ b/apps/docs/pages/guides/auth/social-login/auth-kakao.mdx @@ -64,7 +64,7 @@ This will serve as the `client_id` when you make API calls to authenticate the u When your user signs in, call [signInWithOAuth()](/docs/reference/javascript/auth-signinwithoauth) with `kakao` as the `provider`: ```js -async function signInWithApple() { +async function signInWithKakao() { const { data, error } = await supabase.auth.signInWithOAuth({ provider: 'kakao', }) From 2b9d37485874bcc0071db39f8f52694870932f66 Mon Sep 17 00:00:00 2001 From: hwr12 Date: Fri, 12 May 2023 05:18:47 +0900 Subject: [PATCH 010/909] add additional configuration instruction and ensure the settings needed to be done --- .../guides/auth/social-login/auth-kakao.mdx | 7 +++++++ .../kakao-developers-consent-items-set.png | Bin 0 -> 319920 bytes 2 files changed, 7 insertions(+) create mode 100644 apps/docs/public/img/guides/auth-kakao/kakao-developers-consent-items-set.png diff --git a/apps/docs/pages/guides/auth/social-login/auth-kakao.mdx b/apps/docs/pages/guides/auth/social-login/auth-kakao.mdx index 6838f225da1..961edbd37d5 100644 --- a/apps/docs/pages/guides/auth/social-login/auth-kakao.mdx +++ b/apps/docs/pages/guides/auth/social-login/auth-kakao.mdx @@ -15,6 +15,7 @@ Kakao OAuth consists of six broad steps: - Create and configure your app in the [Kakao Developer Portal](https://developers.kakao.com). - Obtaining a `REST API key` - this will serve as the `client_id`. - Generating the `client_secret` using the `Client secret code`. +- Additional configurations on Kakao Developers Portal. - Add your `client id` and `client secret` keys to your [Supabase Project](https://app.supabase.com). - Add the login code to your [Supabase JS Client App](https://github.com/supabase/supabase-js). @@ -55,6 +56,12 @@ This will serve as the `client_id` when you make API calls to authenticate the u - Click on `generate code` at the bottom to generate the `Client secret code` -- this will serve as a `client_secret` for your supabase project. - Make sure you enabled `Client sercet code` by selecting `enable` from the `Activation state` section. +## Additional configurations on Kakao Developers Portal +- Make sure the Kakao Login is enabled in the `Kakao Login` tab. +- Set following scopes under the "Consent Items": account_email, profile_image, profile_nickname + +![Consent items needs to be set.](/docs/img/guides/auth-kakao/kakao-developers-consent-items-set.png) + ## Add your OAuth credentials to Supabase diff --git a/apps/docs/public/img/guides/auth-kakao/kakao-developers-consent-items-set.png b/apps/docs/public/img/guides/auth-kakao/kakao-developers-consent-items-set.png new file mode 100644 index 0000000000000000000000000000000000000000..b59c4616984345e7d1a681bb49a00127ac32ee4b GIT binary patch literal 319920 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 UTP43 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 z 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 literal 0 HcmV?d00001 From d0e5cb77f7defc5b900e8e799e3af63667dbf84a Mon Sep 17 00:00:00 2001 From: hwr12 Date: Fri, 12 May 2023 05:19:35 +0900 Subject: [PATCH 011/909] add callback URL instruction on Kakao developers portal --- apps/docs/pages/guides/auth/social-login/auth-kakao.mdx | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/docs/pages/guides/auth/social-login/auth-kakao.mdx b/apps/docs/pages/guides/auth/social-login/auth-kakao.mdx index 961edbd37d5..c6c2bd81956 100644 --- a/apps/docs/pages/guides/auth/social-login/auth-kakao.mdx +++ b/apps/docs/pages/guides/auth/social-login/auth-kakao.mdx @@ -48,6 +48,7 @@ This will serve as the `client_id` when you make API calls to authenticate the u ## Find your callback URL +- To add callback URL on Kakao, go to `Product settings` > `Kakao Login` > `Redirect URI`. ## Generate and activate a `client_secret` From dd63b598efd49a46e119d3331b868d772c1553b3 Mon Sep 17 00:00:00 2001 From: hwr12 Date: Fri, 12 May 2023 05:19:58 +0900 Subject: [PATCH 012/909] doc update --- apps/docs/pages/guides/auth/social-login/auth-kakao.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/docs/pages/guides/auth/social-login/auth-kakao.mdx b/apps/docs/pages/guides/auth/social-login/auth-kakao.mdx index c6c2bd81956..0e08c9f0eae 100644 --- a/apps/docs/pages/guides/auth/social-login/auth-kakao.mdx +++ b/apps/docs/pages/guides/auth/social-login/auth-kakao.mdx @@ -41,7 +41,7 @@ Kakao OAuth consists of six broad steps: This will serve as the `client_id` when you make API calls to authenticate the user. - Go to `My Application`. -- Click on your app that you have just created. +- Click on your app. - You will be redirected to `Summary` tab of your app. - In the `App Keys` section you will see `REST API key` -- this ID will become your `client_id` later. From 827d68bcdd7b7875b22a387b626b9153dae70304 Mon Sep 17 00:00:00 2001 From: hwr12 Date: Fri, 12 May 2023 13:28:28 +0900 Subject: [PATCH 013/909] reformat code with prettier --- apps/docs/pages/guides/auth/social-login/auth-kakao.mdx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/docs/pages/guides/auth/social-login/auth-kakao.mdx b/apps/docs/pages/guides/auth/social-login/auth-kakao.mdx index 0e08c9f0eae..d1c6206d452 100644 --- a/apps/docs/pages/guides/auth/social-login/auth-kakao.mdx +++ b/apps/docs/pages/guides/auth/social-login/auth-kakao.mdx @@ -47,8 +47,8 @@ This will serve as the `client_id` when you make API calls to authenticate the u ## Find your callback URL - -- To add callback URL on Kakao, go to `Product settings` > `Kakao Login` > `Redirect URI`. +- To add callback URL on Kakao, go to `Product settings` > `Kakao +Login` > `Redirect URI`. ## Generate and activate a `client_secret` @@ -58,6 +58,7 @@ This will serve as the `client_id` when you make API calls to authenticate the u - Make sure you enabled `Client sercet code` by selecting `enable` from the `Activation state` section. ## Additional configurations on Kakao Developers Portal + - Make sure the Kakao Login is enabled in the `Kakao Login` tab. - Set following scopes under the "Consent Items": account_email, profile_image, profile_nickname From a652aaf76506a2409fce755ec2e4817b45c15ca5 Mon Sep 17 00:00:00 2001 From: hwr12 Date: Fri, 12 May 2023 16:00:07 +0900 Subject: [PATCH 014/909] reformat code with prettier --- apps/docs/pages/guides/auth/social-login/auth-kakao.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/docs/pages/guides/auth/social-login/auth-kakao.mdx b/apps/docs/pages/guides/auth/social-login/auth-kakao.mdx index d1c6206d452..afa79845929 100644 --- a/apps/docs/pages/guides/auth/social-login/auth-kakao.mdx +++ b/apps/docs/pages/guides/auth/social-login/auth-kakao.mdx @@ -47,8 +47,8 @@ This will serve as the `client_id` when you make API calls to authenticate the u ## Find your callback URL -- To add callback URL on Kakao, go to `Product settings` > `Kakao -Login` > `Redirect URI`. +- To add callback URL on Kakao, go to `Product settings` > +`Kakao Login` > `Redirect URI`. ## Generate and activate a `client_secret` From f504d8b108311994f3d73f595a50fd6773c6c619 Mon Sep 17 00:00:00 2001 From: Kang Ming Date: Tue, 16 May 2023 16:58:17 +0800 Subject: [PATCH 015/909] reorder navigation bar --- .../NavigationMenu/NavigationMenu.constants.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts b/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts index 45fc485898a..1a7a185fce3 100644 --- a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts +++ b/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts @@ -351,6 +351,11 @@ export const SocialLoginItems = [ icon: '/docs/img/icons/discord-icon', url: '/guides/auth/social-login/auth-discord', }, + { + name: 'Kakao', + icon: '/docs/img/icons/kakao-icon', + url: '/guides/auth/social-login/auth-kakao', + }, { name: 'Keycloak', icon: '/docs/img/icons/keycloak-icon', @@ -391,11 +396,6 @@ export const SocialLoginItems = [ icon: '/docs/img/icons/zoom-icon', url: '/guides/auth/social-login/auth-zoom', }, - { - name: 'Kakao', - icon: '/docs/img/icons/kakao-icon', - url: '/guides/auth/social-login/auth-kakao', - }, ] export const PhoneLoginsItems = [ From b68f1de1b3113078d9c2de0f534d5f6dadac741e Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Sat, 20 May 2023 16:49:36 +0800 Subject: [PATCH 016/909] started moving Button over --- package-lock.json | 44 +++ packages/ui/package.json | 5 +- .../ui/src/components/Button/Button-old.tsx | 159 +++++++++ packages/ui/src/components/Button/Button.tsx | 303 ++++++++++-------- .../ui/src/components/Command/AiCommand.tsx | 2 +- .../src/components/Command/Command.utils.tsx | 2 +- .../Command/GenerateSQL/GenerateSQL.tsx | 2 +- .../ui/src/components/Command/LoadingLine.tsx | 2 +- .../ui/src/components/Dropdown/Dropdown.tsx | 2 +- .../ui/src/components/Icon/IconContext.tsx | 5 +- packages/ui/src/components/Radio/Radio.tsx | 2 +- .../ThemeProvider/ThemeProvider.tsx | 2 +- packages/ui/src/lib/commonCva.ts | 71 ++++ packages/ui/src/lib/theme/themeContext.tsx | 2 +- packages/ui/src/lib/utilities.tsx | 78 ----- packages/ui/src/{ => lib}/utils/cn.ts | 0 packages/ui/src/lib/utils/index.ts | 3 + packages/ui/src/{ => lib}/utils/mergeDeep.ts | 0 .../src/{ => lib}/utils/randomIdGenerator.ts | 2 +- packages/ui/src/utils/useDarkMode.ts | 46 --- packages/ui/tsconfig.json | 18 +- 21 files changed, 470 insertions(+), 280 deletions(-) create mode 100644 packages/ui/src/components/Button/Button-old.tsx create mode 100644 packages/ui/src/lib/commonCva.ts delete mode 100644 packages/ui/src/lib/utilities.tsx rename packages/ui/src/{ => lib}/utils/cn.ts (100%) create mode 100644 packages/ui/src/lib/utils/index.ts rename packages/ui/src/{ => lib}/utils/mergeDeep.ts (100%) rename packages/ui/src/{ => lib}/utils/randomIdGenerator.ts (92%) delete mode 100644 packages/ui/src/utils/useDarkMode.ts diff --git a/package-lock.json b/package-lock.json index 52b222b705b..f17479dc837 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18803,6 +18803,33 @@ "node": ">=0.10.0" } }, + "node_modules/class-variance-authority": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.6.0.tgz", + "integrity": "sha512-qdRDgfjx3GRb9fpwpSvn+YaidnT7IUJNe4wt5/SWwM+PmUwJUhQRk/8zAyNro0PmVfmen2635UboTjIBXXxy5A==", + "dependencies": { + "clsx": "1.2.1" + }, + "funding": { + "url": "https://joebell.co.uk" + }, + "peerDependencies": { + "typescript": ">= 4.5.5 < 6" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/class-variance-authority/node_modules/clsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", + "engines": { + "node": ">=6" + } + }, "node_modules/classnames": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz", @@ -45507,6 +45534,7 @@ "@tailwindcss/forms": "^0.4.0", "@tailwindcss/typography": "^0.5.0", "autoprefixer": "^10.4.14", + "class-variance-authority": "^0.6.0", "clsx": "^1.2.1", "cmdk-supabase": "^0.2.2", "color": "^4.2.3", @@ -60387,6 +60415,21 @@ } } }, + "class-variance-authority": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.6.0.tgz", + "integrity": "sha512-qdRDgfjx3GRb9fpwpSvn+YaidnT7IUJNe4wt5/SWwM+PmUwJUhQRk/8zAyNro0PmVfmen2635UboTjIBXXxy5A==", + "requires": { + "clsx": "1.2.1" + }, + "dependencies": { + "clsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==" + } + } + }, "classnames": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz", @@ -80001,6 +80044,7 @@ "@types/react-dom": "^17.0.11", "@types/react-syntax-highlighter": "^15.5.6", "autoprefixer": "^10.4.14", + "class-variance-authority": "*", "clsx": "^1.2.1", "cmdk-supabase": "^0.2.2", "color": "^4.2.3", diff --git a/packages/ui/package.json b/packages/ui/package.json index ce7073b768d..d3e425d8f3d 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -30,6 +30,7 @@ "@tailwindcss/forms": "^0.4.0", "@tailwindcss/typography": "^0.5.0", "autoprefixer": "^10.4.14", + "class-variance-authority": "^0.6.0", "clsx": "^1.2.1", "cmdk-supabase": "^0.2.2", "color": "^4.2.3", @@ -53,7 +54,6 @@ "tailwindcss-radix": "^1.6.0" }, "devDependencies": { - "config": "*", "@babel/preset-env": "^7.21.4", "@babel/preset-react": "^7.18.6", "@babel/preset-typescript": "^7.21.4", @@ -62,13 +62,14 @@ "@storybook/addon-styling": "^1.0.1", "@storybook/react": "^7.0.5", "@storybook/react-webpack5": "^7.0.5", - "@tokens-studio/sd-transforms": "^0.8.5", "@testing-library/jest-dom": "^5.16.5", + "@tokens-studio/sd-transforms": "^0.8.5", "@types/common-tags": "^1.8.1", "@types/react": "^17.0.37", "@types/react-copy-to-clipboard": "^5.0.4", "@types/react-dom": "^17.0.11", "@types/react-syntax-highlighter": "^15.5.6", + "config": "*", "copyfiles": "^2.4.1", "glob": "^8.1.0", "sql-formatter": "^12.2.0", diff --git a/packages/ui/src/components/Button/Button-old.tsx b/packages/ui/src/components/Button/Button-old.tsx new file mode 100644 index 00000000000..145a9333ebb --- /dev/null +++ b/packages/ui/src/components/Button/Button-old.tsx @@ -0,0 +1,159 @@ +import React, { forwardRef } from 'react' +import { IconContext } from './../Icon/IconContext' +import { IconLoader } from './../Icon/icons/IconLoader' + +import styleHandler from '../../lib/theme/styleHandler' + +export interface ButtonProps extends React.HTMLAttributes { + block?: boolean + className?: string + children?: React.ReactNode + disabled?: boolean + onClick?: React.MouseEventHandler + icon?: React.ReactNode + iconRight?: React.ReactNode + loading?: boolean + loadingCentered?: boolean + shadow?: boolean + size?: ButtonSize + style?: React.CSSProperties + type?: ButtonType + danger?: boolean + htmlType?: 'button' | 'submit' | 'reset' + ref?: any + ariaSelected?: boolean + ariaControls?: string + tabIndex?: 0 | -1 + role?: string + textAlign?: 'left' | 'center' | 'right' + as?: keyof JSX.IntrinsicElements + form?: string +} + +export type ButtonSize = 'tiny' | 'small' | 'medium' | 'large' | 'xlarge' +export type ButtonType = + | 'primary' + | 'default' + | 'secondary' + | 'alternative' + | 'outline' + | 'dashed' + | 'link' + | 'text' + | 'danger' + | 'warning' + +interface CustomButtonProps extends React.HTMLAttributes {} + +export const Button = forwardRef( + ( + { + block, + className, + children, + danger, + disabled = false, + onClick, + icon, + iconRight, + loading = false, + loadingCentered = false, + shadow = true, + size = 'tiny', + style, + type = 'primary', + htmlType = 'button', + ariaSelected, + ariaControls, + tabIndex, + role, + as, + textAlign = 'center', + ...props + }: ButtonProps, + ref + ) => { + let __styles = styleHandler('button') + + // styles + const showIcon = loading || icon + + let classes = [__styles.base] + let containerClasses = [__styles.container] + + classes.push(__styles.type[type]) + + if (block) { + containerClasses.push(__styles.block) + classes.push(__styles.block) + } + + if (shadow && type !== 'link' && type !== 'text') { + classes.push(__styles.shadow) + } + + if (size) { + classes.push(__styles.size[size]) + } + + if (className) { + classes.push(className) + } + + if (disabled) { + classes.push(__styles.disabled) + } + + const iconLoaderClasses = [__styles.loading] + + // custom button tag + const CustomButton = ({ ...props }) => { + const Tag = as as keyof JSX.IntrinsicElements + return + } + + const buttonContent = ( + <> + {showIcon && + (loading ? ( + + ) : icon ? ( + {icon} + ) : null)} + {children && {children}} + {iconRight && !loading && ( + {iconRight} + )} + + ) + + if (as) { + return ( + + {buttonContent} + + ) + } else { + return ( + // + + // + ) + } + } +) diff --git a/packages/ui/src/components/Button/Button.tsx b/packages/ui/src/components/Button/Button.tsx index 145a9333ebb..ba48a5d2463 100644 --- a/packages/ui/src/components/Button/Button.tsx +++ b/packages/ui/src/components/Button/Button.tsx @@ -1,159 +1,196 @@ -import React, { forwardRef } from 'react' +import * as React from 'react' +import { Slot } from '@radix-ui/react-slot' +import { VariantProps, cva } from 'class-variance-authority' + import { IconContext } from './../Icon/IconContext' import { IconLoader } from './../Icon/icons/IconLoader' -import styleHandler from '../../lib/theme/styleHandler' +import { cn } from '@ui/lib/utils' +import { sizes } from '@ui/lib/commonCva' -export interface ButtonProps extends React.HTMLAttributes { - block?: boolean - className?: string - children?: React.ReactNode - disabled?: boolean - onClick?: React.MouseEventHandler +export type ButtonVariantProps = VariantProps +const buttonVariantsNew = cva( + `relative + cursor-pointer + inline-flex + items-center + space-x-2 + text-center + font-regular + ease-out + duration-200 + rounded + outline-none + transition-all + outline-0 + focus-visible:outline-4 + focus-visible:outline-offset-1`, + { + variants: { + type: { + primary: ` + bg-brand-fixed-1100 hover:bg-brand-fixed-1000 + text-white + bordershadow-brand-fixed-1000 hover:bordershadow-brand-fixed-900 dark:bordershadow-brand-fixed-1000 dark:hover:bordershadow-brand-fixed-1000 + focus-visible:outline-brand-600 + shadow-sm`, + secondary: ` + bg-scale-1200 + text-scale-100 hover:text-scale-800 + focus-visible:text-scale-600 + bordershadow-scale-1100 hover:bordershadow-scale-900 + focus-visible:outline-scale-700 + shadow-sm`, + default: ` + text-scale-1200 + bg-scale-100 hover:bg-scale-300 + bordershadow-scale-600 hover:bordershadow-scale-700 + dark:bordershadow-scale-700 hover:dark:bordershadow-scale-800 + dark:bg-scale-500 dark:hover:bg-scale-600 + focus-visible:outline-brand-600 + shadow-sm`, + alternative: ` + text-brand-1100 + bg-brand-200 hover:bg-brand-400 + bordershadow-brand-600 hover:bordershadow-brand-800 + dark:bordershadow-brand-700 hover:dark:bordershadow-brand-800 + focus-visible:border-brand-800 + focus-visible:outline-brand-600 + shadow-sm`, + outline: ` + text-scale-1200 + bg-transparent + bordershadow-scale-600 hover:bordershadow-scale-700 + dark:bordershadow-scale-800 hover:dark:bordershadow-scale-900 + focus-visible:outline-scale-700`, + dashed: ` + text-scale-1200 + border + border-dashed + border-scale-700 hover:border-scale-900 + bg-transparent + focus-visible:outline-scale-700 + shadow-sm`, + link: ` + text-brand-1100 + border + border-transparent + hover:bg-brand-400 + border-opacity-0 + bg-opacity-0 dark:bg-opacity-0 + shadow-none + focus-visible:outline-scale-700`, + text: ` + text-scale-1200 + hover:bg-scale-500 + shadow-none + focus-visible:outline-scale-700`, + danger: ` + text-red-1100 + bg-red-200 + bordershadow-red-700 hover:bordershadow-red-900 + hover:bg-red-900 + hover:text-lo-contrast + focus-visible:outline-red-700 + shadow-sm`, + warning: ` + text-amber-1100 + bg-amber-200 + bordershadow-amber-700 hover:bordershadow-amber-900 + hover:bg-amber-900 + hover:text-hi-contrast + focus-visible:outline-amber-700 + shadow-sm`, + }, + block: { + default: 'w-full flex items-center justify-center', + }, + size: { + ...sizes, + }, + overlay: { + base: `absolute inset-0 bg-scale-200 opacity-50`, + container: `fixed inset-0 transition-opacity`, + }, + disabled: { + true: 'opacity-50 cursor-not-allowed pointer-events-none', + }, + defaultVariants: { + // variant: 'default', + // size: 'default', + }, + }, + } +) + +export type LoadingVariantProps = VariantProps +const loadingVariants = cva('', { + variants: { + loading: { + default: '', + true: `animate-spin`, + }, + }, +}) + +export interface ButtonProps + // omit `type` as we use it to change type of button + // replaced with `htmlType` + extends Omit, 'type'>, + // omit 'disabled' as it is included in HTMLButtonElement + Omit, + LoadingVariantProps { + asChild?: boolean + type?: ButtonVariantProps['type'] + htmlType?: React.ButtonHTMLAttributes['type'] icon?: React.ReactNode + iconLeft?: React.ReactNode iconRight?: React.ReactNode - loading?: boolean - loadingCentered?: boolean - shadow?: boolean - size?: ButtonSize - style?: React.CSSProperties - type?: ButtonType - danger?: boolean - htmlType?: 'button' | 'submit' | 'reset' - ref?: any - ariaSelected?: boolean - ariaControls?: string - tabIndex?: 0 | -1 - role?: string - textAlign?: 'left' | 'center' | 'right' - as?: keyof JSX.IntrinsicElements - form?: string } -export type ButtonSize = 'tiny' | 'small' | 'medium' | 'large' | 'xlarge' -export type ButtonType = - | 'primary' - | 'default' - | 'secondary' - | 'alternative' - | 'outline' - | 'dashed' - | 'link' - | 'text' - | 'danger' - | 'warning' +const Button = React.forwardRef( + ({ asChild = false, ...props }, ref) => { + const Comp = asChild ? Slot : 'button' -interface CustomButtonProps extends React.HTMLAttributes {} + const { className, type, disabled, size, loading, icon, iconLeft, iconRight } = props -export const Button = forwardRef( - ( - { - block, - className, - children, - danger, - disabled = false, - onClick, - icon, - iconRight, - loading = false, - loadingCentered = false, - shadow = true, - size = 'tiny', - style, - type = 'primary', - htmlType = 'button', - ariaSelected, - ariaControls, - tabIndex, - role, - as, - textAlign = 'center', - ...props - }: ButtonProps, - ref - ) => { - let __styles = styleHandler('button') - - // styles const showIcon = loading || icon - let classes = [__styles.base] - let containerClasses = [__styles.container] - - classes.push(__styles.type[type]) - - if (block) { - containerClasses.push(__styles.block) - classes.push(__styles.block) - } - - if (shadow && type !== 'link' && type !== 'text') { - classes.push(__styles.shadow) - } - - if (size) { - classes.push(__styles.size[size]) - } - - if (className) { - classes.push(className) - } - - if (disabled) { - classes.push(__styles.disabled) - } - - const iconLoaderClasses = [__styles.loading] - - // custom button tag - const CustomButton = ({ ...props }) => { - const Tag = as as keyof JSX.IntrinsicElements - return - } + // decrecating 'showIcon' for rightIcon + const _iconLeft: React.ReactNode = icon ?? iconLeft const buttonContent = ( <> {showIcon && (loading ? ( - - ) : icon ? ( - {icon} + + ) : _iconLeft ? ( + {_iconLeft} ) : null)} - {children && {children}} + {props.children && {props.children}} {iconRight && !loading && ( {iconRight} )} ) - if (as) { - return ( - - {buttonContent} - - ) - } else { - return ( - // - - // - ) - } + return ( + + {buttonContent} + + ) } ) + +Button.displayName = 'Button' + +function Test() { + return +} + +export { Button, buttonVariantsNew } diff --git a/packages/ui/src/components/Command/AiCommand.tsx b/packages/ui/src/components/Command/AiCommand.tsx index 48a35a8c788..509b7c13d91 100644 --- a/packages/ui/src/components/Command/AiCommand.tsx +++ b/packages/ui/src/components/Command/AiCommand.tsx @@ -30,7 +30,7 @@ import { AiWarning } from './Command.alerts' import { useCommandMenu } from './CommandMenuProvider' import ReactMarkdown from 'react-markdown' -import { cn } from './../../utils/cn' +import { cn } from '../../lib/utils/cn' import remarkGfm from 'remark-gfm' const questions = [ diff --git a/packages/ui/src/components/Command/Command.utils.tsx b/packages/ui/src/components/Command/Command.utils.tsx index f7796e4a9b1..e183ad76b2d 100644 --- a/packages/ui/src/components/Command/Command.utils.tsx +++ b/packages/ui/src/components/Command/Command.utils.tsx @@ -1,7 +1,7 @@ import { Command as CommandPrimitive } from 'cmdk-supabase' import * as React from 'react' -import { cn } from './../../utils/cn' +import { cn } from '../../lib/utils/cn' import { DetailedHTMLProps, HTMLAttributes, KeyboardEventHandler } from 'react' import { Modal } from '../Modal' diff --git a/packages/ui/src/components/Command/GenerateSQL/GenerateSQL.tsx b/packages/ui/src/components/Command/GenerateSQL/GenerateSQL.tsx index f25aec4fcbb..5ccc7ca988e 100644 --- a/packages/ui/src/components/Command/GenerateSQL/GenerateSQL.tsx +++ b/packages/ui/src/components/Command/GenerateSQL/GenerateSQL.tsx @@ -16,7 +16,7 @@ import { UseAiChatOptions, } from 'ui' -import { cn } from '../../../utils/cn' +import { cn } from '../../../lib/utils/cn' import { AiIcon, AiIconChat } from '../Command.icons' import { CommandItem, useAutoInputFocus, useHistoryKeys } from '../Command.utils' import { useCommandMenu } from '../CommandMenuProvider' diff --git a/packages/ui/src/components/Command/LoadingLine.tsx b/packages/ui/src/components/Command/LoadingLine.tsx index 6e2c172c579..529ae689e94 100644 --- a/packages/ui/src/components/Command/LoadingLine.tsx +++ b/packages/ui/src/components/Command/LoadingLine.tsx @@ -1,5 +1,5 @@ import React from 'react' -import { cn } from '../../utils/cn' +import { cn } from '../../lib/utils/cn' export const LoadingLine = ({ loading }: { loading: boolean }) => { return ( diff --git a/packages/ui/src/components/Dropdown/Dropdown.tsx b/packages/ui/src/components/Dropdown/Dropdown.tsx index 760197c5919..32fd4af3814 100644 --- a/packages/ui/src/components/Dropdown/Dropdown.tsx +++ b/packages/ui/src/components/Dropdown/Dropdown.tsx @@ -7,7 +7,7 @@ import type * as RadixDropdownTypes from '@radix-ui/react-dropdown-menu/' import styleHandler from '../../lib/theme/styleHandler' import { IconTarget } from '../Icon/icons/IconTarget' -import { cn } from '../../utils/cn' +import { cn } from '../../lib/utils/cn' interface RootProps extends RadixDropdownTypes.DropdownMenuProps { open?: boolean diff --git a/packages/ui/src/components/Icon/IconContext.tsx b/packages/ui/src/components/Icon/IconContext.tsx index 4d2198bdfe7..58c731dcf8c 100644 --- a/packages/ui/src/components/Icon/IconContext.tsx +++ b/packages/ui/src/components/Icon/IconContext.tsx @@ -1,10 +1,11 @@ +import { SizeVariantProps } from '@ui/lib/commonCva' import { createContext } from 'react' -type ContextValue = { contextSize?: string; className?: string } +type ContextValue = { contextSize?: SizeVariantProps; className?: string } // Make sure the shape of the default value passed to // createContext matches the shape that the consumers expect! export const IconContext = createContext({ - contextSize: '', + contextSize: 'small', className: '', }) diff --git a/packages/ui/src/components/Radio/Radio.tsx b/packages/ui/src/components/Radio/Radio.tsx index 72ad375ec43..715637eee8b 100644 --- a/packages/ui/src/components/Radio/Radio.tsx +++ b/packages/ui/src/components/Radio/Radio.tsx @@ -7,7 +7,7 @@ import { useFormContext } from '../Form/FormContext' import defaultTheme from '../../lib/theme/defaultTheme' import styleHandler from '../../lib/theme/styleHandler' -import randomIdGenerator from './../../utils/randomIdGenerator' +import randomIdGenerator from '../../lib/utils/randomIdGenerator' interface GroupProps { allowedValues?: any diff --git a/packages/ui/src/components/ThemeProvider/ThemeProvider.tsx b/packages/ui/src/components/ThemeProvider/ThemeProvider.tsx index 334587987f1..524f2e718b3 100644 --- a/packages/ui/src/components/ThemeProvider/ThemeProvider.tsx +++ b/packages/ui/src/components/ThemeProvider/ThemeProvider.tsx @@ -3,7 +3,7 @@ import { createContext } from 'react' import defaultTheme from '../../lib/theme/defaultTheme' -import { mergeDeep } from '../../utils/mergeDeep' +import { mergeDeep } from '../../lib/utils/mergeDeep' // import useDarkMode from './utils/useDarkMode' interface ThemeContextInterface { diff --git a/packages/ui/src/lib/commonCva.ts b/packages/ui/src/lib/commonCva.ts new file mode 100644 index 00000000000..fdf863e24c9 --- /dev/null +++ b/packages/ui/src/lib/commonCva.ts @@ -0,0 +1,71 @@ +import { VariantProps, cva } from 'class-variance-authority' + +const defaults = { + bg: { + brand: { + primary: 'bg-purple-600', + secondary: 'bg-purple-200', + }, + }, + text: { + brand: 'text-purple-600', + body: 'text-scale-600 dark:text-scaleDark-200', + title: 'text-scale-700 dark:text-scaleDark-100', + }, + border: { + brand: 'border-brand-600', + primary: 'border-scale-700', + secondary: 'border-scale-400', + alternative: 'border-scale-600 dark:border-scaleDark-200', + }, + placeholder: 'placeholder-scale-800', + focus: ` + outline-none + focus:ring-current focus:ring-2 + `, + 'focus-visible': ` + outline-none + transition-all + outline-0 + focus-visible:outline-4 + focus-visible:outline-offset-1 + `, + size: { + // buttons, inputs, input labels use these sizes + text: { + tiny: 'text-xs', + small: 'text-sm leading-4', + medium: 'text-sm', + large: 'text-base', + xlarge: 'text-base', + }, + // buttons, inputs, input labels use these sizes + padding: { + tiny: 'px-2.5 py-1', + small: 'px-3 py-2', + medium: 'px-4 py-2', + large: 'px-4 py-2', + xlarge: 'px-6 py-3', + }, + }, + overlay: { + base: `absolute inset-0 bg-scale-200 opacity-50`, + container: `fixed inset-0 transition-opacity`, + }, +} + +export const sizes = { + tiny: `${defaults.size.text.tiny} ${defaults.size.padding.tiny}`, + small: `${defaults.size.text.small} ${defaults.size.padding.small}`, + medium: `${defaults.size.text.medium} ${defaults.size.padding.medium}`, + large: `${defaults.size.text.large} ${defaults.size.padding.large}`, + xlarge: `${defaults.size.text.xlarge} ${defaults.size.padding.xlarge}`, +} +export type SizeVariantProps = VariantProps['size'] +export const sizeVariants = cva('', { + variants: { + size: { + ...sizes, + }, + }, +}) diff --git a/packages/ui/src/lib/theme/themeContext.tsx b/packages/ui/src/lib/theme/themeContext.tsx index 3e0fbcfc011..c5264812354 100644 --- a/packages/ui/src/lib/theme/themeContext.tsx +++ b/packages/ui/src/lib/theme/themeContext.tsx @@ -2,7 +2,7 @@ import React, { useLayoutEffect, useMemo } from 'react' import { createContext } from 'react' import defaultTheme from './defaultTheme' -import { mergeDeep } from '../../utils/mergeDeep' +import { mergeDeep } from '../utils/mergeDeep' // import useDarkMode from './utils/useDarkMode' interface ThemeContextInterface { diff --git a/packages/ui/src/lib/utilities.tsx b/packages/ui/src/lib/utilities.tsx deleted file mode 100644 index 89cc8a5a1c4..00000000000 --- a/packages/ui/src/lib/utilities.tsx +++ /dev/null @@ -1,78 +0,0 @@ -import React from 'react' - -// export const FormLayout = (props: any) => { -// const { -// align, -// direction, -// size, -// label, -// labelOptional, -// layout, -// children, -// id, -// error, -// descriptionText, -// className, -// responsive -// } = props - -// const spacingClass = -// 'space-' + (direction === 'vertical' ? 'y' : 'x') + '-' + size - -// const responsiveClasses = responsive ? ' md:grid-cols-12' : ' grid-cols-12' - -// return ( -//
-// -// {label && ( -// -// )} -// {labelOptional && ( -// -// {labelOptional} -// -// )} -// -//
-// {children} -// {error && ( -//

-// {error} -//

-// )} -// {descriptionText && ( -//

-// {descriptionText} -//

-// )} -//
-//
-// ) -// } - -// export const Space = (props: any) => { -// const { direction, size, className } = props - -// const spacingClass = -// 'space-' + (direction === 'vertical' ? 'y' : 'x') + '-' + size - -// return ( -//
-// {props.children} -//
-// ) -// } diff --git a/packages/ui/src/utils/cn.ts b/packages/ui/src/lib/utils/cn.ts similarity index 100% rename from packages/ui/src/utils/cn.ts rename to packages/ui/src/lib/utils/cn.ts diff --git a/packages/ui/src/lib/utils/index.ts b/packages/ui/src/lib/utils/index.ts new file mode 100644 index 00000000000..524b85fccef --- /dev/null +++ b/packages/ui/src/lib/utils/index.ts @@ -0,0 +1,3 @@ +export * from './cn' +export * from './mergeDeep' +export * from './randomIdGenerator' diff --git a/packages/ui/src/utils/mergeDeep.ts b/packages/ui/src/lib/utils/mergeDeep.ts similarity index 100% rename from packages/ui/src/utils/mergeDeep.ts rename to packages/ui/src/lib/utils/mergeDeep.ts diff --git a/packages/ui/src/utils/randomIdGenerator.ts b/packages/ui/src/lib/utils/randomIdGenerator.ts similarity index 92% rename from packages/ui/src/utils/randomIdGenerator.ts rename to packages/ui/src/lib/utils/randomIdGenerator.ts index be7c8071b9a..e3043cbd938 100644 --- a/packages/ui/src/utils/randomIdGenerator.ts +++ b/packages/ui/src/lib/utils/randomIdGenerator.ts @@ -3,7 +3,7 @@ // return randomNumber.toString() // } -export default function generateUID() { +export function generateUID() { // I generate the UID from two parts here // to ensure the random number provide enough bits. var firstPart = (Math.random() * 46656) | 0 diff --git a/packages/ui/src/utils/useDarkMode.ts b/packages/ui/src/utils/useDarkMode.ts deleted file mode 100644 index 8db60d6b634..00000000000 --- a/packages/ui/src/utils/useDarkMode.ts +++ /dev/null @@ -1,46 +0,0 @@ -// import { useEffect, useState } from 'react' - -// export const useDarkMode = ( -// usePreferences: boolean -// ): [Mode, React.Dispatch> | null, -// (() => void) | null -// ] => { -// if (!usePreferences) return [null, null, null] - -// const [mode, setMode] = useState(null) - -// const toggleMode = () => { -// if (mode === 'light') { -// document.documentElement.className = '' -// document.documentElement.classList.add('dark') -// setMode('dark') -// } else { -// document.documentElement.className = '' -// document.documentElement.classList.add('light') -// setMode('light') -// } -// } - -// useEffect(() => { -// const userPreference = -// !!window.matchMedia && -// window.matchMedia('(prefers-color-scheme: dark)').matches - -// setMode( -// // use stored theme; fallback to user preference -// window.localStorage.getItem('theme') || -// (userPreference ? 'dark' : 'light') -// ) -// }, []) - -// useEffect(() => { -// if (mode) { -// window.localStorage.setItem('theme', mode) -// document.documentElement.classList.add(mode) -// } -// }, [mode]) - -// return [mode, setMode, toggleMode] -// } - -// export default useDarkMode diff --git a/packages/ui/tsconfig.json b/packages/ui/tsconfig.json index 8637a0ecaf7..da20469057f 100644 --- a/packages/ui/tsconfig.json +++ b/packages/ui/tsconfig.json @@ -1,14 +1,12 @@ { "extends": "tsconfig/react-library.json", "compilerOptions": { - "resolveJsonModule": true + "resolveJsonModule": true, + "baseUrl": ".", + "paths": { + "@ui/*": ["./src/*"] // no other project in the monorepo uses this alias + } }, - "include": [ - "." - ], - "exclude": [ - "dist", - "build", - "node_modules" - ] -} \ No newline at end of file + "include": ["."], + "exclude": ["dist", "build", "node_modules"] +} From 18d2cc27471011978895fdea19dada17671e47b7 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Sat, 20 May 2023 17:33:27 +0800 Subject: [PATCH 017/909] update stories --- package-lock.json | 97 ++++- packages/ui/.storybook/{main.js => main.ts} | 28 +- packages/ui/.storybook/preview.css | 2 +- packages/ui/build/css/themes/dark.css | 2 +- packages/ui/build/css/themes/light.css | 14 +- packages/ui/package.json | 1 + .../components/Button/Button.stories-old.tsx | 234 +++++++++++ .../src/components/Button/Button.stories.tsx | 363 ++++++++---------- packages/ui/src/components/Button/Button.tsx | 10 +- 9 files changed, 517 insertions(+), 234 deletions(-) rename packages/ui/.storybook/{main.js => main.ts} (51%) create mode 100644 packages/ui/src/components/Button/Button.stories-old.tsx diff --git a/package-lock.json b/package-lock.json index f17479dc837..d27e2ca9c96 100644 --- a/package-lock.json +++ b/package-lock.json @@ -42788,6 +42788,59 @@ "strip-bom": "^3.0.0" } }, + "node_modules/tsconfig-paths-webpack-plugin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-4.0.1.tgz", + "integrity": "sha512-m5//KzLoKmqu2MVix+dgLKq70MnFi8YL8sdzQZ6DblmCdfuq/y3OqvJd5vMndg2KEVCOeNz8Es4WVZhYInteLw==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.7.0", + "tsconfig-paths": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/tsconfig-paths-webpack-plugin/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/tsconfig-paths-webpack-plugin/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/tsconfig-paths-webpack-plugin/node_modules/tsconfig-paths": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", + "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", + "dev": true, + "dependencies": { + "json5": "^2.2.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/tsconfig-paths/node_modules/json5": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", @@ -45580,6 +45633,7 @@ "storybook": "^7.0.5", "storybook-dark-mode": "^3.0.0", "style-dictionary": "^3.7.1", + "tsconfig-paths-webpack-plugin": "^4.0.1", "typescript": "4.3.4" } }, @@ -79845,6 +79899,46 @@ } } }, + "tsconfig-paths-webpack-plugin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-4.0.1.tgz", + "integrity": "sha512-m5//KzLoKmqu2MVix+dgLKq70MnFi8YL8sdzQZ6DblmCdfuq/y3OqvJd5vMndg2KEVCOeNz8Es4WVZhYInteLw==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.7.0", + "tsconfig-paths": "^4.1.2" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true + }, + "tsconfig-paths": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", + "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", + "dev": true, + "requires": { + "json5": "^2.2.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + } + } + }, "tslib": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", @@ -80044,7 +80138,7 @@ "@types/react-dom": "^17.0.11", "@types/react-syntax-highlighter": "^15.5.6", "autoprefixer": "^10.4.14", - "class-variance-authority": "*", + "class-variance-authority": "^0.6.0", "clsx": "^1.2.1", "cmdk-supabase": "^0.2.2", "color": "^4.2.3", @@ -80073,6 +80167,7 @@ "tailwind-merge": "^1.10.0", "tailwindcss": "^3.0.15", "tailwindcss-radix": "^1.6.0", + "tsconfig-paths-webpack-plugin": "*", "typescript": "4.3.4" }, "dependencies": { diff --git a/packages/ui/.storybook/main.js b/packages/ui/.storybook/main.ts similarity index 51% rename from packages/ui/.storybook/main.js rename to packages/ui/.storybook/main.ts index 6eec6659784..9af87dbdec2 100644 --- a/packages/ui/.storybook/main.js +++ b/packages/ui/.storybook/main.ts @@ -1,4 +1,7 @@ -module.exports = { +const TsconfigPathsPlugin = require('tsconfig-paths-webpack-plugin') +import type { StorybookConfig } from '@storybook/your-framework' + +const config: StorybookConfig = { // // stories: [ // // '../src/components/**/*.stories.mdx', // // '../src/components/**/*.stories.@(js|jsx|ts|tsx)', @@ -6,14 +9,14 @@ module.exports = { // // TODO: Temporally Import one by one story and fix build issue. // // After all stories are cleaned, revert to wildcard import. stories: [ - '../src/components/Accordion/Accordion.stories.tsx', - '../src/components/Alert/Alert.stories.tsx', - '../src/components/Avatar/Avatar.stories.tsx', + // '../src/components/Accordion/Accordion.stories.tsx', + // '../src/components/Alert/Alert.stories.tsx', + // '../src/components/Avatar/Avatar.stories.tsx', '../src/components/Button/Button.stories.tsx', - '../src/components/Checkbox/Checkbox.stories.tsx', - '../src/components/Collapsible/Collapsible.stories.tsx', - '../src/components/ContextMenu/ContextMenu.stories.tsx', - '../src/components/Dropdown/Dropdown.stories.tsx', + // '../src/components/Checkbox/Checkbox.stories.tsx', + // '../src/components/Collapsible/Collapsible.stories.tsx', + // '../src/components/ContextMenu/ContextMenu.stories.tsx', + // '../src/components/Dropdown/Dropdown.stories.tsx', ], addons: [ // '@storybook/addon-links', @@ -39,4 +42,13 @@ module.exports = { name: '@storybook/react-webpack5', options: {}, }, + webpackFinal: async (config, { configType }) => { + /** + * resolve import paths from tsconfig + * based on https://stackoverflow.com/a/71677949/4807782 + */ + config.resolve.plugins = [new TsconfigPathsPlugin()] // ;<-- this line + return config + }, } +export default config diff --git a/packages/ui/.storybook/preview.css b/packages/ui/.storybook/preview.css index 5682f9ab6be..7c9bdb31cb7 100644 --- a/packages/ui/.storybook/preview.css +++ b/packages/ui/.storybook/preview.css @@ -4,7 +4,7 @@ @import './../build/css/themes/dark.css'; @import './../build/css/themes/light.css'; -@import './../build/css/themes/darker-dark.css'; +/* @import './../build/css/themes/darker-dark.css'; */ .dark, .light, diff --git a/packages/ui/build/css/themes/dark.css b/packages/ui/build/css/themes/dark.css index fedf2507642..a4d60d733a8 100644 --- a/packages/ui/build/css/themes/dark.css +++ b/packages/ui/build/css/themes/dark.css @@ -1,6 +1,6 @@ /** * Do not edit directly - * Generated on Tue, 09 May 2023 15:35:29 GMT + * Generated on Sat, 20 May 2023 09:00:49 GMT */ .dark { diff --git a/packages/ui/build/css/themes/light.css b/packages/ui/build/css/themes/light.css index 340a6635965..0f4e33acc9f 100644 --- a/packages/ui/build/css/themes/light.css +++ b/packages/ui/build/css/themes/light.css @@ -1,6 +1,6 @@ /** * Do not edit directly - * Generated on Tue, 09 May 2023 15:35:29 GMT + * Generated on Sat, 20 May 2023 09:00:49 GMT */ .light { @@ -22,7 +22,7 @@ --theme-variables-warning: 26.9deg 93.8% 56.1%; --theme-variables-background-body-alt: 0deg 0% 100%; /* og color is colors.Gray.Dark.1 */ --theme-variables-background-body: 210deg 16.7% 97.6%; /* og color is colors.Slate.Light.2 */ - --theme-variables-background: 210deg 33.3% 98.8%; /* og color is colors.Slate.Light.1 */ + --theme-variables-background: 0deg 0% 98.4%; /* og color is colors.Slate.Light.1 */ --theme-variables-brand: 153.1deg 60.2% 52.7%; --text-color-disabled-default: 195deg 7.1% 5.5%; --text-color-danger-default: var(--theme-variables-danger); @@ -48,11 +48,11 @@ --text-color-body-lightest: 195deg 1% 65.6%; --text-color-body-lighter: 195deg 1% 51.8%; --text-color-body-light: 195deg 1.9% 34.3%; - --border-color-selection: 210deg 0.4% 46.1%; + --border-color-selection: 91.8deg 0% 45.9%; --border-color-body-alt: 91.8deg 0% 96%; --border-color-body: 210deg 6.1% 93.7%; - --border-color-default: 210deg 7.5% 94.9%; /* Default border color */ - --background-color-control: 210deg 33.3% 99.2%; - --background-color-selection: 210deg 7.5% 94.9%; - --border-color-control: 210deg 4.1% 91.2%; + --border-color-default: 91.8deg 0% 94.5%; /* Default border color */ + --background-color-control: 91.8deg 0% 98.9%; + --background-color-selection: 91.8deg 0% 94.5%; + --border-color-control: 91.8deg 0% 90.8%; } diff --git a/packages/ui/package.json b/packages/ui/package.json index d3e425d8f3d..ccdeeeefa95 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -76,6 +76,7 @@ "storybook": "^7.0.5", "storybook-dark-mode": "^3.0.0", "style-dictionary": "^3.7.1", + "tsconfig-paths-webpack-plugin": "^4.0.1", "typescript": "4.3.4" } } diff --git a/packages/ui/src/components/Button/Button.stories-old.tsx b/packages/ui/src/components/Button/Button.stories-old.tsx new file mode 100644 index 00000000000..57c0e956cc7 --- /dev/null +++ b/packages/ui/src/components/Button/Button.stories-old.tsx @@ -0,0 +1,234 @@ +import { Button } from './' +import { IconPackage } from './../Icon/icons/IconPackage' +import { IconChevronRight } from './../Icon/icons/IconChevronRight' + +export default { + title: 'General/Button', + component: Button, +} + +export const Neutral = (args: any) => +export const Success = (args: any) => +export const withStyles = (args: any) => +export const withIcon = (args: any) => +export const withIconRight = (args: any) => +export const withBlock = (args: any) => +export const withOnlyIcon = (args: any) => +) + +export const allButtons = (args: any) => ( + <> +
+
+ + + + + + + + + + +
+ +
+ + + + + + + + + + +
+
+ + + + + + + + + + +
+
+ + + + + + + + + + +
+
+ + + + + + + + + + +
+
+ +) + +export const withCustomTag = (args: any) => + +const icon = + +withIcon.args = { + type: 'primary', + icon: icon, +} + +withIconRight.args = { + type: 'primary', + iconRight: , +} + +withStyles.args = { + type: 'primary', + style: { backgroundColor: 'red', color: 'yellow' }, +} + +withBlock.args = { + type: 'primary', + block: true, +} + +withOnlyIcon.args = { + icon: icon, +} + +withOnlyLoading.args = { + loading: true, +} + +withLoadingCentered.args = { + loading: true, + loadingCentered: true, +} + +allButtons.args = { + loading: false, + danger: false, +} + +withCustomTag.args = { + as: 'span', +} diff --git a/packages/ui/src/components/Button/Button.stories.tsx b/packages/ui/src/components/Button/Button.stories.tsx index e73cac1cc86..ce468ee7a01 100644 --- a/packages/ui/src/components/Button/Button.stories.tsx +++ b/packages/ui/src/components/Button/Button.stories.tsx @@ -1,235 +1,180 @@ -import { Button } from './' -import { IconPackage } from './../Icon/icons/IconPackage' -import { IconChevronRight } from './../Icon/icons/IconChevronRight' +// Button.stories.ts|tsx -export default { +import type { Meta, StoryObj } from '@storybook/react' + +import { Button, ButtonProps } from './Button' +import { Fragment } from 'react' +import { IconAirplay } from '../Icon/icons/IconAirplay' + +const meta: Meta = { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/react/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ title: 'General/Button', component: Button, } -export const Neutral = (args: any) => -export const Success = (args: any) => +export default meta -export const withStyles = (args: any) => -export const withIcon = (args: any) => -export const withIconRight = (args: any) => -export const withBlock = (args: any) => -export const withOnlyIcon = (args: any) => -) +// export default { +// title: 'General/Button', +// component: Button, +// } -export const allButtons = (args: any) => ( - <> -
-
- - - - - - - - - - -
+type Story = StoryObj -
- - - - - - - - - - -
-
- - - - - - - - - - -
-
- - - - - - - - - - -
-
- - - - - - - - - - -
-
- -) +/* + *👇 Render functions are a framework specific feature to allow you control on how the component renders. + * See https://storybook.js.org/docs/react/api/csf + * to learn how to use render functions. + */ -export const withCustomTag = (args: any) => - -const icon = - -withIcon.args = { - type: 'primary', - icon: icon, +export const Primary = { + args: { + children: 'Hello world', + type: 'primary', + }, + render: ({ children, type }: ButtonProps) => , +} +export const Default = { + args: { + children: 'Hello world', + type: 'default', + }, + render: ({ children, type }: ButtonProps) => , } -withIconRight.args = { - type: 'primary', - iconRight: , +export const Alternative = { + args: { + children: 'Hello world', + type: 'alternative', + }, + render: ({ children, type }: ButtonProps) => , } -withStyles.args = { - type: 'primary', - style: { backgroundColor: 'red', color: 'yellow' }, +export const Outline = { + args: { + children: 'Hello world', + type: 'outline', + }, + render: ({ children, type }: ButtonProps) => , } -withBlock.args = { - type: 'primary', - block: true, +export const Secondary = { + args: { + children: 'Hello world', + type: 'secondary', + }, + render: ({ children, type }: ButtonProps) => , } -withOnlyIcon.args = { - icon: icon, +export const Dashed = { + args: { + children: 'Hello world', + type: 'dashed', + }, + render: ({ children, type }: ButtonProps) => , } -withOnlyLoading.args = { - loading: true, +export const Link = { + args: { + children: 'Hello world', + type: 'link', + }, + render: ({ children, type }: ButtonProps) => , } -withLoadingCentered.args = { - loading: true, - loadingCentered: true, +export const Text = { + args: { + children: 'Hello world', + type: 'text', + }, + render: ({ children, type }: ButtonProps) => , } -allButtons.args = { - loading: false, - danger: false, +export const Danger = { + args: { + children: 'Hello world', + type: 'danger', + }, + render: ({ children, type }: ButtonProps) => , } -withCustomTag.args = { - as: 'span', +export const Block = { + args: { + children: 'Hello world', + type: 'primary', + block: true, + }, + render: ({ children, type, block }: ButtonProps) => ( + + ), +} + +export const Disabled = { + args: { + children: 'Hello world', + type: 'primary', + disabled: true, + }, + render: ({ children, type, disabled }: ButtonProps) => ( + + ), +} + +export const Sizes = { + args: { + children: 'Change the size below', + type: 'primary', + size: 'large', + }, + render: ({ children, type, size }: ButtonProps) => ( + + ), +} + +export const LeftIcon = { + args: { + children: 'Change the size below', + type: 'primary', + iconLeft: , + }, + render: ({ children, type, iconLeft }: ButtonProps) => ( + + ), +} + +export const RightIcon = { + args: { + children: 'Change the size below', + type: 'primary', + iconRight: , + }, + render: ({ children, type, iconRight }: ButtonProps) => ( + + ), +} + +export const Loading = { + args: { + children: 'Change the size below', + type: 'primary', + loading: true, + }, + render: ({ children, type, loading }: ButtonProps) => ( + + ), } diff --git a/packages/ui/src/components/Button/Button.tsx b/packages/ui/src/components/Button/Button.tsx index ba48a5d2463..a70c9b393c1 100644 --- a/packages/ui/src/components/Button/Button.tsx +++ b/packages/ui/src/components/Button/Button.tsx @@ -103,7 +103,7 @@ const buttonVariantsNew = cva( shadow-sm`, }, block: { - default: 'w-full flex items-center justify-center', + true: 'w-full flex items-center justify-center', }, size: { ...sizes, @@ -149,10 +149,10 @@ export interface ButtonProps } const Button = React.forwardRef( - ({ asChild = false, ...props }, ref) => { + ({ asChild = false, size = 'small', type = 'primary', ...props }, ref) => { const Comp = asChild ? Slot : 'button' - const { className, type, disabled, size, loading, icon, iconLeft, iconRight } = props + const { className, disabled, loading, icon, iconLeft, iconRight } = props const showIcon = loading || icon @@ -189,8 +189,4 @@ const Button = React.forwardRef( Button.displayName = 'Button' -function Test() { - return -} - export { Button, buttonVariantsNew } From 980ca5d536cb625a331f5803ed6041a0ee8d63f7 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Sat, 20 May 2023 17:34:29 +0800 Subject: [PATCH 018/909] Update Button.stories.tsx --- packages/ui/src/components/Button/Button.stories.tsx | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/packages/ui/src/components/Button/Button.stories.tsx b/packages/ui/src/components/Button/Button.stories.tsx index ce468ee7a01..3827669916e 100644 --- a/packages/ui/src/components/Button/Button.stories.tsx +++ b/packages/ui/src/components/Button/Button.stories.tsx @@ -3,7 +3,7 @@ import type { Meta, StoryObj } from '@storybook/react' import { Button, ButtonProps } from './Button' -import { Fragment } from 'react' + import { IconAirplay } from '../Icon/icons/IconAirplay' const meta: Meta = { @@ -17,11 +17,6 @@ const meta: Meta = { export default meta -// export default { -// title: 'General/Button', -// component: Button, -// } - type Story = StoryObj /* From 34794e35657aaa3c62d97ec799e0581ae0f4672e Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Sun, 21 May 2023 21:11:38 +0800 Subject: [PATCH 019/909] Accordion updated --- packages/ui/.storybook/main.ts | 2 +- .../Accordion/Accordion-old.stories.tsx | 166 +++++++++ .../components/Accordion/Accordion-old.tsx | 137 ++++++++ .../Accordion/Accordion.stories.tsx | 256 ++++---------- .../ui/src/components/Accordion/Accordion.tsx | 332 +++++++++++------- 5 files changed, 584 insertions(+), 309 deletions(-) create mode 100644 packages/ui/src/components/Accordion/Accordion-old.stories.tsx create mode 100644 packages/ui/src/components/Accordion/Accordion-old.tsx diff --git a/packages/ui/.storybook/main.ts b/packages/ui/.storybook/main.ts index 9af87dbdec2..a166e5ddacc 100644 --- a/packages/ui/.storybook/main.ts +++ b/packages/ui/.storybook/main.ts @@ -9,7 +9,7 @@ const config: StorybookConfig = { // // TODO: Temporally Import one by one story and fix build issue. // // After all stories are cleaned, revert to wildcard import. stories: [ - // '../src/components/Accordion/Accordion.stories.tsx', + '../src/components/Accordion/Accordion.stories.tsx', // '../src/components/Alert/Alert.stories.tsx', // '../src/components/Avatar/Avatar.stories.tsx', '../src/components/Button/Button.stories.tsx', diff --git a/packages/ui/src/components/Accordion/Accordion-old.stories.tsx b/packages/ui/src/components/Accordion/Accordion-old.stories.tsx new file mode 100644 index 00000000000..e11fc9edc0c --- /dev/null +++ b/packages/ui/src/components/Accordion/Accordion-old.stories.tsx @@ -0,0 +1,166 @@ +import React from 'react' + +import Accordion, { AccordionProps } from './Accordion' +import { Badge } from '../Badge' + +export default { + title: 'Displays/Accordion', + component: Accordion, +} + +export const OneItem = (args: AccordionProps) => ( + + + Title of the thing + Test badge + + } + id="first" + > + + Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. + + + +) + +export const MultipleItems = (args: AccordionProps) => ( + + Title of the thing + } + id={'1'} + > + + Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. + + + Title of the thing + } + id={'2'} + > + + Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. + + + Title of the thing + } + id={'3'} + > + + Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. + + + Title of the thing + } + id={'4'} + > + + Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. + + + +) + +export const Bordered = (args: AccordionProps) => ( + + Title of the thing + } + id={'1'} + > + + Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. + + + Title of the thing + } + id={'2'} + > + + Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. + + + Title of the thing + } + id={'3'} + > + + Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. + + + Title of the thing + } + id={'4'} + > + + Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. + + + +) + +Bordered.args = { + type: 'bordered', +} + +export const LeftAlignedChevron = (args: AccordionProps) => ( + + + First item + Test badge + + } + id="first" + > + + Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. + + + + Second item + + } + id="second" + > + + Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. + + + +) + +// export const withDefaultActive = Multiple.bind({}) +// withDefaultActive.args = { +// defaultActiveId: [1], +// } + +// export const withIconLeft = Multiple.bind({}) +// withIconLeft.args = { +// iconPosition: 'left', +// } + +// export const withCustomIcon = Multiple.bind({}) +// withCustomIcon.args = { +// icon: , +// } diff --git a/packages/ui/src/components/Accordion/Accordion-old.tsx b/packages/ui/src/components/Accordion/Accordion-old.tsx new file mode 100644 index 00000000000..524bf7b9de9 --- /dev/null +++ b/packages/ui/src/components/Accordion/Accordion-old.tsx @@ -0,0 +1,137 @@ +import React, { createContext, useContext, useState } from 'react' + +import styleHandler from '../../lib/theme/styleHandler' + +import * as RadixAccordion from '@radix-ui/react-accordion' +import { IconChevronDown } from '../Icon/icons/IconChevronDown' +import { IconChevronUp } from '../Icon/icons/IconChevronUp' + +type Type = 'default' | 'bordered' +type Size = 'tiny' | 'small' | 'medium' | 'large' | 'xlarge' +type Align = 'left' | 'right' + +interface ContextValue { + bordered?: boolean + type: Type + justified: Boolean + chevronAlign: Align +} + +const AccordionContext = createContext({ + chevronAlign: 'left', + justified: true, + type: 'default', +}) + +export interface AccordionProps { + children?: React.ReactNode + className?: string + + onChange?: (item: string | string[]) => void + openBehaviour: 'single' | 'multiple' + type?: Type + defaultValue?: string | string[] | undefined + justified?: Boolean + chevronAlign?: Align +} + +function Accordion({ + children, + className, + onChange, + openBehaviour = 'multiple', + type = 'default', + defaultValue = undefined, + justified = false, + chevronAlign = 'left', +}: AccordionProps) { + const __styles = styleHandler('accordion') + + let containerClasses = [__styles.variants[type].base] + + if (className) { + containerClasses.push(className) + } + + const contextValue = { + chevronAlign, + justified, + type, + defaultValue, + } + + function handleOnChange(e: string | string[]) { + if (onChange) onChange(e) + const value = e == typeof String ? e.split(' ') : e + // setCurrentItems(e) + // console.log('about to change state') + // currentItems = e + // console.log('currentItems', currentItems) + } + + return ( + <> + +
{children}
+ + } + >
+ + ) +} + +interface ItemProps { + children?: React.ReactNode + className?: string + header: React.ReactNode + id: string + icon?: React.ReactNode + disabled?: boolean +} + +export function Item({ children, className, header, id, disabled }: ItemProps) { + const __styles = styleHandler('accordion') + const [open, setOpen] = useState(false) + + const { type, justified, chevronAlign } = useContext(AccordionContext) + + let triggerClasses = [__styles.variants[type].trigger] + if (justified) triggerClasses.push(__styles.justified) + if (className) triggerClasses.push(className) + + let chevronClasses = [__styles.chevron.base, __styles.chevron.align[chevronAlign]] + + if (open && !disabled) { + chevronClasses.unshift('!rotate-180') + } + + return ( + { + setOpen(!open) + }} + > + + {header} + {!disabled && ( + + )} + + +
{children}
+
+
+ ) +} + +Accordion.Item = Item +export default Accordion diff --git a/packages/ui/src/components/Accordion/Accordion.stories.tsx b/packages/ui/src/components/Accordion/Accordion.stories.tsx index 613caccc178..25886206394 100644 --- a/packages/ui/src/components/Accordion/Accordion.stories.tsx +++ b/packages/ui/src/components/Accordion/Accordion.stories.tsx @@ -1,199 +1,79 @@ -import React from 'react' +// Button.stories.ts|tsx -import Accordion, { AccordionProps } from './Accordion' +import type { Meta, StoryObj } from '@storybook/react' + +import { Accordion, AccordionItem } from './Accordion' import { Badge } from '../Badge' -export default { - title: 'Displays/Accordion', +const meta: Meta = { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/react/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ + title: 'General/Accordion', component: Accordion, } -export const OneItem = (args: AccordionProps) => ( - - - - Title of the thing - - Test badge - - } - id="first" - > - - Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur - amet labore. - - - -) +export default meta -export const MultipleItems = (args: AccordionProps) => ( - - - Title of the thing - - } - id={'1'} - > - - Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur - amet labore. - - - - Title of the thing - - } - id={'2'} - > - - Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur - amet labore. - - - - Title of the thing - - } - id={'3'} - > - - Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur - amet labore. - - - - Title of the thing - - } - id={'4'} - > - - Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur - amet labore. - - - -) +type Story = StoryObj -export const Bordered = (args: AccordionProps) => ( - - - Title of the thing - - } - id={'1'} - > - - Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur - amet labore. - - - - Title of the thing - - } - id={'2'} - > - - Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur - amet labore. - - - - Title of the thing - - } - id={'3'} - > - - Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur - amet labore. - - - - Title of the thing - - } - id={'4'} - > - - Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur - amet labore. - - - -) +/* + *👇 Render functions are a framework specific feature to allow you control on how the component renders. + * See https://storybook.js.org/docs/react/api/csf + * to learn how to use render functions. + */ -Bordered.args = { - type: 'bordered', +export const Default = { + args: { + type: 'default', + }, + render: ({ children, type }: any) => ( + + + + Title of the thing + + Yes. It adheres to the WAI-ARIA design pattern. + + + Is it styled? + + Yes. It comes with default styles that matches the other components' aesthetic. + + + + Is it animated? + + Yes. It's animated by default, but you can disable it if you prefer. + + + + ), } -export const LeftAlignedChevron = (args: AccordionProps) => ( - - - - First item - - Test badge - - } - id="first" - > - - Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur - amet labore. - - - - - Second item - - - } - id="second" - > - - Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur - amet labore. - - - -) - -// export const withDefaultActive = Multiple.bind({}) -// withDefaultActive.args = { -// defaultActiveId: [1], -// } - -// export const withIconLeft = Multiple.bind({}) -// withIconLeft.args = { -// iconPosition: 'left', -// } - -// export const withCustomIcon = Multiple.bind({}) -// withCustomIcon.args = { -// icon: , -// } +export const Bordered = { + args: { + type: 'bordered', + }, + render: ({ children, type }: any) => ( + + + Is it accessible? + Yes. It adheres to the WAI-ARIA design pattern. + + + Is it styled? + + Yes. It comes with default styles that matches the other components' aesthetic. + + + + Is it animated? + + Yes. It's animated by default, but you can disable it if you prefer. + + + + ), +} diff --git a/packages/ui/src/components/Accordion/Accordion.tsx b/packages/ui/src/components/Accordion/Accordion.tsx index 7488ee5666c..80a8cbd7d3e 100644 --- a/packages/ui/src/components/Accordion/Accordion.tsx +++ b/packages/ui/src/components/Accordion/Accordion.tsx @@ -1,142 +1,234 @@ +import * as AccordionPrimitive from '@radix-ui/react-accordion' +import { cn } from '@ui/lib/utils' +import { VariantProps, cva, cx } from 'class-variance-authority' +import { ChevronDown } from 'lucide-react' import React, { createContext, useContext, useState } from 'react' -import styleHandler from '../../lib/theme/styleHandler' - -import * as RadixAccordion from '@radix-ui/react-accordion' -import { IconChevronDown } from '../Icon/icons/IconChevronDown' -import { IconChevronUp } from '../Icon/icons/IconChevronUp' - -type Type = 'default' | 'bordered' -type Size = 'tiny' | 'small' | 'medium' | 'large' | 'xlarge' -type Align = 'left' | 'right' - -interface ContextValue { - bordered?: boolean - type: Type - justified: Boolean - chevronAlign: Align -} - -const AccordionContext = createContext({ - chevronAlign: 'left', - justified: true, - type: 'default', +export type AccordionRootVariantsProps = VariantProps +const accordionRootVariants = cva('flex flex-col', { + variants: { + type: { + default: 'space-y-3', + bordered: '-space-y-px', + }, + defaultVariants: { + type: 'default', + }, + }, }) -export interface AccordionProps { - children?: React.ReactNode - className?: string - defaultActiveId?: (string | number)[] - icon?: React.ReactNode - iconPosition?: Align - onChange?: (item: string | string[]) => void +export type AccordionItemVariantsProps = VariantProps +const accordionItemVariants = cva( + 'group first:rounded-tl-md first:rounded-tr-md last:rounded-bl-md last:rounded-br-md', + { + variants: { + type: { + default: 'overflow-hidden', + bordered: 'border border-scale-700', + }, + justified: { + true: 'justify-between', + false: '', + }, + }, + } +) + +const accordionTriggerVariants = cva( + `flex flex-row items-center w-full text-left cursor-pointer focus-visible:ring-1 focus-visible:z-10 ring-scale-1100 + justify-between transition-all hover:underline [&[data-state=open]>svg]:rotate-180`, + { + variants: { + type: { + default: 'gap-3', + bordered: ` + px-6 py-4 + font-medium text-base bg-transparent + transition-colors hover:bg-scale-200 + overflow-hidden + group-first:rounded-tl-md group-first:rounded-tr-md + group-last:rounded-bl-md group-last:rounded-br-md`, + }, + }, + } +) + +const accordionContentVariants = cva('pb-4 pt-0', { + variants: { + type: { + default: '', + bordered: 'px-6', + }, + }, +}) + +type Type = AccordionRootVariantsProps['type'] +type Align = 'left' | 'right' | undefined + +interface ContextValue { + chevronAlign: Align + justified: boolean + type: Type + defaultValue: AccordionPrimitive.AccordionImplSingleProps['defaultValue'] +} + +interface AdditionalProps { openBehaviour: 'single' | 'multiple' + variant?: Type + // Add other additional props here + onChange?: (item: string | string[]) => void type?: Type - size?: Size - defaultValue?: string | string[] | undefined - justified?: Boolean + justified?: AccordionItemVariantsProps['justified'] chevronAlign?: Align } -function Accordion({ - children, - className, - onChange, - openBehaviour = 'multiple', - type = 'default', - defaultValue = undefined, - justified = false, - chevronAlign = 'left', -}: AccordionProps) { - const __styles = styleHandler('accordion') - - let containerClasses = [__styles.variants[type].base] - - if (className) { - containerClasses.push(className) - } - - const contextValue = { - chevronAlign, - justified, - type, - defaultValue, - } - - function handleOnChange(e: string | string[]) { - if (onChange) onChange(e) - const value = e == typeof String ? e.split(' ') : e - // setCurrentItems(e) - // console.log('about to change state') - // currentItems = e - // console.log('currentItems', currentItems) - } - - return ( - <> - {/* // - @ts-expect-error */} - -
{children}
- - } - >
- - ) +interface AccordionComponent + extends React.ForwardRefExoticComponent< + ExtendedAccordionProps & React.RefAttributes + > { + Item: typeof AccordionItem + Content: typeof AccordionContent + Trigger: typeof AccordionTrigger } -interface ItemProps { - children?: React.ReactNode - className?: string - header: React.ReactNode - id: string - icon?: React.ReactNode - disabled?: boolean +export interface AccordionSingleProps extends AccordionPrimitive.AccordionImplSingleProps { + openBehaviour: 'single' + value?: string + // Add other props specific to single accordion } -export function Item({ children, className, header, id, disabled }: ItemProps) { - const __styles = styleHandler('accordion') +export interface AccordionMultipleProps extends AccordionPrimitive.AccordionImplMultipleProps { + openBehaviour: 'multiple' + value?: string[] + // Add other props specific to multiple accordion +} + +type ExtendedAccordionProps = (AccordionSingleProps | AccordionMultipleProps) & AdditionalProps + +const AccordionContext = createContext({ + chevronAlign: 'left', + justified: false, // Set the default value to false + type: undefined, + defaultValue: undefined, +}) + +const Accordion: AccordionComponent = React.forwardRef( + ({ openBehaviour, type, chevronAlign, justified, defaultValue, ...props }, ref) => { + function handleOnChange(e: string | string[]) { + if (props.onChange) props.onChange(e) + } + + const contextValue = { + chevronAlign, + justified: justified || false, // Provide a default value of false + type: type || 'default', // Provide a default value for the type + defaultValue: Array.isArray(defaultValue) ? defaultValue.join('') : defaultValue, // Convert array to string + } + + if (openBehaviour === 'single') { + const { value, children, className, ...singleProps } = props as AccordionSingleProps + return ( + + {children} + + } + {...singleProps} + /> + ) + } else { + const { value, children, className, ...multipleProps } = props as AccordionMultipleProps + return ( + +
{props.children}
+ + } + {...multipleProps} + /> + ) + } + } +) as AccordionComponent + +export interface ItemAdditionalProps + extends React.ComponentPropsWithoutRef {} + +export const AccordionItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => { const [open, setOpen] = useState(false) - const { type, justified, chevronAlign } = useContext(AccordionContext) - - let triggerClasses = [__styles.variants[type].trigger] - if (justified) triggerClasses.push(__styles.justified) - if (className) triggerClasses.push(className) - - let chevronClasses = [__styles.chevron.base, __styles.chevron.align[chevronAlign]] - - if (open && !disabled) { - chevronClasses.unshift('!rotate-180') - } + let { type, justified } = useContext(AccordionContext) return ( - { setOpen(!open) }} - > - - {header} - {!disabled && ( - - )} - - -
{children}
-
-
+ {...props} + /> ) -} +}) +AccordionItem.displayName = AccordionPrimitive.Item.displayName -Accordion.Item = Item -export default Accordion +export const AccordionTrigger = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => { + const { type } = useContext(AccordionContext) + return ( + + + {children} + + + + ) +}) +AccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName + +export const AccordionContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => { + const { type } = useContext(AccordionContext) + return ( + +
{children}
+
+ ) +}) +AccordionContent.displayName = AccordionPrimitive.Content.displayName + +Accordion.Item = AccordionItem +Accordion.Content = AccordionContent +Accordion.Trigger = AccordionTrigger +export { Accordion } From 4514035a4cf266069aec6bbbd792a71c37a23c93 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Sun, 21 May 2023 22:50:11 +0800 Subject: [PATCH 020/909] Alert updated --- packages/ui/.storybook/main.ts | 2 +- .../components/Alert/Alert-old.stories.tsx | 135 ++++++++++++ .../ui/src/components/Alert/Alert-old.tsx | 84 ++++++++ .../ui/src/components/Alert/Alert.stories.tsx | 193 +++++++---------- packages/ui/src/components/Alert/Alert.tsx | 201 ++++++++++++------ 5 files changed, 426 insertions(+), 189 deletions(-) create mode 100644 packages/ui/src/components/Alert/Alert-old.stories.tsx create mode 100644 packages/ui/src/components/Alert/Alert-old.tsx diff --git a/packages/ui/.storybook/main.ts b/packages/ui/.storybook/main.ts index a166e5ddacc..90d3cf7e460 100644 --- a/packages/ui/.storybook/main.ts +++ b/packages/ui/.storybook/main.ts @@ -10,7 +10,7 @@ const config: StorybookConfig = { // // After all stories are cleaned, revert to wildcard import. stories: [ '../src/components/Accordion/Accordion.stories.tsx', - // '../src/components/Alert/Alert.stories.tsx', + '../src/components/Alert/Alert.stories.tsx', // '../src/components/Avatar/Avatar.stories.tsx', '../src/components/Button/Button.stories.tsx', // '../src/components/Checkbox/Checkbox.stories.tsx', diff --git a/packages/ui/src/components/Alert/Alert-old.stories.tsx b/packages/ui/src/components/Alert/Alert-old.stories.tsx new file mode 100644 index 00000000000..915e408018b --- /dev/null +++ b/packages/ui/src/components/Alert/Alert-old.stories.tsx @@ -0,0 +1,135 @@ +import React from 'react' + +import Alert, { AlertProps } from './Alert' + +export default { + title: 'Displays/Alerts', + component: Alert, +} + +export const Neutral = (args: AlertProps) => ( + + Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. + +) + +export const Success = (args: AlertProps) => ( + + Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. + +) + +export const SuccessWithIcon = (args: AlertProps) => ( + + Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. + +) + +export const Danger = (args: AlertProps) => ( + + Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. + +) + +export const DangerWithIcon = (args: AlertProps) => ( + + Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. + +) + +export const Info = (args: AlertProps) => ( + + Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. + +) + +export const InfoWithIcon = (args: AlertProps) => ( + + Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. + +) + +export const Warning = (args: AlertProps) => ( + + Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. + +) + +export const WarningWithIcon = (args: AlertProps) => ( + + Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. + +) + +export const Closable = (args: AlertProps) => ( + + Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. + +) + +export const WithAction = (args: AlertProps) => ( + + Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. + +) + +Neutral.args = { + title: 'Success alert with icon', + withIcon: true, +} + +Success.args = { + title: 'Success alert', + variant: 'success', +} + +SuccessWithIcon.args = { + title: 'Success alert with icon', + variant: 'success', + withIcon: true, +} + +Danger.args = { + title: 'Danger alert', + variant: 'danger', +} + +DangerWithIcon.args = { + title: 'Danger alert with icon', + variant: 'danger', + withIcon: true, +} + +Info.args = { + title: 'Info alert', + variant: 'info', +} + +InfoWithIcon.args = { + title: 'Info alert with icon', + variant: 'info', + withIcon: true, +} + +Warning.args = { + title: 'Warning alert', + variant: 'warning', +} + +WarningWithIcon.args = { + title: 'Warning alert with icon', + variant: 'warning', + withIcon: true, +} + +Closable.args = { + title: 'Closable alert', + closable: true, +} + +WithAction.args = { + title: 'Alert with action', + variant: 'warning', + withIcon: true, + actions:
Hello
, +} diff --git a/packages/ui/src/components/Alert/Alert-old.tsx b/packages/ui/src/components/Alert/Alert-old.tsx new file mode 100644 index 00000000000..cf0b96fe810 --- /dev/null +++ b/packages/ui/src/components/Alert/Alert-old.tsx @@ -0,0 +1,84 @@ +import React, { useState } from 'react' +import { IconAlertTriangle } from '../Icon/icons/IconAlertTriangle' + +import { IconInfo } from '../Icon/icons/IconInfo' +import { IconX } from '../Icon/icons/IconX' + +import styleHandler from '../../lib/theme/styleHandler' +import { IconAlertOctagon } from '../Icon/icons/IconAlertOctagon' +import { IconCheckCircle } from '../Icon/icons/IconCheckCircle' + +export interface AlertProps { + variant?: 'success' | 'danger' | 'warning' | 'info' | 'neutral' + className?: string + title: string | React.ReactNode + withIcon?: boolean + closable?: boolean + children?: React.ReactNode + icon?: React.ReactNode + actions?: React.ReactNode +} + +const icons: Record<'success' | 'danger' | 'warning' | 'info' | 'neutral', React.ReactElement> = { + danger: , + success: , + warning: , + info: , + neutral: <>, +} + +function Alert({ + variant = 'neutral', + className, + title, + withIcon, + closable, + children, + icon, + actions, +}: AlertProps) { + let __styles = styleHandler('alert') + + const [visible, setVisible] = useState(true) + + let containerClasses = [__styles.base] + containerClasses.push(__styles.variant[variant].base) + + if (className) containerClasses.push(className) + + let descriptionClasses = [__styles.description, __styles.variant[variant].description] + let closeButtonClasses = [__styles.close] + + return ( + <> + {visible && ( +
+ {withIcon ? ( +
{withIcon && icons[variant]}
+ ) : null} + {icon && icon} +
+
+

+ {title} +

+
{children}
+
+ {actions} +
+ {closable && ( + + )} +
+ )} + + ) +} + +export default Alert diff --git a/packages/ui/src/components/Alert/Alert.stories.tsx b/packages/ui/src/components/Alert/Alert.stories.tsx index 915e408018b..de5cf016871 100644 --- a/packages/ui/src/components/Alert/Alert.stories.tsx +++ b/packages/ui/src/components/Alert/Alert.stories.tsx @@ -1,135 +1,92 @@ -import React from 'react' +// Button.stories.ts|tsx -import Alert, { AlertProps } from './Alert' +import type { Meta, StoryObj } from '@storybook/react' -export default { - title: 'Displays/Alerts', +import { Alert, AlertProps } from './Alert' + +import { IconAirplay } from '../Icon/icons/IconAirplay' +import { Terminal } from 'lucide-react' + +const meta: Meta = { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/react/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ + title: 'General/Alert', component: Alert, } -export const Neutral = (args: AlertProps) => ( - - Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. - -) +export default meta -export const Success = (args: AlertProps) => ( - - Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. - -) +type Story = StoryObj -export const SuccessWithIcon = (args: AlertProps) => ( - - Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. - -) +/* + *👇 Render functions are a framework specific feature to allow you control on how the component renders. + * See https://storybook.js.org/docs/react/api/csf + * to learn how to use render functions. + */ -export const Danger = (args: AlertProps) => ( - - Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. - -) - -export const DangerWithIcon = (args: AlertProps) => ( - - Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. - -) - -export const Info = (args: AlertProps) => ( - - Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. - -) - -export const InfoWithIcon = (args: AlertProps) => ( - - Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. - -) - -export const Warning = (args: AlertProps) => ( - - Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. - -) - -export const WarningWithIcon = (args: AlertProps) => ( - - Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. - -) - -export const Closable = (args: AlertProps) => ( - - Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. - -) - -export const WithAction = (args: AlertProps) => ( - - Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. - -) - -Neutral.args = { - title: 'Success alert with icon', - withIcon: true, +export const Info = { + args: { + variant: 'info', + withIcon: true, + }, + render: ({ withIcon, variant }: AlertProps) => ( + + Info Alert + This is an informative message for your application. + + ), } -Success.args = { - title: 'Success alert', - variant: 'success', +export const Danger = { + args: { + variant: 'danger', + withIcon: true, + }, + render: ({ withIcon, variant }: AlertProps) => ( + + Danger Alert + This is a dangerous warning for your application. + + ), } -SuccessWithIcon.args = { - title: 'Success alert with icon', - variant: 'success', - withIcon: true, +export const Warning = { + args: { + variant: 'warning', + withIcon: true, + }, + render: ({ withIcon, variant }: AlertProps) => ( + + Warning Alert + This is a warning message for your application. + + ), } -Danger.args = { - title: 'Danger alert', - variant: 'danger', +export const Success = { + args: { + variant: 'success', + withIcon: true, + }, + render: ({ withIcon, variant }: AlertProps) => ( + + Success Alert + This is a successful notification for your application. + + ), } -DangerWithIcon.args = { - title: 'Danger alert with icon', - variant: 'danger', - withIcon: true, -} - -Info.args = { - title: 'Info alert', - variant: 'info', -} - -InfoWithIcon.args = { - title: 'Info alert with icon', - variant: 'info', - withIcon: true, -} - -Warning.args = { - title: 'Warning alert', - variant: 'warning', -} - -WarningWithIcon.args = { - title: 'Warning alert with icon', - variant: 'warning', - withIcon: true, -} - -Closable.args = { - title: 'Closable alert', - closable: true, -} - -WithAction.args = { - title: 'Alert with action', - variant: 'warning', - withIcon: true, - actions:
Hello
, +export const Neutral = { + args: { + variant: 'neutral', + withIcon: true, + }, + render: ({ withIcon, variant }: AlertProps) => ( + + Neutral Alert + This is a neutral message for your application. + + ), } diff --git a/packages/ui/src/components/Alert/Alert.tsx b/packages/ui/src/components/Alert/Alert.tsx index cf0b96fe810..73f58c95b2b 100644 --- a/packages/ui/src/components/Alert/Alert.tsx +++ b/packages/ui/src/components/Alert/Alert.tsx @@ -1,84 +1,145 @@ -import React, { useState } from 'react' -import { IconAlertTriangle } from '../Icon/icons/IconAlertTriangle' +import * as React from 'react' +import { VariantProps, cva } from 'class-variance-authority' +import { cn } from '@ui/lib/utils' +import { AlertCircle, AlertOctagon, AlertTriangle, Check, Info } from 'lucide-react' -import { IconInfo } from '../Icon/icons/IconInfo' -import { IconX } from '../Icon/icons/IconX' +export type AlertRootVariantsProps = VariantProps +const alertRootVariants = cva( + `relative w-full + rounded-lg border + py-4 px-6 + [&>svg]:absolute [&>svg]:text-foreground [&>svg]:left-4 [&>svg]:top-4 [&>svg+div]:translate-y-[-3px] [&:has(svg)]:pl-11`, + { + variants: { + variant: { + danger: `bg-red-200 dark:bg-red-100 text-red-1200 border-red-700 [&>svg]:text-red-1200`, + warning: `bg-amber-200 dark:bg-amber-100 border-amber-700 [&>svg]:text-amber-1200`, + info: `bg-scale-400 border-scale-500 dark:bg-scale-100 dark:border-scale-300 [&>svg]:text-scale-1200`, + success: `bg-brand-300 dark:bg-brand-100 border-brand-700 [&>svg]:text-brand-900`, + neutral: `bg-scale-300 dark:bg-scale-300 border-scale-500 [&>svg]:text-scale-900`, + }, + }, + defaultVariants: { + variant: 'info', + }, + } +) -import styleHandler from '../../lib/theme/styleHandler' -import { IconAlertOctagon } from '../Icon/icons/IconAlertOctagon' -import { IconCheckCircle } from '../Icon/icons/IconCheckCircle' +const alertTitleVariants = cva('mb-1 font-medium leading-none tracking-tight', { + variants: { + variant: { + danger: `text-red-1200`, + warning: `text-amber-1200`, + info: `text-scale-1200`, + success: `text-brand-1200`, + neutral: `text-scale-1200`, + }, + defaultVariants: { + variant: 'info', + }, + }, +}) -export interface AlertProps { - variant?: 'success' | 'danger' | 'warning' | 'info' | 'neutral' - className?: string - title: string | React.ReactNode - withIcon?: boolean - closable?: boolean - children?: React.ReactNode - icon?: React.ReactNode - actions?: React.ReactNode +const alertDescriptionVariants = cva('text-sm [&_p]:leading-relaxed', { + variants: { + variant: { + danger: 'text-red-1100', + warning: 'text-amber-1100', + info: 'text-scale-1100', + success: 'text-brand-1100', + neutral: 'text-scale-1100', + }, + defaultVariants: { + variant: 'info', + }, + }, +}) + +interface ContextValue { + variant: AlertRootVariantsProps['variant'] } -const icons: Record<'success' | 'danger' | 'warning' | 'info' | 'neutral', React.ReactElement> = { - danger: , - success: , - warning: , - info: , +const AlertContext = React.createContext({ + variant: undefined, +}) + +// Define the Alert component +interface AlertProps + extends React.HTMLAttributes, + VariantProps { + withIcon: boolean +} + +interface AlertComponent + extends React.ForwardRefExoticComponent> { + Title: typeof AlertTitle + Description: typeof AlertDescription +} + +type AlertIconVariant = Exclude +const icons: Record = { + danger: , + success: , + warning: , + info: , neutral: <>, } -function Alert({ - variant = 'neutral', - className, - title, - withIcon, - closable, - children, - icon, - actions, -}: AlertProps) { - let __styles = styleHandler('alert') +const Alert = React.forwardRef( + ({ className, withIcon, variant = 'info', children, ...props }, ref) => { + const contextValue = { + variant, + } - const [visible, setVisible] = useState(true) + return ( +
+ {withIcon && icons[variant as AlertIconVariant]} + {children} + + } + /> + ) + } +) as AlertComponent - let containerClasses = [__styles.base] - containerClasses.push(__styles.variant[variant].base) +Alert.displayName = 'Alert' - if (className) containerClasses.push(className) +// Define the AlertTitle component as a subcomponent of Alert +interface AlertTitleProps extends React.HTMLAttributes {} - let descriptionClasses = [__styles.description, __styles.variant[variant].description] - let closeButtonClasses = [__styles.close] +const AlertTitle = React.forwardRef( + ({ className, ...props }, ref) => { + const { variant } = React.useContext(AlertContext) + console.log('variant', variant) + return
+ } +) - return ( - <> - {visible && ( -
- {withIcon ? ( -
{withIcon && icons[variant]}
- ) : null} - {icon && icon} -
-
-

- {title} -

-
{children}
-
- {actions} -
- {closable && ( - - )} -
- )} - - ) -} +AlertTitle.displayName = 'AlertTitle' -export default Alert +// Define the AlertDescription component as a subcomponent of Alert +interface AlertDescriptionProps extends React.HTMLAttributes {} + +const AlertDescription = React.forwardRef( + ({ className, ...props }, ref) => { + const { variant } = React.useContext(AlertContext) + return ( +
+ ) + } +) + +AlertDescription.displayName = 'AlertDescription' + +// Attach the subcomponents to the Alert component +Alert.Title = AlertTitle +Alert.Description = AlertDescription + +// Export the Alert component +export { Alert } From 53b3514efbd71d1358a1825b532d6f06a872f1a7 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Sun, 21 May 2023 23:15:52 +0800 Subject: [PATCH 021/909] updated Badge --- packages/ui/.storybook/main.ts | 5 +- .../ui/src/components/Badge/Badge.stories.tsx | 189 +++++++++++++----- packages/ui/src/components/Badge/Badge.tsx | 85 ++++---- 3 files changed, 190 insertions(+), 89 deletions(-) diff --git a/packages/ui/.storybook/main.ts b/packages/ui/.storybook/main.ts index 90d3cf7e460..aa4cf9f637c 100644 --- a/packages/ui/.storybook/main.ts +++ b/packages/ui/.storybook/main.ts @@ -1,7 +1,7 @@ const TsconfigPathsPlugin = require('tsconfig-paths-webpack-plugin') -import type { StorybookConfig } from '@storybook/your-framework' +// import type { StorybookConfig } from '@storybook/your-framework' -const config: StorybookConfig = { +const config: any = { // // stories: [ // // '../src/components/**/*.stories.mdx', // // '../src/components/**/*.stories.@(js|jsx|ts|tsx)', @@ -11,6 +11,7 @@ const config: StorybookConfig = { stories: [ '../src/components/Accordion/Accordion.stories.tsx', '../src/components/Alert/Alert.stories.tsx', + '../src/components/Badge/Badge.stories.tsx', // '../src/components/Avatar/Avatar.stories.tsx', '../src/components/Button/Button.stories.tsx', // '../src/components/Checkbox/Checkbox.stories.tsx', diff --git a/packages/ui/src/components/Badge/Badge.stories.tsx b/packages/ui/src/components/Badge/Badge.stories.tsx index 32c5042e3bb..5567cb06464 100644 --- a/packages/ui/src/components/Badge/Badge.stories.tsx +++ b/packages/ui/src/components/Badge/Badge.stories.tsx @@ -1,64 +1,155 @@ -import { COLORS } from '../../lib/constants' -import { Badge } from './' +import type { Meta, StoryObj } from '@storybook/react' +import { Badge, BadgeProps } from './Badge' -export default { - title: 'Displays/Badge', +const meta: Meta = { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/react/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ + title: 'General/Badge', component: Badge, } -const sizes: string[] = ['small', 'large'] +export default meta -export const Default = (args: any) => Hello world +type Story = StoryObj -export const withColor = (args: any) => Hello world - -export const withDot = (args: any) => Hello world - -export const large = (args: any) => Hello world - -export const withDotLarge = (args: any) => Hello world - -export const withCustomClassNames = (args: any) => Hello world - -export const allBadges = () => ( - <> -
- {sizes.map((size, sizeIndex) => ( - <> -

{size}

-
- {COLORS.map((x, colorIndex) => ( - // @ts-ignore - - Supabase - - ))} -
- - ))} -
- -) - -Default.args = {} - -withColor.args = { - color: 'red', +export const Outline = { + args: { + variant: 'outline', + }, + render: ({ variant }: BadgeProps) => Hello World, } -withDot.args = { - dot: true, +export const Brand = { + args: { + variant: 'brand', + }, + render: ({ variant }: BadgeProps) => Hello World, } -large.args = { - size: 'large', +export const Scale = { + args: { + variant: 'scale', + }, + render: ({ variant }: BadgeProps) => Hello World, } -withDotLarge.args = { - size: 'large', - dot: true, +export const Tomato = { + args: { + variant: 'tomato', + }, + render: ({ variant }: BadgeProps) => Hello World, } -withCustomClassNames.args = { - className: 'border-teal-100 border-2', +export const Red = { + args: { + variant: 'red', + }, + render: ({ variant }: BadgeProps) => Hello World, +} + +export const Crimson = { + args: { + variant: 'crimson', + }, + render: ({ variant }: BadgeProps) => Hello World, +} + +export const Pink = { + args: { + variant: 'pink', + }, + render: ({ variant }: BadgeProps) => Hello World, +} + +export const Purple = { + args: { + variant: 'purple', + }, + render: ({ variant }: BadgeProps) => Hello World, +} + +export const Violet = { + args: { + variant: 'violet', + }, + render: ({ variant }: BadgeProps) => Hello World, +} + +export const Indigo = { + args: { + variant: 'indigo', + }, + render: ({ variant }: BadgeProps) => Hello World, +} + +export const Blue = { + args: { + variant: 'blue', + }, + render: ({ variant }: BadgeProps) => Hello World, +} + +export const Green = { + args: { + variant: 'green', + }, + render: ({ variant }: BadgeProps) => Hello World, +} + +export const Grass = { + args: { + variant: 'grass', + }, + render: ({ variant }: BadgeProps) => Hello World, +} + +export const Orange = { + args: { + variant: 'orange', + }, + render: ({ variant }: BadgeProps) => Hello World, +} + +export const Yellow = { + args: { + variant: 'yellow', + }, + render: ({ variant }: BadgeProps) => Hello World, +} + +export const Amber = { + args: { + variant: 'amber', + }, + render: ({ variant }: BadgeProps) => Hello World, +} + +export const Gold = { + args: { + variant: 'gold', + }, + render: ({ variant }: BadgeProps) => Hello World, +} + +export const Gray = { + args: { + variant: 'gray', + }, + render: ({ variant }: BadgeProps) => Hello World, +} + +export const Slate = { + args: { + variant: 'slate', + }, + render: ({ variant }: BadgeProps) => Hello World, +} + +export const Large = { + args: { + size: 'large', + }, + render: ({ size }: BadgeProps) => Hello World, } diff --git a/packages/ui/src/components/Badge/Badge.tsx b/packages/ui/src/components/Badge/Badge.tsx index af526dc7747..199d771d0f3 100644 --- a/packages/ui/src/components/Badge/Badge.tsx +++ b/packages/ui/src/components/Badge/Badge.tsx @@ -1,42 +1,51 @@ -import { AvailableColors } from '../../lib/constants' -import styleHandler from '../../lib/theme/styleHandler' +import * as React from 'react' +import { VariantProps, cva } from 'class-variance-authority' -interface Props { - color?: AvailableColors - children: string | React.ReactNode - size?: 'large' | 'small' - dot?: boolean - className?: string +import { cn } from '@ui/lib/utils' + +const badgeVariants = cva( + 'inline-flex items-center border rounded-full px-2.5 py-0.5 text-xs font-normal transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2', + { + variants: { + variant: { + outline: 'text-foreground', + brand: 'bg-brand-200 text-brand-1100 border border-brand-700', + scale: 'bg-scale-200 text-scale-1100 border border-scale-700', + tomato: `bg-tomato-200 text-tomato-1100 border border-tomato-700`, + red: `bg-red-200 text-red-1100 border border-red-700`, + crimson: `bg-crimson-200 text-crimson-1100 border border-crimson-700`, + pink: `bg-pink-200 text-pink-1100 border border-pink-700`, + purple: `bg-purple-200 text-purple-1100 border border-purple-700`, + violet: `bg-violet-200 text-violet-1100 border border-violet-700`, + indigo: `bg-indigo-200 text-indigo-1100 border border-indigo-700`, + blue: `bg-blue-200 text-blue-1100 border border-blue-700`, + green: `bg-green-200 text-green-1100 border border-green-700`, + grass: `bg-grass-200 text-grass-1100 border border-grass-700`, + orange: `bg-orange-200 text-orange-1100 border border-orange-700`, + yellow: `bg-yellow-200 text-yellow-1100 border border-yellow-700`, + amber: `bg-amber-200 text-amber-1100 border border-amber-700`, + gold: `bg-gold-200 text-gold-1100 border border-gold-700`, + gray: `bg-gray-200 text-gray-1100 border border-gray-700`, + slate: `bg-slate-200 text-slate-1100 border border-slate-700`, + }, + size: { + large: 'px-3 py-0.5 rounded-full text-sm', + }, + }, + defaultVariants: { + variant: 'scale', + }, + } +) + +export interface BadgeProps + extends React.HTMLAttributes, + VariantProps {} + +const Badge = ({ className, variant, size, ...props }: BadgeProps) => { + return
} -function Badge({ color = 'brand', children, size, dot, className }: Props) { - const __styles = styleHandler('badge') +Badge.displayName = 'Badge' - let classes = [__styles.base] - if (color) { - classes.push(__styles.color[color]) - } - if (size === 'large') { - classes.push(__styles.size.large) - } - if (className) { - classes.push(className) - } - - return ( - - {dot && ( - - - - )} - - {children} - - ) -} -export default Badge +export { Badge } From a4f6517e73a8f6ec9de896966f1772da18b802f6 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Mon, 22 May 2023 01:25:17 +0800 Subject: [PATCH 022/909] fix import issues --- package-lock.json | 6 +++++- packages/ui/.babelrc.json | 5 ++--- packages/ui/.storybook/main.ts | 17 +++-------------- packages/ui/package.json | 2 ++ 4 files changed, 12 insertions(+), 18 deletions(-) diff --git a/package-lock.json b/package-lock.json index d27e2ca9c96..b846e84fff0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -45611,7 +45611,9 @@ "tailwindcss-radix": "^1.6.0" }, "devDependencies": { + "@babel/plugin-syntax-flow": "^7.21.4", "@babel/preset-env": "^7.21.4", + "@babel/preset-flow": "^7.21.4", "@babel/preset-react": "^7.18.6", "@babel/preset-typescript": "^7.21.4", "@storybook/addon-actions": "^7.0.5", @@ -80109,7 +80111,9 @@ "ui": { "version": "file:packages/ui", "requires": { + "@babel/plugin-syntax-flow": "^7.21.4", "@babel/preset-env": "^7.21.4", + "@babel/preset-flow": "^7.21.4", "@babel/preset-react": "^7.18.6", "@babel/preset-typescript": "^7.21.4", "@headlessui/react": "^1.0.0", @@ -80167,7 +80171,7 @@ "tailwind-merge": "^1.10.0", "tailwindcss": "^3.0.15", "tailwindcss-radix": "^1.6.0", - "tsconfig-paths-webpack-plugin": "*", + "tsconfig-paths-webpack-plugin": "^4.0.1", "typescript": "4.3.4" }, "dependencies": { diff --git a/packages/ui/.babelrc.json b/packages/ui/.babelrc.json index b5cf683b7e0..104d722287c 100644 --- a/packages/ui/.babelrc.json +++ b/packages/ui/.babelrc.json @@ -1,11 +1,10 @@ { - "sourceType": "unambiguous", "presets": [ [ "@babel/preset-env", { "targets": { - "chrome": 100 + "chrome": "58" } } ], @@ -13,4 +12,4 @@ "@babel/preset-react" ], "plugins": [] -} \ No newline at end of file +} diff --git a/packages/ui/.storybook/main.ts b/packages/ui/.storybook/main.ts index aa4cf9f637c..93e7c8ba318 100644 --- a/packages/ui/.storybook/main.ts +++ b/packages/ui/.storybook/main.ts @@ -2,28 +2,18 @@ const TsconfigPathsPlugin = require('tsconfig-paths-webpack-plugin') // import type { StorybookConfig } from '@storybook/your-framework' const config: any = { - // // stories: [ - // // '../src/components/**/*.stories.mdx', - // // '../src/components/**/*.stories.@(js|jsx|ts|tsx)', - // // ], - // // TODO: Temporally Import one by one story and fix build issue. - // // After all stories are cleaned, revert to wildcard import. stories: [ '../src/components/Accordion/Accordion.stories.tsx', '../src/components/Alert/Alert.stories.tsx', '../src/components/Badge/Badge.stories.tsx', // '../src/components/Avatar/Avatar.stories.tsx', '../src/components/Button/Button.stories.tsx', - // '../src/components/Checkbox/Checkbox.stories.tsx', - // '../src/components/Collapsible/Collapsible.stories.tsx', + '../src/components/Checkbox/Checkbox.stories.tsx', + '../src/components/Collapsible/Collapsible.stories.tsx', // '../src/components/ContextMenu/ContextMenu.stories.tsx', - // '../src/components/Dropdown/Dropdown.stories.tsx', + '../src/components/Dropdown/Dropdown.stories.tsx', ], addons: [ - // '@storybook/addon-links', - // '@storybook/addon-essentials', - // '@storybook/addon-interactions', - // '@storybook/addon-actions', 'storybook-dark-mode', { name: '@storybook/addon-styling', @@ -35,7 +25,6 @@ const config: any = { }, '@storybook/addon-mdx-gfm', ], - docs: { autodocs: true, }, diff --git a/packages/ui/package.json b/packages/ui/package.json index ccdeeeefa95..256e0a39ff8 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -54,7 +54,9 @@ "tailwindcss-radix": "^1.6.0" }, "devDependencies": { + "@babel/plugin-syntax-flow": "^7.21.4", "@babel/preset-env": "^7.21.4", + "@babel/preset-flow": "^7.21.4", "@babel/preset-react": "^7.18.6", "@babel/preset-typescript": "^7.21.4", "@storybook/addon-actions": "^7.0.5", From 02ba30934c4c85c929b8529ae0afb9eabc18580f Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Mon, 22 May 2023 01:47:50 +0800 Subject: [PATCH 023/909] adding form in --- package-lock.json | 81 ++++++++- packages/ui/.storybook/main.ts | 2 + packages/ui/package.json | 7 +- packages/ui/src/components/shadcn/form.tsx | 170 ++++++++++++++++++ .../components/shadcn/form/Form.stories.tsx | 88 +++++++++ packages/ui/src/components/shadcn/input.tsx | 30 ++++ packages/ui/src/components/shadcn/label.tsx | 19 ++ 7 files changed, 394 insertions(+), 3 deletions(-) create mode 100644 packages/ui/src/components/shadcn/form.tsx create mode 100644 packages/ui/src/components/shadcn/form/Form.stories.tsx create mode 100644 packages/ui/src/components/shadcn/input.tsx create mode 100644 packages/ui/src/components/shadcn/label.tsx diff --git a/package-lock.json b/package-lock.json index b846e84fff0..9914a9fcb9d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3913,6 +3913,14 @@ "react": ">= 16" } }, + "node_modules/@hookform/resolvers": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@hookform/resolvers/-/resolvers-3.1.0.tgz", + "integrity": "sha512-z0A8K+Nxq+f83Whm/ajlwE6VtQlp/yPHZnXw7XWVPIGm1Vx0QV8KThU3BpbBRfAZ7/dYqCKKBNnQh85BkmBKkA==", + "peerDependencies": { + "react-hook-form": "^7.0.0" + } + }, "node_modules/@humanwhocodes/config-array": { "version": "0.9.5", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", @@ -37862,6 +37870,21 @@ "node": ">=6" } }, + "node_modules/react-hook-form": { + "version": "7.43.9", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.43.9.tgz", + "integrity": "sha512-AUDN3Pz2NSeoxQ7Hs6OhQhDr6gtF9YRuutGDwPQqhSUAHJSgGl2VeY3qN19MG0SucpjgDiuMJ4iC5T5uB+eaNQ==", + "engines": { + "node": ">=12.22.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/react-hook-form" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17 || ^18" + } + }, "node_modules/react-hot-toast": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/react-hot-toast/-/react-hot-toast-2.3.0.tgz", @@ -45465,6 +45488,14 @@ "resolved": "https://registry.npmjs.org/yup-password/-/yup-password-0.2.2.tgz", "integrity": "sha512-2PHfqGWtbXg4OfDV7VKFIb3hyEaYgTYpEORnFqgGAYqzENWmGzWMoeGvJg2Ohmq6maTRxhJzLZpNTITrqlZTrA==" }, + "node_modules/zod": { + "version": "3.21.4", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.21.4.tgz", + "integrity": "sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, "node_modules/zwitch": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", @@ -45574,14 +45605,17 @@ "license": "MIT", "dependencies": { "@headlessui/react": "^1.0.0", + "@hookform/resolvers": "^3.1.0", "@mertasan/tailwindcss-variables": "^2.0.1", "@radix-ui/react-accordion": "^1.1.0", "@radix-ui/react-collapsible": "^1.0.1", "@radix-ui/react-context-menu": "^2.1.2", "@radix-ui/react-dialog": "^1.0.2", "@radix-ui/react-dropdown-menu": "^2.0.3", + "@radix-ui/react-id": "^0.0.6", "@radix-ui/react-popover": "^1.0.4", "@radix-ui/react-portal": "^1.0.1", + "@radix-ui/react-slot": "^1.0.1", "@radix-ui/react-tabs": "^1.0.2", "@supabase/auth-helpers-react": "^0.3.1", "@tailwindcss/forms": "^0.4.0", @@ -45602,13 +45636,15 @@ "react-copy-to-clipboard": "^5.1.0", "react-countdown": "^2.3.5", "react-feather": "^2.0.10", + "react-hook-form": "^7.43.9", "react-markdown": "^8.0.3", "react-syntax-highlighter": "^15.5.0", "remark-gfm": "^3.0.1", "sse.js": "^0.6.1", "tailwind-merge": "^1.10.0", "tailwindcss": "^3.0.15", - "tailwindcss-radix": "^1.6.0" + "tailwindcss-radix": "^1.6.0", + "zod": "^3.21.4" }, "devDependencies": { "@babel/plugin-syntax-flow": "^7.21.4", @@ -45639,6 +45675,17 @@ "typescript": "4.3.4" } }, + "packages/ui/node_modules/@radix-ui/react-id": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-0.0.6.tgz", + "integrity": "sha512-PzmraF34fYggsYvTIZVJ5S68WMp3aKUN3HkSmGnz4zn9zpRjkAbbg7Xn3ueQI3FQsLWKgyUfnpsmWFDndpcqYg==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0" + } + }, "packages/ui/node_modules/@storybook/addon-actions": { "version": "7.0.9", "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-7.0.9.tgz", @@ -49173,6 +49220,12 @@ "integrity": "sha512-JJCXydOFWMDpCP4q13iEplA503MQO3xLoZiKum+955ZCtHINWnx26CUxVxxFQu/uLb4LW3ge15ZpzIkXKkJ8oQ==", "requires": {} }, + "@hookform/resolvers": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@hookform/resolvers/-/resolvers-3.1.0.tgz", + "integrity": "sha512-z0A8K+Nxq+f83Whm/ajlwE6VtQlp/yPHZnXw7XWVPIGm1Vx0QV8KThU3BpbBRfAZ7/dYqCKKBNnQh85BkmBKkA==", + "requires": {} + }, "@humanwhocodes/config-array": { "version": "0.9.5", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", @@ -75511,6 +75564,12 @@ } } }, + "react-hook-form": { + "version": "7.43.9", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.43.9.tgz", + "integrity": "sha512-AUDN3Pz2NSeoxQ7Hs6OhQhDr6gtF9YRuutGDwPQqhSUAHJSgGl2VeY3qN19MG0SucpjgDiuMJ4iC5T5uB+eaNQ==", + "requires": {} + }, "react-hot-toast": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/react-hot-toast/-/react-hot-toast-2.3.0.tgz", @@ -80117,14 +80176,17 @@ "@babel/preset-react": "^7.18.6", "@babel/preset-typescript": "^7.21.4", "@headlessui/react": "^1.0.0", + "@hookform/resolvers": "^3.1.0", "@mertasan/tailwindcss-variables": "^2.0.1", "@radix-ui/react-accordion": "^1.1.0", "@radix-ui/react-collapsible": "^1.0.1", "@radix-ui/react-context-menu": "^2.1.2", "@radix-ui/react-dialog": "^1.0.2", "@radix-ui/react-dropdown-menu": "^2.0.3", + "@radix-ui/react-id": "^0.0.6", "@radix-ui/react-popover": "^1.0.4", "@radix-ui/react-portal": "^1.0.1", + "@radix-ui/react-slot": "^1.0.1", "@radix-ui/react-tabs": "^1.0.2", "@storybook/addon-actions": "^7.0.5", "@storybook/addon-mdx-gfm": "^7.0.5", @@ -80160,6 +80222,7 @@ "react-copy-to-clipboard": "^5.1.0", "react-countdown": "^2.3.5", "react-feather": "^2.0.10", + "react-hook-form": "^7.43.9", "react-markdown": "^8.0.3", "react-syntax-highlighter": "^15.5.0", "remark-gfm": "^3.0.1", @@ -80172,9 +80235,18 @@ "tailwindcss": "^3.0.15", "tailwindcss-radix": "^1.6.0", "tsconfig-paths-webpack-plugin": "^4.0.1", - "typescript": "4.3.4" + "typescript": "4.3.4", + "zod": "^3.21.4" }, "dependencies": { + "@radix-ui/react-id": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-0.0.6.tgz", + "integrity": "sha512-PzmraF34fYggsYvTIZVJ5S68WMp3aKUN3HkSmGnz4zn9zpRjkAbbg7Xn3ueQI3FQsLWKgyUfnpsmWFDndpcqYg==", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, "@storybook/addon-actions": { "version": "7.0.9", "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-7.0.9.tgz", @@ -82642,6 +82714,11 @@ "resolved": "https://registry.npmjs.org/yup-password/-/yup-password-0.2.2.tgz", "integrity": "sha512-2PHfqGWtbXg4OfDV7VKFIb3hyEaYgTYpEORnFqgGAYqzENWmGzWMoeGvJg2Ohmq6maTRxhJzLZpNTITrqlZTrA==" }, + "zod": { + "version": "3.21.4", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.21.4.tgz", + "integrity": "sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==" + }, "zwitch": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", diff --git a/packages/ui/.storybook/main.ts b/packages/ui/.storybook/main.ts index 93e7c8ba318..b138249d283 100644 --- a/packages/ui/.storybook/main.ts +++ b/packages/ui/.storybook/main.ts @@ -12,6 +12,8 @@ const config: any = { '../src/components/Collapsible/Collapsible.stories.tsx', // '../src/components/ContextMenu/ContextMenu.stories.tsx', '../src/components/Dropdown/Dropdown.stories.tsx', + + '../src/components/shadcn/form/Form.stories.tsx', ], addons: [ 'storybook-dark-mode', diff --git a/packages/ui/package.json b/packages/ui/package.json index 256e0a39ff8..221d6ee632d 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -17,14 +17,17 @@ }, "dependencies": { "@headlessui/react": "^1.0.0", + "@hookform/resolvers": "^3.1.0", "@mertasan/tailwindcss-variables": "^2.0.1", "@radix-ui/react-accordion": "^1.1.0", "@radix-ui/react-collapsible": "^1.0.1", "@radix-ui/react-context-menu": "^2.1.2", "@radix-ui/react-dialog": "^1.0.2", "@radix-ui/react-dropdown-menu": "^2.0.3", + "@radix-ui/react-id": "^0.0.6", "@radix-ui/react-popover": "^1.0.4", "@radix-ui/react-portal": "^1.0.1", + "@radix-ui/react-slot": "^1.0.1", "@radix-ui/react-tabs": "^1.0.2", "@supabase/auth-helpers-react": "^0.3.1", "@tailwindcss/forms": "^0.4.0", @@ -45,13 +48,15 @@ "react-copy-to-clipboard": "^5.1.0", "react-countdown": "^2.3.5", "react-feather": "^2.0.10", + "react-hook-form": "^7.43.9", "react-markdown": "^8.0.3", "react-syntax-highlighter": "^15.5.0", "remark-gfm": "^3.0.1", "sse.js": "^0.6.1", "tailwind-merge": "^1.10.0", "tailwindcss": "^3.0.15", - "tailwindcss-radix": "^1.6.0" + "tailwindcss-radix": "^1.6.0", + "zod": "^3.21.4" }, "devDependencies": { "@babel/plugin-syntax-flow": "^7.21.4", diff --git a/packages/ui/src/components/shadcn/form.tsx b/packages/ui/src/components/shadcn/form.tsx new file mode 100644 index 00000000000..80674dfe20b --- /dev/null +++ b/packages/ui/src/components/shadcn/form.tsx @@ -0,0 +1,170 @@ +import * as React from 'react' +import * as LabelPrimitive from '@radix-ui/react-label' +import { Slot } from '@radix-ui/react-slot' +import { + Controller, + ControllerProps, + FieldPath, + FieldValues, + FormProvider, + useFormContext, +} from 'react-hook-form' + +import { cn } from '@ui/lib/utils' +import { Label } from '@ui/components/shadcn/label' + +import { useId } from '@radix-ui/react-id' + +const Form = FormProvider + +type FormFieldContextValue< + TFieldValues extends FieldValues = FieldValues, + TName extends FieldPath = FieldPath +> = { + name: TName +} + +const FormFieldContext = React.createContext({} as FormFieldContextValue) + +const FormField = < + TFieldValues extends FieldValues = FieldValues, + TName extends FieldPath = FieldPath +>({ + ...props +}: ControllerProps) => { + return ( + + + + ) +} + +const useFormField = () => { + const fieldContext = React.useContext(FormFieldContext) + const itemContext = React.useContext(FormItemContext) + const { getFieldState, formState } = useFormContext() + + const fieldState = getFieldState(fieldContext.name, formState) + + if (!fieldContext) { + throw new Error('useFormField should be used within ') + } + + const { id } = itemContext + + return { + id, + name: fieldContext.name, + formItemId: `${id}-form-item`, + formDescriptionId: `${id}-form-item-description`, + formMessageId: `${id}-form-item-message`, + ...fieldState, + } +} + +type FormItemContextValue = { + id: string +} + +const FormItemContext = React.createContext({} as FormItemContextValue) + +const FormItem = React.forwardRef>( + ({ className, ...props }, ref) => { + // const id = React.useId() + const id = useId() + console.log('id', id) + return ( + +
+ + ) + } +) +FormItem.displayName = 'FormItem' + +const FormLabel = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => { + const { error, formItemId } = useFormField() + + return ( + email settings. + )} /> - + ) }, } + +export const CalendarExample = { + args: {}, + render: ({}: any) => { + const FormSchema = z.object({ + dob: z.date({ + required_error: 'A date of birth is required.', + }), + }) + + const form = useForm>({ + resolver: zodResolver(FormSchema), + }) + + function onSubmit(data: z.infer) { + toast({ + title: 'You submitted the following values:', + description: ( +
+            {JSON.stringify(data, null, 2)}
+          
+ ), + }) + } + + return ( +
+ + ( + + Date of birth + + + + + + + + date > new Date() || date < new Date('1900-01-01')} + initialFocus + /> + + + Your date of birth is used to calculate your age. + + + )} + /> + + + + ) + }, +} diff --git a/packages/ui/src/components/shadcn/input.tsx b/packages/ui/src/components/shadcn/input.tsx index 16a52c8bf59..97902149ee0 100644 --- a/packages/ui/src/components/shadcn/input.tsx +++ b/packages/ui/src/components/shadcn/input.tsx @@ -10,13 +10,7 @@ const Input = React.forwardRef( , + React.ComponentPropsWithoutRef +>(({ className, align = 'center', sideOffset = 4, ...props }, ref) => ( + + + +)) +PopoverContent.displayName = PopoverPrimitive.Content.displayName + +export { Popover, PopoverTrigger, PopoverContent } diff --git a/packages/ui/src/components/shadcn/select.tsx b/packages/ui/src/components/shadcn/select.tsx new file mode 100644 index 00000000000..917c7cf6bc0 --- /dev/null +++ b/packages/ui/src/components/shadcn/select.tsx @@ -0,0 +1,118 @@ +import * as React from 'react' +import * as SelectPrimitive from '@radix-ui/react-select' +import { Check, ChevronDown } from 'lucide-react' + +import { cn } from '@ui/lib/utils' + +const Select = SelectPrimitive.Root + +const SelectGroup = SelectPrimitive.Group + +const SelectValue = SelectPrimitive.Value + +const SelectTrigger = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + + {children} + + + + +)) +SelectTrigger.displayName = SelectPrimitive.Trigger.displayName + +const SelectContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, position = 'popper', ...props }, ref) => ( + + + + {children} + + + +)) +SelectContent.displayName = SelectPrimitive.Content.displayName + +const SelectLabel = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +SelectLabel.displayName = SelectPrimitive.Label.displayName + +const SelectItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + + + + + + + + {children} + +)) +SelectItem.displayName = SelectPrimitive.Item.displayName + +const SelectSeparator = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +SelectSeparator.displayName = SelectPrimitive.Separator.displayName + +export { + Select, + SelectGroup, + SelectValue, + SelectTrigger, + SelectContent, + SelectLabel, + SelectItem, + SelectSeparator, +} diff --git a/packages/ui/src/components/shadcn/toast.tsx b/packages/ui/src/components/shadcn/toast.tsx new file mode 100644 index 00000000000..0596ac420ff --- /dev/null +++ b/packages/ui/src/components/shadcn/toast.tsx @@ -0,0 +1,122 @@ +import * as React from 'react' +import * as ToastPrimitives from '@radix-ui/react-toast' +import { VariantProps, cva } from 'class-variance-authority' +import { X } from 'lucide-react' + +import { cn } from '@ui/lib/utils' + +const ToastProvider = ToastPrimitives.Provider + +const ToastViewport = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +ToastViewport.displayName = ToastPrimitives.Viewport.displayName + +const toastVariants = cva( + 'data-[swipe=move]:transition-none group relative pointer-events-auto flex w-full items-center justify-between space-x-4 overflow-hidden rounded-md border p-6 pr-8 shadow-lg transition-all data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80 data-[state=open]:slide-in-from-top-full data-[state=open]:sm:slide-in-from-bottom-full data-[state=closed]:slide-out-to-right-full', + { + variants: { + variant: { + default: 'bg-background border', + destructive: + 'group destructive border-destructive bg-destructive text-destructive-foreground', + }, + }, + defaultVariants: { + variant: 'default', + }, + } +) + +const Toast = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & VariantProps +>(({ className, variant, ...props }, ref) => { + return ( + + ) +}) +Toast.displayName = ToastPrimitives.Root.displayName + +const ToastAction = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +ToastAction.displayName = ToastPrimitives.Action.displayName + +const ToastClose = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + + + +)) +ToastClose.displayName = ToastPrimitives.Close.displayName + +const ToastTitle = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +ToastTitle.displayName = ToastPrimitives.Title.displayName + +const ToastDescription = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +ToastDescription.displayName = ToastPrimitives.Description.displayName + +type ToastProps = React.ComponentPropsWithoutRef + +type ToastActionElement = React.ReactElement + +export { + type ToastProps, + type ToastActionElement, + ToastProvider, + ToastViewport, + Toast, + ToastTitle, + ToastDescription, + ToastClose, + ToastAction, +} diff --git a/packages/ui/src/components/shadcn/use-toast.tsx b/packages/ui/src/components/shadcn/use-toast.tsx new file mode 100644 index 00000000000..c4cbb92e510 --- /dev/null +++ b/packages/ui/src/components/shadcn/use-toast.tsx @@ -0,0 +1,187 @@ +// Inspired by react-hot-toast library +import * as React from 'react' + +import { ToastActionElement, type ToastProps } from '@ui/components/shadcn/toast' + +const TOAST_LIMIT = 1 +const TOAST_REMOVE_DELAY = 1000000 + +type ToasterToast = ToastProps & { + id: string + title?: React.ReactNode + description?: React.ReactNode + action?: ToastActionElement +} + +const actionTypes = { + ADD_TOAST: 'ADD_TOAST', + UPDATE_TOAST: 'UPDATE_TOAST', + DISMISS_TOAST: 'DISMISS_TOAST', + REMOVE_TOAST: 'REMOVE_TOAST', +} as const + +let count = 0 + +function genId() { + count = (count + 1) % Number.MAX_VALUE + return count.toString() +} + +type ActionType = typeof actionTypes + +type Action = + | { + type: ActionType['ADD_TOAST'] + toast: ToasterToast + } + | { + type: ActionType['UPDATE_TOAST'] + toast: Partial + } + | { + type: ActionType['DISMISS_TOAST'] + toastId?: ToasterToast['id'] + } + | { + type: ActionType['REMOVE_TOAST'] + toastId?: ToasterToast['id'] + } + +interface State { + toasts: ToasterToast[] +} + +const toastTimeouts = new Map>() + +const addToRemoveQueue = (toastId: string) => { + if (toastTimeouts.has(toastId)) { + return + } + + const timeout = setTimeout(() => { + toastTimeouts.delete(toastId) + dispatch({ + type: 'REMOVE_TOAST', + toastId: toastId, + }) + }, TOAST_REMOVE_DELAY) + + toastTimeouts.set(toastId, timeout) +} + +export const reducer = (state: State, action: Action): State => { + switch (action.type) { + case 'ADD_TOAST': + return { + ...state, + toasts: [action.toast, ...state.toasts].slice(0, TOAST_LIMIT), + } + + case 'UPDATE_TOAST': + return { + ...state, + toasts: state.toasts.map((t) => (t.id === action.toast.id ? { ...t, ...action.toast } : t)), + } + + case 'DISMISS_TOAST': { + const { toastId } = action + + // ! Side effects ! - This could be extracted into a dismissToast() action, + // but I'll keep it here for simplicity + if (toastId) { + addToRemoveQueue(toastId) + } else { + state.toasts.forEach((toast) => { + addToRemoveQueue(toast.id) + }) + } + + return { + ...state, + toasts: state.toasts.map((t) => + t.id === toastId || toastId === undefined + ? { + ...t, + open: false, + } + : t + ), + } + } + case 'REMOVE_TOAST': + if (action.toastId === undefined) { + return { + ...state, + toasts: [], + } + } + return { + ...state, + toasts: state.toasts.filter((t) => t.id !== action.toastId), + } + } +} + +const listeners: Array<(state: State) => void> = [] + +let memoryState: State = { toasts: [] } + +function dispatch(action: Action) { + memoryState = reducer(memoryState, action) + listeners.forEach((listener) => { + listener(memoryState) + }) +} + +interface Toast extends Omit {} + +function toast({ ...props }: Toast) { + const id = genId() + + const update = (props: ToasterToast) => + dispatch({ + type: 'UPDATE_TOAST', + toast: { ...props, id }, + }) + const dismiss = () => dispatch({ type: 'DISMISS_TOAST', toastId: id }) + + dispatch({ + type: 'ADD_TOAST', + toast: { + ...props, + id, + open: true, + onOpenChange: (open) => { + if (!open) dismiss() + }, + }, + }) + + return { + id: id, + dismiss, + update, + } +} + +function useToast() { + const [state, setState] = React.useState(memoryState) + + React.useEffect(() => { + listeners.push(setState) + return () => { + const index = listeners.indexOf(setState) + if (index > -1) { + listeners.splice(index, 1) + } + } + }, [state]) + + return { + ...state, + toast, + dismiss: (toastId?: string) => dispatch({ type: 'DISMISS_TOAST', toastId }), + } +} + +export { useToast, toast } diff --git a/packages/ui/tailwind.config.js b/packages/ui/tailwind.config.js index 1dff83a81f0..d717c4d8d49 100644 --- a/packages/ui/tailwind.config.js +++ b/packages/ui/tailwind.config.js @@ -1,4 +1,5 @@ const config = require('config/tailwind.config') +const { fontFamily } = require('tailwindcss/defaultTheme') module.exports = config({ content: [ @@ -11,6 +12,13 @@ module.exports = config({ './_blog/*.mdx', ], theme: { + container: { + center: true, + padding: '2rem', + screens: { + '2xl': '1400px', + }, + }, extend: { keyframes: { 'flash-code': { @@ -22,8 +30,63 @@ module.exports = config({ 'flash-code': 'flash-code 1s forwards', 'flash-code-slow': 'flash-code 2s forwards', }, + colors: { + border: 'hsl(var(--border))', + input: 'hsl(var(--input))', + ring: 'hsl(var(--ring))', + background: 'hsl(var(--background))', + foreground: 'hsl(var(--foreground))', + primary: { + DEFAULT: 'hsl(var(--primary))', + foreground: 'hsl(var(--primary-foreground))', + }, + secondary: { + DEFAULT: 'hsl(var(--secondary))', + foreground: 'hsl(var(--secondary-foreground))', + }, + destructive: { + DEFAULT: 'hsl(var(--destructive))', + foreground: 'hsl(var(--destructive-foreground))', + }, + muted: { + DEFAULT: 'hsl(var(--muted))', + foreground: 'hsl(var(--muted-foreground))', + }, + accent: { + DEFAULT: 'hsl(var(--accent))', + foreground: 'hsl(var(--accent-foreground))', + }, + popover: { + DEFAULT: 'hsl(var(--popover))', + foreground: 'hsl(var(--popover-foreground))', + }, + card: { + DEFAULT: 'hsl(var(--card))', + foreground: 'hsl(var(--card-foreground))', + }, + }, + borderRadius: { + lg: `var(--radius)`, + md: `calc(var(--radius) - 2px)`, + sm: 'calc(var(--radius) - 4px)', + }, + fontFamily: { + sans: ['var(--font-sans)', ...fontFamily.sans], + }, + keyframes: { + 'accordion-down': { + from: { height: 0 }, + to: { height: 'var(--radix-accordion-content-height)' }, + }, + 'accordion-up': { + from: { height: 'var(--radix-accordion-content-height)' }, + to: { height: 0 }, + }, + }, + animation: { + 'accordion-down': 'accordion-down 0.2s ease-out', + 'accordion-up': 'accordion-up 0.2s ease-out', + }, }, }, }) - -// module.exports = require('config/tailwind.config') From bdaa61c45e18615be414f1ab5d64d9ecba1c4a16 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Tue, 23 May 2023 17:53:59 +0800 Subject: [PATCH 025/909] add dropdown and stories directory --- packages/ui/.storybook/main.ts | 3 +- .../src/components/shadcn/dropdown-menu.tsx | 185 ++++++++++++++++++ .../shadcn/stories/DropdownMenu.stories.tsx | 146 ++++++++++++++ .../shadcn/{form => stories}/Form.stories.tsx | 6 +- 4 files changed, 336 insertions(+), 4 deletions(-) create mode 100644 packages/ui/src/components/shadcn/dropdown-menu.tsx create mode 100644 packages/ui/src/components/shadcn/stories/DropdownMenu.stories.tsx rename packages/ui/src/components/shadcn/{form => stories}/Form.stories.tsx (98%) diff --git a/packages/ui/.storybook/main.ts b/packages/ui/.storybook/main.ts index b138249d283..4fa3c2f60e0 100644 --- a/packages/ui/.storybook/main.ts +++ b/packages/ui/.storybook/main.ts @@ -12,8 +12,9 @@ const config: any = { '../src/components/Collapsible/Collapsible.stories.tsx', // '../src/components/ContextMenu/ContextMenu.stories.tsx', '../src/components/Dropdown/Dropdown.stories.tsx', + // '../src/components/Form/Form.stories.tsx', - '../src/components/shadcn/form/Form.stories.tsx', + '../src/components/shadcn/stories/**/*.tsx', ], addons: [ 'storybook-dark-mode', diff --git a/packages/ui/src/components/shadcn/dropdown-menu.tsx b/packages/ui/src/components/shadcn/dropdown-menu.tsx new file mode 100644 index 00000000000..5d6d2d03b87 --- /dev/null +++ b/packages/ui/src/components/shadcn/dropdown-menu.tsx @@ -0,0 +1,185 @@ +'use client' + +import * as React from 'react' +import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu' +import { Check, ChevronRight, Circle } from 'lucide-react' + +import { cn } from '@ui/lib/utils' + +const DropdownMenu = DropdownMenuPrimitive.Root + +const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger + +const DropdownMenuGroup = DropdownMenuPrimitive.Group + +const DropdownMenuPortal = DropdownMenuPrimitive.Portal + +const DropdownMenuSub = DropdownMenuPrimitive.Sub + +const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup + +const DropdownMenuSubTrigger = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & { + inset?: boolean + } +>(({ className, inset, children, ...props }, ref) => ( + + {children} + + +)) +DropdownMenuSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName + +const DropdownMenuSubContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +DropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName + +const DropdownMenuContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, sideOffset = 4, ...props }, ref) => ( + + + +)) +DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName + +const DropdownMenuItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & { + inset?: boolean + } +>(({ className, inset, ...props }, ref) => ( + +)) +DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName + +const DropdownMenuCheckboxItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, checked, ...props }, ref) => ( + + + + + + + {children} + +)) +DropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive.CheckboxItem.displayName + +const DropdownMenuRadioItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + + + + + + + {children} + +)) +DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName + +const DropdownMenuLabel = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & { + inset?: boolean + } +>(({ className, inset, ...props }, ref) => ( + +)) +DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName + +const DropdownMenuSeparator = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName + +const DropdownMenuShortcut = ({ className, ...props }: React.HTMLAttributes) => { + return +} +DropdownMenuShortcut.displayName = 'DropdownMenuShortcut' + +export { + DropdownMenu, + DropdownMenuTrigger, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuCheckboxItem, + DropdownMenuRadioItem, + DropdownMenuLabel, + DropdownMenuSeparator, + DropdownMenuShortcut, + DropdownMenuGroup, + DropdownMenuPortal, + DropdownMenuSub, + DropdownMenuSubContent, + DropdownMenuSubTrigger, + DropdownMenuRadioGroup, +} diff --git a/packages/ui/src/components/shadcn/stories/DropdownMenu.stories.tsx b/packages/ui/src/components/shadcn/stories/DropdownMenu.stories.tsx new file mode 100644 index 00000000000..72a7a1f7e2b --- /dev/null +++ b/packages/ui/src/components/shadcn/stories/DropdownMenu.stories.tsx @@ -0,0 +1,146 @@ +import type { Meta, StoryObj } from '@storybook/react' +import { + Cloud, + CreditCard, + Github, + Keyboard, + LifeBuoy, + LogOut, + Mail, + MessageSquare, + Plus, + PlusCircle, + Settings, + User, + UserPlus, + Users, +} from 'lucide-react' + +import { Button } from '@ui/components/shadcn/button' +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuGroup, + DropdownMenuItem, + DropdownMenuLabel, + DropdownMenuPortal, + DropdownMenuSeparator, + DropdownMenuShortcut, + DropdownMenuSub, + DropdownMenuSubContent, + DropdownMenuSubTrigger, + DropdownMenuTrigger, +} from '@ui/components/shadcn/dropdown-menu' + +const meta: Meta = { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/react/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ + title: 'shadcn/Dropdow Menu', + component: DropdownMenu, +} + +export default meta + +type Story = StoryObj + +/* + *👇 Render functions are a framework specific feature to allow you control on how the component renders. + * See https://storybook.js.org/docs/react/api/csf + * to learn how to use render functions. + */ + +export const Default = { + args: { + // children: 'Hello world', + // type: 'primary', + }, + render: ({}) => ( + + + + + + My Account + + + + + Profile + ⇧⌘P + + + + Billing + ⌘B + + + + Settings + ⌘S + + + + Keyboard shortcuts + ⌘K + + + + + + + Team + + + + + Invite users + + + + + + Email + + + + Message + + + + + More... + + + + + + + New Team + ⌘+T + + + + + + GitHub + + + + Support + + + + API + + + + + Log out + ⇧⌘Q + + + + ), +} diff --git a/packages/ui/src/components/shadcn/form/Form.stories.tsx b/packages/ui/src/components/shadcn/stories/Form.stories.tsx similarity index 98% rename from packages/ui/src/components/shadcn/form/Form.stories.tsx rename to packages/ui/src/components/shadcn/stories/Form.stories.tsx index edbeed4af12..e95b83311dc 100644 --- a/packages/ui/src/components/shadcn/form/Form.stories.tsx +++ b/packages/ui/src/components/shadcn/stories/Form.stories.tsx @@ -3,7 +3,7 @@ import { zodResolver } from '@hookform/resolvers/zod' import { IdProvider } from '@radix-ui/react-id' import type { Meta, StoryObj } from '@storybook/react' -import { Button } from './../button' +import { Button } from '../button' import { cn } from '@ui/lib/utils' import { format } from 'date-fns' import { CalendarIcon } from 'lucide-react' @@ -21,8 +21,8 @@ import { FormItem, FormLabel, FormMessage, -} from './../form' -import { Input } from './../input' +} from '../form' +import { Input } from '../input' const meta: Meta = { /* 👇 The title prop is optional. From 5f0fa068947c14418cccf20d9bd818f24b584732 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Tue, 23 May 2023 17:54:04 +0800 Subject: [PATCH 026/909] fix animation --- packages/ui/src/components/Alert/Alert.tsx | 6 +++--- packages/ui/tailwind.config.js | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/ui/src/components/Alert/Alert.tsx b/packages/ui/src/components/Alert/Alert.tsx index 73f58c95b2b..a89ea6ce8d2 100644 --- a/packages/ui/src/components/Alert/Alert.tsx +++ b/packages/ui/src/components/Alert/Alert.tsx @@ -1,7 +1,7 @@ -import * as React from 'react' -import { VariantProps, cva } from 'class-variance-authority' import { cn } from '@ui/lib/utils' -import { AlertCircle, AlertOctagon, AlertTriangle, Check, Info } from 'lucide-react' +import { VariantProps, cva } from 'class-variance-authority' +import { AlertOctagon, AlertTriangle, Check, Info } from 'lucide-react' +import * as React from 'react' export type AlertRootVariantsProps = VariantProps const alertRootVariants = cva( diff --git a/packages/ui/tailwind.config.js b/packages/ui/tailwind.config.js index d717c4d8d49..be1b40a860b 100644 --- a/packages/ui/tailwind.config.js +++ b/packages/ui/tailwind.config.js @@ -89,4 +89,5 @@ module.exports = config({ }, }, }, + plugins: [require('tailwindcss-animate')], }) From cff1c275ed63879e8217110a7b74a7822417250e Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Tue, 23 May 2023 19:33:46 +0800 Subject: [PATCH 027/909] fix issue with styles --- apps/www/components/ImageFadeStack.tsx | 3 +- package-lock.json | 127 ++++++++++++++++++- packages/ui/.storybook/preview.css | 25 ++-- packages/ui/build/css/themes/dark.css | 2 +- packages/ui/build/css/themes/light.css | 4 +- packages/ui/index.tsx | 3 + packages/ui/internals/tokens/build-tokens.js | 3 +- packages/ui/package.json | 2 + 8 files changed, 151 insertions(+), 18 deletions(-) diff --git a/apps/www/components/ImageFadeStack.tsx b/apps/www/components/ImageFadeStack.tsx index 34075797046..b8f7236d408 100644 --- a/apps/www/components/ImageFadeStack.tsx +++ b/apps/www/components/ImageFadeStack.tsx @@ -1,7 +1,6 @@ import Image from 'next/image' import React, { useState, useEffect } from 'react' -import { IconPauseCircle, IconPlayCircle } from 'ui' -import { cn } from '~/../../packages/ui/src/utils/cn' +import { IconPauseCircle, IconPlayCircle, cn } from 'ui' interface ImageFadeStackProps { autoplay?: boolean diff --git a/package-lock.json b/package-lock.json index c55cecd9c09..5d7e33ef8ad 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6156,6 +6156,14 @@ "resolved": "https://registry.npmjs.org/@radix-ui/colors/-/colors-0.1.8.tgz", "integrity": "sha512-jwRMXYwC0hUo0mv6wGpuw254Pd9p/R6Td5xsRpOmaWkUHlooNWqVcadgyzlRumMq3xfOTXwJReU0Jv+EIy4Jbw==" }, + "node_modules/@radix-ui/number": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.0.0.tgz", + "integrity": "sha512-Ofwh/1HX69ZfJRiRBMTy7rgjAzHmwe4kW9C9Y99HTRUcYLUuVT0KESFj15rPjRgKJs20GPq8Bm5aEDJ8DuA3vA==", + "dependencies": { + "@babel/runtime": "^7.13.10" + } + }, "node_modules/@radix-ui/primitive": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.0.tgz", @@ -6385,6 +6393,19 @@ "react": "^16.8 || ^17.0 || ^18.0" } }, + "node_modules/@radix-ui/react-label": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.0.1.tgz", + "integrity": "sha512-qcfbS3B8hTYmEO44RNcXB6pegkxRsJIbdxTMu0PEX0Luv5O2DvTIwwVYxQfUwLpM88EL84QRPLOLgwUSApMsLQ==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.2" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, "node_modules/@radix-ui/react-menu": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.0.4.tgz", @@ -6525,6 +6546,39 @@ "react-dom": "^16.8 || ^17.0 || ^18.0" } }, + "node_modules/@radix-ui/react-select": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-1.2.1.tgz", + "integrity": "sha512-GULRMITaOHNj79BZvQs3iZO0+f2IgI8g5HDhMi7Bnc13t7IlG86NFtOCfTLme4PNZdEtU+no+oGgcl6IFiphpQ==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/number": "1.0.0", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-collection": "1.0.2", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-direction": "1.0.0", + "@radix-ui/react-dismissable-layer": "1.0.3", + "@radix-ui/react-focus-guards": "1.0.0", + "@radix-ui/react-focus-scope": "1.0.2", + "@radix-ui/react-id": "1.0.0", + "@radix-ui/react-popper": "1.1.1", + "@radix-ui/react-portal": "1.0.2", + "@radix-ui/react-primitive": "1.0.2", + "@radix-ui/react-slot": "1.0.1", + "@radix-ui/react-use-callback-ref": "1.0.0", + "@radix-ui/react-use-controllable-state": "1.0.0", + "@radix-ui/react-use-layout-effect": "1.0.0", + "@radix-ui/react-use-previous": "1.0.0", + "@radix-ui/react-visually-hidden": "1.0.2", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.5.5" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + } + }, "node_modules/@radix-ui/react-slot": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.1.tgz", @@ -6627,6 +6681,17 @@ "react": "^16.8 || ^17.0 || ^18.0" } }, + "node_modules/@radix-ui/react-use-previous": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.0.0.tgz", + "integrity": "sha512-RG2K8z/K7InnOKpq6YLDmT49HGjNmrK+fr82UCVKT2sW0GYfVnYp4wZWBooT/EYfQ5faA9uIjvsuMMhH61rheg==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, "node_modules/@radix-ui/react-use-rect": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.0.0.tgz", @@ -45621,8 +45686,10 @@ "@radix-ui/react-dialog": "^1.0.2", "@radix-ui/react-dropdown-menu": "^2.0.3", "@radix-ui/react-id": "^0.0.6", + "@radix-ui/react-label": "^2.0.1", "@radix-ui/react-popover": "^1.0.4", "@radix-ui/react-portal": "^1.0.1", + "@radix-ui/react-select": "^1.2.1", "@radix-ui/react-slot": "^1.0.1", "@radix-ui/react-tabs": "^1.0.2", "@supabase/auth-helpers-react": "^0.3.1", @@ -50949,6 +51016,14 @@ "resolved": "https://registry.npmjs.org/@radix-ui/colors/-/colors-0.1.8.tgz", "integrity": "sha512-jwRMXYwC0hUo0mv6wGpuw254Pd9p/R6Td5xsRpOmaWkUHlooNWqVcadgyzlRumMq3xfOTXwJReU0Jv+EIy4Jbw==" }, + "@radix-ui/number": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.0.0.tgz", + "integrity": "sha512-Ofwh/1HX69ZfJRiRBMTy7rgjAzHmwe4kW9C9Y99HTRUcYLUuVT0KESFj15rPjRgKJs20GPq8Bm5aEDJ8DuA3vA==", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, "@radix-ui/primitive": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.0.tgz", @@ -51127,6 +51202,15 @@ "@radix-ui/react-use-layout-effect": "1.0.0" } }, + "@radix-ui/react-label": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.0.1.tgz", + "integrity": "sha512-qcfbS3B8hTYmEO44RNcXB6pegkxRsJIbdxTMu0PEX0Luv5O2DvTIwwVYxQfUwLpM88EL84QRPLOLgwUSApMsLQ==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.2" + } + }, "@radix-ui/react-menu": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.0.4.tgz", @@ -51239,6 +51323,35 @@ "@radix-ui/react-use-controllable-state": "1.0.0" } }, + "@radix-ui/react-select": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-1.2.1.tgz", + "integrity": "sha512-GULRMITaOHNj79BZvQs3iZO0+f2IgI8g5HDhMi7Bnc13t7IlG86NFtOCfTLme4PNZdEtU+no+oGgcl6IFiphpQ==", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/number": "1.0.0", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-collection": "1.0.2", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-direction": "1.0.0", + "@radix-ui/react-dismissable-layer": "1.0.3", + "@radix-ui/react-focus-guards": "1.0.0", + "@radix-ui/react-focus-scope": "1.0.2", + "@radix-ui/react-id": "1.0.0", + "@radix-ui/react-popper": "1.1.1", + "@radix-ui/react-portal": "1.0.2", + "@radix-ui/react-primitive": "1.0.2", + "@radix-ui/react-slot": "1.0.1", + "@radix-ui/react-use-callback-ref": "1.0.0", + "@radix-ui/react-use-controllable-state": "1.0.0", + "@radix-ui/react-use-layout-effect": "1.0.0", + "@radix-ui/react-use-previous": "1.0.0", + "@radix-ui/react-visually-hidden": "1.0.2", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.5.5" + } + }, "@radix-ui/react-slot": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.1.tgz", @@ -51318,6 +51431,14 @@ "@babel/runtime": "^7.13.10" } }, + "@radix-ui/react-use-previous": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.0.0.tgz", + "integrity": "sha512-RG2K8z/K7InnOKpq6YLDmT49HGjNmrK+fr82UCVKT2sW0GYfVnYp4wZWBooT/EYfQ5faA9uIjvsuMMhH61rheg==", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, "@radix-ui/react-use-rect": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.0.0.tgz", @@ -80230,8 +80351,10 @@ "@radix-ui/react-dialog": "^1.0.2", "@radix-ui/react-dropdown-menu": "^2.0.3", "@radix-ui/react-id": "^0.0.6", + "@radix-ui/react-label": "^2.0.1", "@radix-ui/react-popover": "^1.0.4", "@radix-ui/react-portal": "^1.0.1", + "@radix-ui/react-select": "*", "@radix-ui/react-slot": "^1.0.1", "@radix-ui/react-tabs": "^1.0.2", "@storybook/addon-actions": "^7.0.5", @@ -80279,9 +80402,9 @@ "storybook": "^7.0.5", "storybook-dark-mode": "^3.0.0", "style-dictionary": "^3.7.1", - "tailwind-merge": "^1.10.0", + "tailwind-merge": "^1.12.0", "tailwindcss": "^3.0.15", - "tailwindcss-animate": "*", + "tailwindcss-animate": "^1.0.5", "tailwindcss-radix": "^1.6.0", "tsconfig-paths-webpack-plugin": "^4.0.1", "typescript": "4.3.4", diff --git a/packages/ui/.storybook/preview.css b/packages/ui/.storybook/preview.css index e03c2e1e6f7..3f34bda100e 100644 --- a/packages/ui/.storybook/preview.css +++ b/packages/ui/.storybook/preview.css @@ -14,14 +14,16 @@ } */ @layer base { :root { - --background: 0 0% 100%; - --foreground: 222.2 47.4% 11.2%; + --background: var(--theme-variables-background-body); /* --background: 0 0% 100%; */ + --foreground: var(--theme-variables-background); /* --foreground: 222.2 47.4% 11.2%; */ --muted: 210 40% 96.1%; --muted-foreground: 215.4 16.3% 46.9%; - --popover: 0 0% 100%; - --popover-foreground: 222.2 47.4% 11.2%; + --popover: var(--theme-variables-background); /* --popover: 0 0% 100%; */ + --popover-foreground: var( + --text-color-body-default + ); /* --popover-foreground: 222.2 47.4% 11.2%; */ --card: 0 0% 100%; --card-foreground: 222.2 47.4% 11.2%; @@ -47,19 +49,21 @@ } .dark { - --background: 224 71% 4%; - --foreground: 213 31% 91%; + --background: var(--theme-variables-background-body); /* --background: 224 71% 4%; */ + --foreground: var(--theme-variables-background); /* --foreground: 213 31% 91%; */ - --muted: 223 47% 11%; + --muted: var(--background-color-body); /* --muted: 223 47% 11%; */ --muted-foreground: 215.4 16.3% 56.9%; - --popover: 224 71% 4%; - --popover-foreground: 215 20.2% 65.1%; + --popover: var(--theme-variables-background); /* --popover: 224 71% 4%; */ + --popover-foreground: var( + --text-color-body-default + ); /* --popover-foreground: 215 20.2% 65.1%; */ --card: 224 71% 4%; --card-foreground: 213 31% 91%; - --border: 216 34% 17%; + --border: var(--border-color-default); /* --border: 216 34% 17%; */ --input: 216 34% 17%; --primary: 210 40% 98%; @@ -95,4 +99,5 @@ .light .docs-story, .dark .docs-story { @apply bg-background text-foreground; + font-family: 'Circular std'; } diff --git a/packages/ui/build/css/themes/dark.css b/packages/ui/build/css/themes/dark.css index a4d60d733a8..ee6386aca3e 100644 --- a/packages/ui/build/css/themes/dark.css +++ b/packages/ui/build/css/themes/dark.css @@ -1,6 +1,6 @@ /** * Do not edit directly - * Generated on Sat, 20 May 2023 09:00:49 GMT + * Generated on Tue, 23 May 2023 11:26:05 GMT */ .dark { diff --git a/packages/ui/build/css/themes/light.css b/packages/ui/build/css/themes/light.css index 0f4e33acc9f..2a74cbca46a 100644 --- a/packages/ui/build/css/themes/light.css +++ b/packages/ui/build/css/themes/light.css @@ -1,9 +1,9 @@ /** * Do not edit directly - * Generated on Sat, 20 May 2023 09:00:49 GMT + * Generated on Tue, 23 May 2023 11:26:05 GMT */ -.light { +:root { --utility-github-background: 0deg 0% 100%; --utility-mix-negative: 0deg 0% 100%; --utility-mix-positive: 0deg 0% 0%; diff --git a/packages/ui/index.tsx b/packages/ui/index.tsx index b6b1c095d9a..8565a9b0731 100644 --- a/packages/ui/index.tsx +++ b/packages/ui/index.tsx @@ -67,6 +67,9 @@ export * from './src/components/Command' // banners export * from './src/layout/banners' +// utils +export * from './src/lib/utils/cn' + // config // export { default as Config } from './../ui.config' diff --git a/packages/ui/internals/tokens/build-tokens.js b/packages/ui/internals/tokens/build-tokens.js index 1478218edc7..85f518e8abe 100644 --- a/packages/ui/internals/tokens/build-tokens.js +++ b/packages/ui/internals/tokens/build-tokens.js @@ -178,6 +178,7 @@ themeFiles.map(function (filePath, i) { const buildTailwindFiles = filePath.includes('root') // i === 0 const fileName = fileNameCleaner(filePath) const rootTheme = filePath.includes('root') + console.log('here', filePath ?? 'no file path', rootTheme) const SD = StyleDictionary.extend( getStyleDictionaryConfig( // determine wether to include the root theme properties with each theme @@ -185,7 +186,7 @@ themeFiles.map(function (filePath, i) { rootTheme ? 'dark' : fileName, 'themes', buildTailwindFiles, - false + fileName === 'light' ? true : false ) ) SD.buildAllPlatforms() diff --git a/packages/ui/package.json b/packages/ui/package.json index 97661ec88e8..ec27bcb311e 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -25,8 +25,10 @@ "@radix-ui/react-dialog": "^1.0.2", "@radix-ui/react-dropdown-menu": "^2.0.3", "@radix-ui/react-id": "^0.0.6", + "@radix-ui/react-label": "^2.0.1", "@radix-ui/react-popover": "^1.0.4", "@radix-ui/react-portal": "^1.0.1", + "@radix-ui/react-select": "^1.2.1", "@radix-ui/react-slot": "^1.0.1", "@radix-ui/react-tabs": "^1.0.2", "@supabase/auth-helpers-react": "^0.3.1", From 9745cdcb971f0e668c305c0babb03c147a27bead Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Tue, 23 May 2023 20:27:59 +0800 Subject: [PATCH 028/909] move all new components out --- apps/docs/components/Navigation/Footer.tsx | 166 ++++---- .../Navigation/NavigationMenu/HomeMenu.tsx | 6 +- .../NavigationMenuRefListItems.tsx | 14 +- .../Accordion/Accordion-old.stories.tsx | 166 -------- .../components/Accordion/Accordion-old.tsx | 137 ------- .../Accordion/Accordion.stories.tsx | 227 +++++++---- .../ui/src/components/Accordion/Accordion.tsx | 319 ++++++---------- .../components/Alert/Alert-old.stories.tsx | 135 ------- .../ui/src/components/Alert/Alert-old.tsx | 84 ---- .../ui/src/components/Alert/Alert.stories.tsx | 193 ++++++---- packages/ui/src/components/Alert/Alert.tsx | 201 ++++------ packages/ui/src/components/Alert/index.tsx | 2 +- packages/ui/src/components/Badge/Badge.tsx | 2 +- .../ui/src/components/Button/Button-old.tsx | 159 -------- .../components/Button/Button.stories-old.tsx | 234 ------------ .../src/components/Button/Button.stories.tsx | 359 ++++++++++-------- .../ui/src/components/Button/Button.test.tsx | 2 +- packages/ui/src/components/Button/Button.tsx | 303 +++++++-------- packages/ui/src/components/Button/index.tsx | 2 +- .../updated/Accordion/Accordion.stories.tsx | 79 ++++ .../shadcn/updated/Accordion/Accordion.tsx | 235 ++++++++++++ .../shadcn/updated/Alert/Alert.stories.tsx | 92 +++++ .../components/shadcn/updated/Alert/Alert.tsx | 145 +++++++ .../shadcn/updated/Button/Button.stories.tsx | 175 +++++++++ .../shadcn/updated/Button/Button.tsx | 192 ++++++++++ 25 files changed, 1802 insertions(+), 1827 deletions(-) delete mode 100644 packages/ui/src/components/Accordion/Accordion-old.stories.tsx delete mode 100644 packages/ui/src/components/Accordion/Accordion-old.tsx delete mode 100644 packages/ui/src/components/Alert/Alert-old.stories.tsx delete mode 100644 packages/ui/src/components/Alert/Alert-old.tsx delete mode 100644 packages/ui/src/components/Button/Button-old.tsx delete mode 100644 packages/ui/src/components/Button/Button.stories-old.tsx create mode 100644 packages/ui/src/components/shadcn/updated/Accordion/Accordion.stories.tsx create mode 100644 packages/ui/src/components/shadcn/updated/Accordion/Accordion.tsx create mode 100644 packages/ui/src/components/shadcn/updated/Alert/Alert.stories.tsx create mode 100644 packages/ui/src/components/shadcn/updated/Alert/Alert.tsx create mode 100644 packages/ui/src/components/shadcn/updated/Button/Button.stories.tsx create mode 100644 packages/ui/src/components/shadcn/updated/Button/Button.tsx diff --git a/apps/docs/components/Navigation/Footer.tsx b/apps/docs/components/Navigation/Footer.tsx index e14892a8f39..c9347b74647 100644 --- a/apps/docs/components/Navigation/Footer.tsx +++ b/apps/docs/components/Navigation/Footer.tsx @@ -55,105 +55,85 @@ const Footer = () => ( ))}
- - - - + + +
diff --git a/apps/docs/components/Navigation/NavigationMenu/HomeMenu.tsx b/apps/docs/components/Navigation/NavigationMenu/HomeMenu.tsx index fb51bb98ba7..761d23a317c 100644 --- a/apps/docs/components/Navigation/NavigationMenu/HomeMenu.tsx +++ b/apps/docs/components/Navigation/NavigationMenu/HomeMenu.tsx @@ -1,12 +1,10 @@ import { useTheme } from 'common/Providers' -import Image from 'next/image' import Link from 'next/link' import { useRouter } from 'next/router' import { Fragment } from 'react' -import { Badge } from '~/../../packages/ui' -import { cn } from 'ui/src/utils/cn' -import { HOMEPAGE_MENU_ITEMS } from './NavigationMenu.constants' +import { Badge, cn } from 'ui' import HomeMenuIconPicker from './HomeMenuIconPicker' +import { HOMEPAGE_MENU_ITEMS } from './NavigationMenu.constants' const NavigationMenuHome = () => { const router = useRouter() diff --git a/apps/docs/components/Navigation/NavigationMenu/NavigationMenuRefListItems.tsx b/apps/docs/components/Navigation/NavigationMenu/NavigationMenuRefListItems.tsx index 0069b311827..59c0cca96e6 100644 --- a/apps/docs/components/Navigation/NavigationMenu/NavigationMenuRefListItems.tsx +++ b/apps/docs/components/Navigation/NavigationMenu/NavigationMenuRefListItems.tsx @@ -1,18 +1,14 @@ import * as Accordion from '@radix-ui/react-accordion' +import Image from 'next/image' import Link from 'next/link' import { useRouter } from 'next/router' -import { IconChevronLeft, IconChevronUp } from 'ui' -import * as NavItems from './NavigationMenu.constants' - -import Image from 'next/image' - -import RevVersionDropdown from '~/components/RefVersionDropdown' -import { useMenuActiveRefId } from '~/hooks/useMenuState' - import React, { Fragment } from 'react' -import { cn } from 'ui/src/utils/cn' +import { IconChevronLeft, IconChevronUp, cn } from 'ui' +import RevVersionDropdown from '~/components/RefVersionDropdown' import { ICommonItem, ICommonSection } from '~/components/reference/Reference.types' +import { useMenuActiveRefId } from '~/hooks/useMenuState' import HomeMenuIconPicker from './HomeMenuIconPicker' +import * as NavItems from './NavigationMenu.constants' import { deepFilterSections } from './NavigationMenu.utils' const HeaderLink = React.memo(function HeaderLink(props: any) { diff --git a/packages/ui/src/components/Accordion/Accordion-old.stories.tsx b/packages/ui/src/components/Accordion/Accordion-old.stories.tsx deleted file mode 100644 index e11fc9edc0c..00000000000 --- a/packages/ui/src/components/Accordion/Accordion-old.stories.tsx +++ /dev/null @@ -1,166 +0,0 @@ -import React from 'react' - -import Accordion, { AccordionProps } from './Accordion' -import { Badge } from '../Badge' - -export default { - title: 'Displays/Accordion', - component: Accordion, -} - -export const OneItem = (args: AccordionProps) => ( - - - Title of the thing - Test badge - - } - id="first" - > - - Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. - - - -) - -export const MultipleItems = (args: AccordionProps) => ( - - Title of the thing - } - id={'1'} - > - - Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. - - - Title of the thing - } - id={'2'} - > - - Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. - - - Title of the thing - } - id={'3'} - > - - Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. - - - Title of the thing - } - id={'4'} - > - - Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. - - - -) - -export const Bordered = (args: AccordionProps) => ( - - Title of the thing - } - id={'1'} - > - - Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. - - - Title of the thing - } - id={'2'} - > - - Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. - - - Title of the thing - } - id={'3'} - > - - Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. - - - Title of the thing - } - id={'4'} - > - - Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. - - - -) - -Bordered.args = { - type: 'bordered', -} - -export const LeftAlignedChevron = (args: AccordionProps) => ( - - - First item - Test badge - - } - id="first" - > - - Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. - - - - Second item - - } - id="second" - > - - Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. - - - -) - -// export const withDefaultActive = Multiple.bind({}) -// withDefaultActive.args = { -// defaultActiveId: [1], -// } - -// export const withIconLeft = Multiple.bind({}) -// withIconLeft.args = { -// iconPosition: 'left', -// } - -// export const withCustomIcon = Multiple.bind({}) -// withCustomIcon.args = { -// icon: , -// } diff --git a/packages/ui/src/components/Accordion/Accordion-old.tsx b/packages/ui/src/components/Accordion/Accordion-old.tsx deleted file mode 100644 index 524bf7b9de9..00000000000 --- a/packages/ui/src/components/Accordion/Accordion-old.tsx +++ /dev/null @@ -1,137 +0,0 @@ -import React, { createContext, useContext, useState } from 'react' - -import styleHandler from '../../lib/theme/styleHandler' - -import * as RadixAccordion from '@radix-ui/react-accordion' -import { IconChevronDown } from '../Icon/icons/IconChevronDown' -import { IconChevronUp } from '../Icon/icons/IconChevronUp' - -type Type = 'default' | 'bordered' -type Size = 'tiny' | 'small' | 'medium' | 'large' | 'xlarge' -type Align = 'left' | 'right' - -interface ContextValue { - bordered?: boolean - type: Type - justified: Boolean - chevronAlign: Align -} - -const AccordionContext = createContext({ - chevronAlign: 'left', - justified: true, - type: 'default', -}) - -export interface AccordionProps { - children?: React.ReactNode - className?: string - - onChange?: (item: string | string[]) => void - openBehaviour: 'single' | 'multiple' - type?: Type - defaultValue?: string | string[] | undefined - justified?: Boolean - chevronAlign?: Align -} - -function Accordion({ - children, - className, - onChange, - openBehaviour = 'multiple', - type = 'default', - defaultValue = undefined, - justified = false, - chevronAlign = 'left', -}: AccordionProps) { - const __styles = styleHandler('accordion') - - let containerClasses = [__styles.variants[type].base] - - if (className) { - containerClasses.push(className) - } - - const contextValue = { - chevronAlign, - justified, - type, - defaultValue, - } - - function handleOnChange(e: string | string[]) { - if (onChange) onChange(e) - const value = e == typeof String ? e.split(' ') : e - // setCurrentItems(e) - // console.log('about to change state') - // currentItems = e - // console.log('currentItems', currentItems) - } - - return ( - <> - -
{children}
- - } - >
- - ) -} - -interface ItemProps { - children?: React.ReactNode - className?: string - header: React.ReactNode - id: string - icon?: React.ReactNode - disabled?: boolean -} - -export function Item({ children, className, header, id, disabled }: ItemProps) { - const __styles = styleHandler('accordion') - const [open, setOpen] = useState(false) - - const { type, justified, chevronAlign } = useContext(AccordionContext) - - let triggerClasses = [__styles.variants[type].trigger] - if (justified) triggerClasses.push(__styles.justified) - if (className) triggerClasses.push(className) - - let chevronClasses = [__styles.chevron.base, __styles.chevron.align[chevronAlign]] - - if (open && !disabled) { - chevronClasses.unshift('!rotate-180') - } - - return ( - { - setOpen(!open) - }} - > - - {header} - {!disabled && ( - - )} - - -
{children}
-
-
- ) -} - -Accordion.Item = Item -export default Accordion diff --git a/packages/ui/src/components/Accordion/Accordion.stories.tsx b/packages/ui/src/components/Accordion/Accordion.stories.tsx index 25886206394..e11fc9edc0c 100644 --- a/packages/ui/src/components/Accordion/Accordion.stories.tsx +++ b/packages/ui/src/components/Accordion/Accordion.stories.tsx @@ -1,79 +1,166 @@ -// Button.stories.ts|tsx +import React from 'react' -import type { Meta, StoryObj } from '@storybook/react' - -import { Accordion, AccordionItem } from './Accordion' +import Accordion, { AccordionProps } from './Accordion' import { Badge } from '../Badge' -const meta: Meta = { - /* 👇 The title prop is optional. - * See https://storybook.js.org/docs/react/configure/overview#configure-story-loading - * to learn how to generate automatic titles - */ - title: 'General/Accordion', +export default { + title: 'Displays/Accordion', component: Accordion, } -export default meta - -type Story = StoryObj - -/* - *👇 Render functions are a framework specific feature to allow you control on how the component renders. - * See https://storybook.js.org/docs/react/api/csf - * to learn how to use render functions. - */ - -export const Default = { - args: { - type: 'default', - }, - render: ({ children, type }: any) => ( - - - +export const OneItem = (args: AccordionProps) => ( + + Title of the thing - - Yes. It adheres to the WAI-ARIA design pattern. - - - Is it styled? - - Yes. It comes with default styles that matches the other components' aesthetic. - - - - Is it animated? - - Yes. It's animated by default, but you can disable it if you prefer. - - - - ), + Test badge + + } + id="first" + > + + Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. + + + +) + +export const MultipleItems = (args: AccordionProps) => ( + + Title of the thing + } + id={'1'} + > + + Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. + + + Title of the thing + } + id={'2'} + > + + Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. + + + Title of the thing + } + id={'3'} + > + + Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. + + + Title of the thing + } + id={'4'} + > + + Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. + + + +) + +export const Bordered = (args: AccordionProps) => ( + + Title of the thing + } + id={'1'} + > + + Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. + + + Title of the thing + } + id={'2'} + > + + Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. + + + Title of the thing + } + id={'3'} + > + + Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. + + + Title of the thing + } + id={'4'} + > + + Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. + + + +) + +Bordered.args = { + type: 'bordered', } -export const Bordered = { - args: { - type: 'bordered', - }, - render: ({ children, type }: any) => ( - - - Is it accessible? - Yes. It adheres to the WAI-ARIA design pattern. - - - Is it styled? - - Yes. It comes with default styles that matches the other components' aesthetic. - - - - Is it animated? - - Yes. It's animated by default, but you can disable it if you prefer. - - - - ), -} +export const LeftAlignedChevron = (args: AccordionProps) => ( + + + First item + Test badge + + } + id="first" + > + + Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. + + + + Second item + + } + id="second" + > + + Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. + + + +) + +// export const withDefaultActive = Multiple.bind({}) +// withDefaultActive.args = { +// defaultActiveId: [1], +// } + +// export const withIconLeft = Multiple.bind({}) +// withIconLeft.args = { +// iconPosition: 'left', +// } + +// export const withCustomIcon = Multiple.bind({}) +// withCustomIcon.args = { +// icon: , +// } diff --git a/packages/ui/src/components/Accordion/Accordion.tsx b/packages/ui/src/components/Accordion/Accordion.tsx index 80a8cbd7d3e..524bf7b9de9 100644 --- a/packages/ui/src/components/Accordion/Accordion.tsx +++ b/packages/ui/src/components/Accordion/Accordion.tsx @@ -1,234 +1,137 @@ -import * as AccordionPrimitive from '@radix-ui/react-accordion' -import { cn } from '@ui/lib/utils' -import { VariantProps, cva, cx } from 'class-variance-authority' -import { ChevronDown } from 'lucide-react' import React, { createContext, useContext, useState } from 'react' -export type AccordionRootVariantsProps = VariantProps -const accordionRootVariants = cva('flex flex-col', { - variants: { - type: { - default: 'space-y-3', - bordered: '-space-y-px', - }, - defaultVariants: { - type: 'default', - }, - }, -}) +import styleHandler from '../../lib/theme/styleHandler' -export type AccordionItemVariantsProps = VariantProps -const accordionItemVariants = cva( - 'group first:rounded-tl-md first:rounded-tr-md last:rounded-bl-md last:rounded-br-md', - { - variants: { - type: { - default: 'overflow-hidden', - bordered: 'border border-scale-700', - }, - justified: { - true: 'justify-between', - false: '', - }, - }, - } -) +import * as RadixAccordion from '@radix-ui/react-accordion' +import { IconChevronDown } from '../Icon/icons/IconChevronDown' +import { IconChevronUp } from '../Icon/icons/IconChevronUp' -const accordionTriggerVariants = cva( - `flex flex-row items-center w-full text-left cursor-pointer focus-visible:ring-1 focus-visible:z-10 ring-scale-1100 - justify-between transition-all hover:underline [&[data-state=open]>svg]:rotate-180`, - { - variants: { - type: { - default: 'gap-3', - bordered: ` - px-6 py-4 - font-medium text-base bg-transparent - transition-colors hover:bg-scale-200 - overflow-hidden - group-first:rounded-tl-md group-first:rounded-tr-md - group-last:rounded-bl-md group-last:rounded-br-md`, - }, - }, - } -) - -const accordionContentVariants = cva('pb-4 pt-0', { - variants: { - type: { - default: '', - bordered: 'px-6', - }, - }, -}) - -type Type = AccordionRootVariantsProps['type'] -type Align = 'left' | 'right' | undefined +type Type = 'default' | 'bordered' +type Size = 'tiny' | 'small' | 'medium' | 'large' | 'xlarge' +type Align = 'left' | 'right' interface ContextValue { - chevronAlign: Align - justified: boolean + bordered?: boolean type: Type - defaultValue: AccordionPrimitive.AccordionImplSingleProps['defaultValue'] + justified: Boolean + chevronAlign: Align } -interface AdditionalProps { - openBehaviour: 'single' | 'multiple' - variant?: Type - // Add other additional props here - onChange?: (item: string | string[]) => void - type?: Type - justified?: AccordionItemVariantsProps['justified'] - chevronAlign?: Align -} - -interface AccordionComponent - extends React.ForwardRefExoticComponent< - ExtendedAccordionProps & React.RefAttributes - > { - Item: typeof AccordionItem - Content: typeof AccordionContent - Trigger: typeof AccordionTrigger -} - -export interface AccordionSingleProps extends AccordionPrimitive.AccordionImplSingleProps { - openBehaviour: 'single' - value?: string - // Add other props specific to single accordion -} - -export interface AccordionMultipleProps extends AccordionPrimitive.AccordionImplMultipleProps { - openBehaviour: 'multiple' - value?: string[] - // Add other props specific to multiple accordion -} - -type ExtendedAccordionProps = (AccordionSingleProps | AccordionMultipleProps) & AdditionalProps - const AccordionContext = createContext({ chevronAlign: 'left', - justified: false, // Set the default value to false - type: undefined, - defaultValue: undefined, + justified: true, + type: 'default', }) -const Accordion: AccordionComponent = React.forwardRef( - ({ openBehaviour, type, chevronAlign, justified, defaultValue, ...props }, ref) => { - function handleOnChange(e: string | string[]) { - if (props.onChange) props.onChange(e) - } +export interface AccordionProps { + children?: React.ReactNode + className?: string - const contextValue = { - chevronAlign, - justified: justified || false, // Provide a default value of false - type: type || 'default', // Provide a default value for the type - defaultValue: Array.isArray(defaultValue) ? defaultValue.join('') : defaultValue, // Convert array to string - } + onChange?: (item: string | string[]) => void + openBehaviour: 'single' | 'multiple' + type?: Type + defaultValue?: string | string[] | undefined + justified?: Boolean + chevronAlign?: Align +} - if (openBehaviour === 'single') { - const { value, children, className, ...singleProps } = props as AccordionSingleProps - return ( - - {children} - - } - {...singleProps} - /> - ) - } else { - const { value, children, className, ...multipleProps } = props as AccordionMultipleProps - return ( - -
{props.children}
- - } - {...multipleProps} - /> - ) - } +function Accordion({ + children, + className, + onChange, + openBehaviour = 'multiple', + type = 'default', + defaultValue = undefined, + justified = false, + chevronAlign = 'left', +}: AccordionProps) { + const __styles = styleHandler('accordion') + + let containerClasses = [__styles.variants[type].base] + + if (className) { + containerClasses.push(className) } -) as AccordionComponent -export interface ItemAdditionalProps - extends React.ComponentPropsWithoutRef {} + const contextValue = { + chevronAlign, + justified, + type, + defaultValue, + } -export const AccordionItem = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => { - const [open, setOpen] = useState(false) - - let { type, justified } = useContext(AccordionContext) + function handleOnChange(e: string | string[]) { + if (onChange) onChange(e) + const value = e == typeof String ? e.split(' ') : e + // setCurrentItems(e) + // console.log('about to change state') + // currentItems = e + // console.log('currentItems', currentItems) + } return ( - + +
{children}
+ + } + >
+ + ) +} + +interface ItemProps { + children?: React.ReactNode + className?: string + header: React.ReactNode + id: string + icon?: React.ReactNode + disabled?: boolean +} + +export function Item({ children, className, header, id, disabled }: ItemProps) { + const __styles = styleHandler('accordion') + const [open, setOpen] = useState(false) + + const { type, justified, chevronAlign } = useContext(AccordionContext) + + let triggerClasses = [__styles.variants[type].trigger] + if (justified) triggerClasses.push(__styles.justified) + if (className) triggerClasses.push(className) + + let chevronClasses = [__styles.chevron.base, __styles.chevron.align[chevronAlign]] + + if (open && !disabled) { + chevronClasses.unshift('!rotate-180') + } + + return ( + { setOpen(!open) }} - {...props} - /> - ) -}) -AccordionItem.displayName = AccordionPrimitive.Item.displayName - -export const AccordionTrigger = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, children, ...props }, ref) => { - const { type } = useContext(AccordionContext) - return ( - - - {children} - - - - ) -}) -AccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName - -export const AccordionContent = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, children, ...props }, ref) => { - const { type } = useContext(AccordionContext) - return ( - -
{children}
-
+ + {header} + {!disabled && ( + + )} + + +
{children}
+
+
) -}) -AccordionContent.displayName = AccordionPrimitive.Content.displayName +} -Accordion.Item = AccordionItem -Accordion.Content = AccordionContent -Accordion.Trigger = AccordionTrigger -export { Accordion } +Accordion.Item = Item +export default Accordion diff --git a/packages/ui/src/components/Alert/Alert-old.stories.tsx b/packages/ui/src/components/Alert/Alert-old.stories.tsx deleted file mode 100644 index 915e408018b..00000000000 --- a/packages/ui/src/components/Alert/Alert-old.stories.tsx +++ /dev/null @@ -1,135 +0,0 @@ -import React from 'react' - -import Alert, { AlertProps } from './Alert' - -export default { - title: 'Displays/Alerts', - component: Alert, -} - -export const Neutral = (args: AlertProps) => ( - - Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. - -) - -export const Success = (args: AlertProps) => ( - - Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. - -) - -export const SuccessWithIcon = (args: AlertProps) => ( - - Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. - -) - -export const Danger = (args: AlertProps) => ( - - Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. - -) - -export const DangerWithIcon = (args: AlertProps) => ( - - Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. - -) - -export const Info = (args: AlertProps) => ( - - Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. - -) - -export const InfoWithIcon = (args: AlertProps) => ( - - Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. - -) - -export const Warning = (args: AlertProps) => ( - - Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. - -) - -export const WarningWithIcon = (args: AlertProps) => ( - - Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. - -) - -export const Closable = (args: AlertProps) => ( - - Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. - -) - -export const WithAction = (args: AlertProps) => ( - - Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. - -) - -Neutral.args = { - title: 'Success alert with icon', - withIcon: true, -} - -Success.args = { - title: 'Success alert', - variant: 'success', -} - -SuccessWithIcon.args = { - title: 'Success alert with icon', - variant: 'success', - withIcon: true, -} - -Danger.args = { - title: 'Danger alert', - variant: 'danger', -} - -DangerWithIcon.args = { - title: 'Danger alert with icon', - variant: 'danger', - withIcon: true, -} - -Info.args = { - title: 'Info alert', - variant: 'info', -} - -InfoWithIcon.args = { - title: 'Info alert with icon', - variant: 'info', - withIcon: true, -} - -Warning.args = { - title: 'Warning alert', - variant: 'warning', -} - -WarningWithIcon.args = { - title: 'Warning alert with icon', - variant: 'warning', - withIcon: true, -} - -Closable.args = { - title: 'Closable alert', - closable: true, -} - -WithAction.args = { - title: 'Alert with action', - variant: 'warning', - withIcon: true, - actions:
Hello
, -} diff --git a/packages/ui/src/components/Alert/Alert-old.tsx b/packages/ui/src/components/Alert/Alert-old.tsx deleted file mode 100644 index cf0b96fe810..00000000000 --- a/packages/ui/src/components/Alert/Alert-old.tsx +++ /dev/null @@ -1,84 +0,0 @@ -import React, { useState } from 'react' -import { IconAlertTriangle } from '../Icon/icons/IconAlertTriangle' - -import { IconInfo } from '../Icon/icons/IconInfo' -import { IconX } from '../Icon/icons/IconX' - -import styleHandler from '../../lib/theme/styleHandler' -import { IconAlertOctagon } from '../Icon/icons/IconAlertOctagon' -import { IconCheckCircle } from '../Icon/icons/IconCheckCircle' - -export interface AlertProps { - variant?: 'success' | 'danger' | 'warning' | 'info' | 'neutral' - className?: string - title: string | React.ReactNode - withIcon?: boolean - closable?: boolean - children?: React.ReactNode - icon?: React.ReactNode - actions?: React.ReactNode -} - -const icons: Record<'success' | 'danger' | 'warning' | 'info' | 'neutral', React.ReactElement> = { - danger: , - success: , - warning: , - info: , - neutral: <>, -} - -function Alert({ - variant = 'neutral', - className, - title, - withIcon, - closable, - children, - icon, - actions, -}: AlertProps) { - let __styles = styleHandler('alert') - - const [visible, setVisible] = useState(true) - - let containerClasses = [__styles.base] - containerClasses.push(__styles.variant[variant].base) - - if (className) containerClasses.push(className) - - let descriptionClasses = [__styles.description, __styles.variant[variant].description] - let closeButtonClasses = [__styles.close] - - return ( - <> - {visible && ( -
- {withIcon ? ( -
{withIcon && icons[variant]}
- ) : null} - {icon && icon} -
-
-

- {title} -

-
{children}
-
- {actions} -
- {closable && ( - - )} -
- )} - - ) -} - -export default Alert diff --git a/packages/ui/src/components/Alert/Alert.stories.tsx b/packages/ui/src/components/Alert/Alert.stories.tsx index de5cf016871..611c47ee072 100644 --- a/packages/ui/src/components/Alert/Alert.stories.tsx +++ b/packages/ui/src/components/Alert/Alert.stories.tsx @@ -1,92 +1,135 @@ -// Button.stories.ts|tsx +import React from 'react' -import type { Meta, StoryObj } from '@storybook/react' +import Alert, { AlertProps } from '../shadcn/updated/Alert/Alert' -import { Alert, AlertProps } from './Alert' - -import { IconAirplay } from '../Icon/icons/IconAirplay' -import { Terminal } from 'lucide-react' - -const meta: Meta = { - /* 👇 The title prop is optional. - * See https://storybook.js.org/docs/react/configure/overview#configure-story-loading - * to learn how to generate automatic titles - */ - title: 'General/Alert', +export default { + title: 'Displays/Alerts', component: Alert, } -export default meta +export const Neutral = (args: AlertProps) => ( + + Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. + +) -type Story = StoryObj +export const Success = (args: AlertProps) => ( + + Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. + +) -/* - *👇 Render functions are a framework specific feature to allow you control on how the component renders. - * See https://storybook.js.org/docs/react/api/csf - * to learn how to use render functions. - */ +export const SuccessWithIcon = (args: AlertProps) => ( + + Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. + +) -export const Info = { - args: { - variant: 'info', - withIcon: true, - }, - render: ({ withIcon, variant }: AlertProps) => ( - - Info Alert - This is an informative message for your application. - - ), +export const Danger = (args: AlertProps) => ( + + Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. + +) + +export const DangerWithIcon = (args: AlertProps) => ( + + Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. + +) + +export const Info = (args: AlertProps) => ( + + Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. + +) + +export const InfoWithIcon = (args: AlertProps) => ( + + Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. + +) + +export const Warning = (args: AlertProps) => ( + + Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. + +) + +export const WarningWithIcon = (args: AlertProps) => ( + + Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. + +) + +export const Closable = (args: AlertProps) => ( + + Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. + +) + +export const WithAction = (args: AlertProps) => ( + + Lorem ipsum dolor sit amet consectetur adipisicing elit. Consequatur amet labore. + +) + +Neutral.args = { + title: 'Success alert with icon', + withIcon: true, } -export const Danger = { - args: { - variant: 'danger', - withIcon: true, - }, - render: ({ withIcon, variant }: AlertProps) => ( - - Danger Alert - This is a dangerous warning for your application. - - ), +Success.args = { + title: 'Success alert', + variant: 'success', } -export const Warning = { - args: { - variant: 'warning', - withIcon: true, - }, - render: ({ withIcon, variant }: AlertProps) => ( - - Warning Alert - This is a warning message for your application. - - ), +SuccessWithIcon.args = { + title: 'Success alert with icon', + variant: 'success', + withIcon: true, } -export const Success = { - args: { - variant: 'success', - withIcon: true, - }, - render: ({ withIcon, variant }: AlertProps) => ( - - Success Alert - This is a successful notification for your application. - - ), +Danger.args = { + title: 'Danger alert', + variant: 'danger', } -export const Neutral = { - args: { - variant: 'neutral', - withIcon: true, - }, - render: ({ withIcon, variant }: AlertProps) => ( - - Neutral Alert - This is a neutral message for your application. - - ), +DangerWithIcon.args = { + title: 'Danger alert with icon', + variant: 'danger', + withIcon: true, +} + +Info.args = { + title: 'Info alert', + variant: 'info', +} + +InfoWithIcon.args = { + title: 'Info alert with icon', + variant: 'info', + withIcon: true, +} + +Warning.args = { + title: 'Warning alert', + variant: 'warning', +} + +WarningWithIcon.args = { + title: 'Warning alert with icon', + variant: 'warning', + withIcon: true, +} + +Closable.args = { + title: 'Closable alert', + closable: true, +} + +WithAction.args = { + title: 'Alert with action', + variant: 'warning', + withIcon: true, + actions:
Hello
, } diff --git a/packages/ui/src/components/Alert/Alert.tsx b/packages/ui/src/components/Alert/Alert.tsx index a89ea6ce8d2..cf0b96fe810 100644 --- a/packages/ui/src/components/Alert/Alert.tsx +++ b/packages/ui/src/components/Alert/Alert.tsx @@ -1,145 +1,84 @@ -import { cn } from '@ui/lib/utils' -import { VariantProps, cva } from 'class-variance-authority' -import { AlertOctagon, AlertTriangle, Check, Info } from 'lucide-react' -import * as React from 'react' +import React, { useState } from 'react' +import { IconAlertTriangle } from '../Icon/icons/IconAlertTriangle' -export type AlertRootVariantsProps = VariantProps -const alertRootVariants = cva( - `relative w-full - rounded-lg border - py-4 px-6 - [&>svg]:absolute [&>svg]:text-foreground [&>svg]:left-4 [&>svg]:top-4 [&>svg+div]:translate-y-[-3px] [&:has(svg)]:pl-11`, - { - variants: { - variant: { - danger: `bg-red-200 dark:bg-red-100 text-red-1200 border-red-700 [&>svg]:text-red-1200`, - warning: `bg-amber-200 dark:bg-amber-100 border-amber-700 [&>svg]:text-amber-1200`, - info: `bg-scale-400 border-scale-500 dark:bg-scale-100 dark:border-scale-300 [&>svg]:text-scale-1200`, - success: `bg-brand-300 dark:bg-brand-100 border-brand-700 [&>svg]:text-brand-900`, - neutral: `bg-scale-300 dark:bg-scale-300 border-scale-500 [&>svg]:text-scale-900`, - }, - }, - defaultVariants: { - variant: 'info', - }, - } -) +import { IconInfo } from '../Icon/icons/IconInfo' +import { IconX } from '../Icon/icons/IconX' -const alertTitleVariants = cva('mb-1 font-medium leading-none tracking-tight', { - variants: { - variant: { - danger: `text-red-1200`, - warning: `text-amber-1200`, - info: `text-scale-1200`, - success: `text-brand-1200`, - neutral: `text-scale-1200`, - }, - defaultVariants: { - variant: 'info', - }, - }, -}) +import styleHandler from '../../lib/theme/styleHandler' +import { IconAlertOctagon } from '../Icon/icons/IconAlertOctagon' +import { IconCheckCircle } from '../Icon/icons/IconCheckCircle' -const alertDescriptionVariants = cva('text-sm [&_p]:leading-relaxed', { - variants: { - variant: { - danger: 'text-red-1100', - warning: 'text-amber-1100', - info: 'text-scale-1100', - success: 'text-brand-1100', - neutral: 'text-scale-1100', - }, - defaultVariants: { - variant: 'info', - }, - }, -}) - -interface ContextValue { - variant: AlertRootVariantsProps['variant'] +export interface AlertProps { + variant?: 'success' | 'danger' | 'warning' | 'info' | 'neutral' + className?: string + title: string | React.ReactNode + withIcon?: boolean + closable?: boolean + children?: React.ReactNode + icon?: React.ReactNode + actions?: React.ReactNode } -const AlertContext = React.createContext({ - variant: undefined, -}) - -// Define the Alert component -interface AlertProps - extends React.HTMLAttributes, - VariantProps { - withIcon: boolean -} - -interface AlertComponent - extends React.ForwardRefExoticComponent> { - Title: typeof AlertTitle - Description: typeof AlertDescription -} - -type AlertIconVariant = Exclude -const icons: Record = { - danger: , - success: , - warning: , - info: , +const icons: Record<'success' | 'danger' | 'warning' | 'info' | 'neutral', React.ReactElement> = { + danger: , + success: , + warning: , + info: , neutral: <>, } -const Alert = React.forwardRef( - ({ className, withIcon, variant = 'info', children, ...props }, ref) => { - const contextValue = { - variant, - } +function Alert({ + variant = 'neutral', + className, + title, + withIcon, + closable, + children, + icon, + actions, +}: AlertProps) { + let __styles = styleHandler('alert') - return ( -
- {withIcon && icons[variant as AlertIconVariant]} - {children} - - } - /> - ) - } -) as AlertComponent + const [visible, setVisible] = useState(true) -Alert.displayName = 'Alert' + let containerClasses = [__styles.base] + containerClasses.push(__styles.variant[variant].base) -// Define the AlertTitle component as a subcomponent of Alert -interface AlertTitleProps extends React.HTMLAttributes {} + if (className) containerClasses.push(className) -const AlertTitle = React.forwardRef( - ({ className, ...props }, ref) => { - const { variant } = React.useContext(AlertContext) - console.log('variant', variant) - return
- } -) + let descriptionClasses = [__styles.description, __styles.variant[variant].description] + let closeButtonClasses = [__styles.close] -AlertTitle.displayName = 'AlertTitle' + return ( + <> + {visible && ( +
+ {withIcon ? ( +
{withIcon && icons[variant]}
+ ) : null} + {icon && icon} +
+
+

+ {title} +

+
{children}
+
+ {actions} +
+ {closable && ( + + )} +
+ )} + + ) +} -// Define the AlertDescription component as a subcomponent of Alert -interface AlertDescriptionProps extends React.HTMLAttributes {} - -const AlertDescription = React.forwardRef( - ({ className, ...props }, ref) => { - const { variant } = React.useContext(AlertContext) - return ( -
- ) - } -) - -AlertDescription.displayName = 'AlertDescription' - -// Attach the subcomponents to the Alert component -Alert.Title = AlertTitle -Alert.Description = AlertDescription - -// Export the Alert component -export { Alert } +export default Alert diff --git a/packages/ui/src/components/Alert/index.tsx b/packages/ui/src/components/Alert/index.tsx index fd2a1266021..545a13bde4d 100644 --- a/packages/ui/src/components/Alert/index.tsx +++ b/packages/ui/src/components/Alert/index.tsx @@ -1 +1 @@ -export { default as Alert } from './Alert' +export { default as Alert } from '../shadcn/updated/Alert/Alert' diff --git a/packages/ui/src/components/Badge/Badge.tsx b/packages/ui/src/components/Badge/Badge.tsx index 199d771d0f3..c7096715f21 100644 --- a/packages/ui/src/components/Badge/Badge.tsx +++ b/packages/ui/src/components/Badge/Badge.tsx @@ -1,7 +1,7 @@ import * as React from 'react' import { VariantProps, cva } from 'class-variance-authority' -import { cn } from '@ui/lib/utils' +import { cn } from './../../lib/utils' const badgeVariants = cva( 'inline-flex items-center border rounded-full px-2.5 py-0.5 text-xs font-normal transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2', diff --git a/packages/ui/src/components/Button/Button-old.tsx b/packages/ui/src/components/Button/Button-old.tsx deleted file mode 100644 index 145a9333ebb..00000000000 --- a/packages/ui/src/components/Button/Button-old.tsx +++ /dev/null @@ -1,159 +0,0 @@ -import React, { forwardRef } from 'react' -import { IconContext } from './../Icon/IconContext' -import { IconLoader } from './../Icon/icons/IconLoader' - -import styleHandler from '../../lib/theme/styleHandler' - -export interface ButtonProps extends React.HTMLAttributes { - block?: boolean - className?: string - children?: React.ReactNode - disabled?: boolean - onClick?: React.MouseEventHandler - icon?: React.ReactNode - iconRight?: React.ReactNode - loading?: boolean - loadingCentered?: boolean - shadow?: boolean - size?: ButtonSize - style?: React.CSSProperties - type?: ButtonType - danger?: boolean - htmlType?: 'button' | 'submit' | 'reset' - ref?: any - ariaSelected?: boolean - ariaControls?: string - tabIndex?: 0 | -1 - role?: string - textAlign?: 'left' | 'center' | 'right' - as?: keyof JSX.IntrinsicElements - form?: string -} - -export type ButtonSize = 'tiny' | 'small' | 'medium' | 'large' | 'xlarge' -export type ButtonType = - | 'primary' - | 'default' - | 'secondary' - | 'alternative' - | 'outline' - | 'dashed' - | 'link' - | 'text' - | 'danger' - | 'warning' - -interface CustomButtonProps extends React.HTMLAttributes {} - -export const Button = forwardRef( - ( - { - block, - className, - children, - danger, - disabled = false, - onClick, - icon, - iconRight, - loading = false, - loadingCentered = false, - shadow = true, - size = 'tiny', - style, - type = 'primary', - htmlType = 'button', - ariaSelected, - ariaControls, - tabIndex, - role, - as, - textAlign = 'center', - ...props - }: ButtonProps, - ref - ) => { - let __styles = styleHandler('button') - - // styles - const showIcon = loading || icon - - let classes = [__styles.base] - let containerClasses = [__styles.container] - - classes.push(__styles.type[type]) - - if (block) { - containerClasses.push(__styles.block) - classes.push(__styles.block) - } - - if (shadow && type !== 'link' && type !== 'text') { - classes.push(__styles.shadow) - } - - if (size) { - classes.push(__styles.size[size]) - } - - if (className) { - classes.push(className) - } - - if (disabled) { - classes.push(__styles.disabled) - } - - const iconLoaderClasses = [__styles.loading] - - // custom button tag - const CustomButton = ({ ...props }) => { - const Tag = as as keyof JSX.IntrinsicElements - return - } - - const buttonContent = ( - <> - {showIcon && - (loading ? ( - - ) : icon ? ( - {icon} - ) : null)} - {children && {children}} - {iconRight && !loading && ( - {iconRight} - )} - - ) - - if (as) { - return ( - - {buttonContent} - - ) - } else { - return ( - // - - // - ) - } - } -) diff --git a/packages/ui/src/components/Button/Button.stories-old.tsx b/packages/ui/src/components/Button/Button.stories-old.tsx deleted file mode 100644 index 57c0e956cc7..00000000000 --- a/packages/ui/src/components/Button/Button.stories-old.tsx +++ /dev/null @@ -1,234 +0,0 @@ -import { Button } from './' -import { IconPackage } from './../Icon/icons/IconPackage' -import { IconChevronRight } from './../Icon/icons/IconChevronRight' - -export default { - title: 'General/Button', - component: Button, -} - -export const Neutral = (args: any) => -export const Success = (args: any) => -export const withStyles = (args: any) => -export const withIcon = (args: any) => -export const withIconRight = (args: any) => -export const withBlock = (args: any) => -export const withOnlyIcon = (args: any) => -) - -export const allButtons = (args: any) => ( - <> -
-
- - - - - - - - - - -
- -
- - - - - - - - - - -
-
- - - - - - - - - - -
-
- - - - - - - - - - -
-
- - - - - - - - - - -
-
- -) - -export const withCustomTag = (args: any) => - -const icon = - -withIcon.args = { - type: 'primary', - icon: icon, -} - -withIconRight.args = { - type: 'primary', - iconRight: , -} - -withStyles.args = { - type: 'primary', - style: { backgroundColor: 'red', color: 'yellow' }, -} - -withBlock.args = { - type: 'primary', - block: true, -} - -withOnlyIcon.args = { - icon: icon, -} - -withOnlyLoading.args = { - loading: true, -} - -withLoadingCentered.args = { - loading: true, - loadingCentered: true, -} - -allButtons.args = { - loading: false, - danger: false, -} - -withCustomTag.args = { - as: 'span', -} diff --git a/packages/ui/src/components/Button/Button.stories.tsx b/packages/ui/src/components/Button/Button.stories.tsx index 3827669916e..cc821725f15 100644 --- a/packages/ui/src/components/Button/Button.stories.tsx +++ b/packages/ui/src/components/Button/Button.stories.tsx @@ -1,175 +1,234 @@ -// Button.stories.ts|tsx +import { Button } from '.' +import { IconPackage } from '../Icon/icons/IconPackage' +import { IconChevronRight } from '../Icon/icons/IconChevronRight' -import type { Meta, StoryObj } from '@storybook/react' - -import { Button, ButtonProps } from './Button' - -import { IconAirplay } from '../Icon/icons/IconAirplay' - -const meta: Meta = { - /* 👇 The title prop is optional. - * See https://storybook.js.org/docs/react/configure/overview#configure-story-loading - * to learn how to generate automatic titles - */ +export default { title: 'General/Button', component: Button, } -export default meta +export const Neutral = (args: any) => +export const Success = (args: any) => +export const withStyles = (args: any) => +export const withIcon = (args: any) => +export const withIconRight = (args: any) => +export const withBlock = (args: any) => +export const withOnlyIcon = (args: any) => +) -type Story = StoryObj +export const allButtons = (args: any) => ( + <> +
+
+ + + + + + + + + + +
-/* - *👇 Render functions are a framework specific feature to allow you control on how the component renders. - * See https://storybook.js.org/docs/react/api/csf - * to learn how to use render functions. - */ +
+ + + + + + + + + + +
+
+ + + + + + + + + + +
+
+ + + + + + + + + + +
+
+ + + + + + + + + + +
+
+ +) -export const Primary = { - args: { - children: 'Hello world', - type: 'primary', - }, - render: ({ children, type }: ButtonProps) => , -} -export const Default = { - args: { - children: 'Hello world', - type: 'default', - }, - render: ({ children, type }: ButtonProps) => , +export const withCustomTag = (args: any) => + +const icon = + +withIcon.args = { + type: 'primary', + icon: icon, } -export const Alternative = { - args: { - children: 'Hello world', - type: 'alternative', - }, - render: ({ children, type }: ButtonProps) => , +withIconRight.args = { + type: 'primary', + iconRight: , } -export const Outline = { - args: { - children: 'Hello world', - type: 'outline', - }, - render: ({ children, type }: ButtonProps) => , +withStyles.args = { + type: 'primary', + style: { backgroundColor: 'red', color: 'yellow' }, } -export const Secondary = { - args: { - children: 'Hello world', - type: 'secondary', - }, - render: ({ children, type }: ButtonProps) => , +withBlock.args = { + type: 'primary', + block: true, } -export const Dashed = { - args: { - children: 'Hello world', - type: 'dashed', - }, - render: ({ children, type }: ButtonProps) => , +withOnlyIcon.args = { + icon: icon, } -export const Link = { - args: { - children: 'Hello world', - type: 'link', - }, - render: ({ children, type }: ButtonProps) => , +withOnlyLoading.args = { + loading: true, } -export const Text = { - args: { - children: 'Hello world', - type: 'text', - }, - render: ({ children, type }: ButtonProps) => , +withLoadingCentered.args = { + loading: true, + loadingCentered: true, } -export const Danger = { - args: { - children: 'Hello world', - type: 'danger', - }, - render: ({ children, type }: ButtonProps) => , +allButtons.args = { + loading: false, + danger: false, } -export const Block = { - args: { - children: 'Hello world', - type: 'primary', - block: true, - }, - render: ({ children, type, block }: ButtonProps) => ( - - ), -} - -export const Disabled = { - args: { - children: 'Hello world', - type: 'primary', - disabled: true, - }, - render: ({ children, type, disabled }: ButtonProps) => ( - - ), -} - -export const Sizes = { - args: { - children: 'Change the size below', - type: 'primary', - size: 'large', - }, - render: ({ children, type, size }: ButtonProps) => ( - - ), -} - -export const LeftIcon = { - args: { - children: 'Change the size below', - type: 'primary', - iconLeft: , - }, - render: ({ children, type, iconLeft }: ButtonProps) => ( - - ), -} - -export const RightIcon = { - args: { - children: 'Change the size below', - type: 'primary', - iconRight: , - }, - render: ({ children, type, iconRight }: ButtonProps) => ( - - ), -} - -export const Loading = { - args: { - children: 'Change the size below', - type: 'primary', - loading: true, - }, - render: ({ children, type, loading }: ButtonProps) => ( - - ), +withCustomTag.args = { + as: 'span', } diff --git a/packages/ui/src/components/Button/Button.test.tsx b/packages/ui/src/components/Button/Button.test.tsx index 93e88e8650c..bc2cede9768 100644 --- a/packages/ui/src/components/Button/Button.test.tsx +++ b/packages/ui/src/components/Button/Button.test.tsx @@ -1,6 +1,6 @@ import React from 'react' import { render, screen, fireEvent } from '@testing-library/react' -import { Button, ButtonSize, ButtonType } from './Button' +import { Button, ButtonSize, ButtonType } from '../shadcn/updated/Button/Button' import defaultTheme from '../../lib/theme/defaultTheme' import Link from 'next/link' diff --git a/packages/ui/src/components/Button/Button.tsx b/packages/ui/src/components/Button/Button.tsx index 24546fb28e6..a0fb3267c11 100644 --- a/packages/ui/src/components/Button/Button.tsx +++ b/packages/ui/src/components/Button/Button.tsx @@ -1,192 +1,159 @@ -import * as React from 'react' -import { Slot } from '@radix-ui/react-slot' -import { VariantProps, cva } from 'class-variance-authority' +import React, { forwardRef } from 'react' +import { IconContext } from '../Icon/IconContext' +import { IconLoader } from '../Icon/icons/IconLoader' -import { IconContext } from './../Icon/IconContext' -import { IconLoader } from './../Icon/icons/IconLoader' +import styleHandler from '../../lib/theme/styleHandler' -import { cn } from '@ui/lib/utils' -import { sizes } from '@ui/lib/commonCva' - -export type ButtonVariantProps = VariantProps -const buttonVariants = cva( - `relative - cursor-pointer - inline-flex - items-center - space-x-2 - text-center - font-regular - ease-out - duration-200 - rounded - outline-none - transition-all - outline-0 - focus-visible:outline-4 - focus-visible:outline-offset-1`, - { - variants: { - type: { - primary: ` - bg-brand-fixed-1100 hover:bg-brand-fixed-1000 - text-white - bordershadow-brand-fixed-1000 hover:bordershadow-brand-fixed-900 dark:bordershadow-brand-fixed-1000 dark:hover:bordershadow-brand-fixed-1000 - focus-visible:outline-brand-600 - shadow-sm`, - secondary: ` - bg-scale-1200 - text-scale-100 hover:text-scale-800 - focus-visible:text-scale-600 - bordershadow-scale-1100 hover:bordershadow-scale-900 - focus-visible:outline-scale-700 - shadow-sm`, - default: ` - text-scale-1200 - bg-scale-100 hover:bg-scale-300 - bordershadow-scale-600 hover:bordershadow-scale-700 - dark:bordershadow-scale-700 hover:dark:bordershadow-scale-800 - dark:bg-scale-500 dark:hover:bg-scale-600 - focus-visible:outline-brand-600 - shadow-sm`, - alternative: ` - text-brand-1100 - bg-brand-200 hover:bg-brand-400 - bordershadow-brand-600 hover:bordershadow-brand-800 - dark:bordershadow-brand-700 hover:dark:bordershadow-brand-800 - focus-visible:border-brand-800 - focus-visible:outline-brand-600 - shadow-sm`, - outline: ` - text-scale-1200 - bg-transparent - bordershadow-scale-600 hover:bordershadow-scale-700 - dark:bordershadow-scale-800 hover:dark:bordershadow-scale-900 - focus-visible:outline-scale-700`, - dashed: ` - text-scale-1200 - border - border-dashed - border-scale-700 hover:border-scale-900 - bg-transparent - focus-visible:outline-scale-700 - shadow-sm`, - link: ` - text-brand-1100 - border - border-transparent - hover:bg-brand-400 - border-opacity-0 - bg-opacity-0 dark:bg-opacity-0 - shadow-none - focus-visible:outline-scale-700`, - text: ` - text-scale-1200 - hover:bg-scale-500 - shadow-none - focus-visible:outline-scale-700`, - danger: ` - text-red-1100 - bg-red-200 - bordershadow-red-700 hover:bordershadow-red-900 - hover:bg-red-900 - hover:text-lo-contrast - focus-visible:outline-red-700 - shadow-sm`, - warning: ` - text-amber-1100 - bg-amber-200 - bordershadow-amber-700 hover:bordershadow-amber-900 - hover:bg-amber-900 - hover:text-hi-contrast - focus-visible:outline-amber-700 - shadow-sm`, - }, - block: { - true: 'w-full flex items-center justify-center', - }, - size: { - ...sizes, - }, - overlay: { - base: `absolute inset-0 bg-scale-200 opacity-50`, - container: `fixed inset-0 transition-opacity`, - }, - disabled: { - true: 'opacity-50 cursor-not-allowed pointer-events-none', - }, - defaultVariants: { - // variant: 'default', - // size: 'default', - }, - }, - } -) - -export type LoadingVariantProps = VariantProps -const loadingVariants = cva('', { - variants: { - loading: { - default: '', - true: `animate-spin`, - }, - }, -}) - -export interface ButtonProps - // omit `type` as we use it to change type of button - // replaced with `htmlType` - extends Omit, 'type'>, - // omit 'disabled' as it is included in HTMLButtonElement - Omit, - LoadingVariantProps { - asChild?: boolean - type?: ButtonVariantProps['type'] - htmlType?: React.ButtonHTMLAttributes['type'] +export interface ButtonProps extends React.HTMLAttributes { + block?: boolean + className?: string + children?: React.ReactNode + disabled?: boolean + onClick?: React.MouseEventHandler icon?: React.ReactNode - iconLeft?: React.ReactNode iconRight?: React.ReactNode + loading?: boolean + loadingCentered?: boolean + shadow?: boolean + size?: ButtonSize + style?: React.CSSProperties + type?: ButtonType + danger?: boolean + htmlType?: 'button' | 'submit' | 'reset' + ref?: any + ariaSelected?: boolean + ariaControls?: string + tabIndex?: 0 | -1 + role?: string + textAlign?: 'left' | 'center' | 'right' + as?: keyof JSX.IntrinsicElements + form?: string } -const Button = React.forwardRef( - ({ asChild = false, size = 'small', type = 'primary', ...props }, ref) => { - const Comp = asChild ? Slot : 'button' +export type ButtonSize = 'tiny' | 'small' | 'medium' | 'large' | 'xlarge' +export type ButtonType = + | 'primary' + | 'default' + | 'secondary' + | 'alternative' + | 'outline' + | 'dashed' + | 'link' + | 'text' + | 'danger' + | 'warning' - const { className, disabled, loading, icon, iconLeft, iconRight } = props +interface CustomButtonProps extends React.HTMLAttributes {} +export const Button = forwardRef( + ( + { + block, + className, + children, + danger, + disabled = false, + onClick, + icon, + iconRight, + loading = false, + loadingCentered = false, + shadow = true, + size = 'tiny', + style, + type = 'primary', + htmlType = 'button', + ariaSelected, + ariaControls, + tabIndex, + role, + as, + textAlign = 'center', + ...props + }: ButtonProps, + ref + ) => { + let __styles = styleHandler('button') + + // styles const showIcon = loading || icon - // decrecating 'showIcon' for rightIcon - const _iconLeft: React.ReactNode = icon ?? iconLeft + let classes = [__styles.base] + let containerClasses = [__styles.container] + + classes.push(__styles.type[type]) + + if (block) { + containerClasses.push(__styles.block) + classes.push(__styles.block) + } + + if (shadow && type !== 'link' && type !== 'text') { + classes.push(__styles.shadow) + } + + if (size) { + classes.push(__styles.size[size]) + } + + if (className) { + classes.push(className) + } + + if (disabled) { + classes.push(__styles.disabled) + } + + const iconLoaderClasses = [__styles.loading] + + // custom button tag + const CustomButton = ({ ...props }) => { + const Tag = as as keyof JSX.IntrinsicElements + return + } const buttonContent = ( <> {showIcon && (loading ? ( - - ) : _iconLeft ? ( - {_iconLeft} + + ) : icon ? ( + {icon} ) : null)} - {props.children && {props.children}} + {children && {children}} {iconRight && !loading && ( {iconRight} )} ) - return ( - - {buttonContent} - - ) + if (as) { + return ( + + {buttonContent} + + ) + } else { + return ( + // + + // + ) + } } ) - -Button.displayName = 'Button' - -export { Button, buttonVariants } diff --git a/packages/ui/src/components/Button/index.tsx b/packages/ui/src/components/Button/index.tsx index 8486fd6d62d..7b8c48cb4b6 100644 --- a/packages/ui/src/components/Button/index.tsx +++ b/packages/ui/src/components/Button/index.tsx @@ -1 +1 @@ -export * from './Button' +export * from '../shadcn/updated/Button/Button' diff --git a/packages/ui/src/components/shadcn/updated/Accordion/Accordion.stories.tsx b/packages/ui/src/components/shadcn/updated/Accordion/Accordion.stories.tsx new file mode 100644 index 00000000000..229ab104714 --- /dev/null +++ b/packages/ui/src/components/shadcn/updated/Accordion/Accordion.stories.tsx @@ -0,0 +1,79 @@ +// Button.stories.ts|tsx + +import type { Meta, StoryObj } from '@storybook/react' + +import { Accordion, AccordionItem } from './Accordion' +import { Badge } from '../../../Badge' + +const meta: Meta = { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/react/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ + title: 'General/Accordion', + component: Accordion, +} + +export default meta + +type Story = StoryObj + +/* + *👇 Render functions are a framework specific feature to allow you control on how the component renders. + * See https://storybook.js.org/docs/react/api/csf + * to learn how to use render functions. + */ + +export const Default = { + args: { + type: 'default', + }, + render: ({ children, type }: any) => ( + + + + Title of the thing + + Yes. It adheres to the WAI-ARIA design pattern. + + + Is it styled? + + Yes. It comes with default styles that matches the other components' aesthetic. + + + + Is it animated? + + Yes. It's animated by default, but you can disable it if you prefer. + + + + ), +} + +export const Bordered = { + args: { + type: 'bordered', + }, + render: ({ children, type }: any) => ( + + + Is it accessible? + Yes. It adheres to the WAI-ARIA design pattern. + + + Is it styled? + + Yes. It comes with default styles that matches the other components' aesthetic. + + + + Is it animated? + + Yes. It's animated by default, but you can disable it if you prefer. + + + + ), +} diff --git a/packages/ui/src/components/shadcn/updated/Accordion/Accordion.tsx b/packages/ui/src/components/shadcn/updated/Accordion/Accordion.tsx new file mode 100644 index 00000000000..1e28737c64a --- /dev/null +++ b/packages/ui/src/components/shadcn/updated/Accordion/Accordion.tsx @@ -0,0 +1,235 @@ +import * as AccordionPrimitive from '@radix-ui/react-accordion' +import { cn } from './../../lib/utils' + +import { VariantProps, cva, cx } from 'class-variance-authority' +import { ChevronDown } from 'lucide-react' +import React, { createContext, useContext, useState } from 'react' + +export type AccordionRootVariantsProps = VariantProps +const accordionRootVariants = cva('flex flex-col', { + variants: { + type: { + default: 'space-y-3', + bordered: '-space-y-px', + }, + defaultVariants: { + type: 'default', + }, + }, +}) + +export type AccordionItemVariantsProps = VariantProps +const accordionItemVariants = cva( + 'group first:rounded-tl-md first:rounded-tr-md last:rounded-bl-md last:rounded-br-md', + { + variants: { + type: { + default: 'overflow-hidden', + bordered: 'border border-scale-700', + }, + justified: { + true: 'justify-between', + false: '', + }, + }, + } +) + +const accordionTriggerVariants = cva( + `flex flex-row items-center w-full text-left cursor-pointer focus-visible:ring-1 focus-visible:z-10 ring-scale-1100 + justify-between transition-all hover:underline [&[data-state=open]>svg]:rotate-180`, + { + variants: { + type: { + default: 'gap-3', + bordered: ` + px-6 py-4 + font-medium text-base bg-transparent + transition-colors hover:bg-scale-200 + overflow-hidden + group-first:rounded-tl-md group-first:rounded-tr-md + group-last:rounded-bl-md group-last:rounded-br-md`, + }, + }, + } +) + +const accordionContentVariants = cva('pb-4 pt-0', { + variants: { + type: { + default: '', + bordered: 'px-6', + }, + }, +}) + +type Type = AccordionRootVariantsProps['type'] +type Align = 'left' | 'right' | undefined + +interface ContextValue { + chevronAlign: Align + justified: boolean + type: Type + defaultValue: AccordionPrimitive.AccordionImplSingleProps['defaultValue'] +} + +interface AdditionalProps { + openBehaviour: 'single' | 'multiple' + variant?: Type + // Add other additional props here + onChange?: (item: string | string[]) => void + type?: Type + justified?: AccordionItemVariantsProps['justified'] + chevronAlign?: Align +} + +interface AccordionComponent + extends React.ForwardRefExoticComponent< + ExtendedAccordionProps & React.RefAttributes + > { + Item: typeof AccordionItem + Content: typeof AccordionContent + Trigger: typeof AccordionTrigger +} + +export interface AccordionSingleProps extends AccordionPrimitive.AccordionImplSingleProps { + openBehaviour: 'single' + value?: string + // Add other props specific to single accordion +} + +export interface AccordionMultipleProps extends AccordionPrimitive.AccordionImplMultipleProps { + openBehaviour: 'multiple' + value?: string[] + // Add other props specific to multiple accordion +} + +type ExtendedAccordionProps = (AccordionSingleProps | AccordionMultipleProps) & AdditionalProps + +const AccordionContext = createContext({ + chevronAlign: 'left', + justified: false, // Set the default value to false + type: undefined, + defaultValue: undefined, +}) + +const Accordion: AccordionComponent = React.forwardRef( + ({ openBehaviour, type, chevronAlign, justified, defaultValue, ...props }, ref) => { + function handleOnChange(e: string | string[]) { + if (props.onChange) props.onChange(e) + } + + const contextValue = { + chevronAlign, + justified: justified || false, // Provide a default value of false + type: type || 'default', // Provide a default value for the type + defaultValue: Array.isArray(defaultValue) ? defaultValue.join('') : defaultValue, // Convert array to string + } + + if (openBehaviour === 'single') { + const { value, children, className, ...singleProps } = props as AccordionSingleProps + return ( + + {children} + + } + {...singleProps} + /> + ) + } else { + const { value, children, className, ...multipleProps } = props as AccordionMultipleProps + return ( + +
{props.children}
+ + } + {...multipleProps} + /> + ) + } + } +) as AccordionComponent + +export interface ItemAdditionalProps + extends React.ComponentPropsWithoutRef {} + +export const AccordionItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => { + const [open, setOpen] = useState(false) + + let { type, justified } = useContext(AccordionContext) + + return ( + { + setOpen(!open) + }} + {...props} + /> + ) +}) +AccordionItem.displayName = AccordionPrimitive.Item.displayName + +export const AccordionTrigger = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => { + const { type } = useContext(AccordionContext) + return ( + + + {children} + + + + ) +}) +AccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName + +export const AccordionContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => { + const { type } = useContext(AccordionContext) + return ( + +
{children}
+
+ ) +}) +AccordionContent.displayName = AccordionPrimitive.Content.displayName + +Accordion.Item = AccordionItem +Accordion.Content = AccordionContent +Accordion.Trigger = AccordionTrigger +export { Accordion } diff --git a/packages/ui/src/components/shadcn/updated/Alert/Alert.stories.tsx b/packages/ui/src/components/shadcn/updated/Alert/Alert.stories.tsx new file mode 100644 index 00000000000..de5cf016871 --- /dev/null +++ b/packages/ui/src/components/shadcn/updated/Alert/Alert.stories.tsx @@ -0,0 +1,92 @@ +// Button.stories.ts|tsx + +import type { Meta, StoryObj } from '@storybook/react' + +import { Alert, AlertProps } from './Alert' + +import { IconAirplay } from '../Icon/icons/IconAirplay' +import { Terminal } from 'lucide-react' + +const meta: Meta = { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/react/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ + title: 'General/Alert', + component: Alert, +} + +export default meta + +type Story = StoryObj + +/* + *👇 Render functions are a framework specific feature to allow you control on how the component renders. + * See https://storybook.js.org/docs/react/api/csf + * to learn how to use render functions. + */ + +export const Info = { + args: { + variant: 'info', + withIcon: true, + }, + render: ({ withIcon, variant }: AlertProps) => ( + + Info Alert + This is an informative message for your application. + + ), +} + +export const Danger = { + args: { + variant: 'danger', + withIcon: true, + }, + render: ({ withIcon, variant }: AlertProps) => ( + + Danger Alert + This is a dangerous warning for your application. + + ), +} + +export const Warning = { + args: { + variant: 'warning', + withIcon: true, + }, + render: ({ withIcon, variant }: AlertProps) => ( + + Warning Alert + This is a warning message for your application. + + ), +} + +export const Success = { + args: { + variant: 'success', + withIcon: true, + }, + render: ({ withIcon, variant }: AlertProps) => ( + + Success Alert + This is a successful notification for your application. + + ), +} + +export const Neutral = { + args: { + variant: 'neutral', + withIcon: true, + }, + render: ({ withIcon, variant }: AlertProps) => ( + + Neutral Alert + This is a neutral message for your application. + + ), +} diff --git a/packages/ui/src/components/shadcn/updated/Alert/Alert.tsx b/packages/ui/src/components/shadcn/updated/Alert/Alert.tsx new file mode 100644 index 00000000000..c555727ee9e --- /dev/null +++ b/packages/ui/src/components/shadcn/updated/Alert/Alert.tsx @@ -0,0 +1,145 @@ +import { cn } from '../../../../lib/utils' +import { VariantProps, cva } from 'class-variance-authority' +import { AlertOctagon, AlertTriangle, Check, Info } from 'lucide-react' +import * as React from 'react' + +export type AlertRootVariantsProps = VariantProps +const alertRootVariants = cva( + `relative w-full + rounded-lg border + py-4 px-6 + [&>svg]:absolute [&>svg]:text-foreground [&>svg]:left-4 [&>svg]:top-4 [&>svg+div]:translate-y-[-3px] [&:has(svg)]:pl-11`, + { + variants: { + variant: { + danger: `bg-red-200 dark:bg-red-100 text-red-1200 border-red-700 [&>svg]:text-red-1200`, + warning: `bg-amber-200 dark:bg-amber-100 border-amber-700 [&>svg]:text-amber-1200`, + info: `bg-scale-400 border-scale-500 dark:bg-scale-100 dark:border-scale-300 [&>svg]:text-scale-1200`, + success: `bg-brand-300 dark:bg-brand-100 border-brand-700 [&>svg]:text-brand-900`, + neutral: `bg-scale-300 dark:bg-scale-300 border-scale-500 [&>svg]:text-scale-900`, + }, + }, + defaultVariants: { + variant: 'info', + }, + } +) + +const alertTitleVariants = cva('mb-1 font-medium leading-none tracking-tight', { + variants: { + variant: { + danger: `text-red-1200`, + warning: `text-amber-1200`, + info: `text-scale-1200`, + success: `text-brand-1200`, + neutral: `text-scale-1200`, + }, + defaultVariants: { + variant: 'info', + }, + }, +}) + +const alertDescriptionVariants = cva('text-sm [&_p]:leading-relaxed', { + variants: { + variant: { + danger: 'text-red-1100', + warning: 'text-amber-1100', + info: 'text-scale-1100', + success: 'text-brand-1100', + neutral: 'text-scale-1100', + }, + defaultVariants: { + variant: 'info', + }, + }, +}) + +interface ContextValue { + variant: AlertRootVariantsProps['variant'] +} + +const AlertContext = React.createContext({ + variant: undefined, +}) + +// Define the Alert component +interface AlertProps + extends React.HTMLAttributes, + VariantProps { + withIcon: boolean +} + +interface AlertComponent + extends React.ForwardRefExoticComponent> { + Title: typeof AlertTitle + Description: typeof AlertDescription +} + +type AlertIconVariant = Exclude +const icons: Record = { + danger: , + success: , + warning: , + info: , + neutral: <>, +} + +const Alert = React.forwardRef( + ({ className, withIcon, variant = 'info', children, ...props }, ref) => { + const contextValue = { + variant, + } + + return ( +
+ {withIcon && icons[variant as AlertIconVariant]} + {children} + + } + /> + ) + } +) as AlertComponent + +Alert.displayName = 'Alert' + +// Define the AlertTitle component as a subcomponent of Alert +interface AlertTitleProps extends React.HTMLAttributes {} + +const AlertTitle = React.forwardRef( + ({ className, ...props }, ref) => { + const { variant } = React.useContext(AlertContext) + console.log('variant', variant) + return
+ } +) + +AlertTitle.displayName = 'AlertTitle' + +// Define the AlertDescription component as a subcomponent of Alert +interface AlertDescriptionProps extends React.HTMLAttributes {} + +const AlertDescription = React.forwardRef( + ({ className, ...props }, ref) => { + const { variant } = React.useContext(AlertContext) + return ( +
+ ) + } +) + +AlertDescription.displayName = 'AlertDescription' + +// Attach the subcomponents to the Alert component +Alert.Title = AlertTitle +Alert.Description = AlertDescription + +// Export the Alert component +export { Alert } diff --git a/packages/ui/src/components/shadcn/updated/Button/Button.stories.tsx b/packages/ui/src/components/shadcn/updated/Button/Button.stories.tsx new file mode 100644 index 00000000000..3827669916e --- /dev/null +++ b/packages/ui/src/components/shadcn/updated/Button/Button.stories.tsx @@ -0,0 +1,175 @@ +// Button.stories.ts|tsx + +import type { Meta, StoryObj } from '@storybook/react' + +import { Button, ButtonProps } from './Button' + +import { IconAirplay } from '../Icon/icons/IconAirplay' + +const meta: Meta = { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/react/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ + title: 'General/Button', + component: Button, +} + +export default meta + +type Story = StoryObj + +/* + *👇 Render functions are a framework specific feature to allow you control on how the component renders. + * See https://storybook.js.org/docs/react/api/csf + * to learn how to use render functions. + */ + +export const Primary = { + args: { + children: 'Hello world', + type: 'primary', + }, + render: ({ children, type }: ButtonProps) => , +} +export const Default = { + args: { + children: 'Hello world', + type: 'default', + }, + render: ({ children, type }: ButtonProps) => , +} + +export const Alternative = { + args: { + children: 'Hello world', + type: 'alternative', + }, + render: ({ children, type }: ButtonProps) => , +} + +export const Outline = { + args: { + children: 'Hello world', + type: 'outline', + }, + render: ({ children, type }: ButtonProps) => , +} + +export const Secondary = { + args: { + children: 'Hello world', + type: 'secondary', + }, + render: ({ children, type }: ButtonProps) => , +} + +export const Dashed = { + args: { + children: 'Hello world', + type: 'dashed', + }, + render: ({ children, type }: ButtonProps) => , +} + +export const Link = { + args: { + children: 'Hello world', + type: 'link', + }, + render: ({ children, type }: ButtonProps) => , +} + +export const Text = { + args: { + children: 'Hello world', + type: 'text', + }, + render: ({ children, type }: ButtonProps) => , +} + +export const Danger = { + args: { + children: 'Hello world', + type: 'danger', + }, + render: ({ children, type }: ButtonProps) => , +} + +export const Block = { + args: { + children: 'Hello world', + type: 'primary', + block: true, + }, + render: ({ children, type, block }: ButtonProps) => ( + + ), +} + +export const Disabled = { + args: { + children: 'Hello world', + type: 'primary', + disabled: true, + }, + render: ({ children, type, disabled }: ButtonProps) => ( + + ), +} + +export const Sizes = { + args: { + children: 'Change the size below', + type: 'primary', + size: 'large', + }, + render: ({ children, type, size }: ButtonProps) => ( + + ), +} + +export const LeftIcon = { + args: { + children: 'Change the size below', + type: 'primary', + iconLeft: , + }, + render: ({ children, type, iconLeft }: ButtonProps) => ( + + ), +} + +export const RightIcon = { + args: { + children: 'Change the size below', + type: 'primary', + iconRight: , + }, + render: ({ children, type, iconRight }: ButtonProps) => ( + + ), +} + +export const Loading = { + args: { + children: 'Change the size below', + type: 'primary', + loading: true, + }, + render: ({ children, type, loading }: ButtonProps) => ( + + ), +} diff --git a/packages/ui/src/components/shadcn/updated/Button/Button.tsx b/packages/ui/src/components/shadcn/updated/Button/Button.tsx new file mode 100644 index 00000000000..4b13fb9cf83 --- /dev/null +++ b/packages/ui/src/components/shadcn/updated/Button/Button.tsx @@ -0,0 +1,192 @@ +import * as React from 'react' +import { Slot } from '@radix-ui/react-slot' +import { VariantProps, cva } from 'class-variance-authority' + +import { IconContext } from '../../../Icon/IconContext' +import { IconLoader } from '../../../Icon/icons/IconLoader' + +import { cn } from '../../../../lib/utils' +import { sizes } from '../../../../lib/commonCva' + +export type ButtonVariantProps = VariantProps +const buttonVariants = cva( + `relative + cursor-pointer + inline-flex + items-center + space-x-2 + text-center + font-regular + ease-out + duration-200 + rounded + outline-none + transition-all + outline-0 + focus-visible:outline-4 + focus-visible:outline-offset-1`, + { + variants: { + type: { + primary: ` + bg-brand-fixed-1100 hover:bg-brand-fixed-1000 + text-white + bordershadow-brand-fixed-1000 hover:bordershadow-brand-fixed-900 dark:bordershadow-brand-fixed-1000 dark:hover:bordershadow-brand-fixed-1000 + focus-visible:outline-brand-600 + shadow-sm`, + secondary: ` + bg-scale-1200 + text-scale-100 hover:text-scale-800 + focus-visible:text-scale-600 + bordershadow-scale-1100 hover:bordershadow-scale-900 + focus-visible:outline-scale-700 + shadow-sm`, + default: ` + text-scale-1200 + bg-scale-100 hover:bg-scale-300 + bordershadow-scale-600 hover:bordershadow-scale-700 + dark:bordershadow-scale-700 hover:dark:bordershadow-scale-800 + dark:bg-scale-500 dark:hover:bg-scale-600 + focus-visible:outline-brand-600 + shadow-sm`, + alternative: ` + text-brand-1100 + bg-brand-200 hover:bg-brand-400 + bordershadow-brand-600 hover:bordershadow-brand-800 + dark:bordershadow-brand-700 hover:dark:bordershadow-brand-800 + focus-visible:border-brand-800 + focus-visible:outline-brand-600 + shadow-sm`, + outline: ` + text-scale-1200 + bg-transparent + bordershadow-scale-600 hover:bordershadow-scale-700 + dark:bordershadow-scale-800 hover:dark:bordershadow-scale-900 + focus-visible:outline-scale-700`, + dashed: ` + text-scale-1200 + border + border-dashed + border-scale-700 hover:border-scale-900 + bg-transparent + focus-visible:outline-scale-700 + shadow-sm`, + link: ` + text-brand-1100 + border + border-transparent + hover:bg-brand-400 + border-opacity-0 + bg-opacity-0 dark:bg-opacity-0 + shadow-none + focus-visible:outline-scale-700`, + text: ` + text-scale-1200 + hover:bg-scale-500 + shadow-none + focus-visible:outline-scale-700`, + danger: ` + text-red-1100 + bg-red-200 + bordershadow-red-700 hover:bordershadow-red-900 + hover:bg-red-900 + hover:text-lo-contrast + focus-visible:outline-red-700 + shadow-sm`, + warning: ` + text-amber-1100 + bg-amber-200 + bordershadow-amber-700 hover:bordershadow-amber-900 + hover:bg-amber-900 + hover:text-hi-contrast + focus-visible:outline-amber-700 + shadow-sm`, + }, + block: { + true: 'w-full flex items-center justify-center', + }, + size: { + ...sizes, + }, + overlay: { + base: `absolute inset-0 bg-scale-200 opacity-50`, + container: `fixed inset-0 transition-opacity`, + }, + disabled: { + true: 'opacity-50 cursor-not-allowed pointer-events-none', + }, + defaultVariants: { + // variant: 'default', + // size: 'default', + }, + }, + } +) + +export type LoadingVariantProps = VariantProps +const loadingVariants = cva('', { + variants: { + loading: { + default: '', + true: `animate-spin`, + }, + }, +}) + +export interface ButtonProps + // omit `type` as we use it to change type of button + // replaced with `htmlType` + extends Omit, 'type'>, + // omit 'disabled' as it is included in HTMLButtonElement + Omit, + LoadingVariantProps { + asChild?: boolean + type?: ButtonVariantProps['type'] + htmlType?: React.ButtonHTMLAttributes['type'] + icon?: React.ReactNode + iconLeft?: React.ReactNode + iconRight?: React.ReactNode +} + +const Button = React.forwardRef( + ({ asChild = false, size = 'small', type = 'primary', ...props }, ref) => { + const Comp = asChild ? Slot : 'button' + + const { className, disabled, loading, icon, iconLeft, iconRight } = props + + const showIcon = loading || icon + + // decrecating 'showIcon' for rightIcon + const _iconLeft: React.ReactNode = icon ?? iconLeft + + const buttonContent = ( + <> + {showIcon && + (loading ? ( + + ) : _iconLeft ? ( + {_iconLeft} + ) : null)} + {props.children && {props.children}} + {iconRight && !loading && ( + {iconRight} + )} + + ) + + return ( + + {buttonContent} + + ) + } +) + +Button.displayName = 'Button' + +export { Button, buttonVariants } From 439c0fe627581091083cf5d9ad4178e902cfde90 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Tue, 23 May 2023 20:28:40 +0800 Subject: [PATCH 029/909] revert --- apps/docs/components/Navigation/Footer.tsx | 166 ++++++++++++--------- 1 file changed, 93 insertions(+), 73 deletions(-) diff --git a/apps/docs/components/Navigation/Footer.tsx b/apps/docs/components/Navigation/Footer.tsx index c9347b74647..e14892a8f39 100644 --- a/apps/docs/components/Navigation/Footer.tsx +++ b/apps/docs/components/Navigation/Footer.tsx @@ -55,85 +55,105 @@ const Footer = () => ( ))}
From 9e86f30bc4eba74b6289e0943833de5ff8b311b7 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Tue, 23 May 2023 20:30:01 +0800 Subject: [PATCH 030/909] revert --- .../Navigation/NavigationMenu/HomeMenu.tsx | 5 +++-- .../NavigationMenuRefListItems.tsx | 16 ++++++++++------ 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/apps/docs/components/Navigation/NavigationMenu/HomeMenu.tsx b/apps/docs/components/Navigation/NavigationMenu/HomeMenu.tsx index 761d23a317c..8fbb26b0e4f 100644 --- a/apps/docs/components/Navigation/NavigationMenu/HomeMenu.tsx +++ b/apps/docs/components/Navigation/NavigationMenu/HomeMenu.tsx @@ -1,10 +1,11 @@ import { useTheme } from 'common/Providers' +import Image from 'next/image' import Link from 'next/link' import { useRouter } from 'next/router' import { Fragment } from 'react' -import { Badge, cn } from 'ui' -import HomeMenuIconPicker from './HomeMenuIconPicker' +import { Badge, cn } from '~/../../packages/ui' import { HOMEPAGE_MENU_ITEMS } from './NavigationMenu.constants' +import HomeMenuIconPicker from './HomeMenuIconPicker' const NavigationMenuHome = () => { const router = useRouter() diff --git a/apps/docs/components/Navigation/NavigationMenu/NavigationMenuRefListItems.tsx b/apps/docs/components/Navigation/NavigationMenu/NavigationMenuRefListItems.tsx index 59c0cca96e6..7d5dc734a18 100644 --- a/apps/docs/components/Navigation/NavigationMenu/NavigationMenuRefListItems.tsx +++ b/apps/docs/components/Navigation/NavigationMenu/NavigationMenuRefListItems.tsx @@ -1,14 +1,18 @@ import * as Accordion from '@radix-ui/react-accordion' -import Image from 'next/image' import Link from 'next/link' import { useRouter } from 'next/router' -import React, { Fragment } from 'react' import { IconChevronLeft, IconChevronUp, cn } from 'ui' -import RevVersionDropdown from '~/components/RefVersionDropdown' -import { ICommonItem, ICommonSection } from '~/components/reference/Reference.types' -import { useMenuActiveRefId } from '~/hooks/useMenuState' -import HomeMenuIconPicker from './HomeMenuIconPicker' import * as NavItems from './NavigationMenu.constants' + +import Image from 'next/image' + +import RevVersionDropdown from '~/components/RefVersionDropdown' +import { useMenuActiveRefId } from '~/hooks/useMenuState' + +import React, { Fragment } from 'react' + +import { ICommonItem, ICommonSection } from '~/components/reference/Reference.types' +import HomeMenuIconPicker from './HomeMenuIconPicker' import { deepFilterSections } from './NavigationMenu.utils' const HeaderLink = React.memo(function HeaderLink(props: any) { From d19d968ab7d531e912835b2ad4cad43e49a43847 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Tue, 23 May 2023 20:31:23 +0800 Subject: [PATCH 031/909] Update HomeMenu.tsx --- apps/docs/components/Navigation/NavigationMenu/HomeMenu.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/docs/components/Navigation/NavigationMenu/HomeMenu.tsx b/apps/docs/components/Navigation/NavigationMenu/HomeMenu.tsx index 8fbb26b0e4f..0b7772f8595 100644 --- a/apps/docs/components/Navigation/NavigationMenu/HomeMenu.tsx +++ b/apps/docs/components/Navigation/NavigationMenu/HomeMenu.tsx @@ -3,7 +3,8 @@ import Image from 'next/image' import Link from 'next/link' import { useRouter } from 'next/router' import { Fragment } from 'react' -import { Badge, cn } from '~/../../packages/ui' +import { Badge } from '~/../../packages/ui' +import { cn } from 'ui/src/lib/utils/cn' import { HOMEPAGE_MENU_ITEMS } from './NavigationMenu.constants' import HomeMenuIconPicker from './HomeMenuIconPicker' From c35de88c4a851779c9c89210c72270b12fb58248 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Tue, 23 May 2023 20:31:46 +0800 Subject: [PATCH 032/909] Update NavigationMenuRefListItems.tsx --- .../Navigation/NavigationMenu/NavigationMenuRefListItems.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/docs/components/Navigation/NavigationMenu/NavigationMenuRefListItems.tsx b/apps/docs/components/Navigation/NavigationMenu/NavigationMenuRefListItems.tsx index 7d5dc734a18..510b5061e44 100644 --- a/apps/docs/components/Navigation/NavigationMenu/NavigationMenuRefListItems.tsx +++ b/apps/docs/components/Navigation/NavigationMenu/NavigationMenuRefListItems.tsx @@ -1,7 +1,7 @@ import * as Accordion from '@radix-ui/react-accordion' import Link from 'next/link' import { useRouter } from 'next/router' -import { IconChevronLeft, IconChevronUp, cn } from 'ui' +import { IconChevronLeft, IconChevronUp } from 'ui' import * as NavItems from './NavigationMenu.constants' import Image from 'next/image' @@ -10,7 +10,7 @@ import RevVersionDropdown from '~/components/RefVersionDropdown' import { useMenuActiveRefId } from '~/hooks/useMenuState' import React, { Fragment } from 'react' - +import { cn } from 'ui/src/lib/utils/cn' import { ICommonItem, ICommonSection } from '~/components/reference/Reference.types' import HomeMenuIconPicker from './HomeMenuIconPicker' import { deepFilterSections } from './NavigationMenu.utils' From 729e6d778d1953c4f93fff3e44f38fa47a09a70d Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Tue, 23 May 2023 20:32:24 +0800 Subject: [PATCH 033/909] Update ImageFadeStack.tsx --- apps/www/components/ImageFadeStack.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/www/components/ImageFadeStack.tsx b/apps/www/components/ImageFadeStack.tsx index b8f7236d408..9ad108a7f74 100644 --- a/apps/www/components/ImageFadeStack.tsx +++ b/apps/www/components/ImageFadeStack.tsx @@ -1,6 +1,7 @@ import Image from 'next/image' import React, { useState, useEffect } from 'react' -import { IconPauseCircle, IconPlayCircle, cn } from 'ui' +import { IconPauseCircle, IconPlayCircle } from 'ui' +import { cn } from '~/../../packages/ui/src/lib/utils/cn' interface ImageFadeStackProps { autoplay?: boolean From 87e8bc6282ccbbdcb544319e491288eb41a2eeb1 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Tue, 23 May 2023 20:38:45 +0800 Subject: [PATCH 034/909] update --- packages/ui/src/components/Accordion/Accordion.tsx | 7 ++++++- packages/ui/src/components/Alert/Alert.stories.tsx | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/ui/src/components/Accordion/Accordion.tsx b/packages/ui/src/components/Accordion/Accordion.tsx index 524bf7b9de9..f175a320fba 100644 --- a/packages/ui/src/components/Accordion/Accordion.tsx +++ b/packages/ui/src/components/Accordion/Accordion.tsx @@ -26,10 +26,13 @@ const AccordionContext = createContext({ export interface AccordionProps { children?: React.ReactNode className?: string - + defaultActiveId?: (string | number)[] + icon?: React.ReactNode + iconPosition?: Align onChange?: (item: string | string[]) => void openBehaviour: 'single' | 'multiple' type?: Type + size?: Size defaultValue?: string | string[] | undefined justified?: Boolean chevronAlign?: Align @@ -71,6 +74,8 @@ function Accordion({ return ( <> + {/* // + @ts-expect-error */} Date: Tue, 23 May 2023 20:40:24 +0800 Subject: [PATCH 035/909] fix alert --- packages/ui/src/components/Alert/Alert.stories.tsx | 2 +- packages/ui/src/components/Alert/Alert.tsx | 4 +--- packages/ui/src/components/Alert/index.tsx | 2 +- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/packages/ui/src/components/Alert/Alert.stories.tsx b/packages/ui/src/components/Alert/Alert.stories.tsx index 915e408018b..42e52242b83 100644 --- a/packages/ui/src/components/Alert/Alert.stories.tsx +++ b/packages/ui/src/components/Alert/Alert.stories.tsx @@ -1,6 +1,6 @@ import React from 'react' -import Alert, { AlertProps } from './Alert' +import { Alert, AlertProps } from './Alert' export default { title: 'Displays/Alerts', diff --git a/packages/ui/src/components/Alert/Alert.tsx b/packages/ui/src/components/Alert/Alert.tsx index cf0b96fe810..ff819091e76 100644 --- a/packages/ui/src/components/Alert/Alert.tsx +++ b/packages/ui/src/components/Alert/Alert.tsx @@ -27,7 +27,7 @@ const icons: Record<'success' | 'danger' | 'warning' | 'info' | 'neutral', React neutral: <>, } -function Alert({ +export function Alert({ variant = 'neutral', className, title, @@ -80,5 +80,3 @@ function Alert({ ) } - -export default Alert diff --git a/packages/ui/src/components/Alert/index.tsx b/packages/ui/src/components/Alert/index.tsx index 545a13bde4d..1d5a733b147 100644 --- a/packages/ui/src/components/Alert/index.tsx +++ b/packages/ui/src/components/Alert/index.tsx @@ -1 +1 @@ -export { default as Alert } from '../shadcn/updated/Alert/Alert' +export * from './Alert' From 199aa9b74b7304c65283980f67c10d436f13bf71 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Tue, 23 May 2023 20:49:55 +0800 Subject: [PATCH 036/909] revert --- packages/ui/src/components/Badge/Badge.tsx | 85 +++++----- .../shadcn/updated/Badge/Badge.stories.tsx | 155 ++++++++++++++++++ .../components/shadcn/updated/Badge/Badge.tsx | 51 ++++++ 3 files changed, 244 insertions(+), 47 deletions(-) create mode 100644 packages/ui/src/components/shadcn/updated/Badge/Badge.stories.tsx create mode 100644 packages/ui/src/components/shadcn/updated/Badge/Badge.tsx diff --git a/packages/ui/src/components/Badge/Badge.tsx b/packages/ui/src/components/Badge/Badge.tsx index c7096715f21..af526dc7747 100644 --- a/packages/ui/src/components/Badge/Badge.tsx +++ b/packages/ui/src/components/Badge/Badge.tsx @@ -1,51 +1,42 @@ -import * as React from 'react' -import { VariantProps, cva } from 'class-variance-authority' +import { AvailableColors } from '../../lib/constants' +import styleHandler from '../../lib/theme/styleHandler' -import { cn } from './../../lib/utils' - -const badgeVariants = cva( - 'inline-flex items-center border rounded-full px-2.5 py-0.5 text-xs font-normal transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2', - { - variants: { - variant: { - outline: 'text-foreground', - brand: 'bg-brand-200 text-brand-1100 border border-brand-700', - scale: 'bg-scale-200 text-scale-1100 border border-scale-700', - tomato: `bg-tomato-200 text-tomato-1100 border border-tomato-700`, - red: `bg-red-200 text-red-1100 border border-red-700`, - crimson: `bg-crimson-200 text-crimson-1100 border border-crimson-700`, - pink: `bg-pink-200 text-pink-1100 border border-pink-700`, - purple: `bg-purple-200 text-purple-1100 border border-purple-700`, - violet: `bg-violet-200 text-violet-1100 border border-violet-700`, - indigo: `bg-indigo-200 text-indigo-1100 border border-indigo-700`, - blue: `bg-blue-200 text-blue-1100 border border-blue-700`, - green: `bg-green-200 text-green-1100 border border-green-700`, - grass: `bg-grass-200 text-grass-1100 border border-grass-700`, - orange: `bg-orange-200 text-orange-1100 border border-orange-700`, - yellow: `bg-yellow-200 text-yellow-1100 border border-yellow-700`, - amber: `bg-amber-200 text-amber-1100 border border-amber-700`, - gold: `bg-gold-200 text-gold-1100 border border-gold-700`, - gray: `bg-gray-200 text-gray-1100 border border-gray-700`, - slate: `bg-slate-200 text-slate-1100 border border-slate-700`, - }, - size: { - large: 'px-3 py-0.5 rounded-full text-sm', - }, - }, - defaultVariants: { - variant: 'scale', - }, - } -) - -export interface BadgeProps - extends React.HTMLAttributes, - VariantProps {} - -const Badge = ({ className, variant, size, ...props }: BadgeProps) => { - return
+interface Props { + color?: AvailableColors + children: string | React.ReactNode + size?: 'large' | 'small' + dot?: boolean + className?: string } -Badge.displayName = 'Badge' +function Badge({ color = 'brand', children, size, dot, className }: Props) { + const __styles = styleHandler('badge') -export { Badge } + let classes = [__styles.base] + if (color) { + classes.push(__styles.color[color]) + } + if (size === 'large') { + classes.push(__styles.size.large) + } + if (className) { + classes.push(className) + } + + return ( + + {dot && ( + + + + )} + + {children} + + ) +} +export default Badge diff --git a/packages/ui/src/components/shadcn/updated/Badge/Badge.stories.tsx b/packages/ui/src/components/shadcn/updated/Badge/Badge.stories.tsx new file mode 100644 index 00000000000..5567cb06464 --- /dev/null +++ b/packages/ui/src/components/shadcn/updated/Badge/Badge.stories.tsx @@ -0,0 +1,155 @@ +import type { Meta, StoryObj } from '@storybook/react' +import { Badge, BadgeProps } from './Badge' + +const meta: Meta = { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/react/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ + title: 'General/Badge', + component: Badge, +} + +export default meta + +type Story = StoryObj + +export const Outline = { + args: { + variant: 'outline', + }, + render: ({ variant }: BadgeProps) => Hello World, +} + +export const Brand = { + args: { + variant: 'brand', + }, + render: ({ variant }: BadgeProps) => Hello World, +} + +export const Scale = { + args: { + variant: 'scale', + }, + render: ({ variant }: BadgeProps) => Hello World, +} + +export const Tomato = { + args: { + variant: 'tomato', + }, + render: ({ variant }: BadgeProps) => Hello World, +} + +export const Red = { + args: { + variant: 'red', + }, + render: ({ variant }: BadgeProps) => Hello World, +} + +export const Crimson = { + args: { + variant: 'crimson', + }, + render: ({ variant }: BadgeProps) => Hello World, +} + +export const Pink = { + args: { + variant: 'pink', + }, + render: ({ variant }: BadgeProps) => Hello World, +} + +export const Purple = { + args: { + variant: 'purple', + }, + render: ({ variant }: BadgeProps) => Hello World, +} + +export const Violet = { + args: { + variant: 'violet', + }, + render: ({ variant }: BadgeProps) => Hello World, +} + +export const Indigo = { + args: { + variant: 'indigo', + }, + render: ({ variant }: BadgeProps) => Hello World, +} + +export const Blue = { + args: { + variant: 'blue', + }, + render: ({ variant }: BadgeProps) => Hello World, +} + +export const Green = { + args: { + variant: 'green', + }, + render: ({ variant }: BadgeProps) => Hello World, +} + +export const Grass = { + args: { + variant: 'grass', + }, + render: ({ variant }: BadgeProps) => Hello World, +} + +export const Orange = { + args: { + variant: 'orange', + }, + render: ({ variant }: BadgeProps) => Hello World, +} + +export const Yellow = { + args: { + variant: 'yellow', + }, + render: ({ variant }: BadgeProps) => Hello World, +} + +export const Amber = { + args: { + variant: 'amber', + }, + render: ({ variant }: BadgeProps) => Hello World, +} + +export const Gold = { + args: { + variant: 'gold', + }, + render: ({ variant }: BadgeProps) => Hello World, +} + +export const Gray = { + args: { + variant: 'gray', + }, + render: ({ variant }: BadgeProps) => Hello World, +} + +export const Slate = { + args: { + variant: 'slate', + }, + render: ({ variant }: BadgeProps) => Hello World, +} + +export const Large = { + args: { + size: 'large', + }, + render: ({ size }: BadgeProps) => Hello World, +} diff --git a/packages/ui/src/components/shadcn/updated/Badge/Badge.tsx b/packages/ui/src/components/shadcn/updated/Badge/Badge.tsx new file mode 100644 index 00000000000..d3910f5e16c --- /dev/null +++ b/packages/ui/src/components/shadcn/updated/Badge/Badge.tsx @@ -0,0 +1,51 @@ +import * as React from 'react' +import { VariantProps, cva } from 'class-variance-authority' + +import { cn } from './../../lib/utils' + +const badgeVariants = cva( + 'inline-flex items-center border rounded-full px-2.5 py-0.5 text-xs font-normal transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2', + { + variants: { + variant: { + outline: 'text-foreground', + brand: 'bg-brand-200 text-brand-1100 border border-brand-700', + scale: 'bg-scale-200 text-scale-1100 border border-scale-700', + tomato: `bg-tomato-200 text-tomato-1100 border border-tomato-700`, + red: `bg-red-200 text-red-1100 border border-red-700`, + crimson: `bg-crimson-200 text-crimson-1100 border border-crimson-700`, + pink: `bg-pink-200 text-pink-1100 border border-pink-700`, + purple: `bg-purple-200 text-purple-1100 border border-purple-700`, + violet: `bg-violet-200 text-violet-1100 border border-violet-700`, + indigo: `bg-indigo-200 text-indigo-1100 border border-indigo-700`, + blue: `bg-blue-200 text-blue-1100 border border-blue-700`, + green: `bg-green-200 text-green-1100 border border-green-700`, + grass: `bg-grass-200 text-grass-1100 border border-grass-700`, + orange: `bg-orange-200 text-orange-1100 border border-orange-700`, + yellow: `bg-yellow-200 text-yellow-1100 border border-yellow-700`, + amber: `bg-amber-200 text-amber-1100 border border-amber-700`, + gold: `bg-gold-200 text-gold-1100 border border-gold-700`, + gray: `bg-gray-200 text-gray-1100 border border-gray-700`, + slate: `bg-slate-200 text-slate-1100 border border-slate-700`, + }, + size: { + large: 'px-3 py-0.5 rounded-full text-sm', + }, + }, + defaultVariants: { + variant: 'scale', + }, + } +) + +export interface BadgeProps + extends React.HTMLAttributes, + VariantProps {} + +const Badge = ({ className, variant, size, ...props }: BadgeProps) => { + return
+} + +// Badge.displayName = 'Badge' + +export { Badge } From 78b37d7f93b714b1603f1efa6cbd2d7604c9ac58 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Tue, 23 May 2023 21:46:11 +0800 Subject: [PATCH 037/909] update background color of preview --- packages/ui/.storybook/preview.css | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/ui/.storybook/preview.css b/packages/ui/.storybook/preview.css index 3f34bda100e..28dc3437d32 100644 --- a/packages/ui/.storybook/preview.css +++ b/packages/ui/.storybook/preview.css @@ -89,7 +89,11 @@ @apply border-border; } body { - @apply bg-background text-foreground; + /* @apply bg-background text-foreground; + font-feature-settings: 'rlig' 1, 'calt' 1; */ + + @apply bg-body text-body; + font-family: 'Circular std'; font-feature-settings: 'rlig' 1, 'calt' 1; } } @@ -98,6 +102,6 @@ .light, .light .docs-story, .dark .docs-story { - @apply bg-background text-foreground; - font-family: 'Circular std'; + /* @apply bg-background text; + font-family: 'Circular std'; */ } From e7ab8082229993b94c2bcc57e904b043eb6abdcc Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Tue, 23 May 2023 21:46:20 +0800 Subject: [PATCH 038/909] add new dropdown example --- .../shadcn/stories/DropdownMenu.stories.tsx | 92 ++++++++++++++++--- 1 file changed, 77 insertions(+), 15 deletions(-) diff --git a/packages/ui/src/components/shadcn/stories/DropdownMenu.stories.tsx b/packages/ui/src/components/shadcn/stories/DropdownMenu.stories.tsx index 72a7a1f7e2b..06c3d5bce41 100644 --- a/packages/ui/src/components/shadcn/stories/DropdownMenu.stories.tsx +++ b/packages/ui/src/components/shadcn/stories/DropdownMenu.stories.tsx @@ -1,4 +1,22 @@ import type { Meta, StoryObj } from '@storybook/react' +import { Button } from '@ui/components/shadcn/button' +import { + DropdownMenu, + DropdownMenuCheckboxItem, + DropdownMenuContent, + DropdownMenuGroup, + DropdownMenuItem, + DropdownMenuLabel, + DropdownMenuPortal, + DropdownMenuRadioGroup, + DropdownMenuRadioItem, + DropdownMenuSeparator, + DropdownMenuShortcut, + DropdownMenuSub, + DropdownMenuSubContent, + DropdownMenuSubTrigger, + DropdownMenuTrigger, +} from '@ui/components/shadcn/dropdown-menu' import { Cloud, CreditCard, @@ -15,22 +33,9 @@ import { UserPlus, Users, } from 'lucide-react' +import React from 'react' -import { Button } from '@ui/components/shadcn/button' -import { - DropdownMenu, - DropdownMenuContent, - DropdownMenuGroup, - DropdownMenuItem, - DropdownMenuLabel, - DropdownMenuPortal, - DropdownMenuSeparator, - DropdownMenuShortcut, - DropdownMenuSub, - DropdownMenuSubContent, - DropdownMenuSubTrigger, - DropdownMenuTrigger, -} from '@ui/components/shadcn/dropdown-menu' +type Checked = DropdownMenuCheckboxItemProps['checked'] const meta: Meta = { /* 👇 The title prop is optional. @@ -144,3 +149,60 @@ export const Default = { ), } + +export const Checkboxes = { + args: {}, + render: ({}) => { + const [showStatusBar, setShowStatusBar] = React.useState(true) + const [showActivityBar, setShowActivityBar] = React.useState(false) + const [showPanel, setShowPanel] = React.useState(false) + return ( + + + + + + Appearance + + + Status Bar + + + Activity Bar + + + Panel + + + + ) + }, +} + +export const RadioGroup = { + args: {}, + render: ({}) => { + const [position, setPosition] = React.useState('bottom') + + return ( + + + + + + Panel Position + + + Top + Bottom + Right + + + + ) + }, +} From 73d10a0419838f2649f4ca6b970d01dccf001161 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Tue, 23 May 2023 22:06:43 +0800 Subject: [PATCH 039/909] Added command and ComboBox examples --- packages/ui/.storybook/preview.css | 4 +- packages/ui/src/components/shadcn/command.tsx | 145 ++++++ packages/ui/src/components/shadcn/dialog.tsx | 106 +++++ .../shadcn/stories/ComboBox.stories.tsx | 423 ++++++++++++++++++ 4 files changed, 676 insertions(+), 2 deletions(-) create mode 100644 packages/ui/src/components/shadcn/command.tsx create mode 100644 packages/ui/src/components/shadcn/dialog.tsx create mode 100644 packages/ui/src/components/shadcn/stories/ComboBox.stories.tsx diff --git a/packages/ui/.storybook/preview.css b/packages/ui/.storybook/preview.css index 28dc3437d32..2850c368505 100644 --- a/packages/ui/.storybook/preview.css +++ b/packages/ui/.storybook/preview.css @@ -15,7 +15,7 @@ @layer base { :root { --background: var(--theme-variables-background-body); /* --background: 0 0% 100%; */ - --foreground: var(--theme-variables-background); /* --foreground: 222.2 47.4% 11.2%; */ + --foreground: var(--text-color-body-default); /* --foreground: 222.2 47.4% 11.2%; */ --muted: 210 40% 96.1%; --muted-foreground: 215.4 16.3% 46.9%; @@ -50,7 +50,7 @@ .dark { --background: var(--theme-variables-background-body); /* --background: 224 71% 4%; */ - --foreground: var(--theme-variables-background); /* --foreground: 213 31% 91%; */ + --foreground: var(--text-color-body-default); /* --foreground: 213 31% 91%; */ --muted: var(--background-color-body); /* --muted: 223 47% 11%; */ --muted-foreground: 215.4 16.3% 56.9%; diff --git a/packages/ui/src/components/shadcn/command.tsx b/packages/ui/src/components/shadcn/command.tsx new file mode 100644 index 00000000000..8c8940306ac --- /dev/null +++ b/packages/ui/src/components/shadcn/command.tsx @@ -0,0 +1,145 @@ +'use client' + +import * as React from 'react' +import { DialogProps } from '@radix-ui/react-dialog' +import { Command as CommandPrimitive } from 'cmdk-supabase' +import { Search } from 'lucide-react' + +import { cn } from '@ui/lib/utils' +import { Dialog, DialogContent } from '@ui/components/shadcn/dialog' + +const Command = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +Command.displayName = CommandPrimitive.displayName + +interface CommandDialogProps extends DialogProps {} + +const CommandDialog = ({ children, ...props }: CommandDialogProps) => { + return ( + + + + {children} + + + + ) +} + +const CommandInput = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( +
+ + +
+)) + +CommandInput.displayName = CommandPrimitive.Input.displayName + +const CommandList = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) + +CommandList.displayName = CommandPrimitive.List.displayName + +const CommandEmpty = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>((props, ref) => ( + +)) + +CommandEmpty.displayName = CommandPrimitive.Empty.displayName + +const CommandGroup = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) + +CommandGroup.displayName = CommandPrimitive.Group.displayName + +const CommandSeparator = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +CommandSeparator.displayName = CommandPrimitive.Separator.displayName + +const CommandItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) + +CommandItem.displayName = CommandPrimitive.Item.displayName + +const CommandShortcut = ({ className, ...props }: React.HTMLAttributes) => { + return ( + + ) +} +CommandShortcut.displayName = 'CommandShortcut' + +export { + Command, + CommandDialog, + CommandInput, + CommandList, + CommandEmpty, + CommandGroup, + CommandItem, + CommandShortcut, + CommandSeparator, +} diff --git a/packages/ui/src/components/shadcn/dialog.tsx b/packages/ui/src/components/shadcn/dialog.tsx new file mode 100644 index 00000000000..5055e1bdddd --- /dev/null +++ b/packages/ui/src/components/shadcn/dialog.tsx @@ -0,0 +1,106 @@ +'use client' + +import * as React from 'react' +import * as DialogPrimitive from '@radix-ui/react-dialog' +import { X } from 'lucide-react' + +import { cn } from '@ui/lib/utils' + +const Dialog = DialogPrimitive.Root + +const DialogTrigger = DialogPrimitive.Trigger + +const DialogPortal = ({ className, children, ...props }: DialogPrimitive.DialogPortalProps) => ( + +
+ {children} +
+
+) +DialogPortal.displayName = DialogPrimitive.Portal.displayName + +const DialogOverlay = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +DialogOverlay.displayName = DialogPrimitive.Overlay.displayName + +const DialogContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + + + + {children} + + + Close + + + +)) +DialogContent.displayName = DialogPrimitive.Content.displayName + +const DialogHeader = ({ className, ...props }: React.HTMLAttributes) => ( +
+) +DialogHeader.displayName = 'DialogHeader' + +const DialogFooter = ({ className, ...props }: React.HTMLAttributes) => ( +
+) +DialogFooter.displayName = 'DialogFooter' + +const DialogTitle = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +DialogTitle.displayName = DialogPrimitive.Title.displayName + +const DialogDescription = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +DialogDescription.displayName = DialogPrimitive.Description.displayName + +export { + Dialog, + DialogTrigger, + DialogContent, + DialogHeader, + DialogFooter, + DialogTitle, + DialogDescription, +} diff --git a/packages/ui/src/components/shadcn/stories/ComboBox.stories.tsx b/packages/ui/src/components/shadcn/stories/ComboBox.stories.tsx new file mode 100644 index 00000000000..08d04d8dfbe --- /dev/null +++ b/packages/ui/src/components/shadcn/stories/ComboBox.stories.tsx @@ -0,0 +1,423 @@ +import { + Form, + FormControl, + FormDescription, + FormField, + FormItem, + FormLabel, + FormMessage, +} from '@ui/components/shadcn/form' +import { zodResolver } from '@hookform/resolvers/zod' +import type { Meta } from '@storybook/react' +import { Button } from '@ui/components/shadcn/button' +import { + Command, + CommandEmpty, + CommandGroup, + CommandInput, + CommandItem, + CommandList, +} from '@ui/components/shadcn/command' +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuGroup, + DropdownMenuItem, + DropdownMenuLabel, + DropdownMenuSeparator, + DropdownMenuShortcut, + DropdownMenuSub, + DropdownMenuSubContent, + DropdownMenuSubTrigger, + DropdownMenuTrigger, +} from '@ui/components/shadcn/dropdown-menu' +import { Popover, PopoverContent, PopoverTrigger } from '@ui/components/shadcn/popover' +import { toast } from '@ui/components/shadcn/use-toast' +import { cn } from '@ui/lib/utils' +import { + ArrowUpCircle, + Calendar, + Check, + CheckCircle2, + ChevronsUpDown, + Circle, + HelpCircle, + LucideIcon, + MoreHorizontal, + Tags, + Trash, + User, + XCircle, +} from 'lucide-react' +import React from 'react' +import { useForm } from 'react-hook-form' +import * as z from 'zod' + +const meta: Meta = { + /* 👇 The title prop is optional. + * See https://storybook.js.org/docs/react/configure/overview#configure-story-loading + * to learn how to generate automatic titles + */ + title: 'shadcn/Combobox', + component: DropdownMenu, +} + +export default meta + +// type Story = StoryObj + +/* + *👇 Render functions are a framework specific feature to allow you control on how the component renders. + * See https://storybook.js.org/docs/react/api/csf + * to learn how to use render functions. + */ + +export const Combobox = { + args: {}, + render: ({}) => { + const [open, setOpen] = React.useState(false) + const [value, setValue] = React.useState('') + + const frameworks = [ + { + value: 'next.js', + label: 'Next.js', + }, + { + value: 'sveltekit', + label: 'SvelteKit', + }, + { + value: 'nuxt.js', + label: 'Nuxt.js', + }, + { + value: 'remix', + label: 'Remix', + }, + { + value: 'astro', + label: 'Astro', + }, + ] + + return ( + + + + + + + + No framework found. + + {frameworks.map((framework) => ( + { + setValue(currentValue === value ? '' : currentValue) + setOpen(false) + }} + > + + {framework.label} + + ))} + + + + + ) + }, +} + +export const PopoverExample = { + args: {}, + render: ({}) => { + type Status = { + value: string + label: string + icon: LucideIcon + } + + const statuses: Status[] = [ + { + value: 'backlog', + label: 'Backlog', + icon: HelpCircle, + }, + { + value: 'todo', + label: 'Todo', + icon: Circle, + }, + { + value: 'in progress', + label: 'In Progress', + icon: ArrowUpCircle, + }, + { + value: 'done', + label: 'Done', + icon: CheckCircle2, + }, + { + value: 'canceled', + label: 'Canceled', + icon: XCircle, + }, + ] + + const [open, setOpen] = React.useState(false) + const [selectedStatus, setSelectedStatus] = React.useState(null) + + return ( +
+

Status

+ + + + + + + + + No results found. + + {statuses.map((status) => ( + { + setSelectedStatus( + statuses.find((priority) => priority.value === value) || null + ) + setOpen(false) + }} + > + + {status.label} + + ))} + + + + + +
+ ) + }, +} + +export const DropdownExample = { + args: {}, + render: ({}) => { + const [label, setLabel] = React.useState('feature') + const [open, setOpen] = React.useState(false) + + const labels = [ + 'feature', + 'bug', + 'enhancement', + 'documentation', + 'design', + 'question', + 'maintenance', + ] + return ( +
+

+ + {label} + + Create a new project +

+ + + + + + Actions + + + + Assign to... + + + + Set due date... + + + + + + Apply label + + + + + + No label found. + + {labels.map((label) => ( + { + setLabel(value) + setOpen(false) + }} + > + {label} + + ))} + + + + + + + + + Delete + ⌘⌫ + + + + +
+ ) + }, +} + +export const ReactHookFormDemo = { + args: {}, + render: ({}) => { + const languages = [ + { label: 'English', value: 'en' }, + { label: 'French', value: 'fr' }, + { label: 'German', value: 'de' }, + { label: 'Spanish', value: 'es' }, + { label: 'Portuguese', value: 'pt' }, + { label: 'Russian', value: 'ru' }, + { label: 'Japanese', value: 'ja' }, + { label: 'Korean', value: 'ko' }, + { label: 'Chinese', value: 'zh' }, + ] as const + + const FormSchema = z.object({ + language: z.string({ + required_error: 'Please select a language.', + }), + }) + + const form = useForm>({ + resolver: zodResolver(FormSchema), + }) + + function onSubmit(data: z.infer) { + toast({ + title: 'You submitted the following values:', + description: ( +
+            {JSON.stringify(data, null, 2)}
+          
+ ), + }) + } + + return ( +
+ + ( + + Language + + + + + + + + + + No framework found. + + {languages.map((language) => ( + { + form.setValue('language', value) + }} + > + + {language.label} + + ))} + + + + + + This is the language that will be used in the dashboard. + + + + )} + /> + + + + ) + }, +} From b93c483cb9b3ad216d4e6d22da1e5f30c15266d7 Mon Sep 17 00:00:00 2001 From: Alaister Young Date: Thu, 25 May 2023 15:06:28 +1000 Subject: [PATCH 040/909] initial changes for vercel integration --- .../interfaces/Integrations/ProjectLinker.tsx | 84 +++++++++++++++++++ studio/components/ui/OrganizationPicker.tsx | 59 +++++++++++++ studio/data/integrations/keys.ts | 4 + .../vercel-integration-create-mutation.ts | 46 ++++++++++ .../integrations/vercel-projects-query.ts | 72 ++++++++++++++++ studio/hooks/misc/useAutoAuthRedirect.tsx | 4 +- studio/pages/integrations/vercel.tsx | 67 +++++++++++++++ 7 files changed, 333 insertions(+), 3 deletions(-) create mode 100644 studio/components/interfaces/Integrations/ProjectLinker.tsx create mode 100644 studio/components/ui/OrganizationPicker.tsx create mode 100644 studio/data/integrations/keys.ts create mode 100644 studio/data/integrations/vercel-integration-create-mutation.ts create mode 100644 studio/data/integrations/vercel-projects-query.ts create mode 100644 studio/pages/integrations/vercel.tsx diff --git a/studio/components/interfaces/Integrations/ProjectLinker.tsx b/studio/components/interfaces/Integrations/ProjectLinker.tsx new file mode 100644 index 00000000000..f00e815e59f --- /dev/null +++ b/studio/components/interfaces/Integrations/ProjectLinker.tsx @@ -0,0 +1,84 @@ +import { IconChevronRight, Listbox } from 'ui' + +const ProjectLinker = () => { + return
+} + +export default ProjectLinker + +type ProjectLinkerItemProps = {} +const ProjectLinkerItem = ({}: ProjectLinkerItemProps) => { + function onVercelProjectChange(e: string) { + const value = e != UNDEFINED_SELECT_VALUE ? e : undefined + } + + function onSupabaseProjectChange(e: string) { + const value = e != UNDEFINED_SELECT_VALUE ? e : undefined + } + + function onRemove() {} + + return ( +
  • +
    +
    + + + Choose a project + + {selectedVercelProject && ( + vercelIcon} + > + {selectedVercelProject.name} + + )} + {_store.vercelProjectsAvailable.map((x) => ( + vercelIcon}> + {x.name} + + ))} + +
    +
    + +
    +
    + + + Choose a project + + {sortedProjects?.map((x: Dictionary) => ( + databaseIcon} + > + {x.name} + + ))} + +
    + {/* {idx != 0 && ( +
    +
    + )} */} +
    +
  • + ) +} diff --git a/studio/components/ui/OrganizationPicker.tsx b/studio/components/ui/OrganizationPicker.tsx new file mode 100644 index 00000000000..808a5166f68 --- /dev/null +++ b/studio/components/ui/OrganizationPicker.tsx @@ -0,0 +1,59 @@ +import { useOrganizationsQuery } from 'data/organizations/organizations-query' +import { useState } from 'react' +import { Organization } from 'types' +import { Listbox } from 'ui' + +export interface OrganizationPickerProps { + label?: string + onSelectedOrgChange?: (org: Organization) => void +} + +const OrganizationPicker = ({ + label = 'Choose an organization', + onSelectedOrgChange, +}: OrganizationPickerProps) => { + const [selectedOrg, setSelectedOrg] = useState(null) + + const { data, isLoading } = useOrganizationsQuery({ + onSuccess(organizations) { + const firstOrg = organizations?.[0] + if (firstOrg && selectedOrg === null) { + setSelectedOrg(firstOrg) + onSelectedOrgChange?.(firstOrg) + } + }, + }) + + function _onSelectedOrgChange(slug: string) { + const org = data?.find((org) => org.slug === slug) + + if (org) { + setSelectedOrg(org) + onSelectedOrgChange?.(org) + } + } + + if (isLoading) { + return ( + + + Loading... + + + ) + } + + return ( + + {data?.map((org) => { + return ( + + {org.name} + + ) + })} + + ) +} + +export default OrganizationPicker diff --git a/studio/data/integrations/keys.ts b/studio/data/integrations/keys.ts new file mode 100644 index 00000000000..6859ecd3b0c --- /dev/null +++ b/studio/data/integrations/keys.ts @@ -0,0 +1,4 @@ +export const integrationKeys = { + vercelProjectList: (orgSlug: string | undefined) => + ['organizations', orgSlug, 'vercel-projects'] as const, +} diff --git a/studio/data/integrations/vercel-integration-create-mutation.ts b/studio/data/integrations/vercel-integration-create-mutation.ts new file mode 100644 index 00000000000..69703a157ac --- /dev/null +++ b/studio/data/integrations/vercel-integration-create-mutation.ts @@ -0,0 +1,46 @@ +import { useMutation, UseMutationOptions } from '@tanstack/react-query' +import { post } from 'lib/common/fetch' +import { API_URL } from 'lib/constants' + +export type VercelIntegrationCreateVariables = { + code: string + configurationId: string + orgId: number +} + +export async function createVercelIntegration({ + code, + configurationId, + orgId, +}: VercelIntegrationCreateVariables) { + const response = await post(`${API_URL}/integrations/vercel`, { + code, + configurationId, + orgId, + }) + if (response.error) { + throw response.error + } + + return response +} + +type VercelIntegrationCreateData = Awaited> + +export const useVercelIntegrationCreateMutation = ({ + onSuccess, + ...options +}: Omit< + UseMutationOptions, + 'mutationFn' +> = {}) => { + return useMutation( + (vars) => createVercelIntegration(vars), + { + async onSuccess(data, variables, context) { + await onSuccess?.(data, variables, context) + }, + ...options, + } + ) +} diff --git a/studio/data/integrations/vercel-projects-query.ts b/studio/data/integrations/vercel-projects-query.ts new file mode 100644 index 00000000000..06fe30f1c86 --- /dev/null +++ b/studio/data/integrations/vercel-projects-query.ts @@ -0,0 +1,72 @@ +import { useQuery, useQueryClient, UseQueryOptions } from '@tanstack/react-query' +import { get } from 'lib/common/fetch' +import { API_URL } from 'lib/constants' +import { useCallback } from 'react' +import { integrationKeys } from './keys' + +export type VercelProjectsVariables = { + orgId?: number + orgSlug?: string +} + +export type VercelProjectsResponse = { + id: string +} + +export async function getVercelProjects({ orgId }: VercelProjectsVariables, signal?: AbortSignal) { + if (!orgId) { + throw new Error('orgId is required') + } + + const response = await get(`${API_URL}/integrations/vercel/projects?orgId=${orgId}`, { + signal, + }) + if (response.error) { + throw response.error + } + + return response as VercelProjectsResponse[] +} + +export type VercelProjectsData = Awaited> +export type VercelProjectsError = unknown + +export const useVercelProjectsQuery = ( + { orgSlug, orgId }: VercelProjectsVariables, + { + enabled = true, + ...options + }: UseQueryOptions = {} +) => + useQuery( + integrationKeys.vercelProjectList(orgSlug), + ({ signal }) => getVercelProjects({ orgSlug, orgId }, signal), + { + enabled: enabled && typeof orgSlug !== 'undefined' && typeof orgId !== 'undefined', + ...options, + } + ) + +/** + * useVercelProjectsPrefetch is used for prefetching data. For example, starting a query loading before a page is navigated to. + * + * @example + * const prefetch = useVercelProjectsPrefetch({ orgSlug }) + * + * return ( + * prefetch()}> + * Start loading on hover + * + * ) + */ +export const useVercelProjectsPrefetch = ({ orgSlug, orgId }: VercelProjectsVariables) => { + const client = useQueryClient() + + return useCallback(() => { + if (orgSlug) { + client.prefetchQuery(integrationKeys.vercelProjectList(orgSlug), ({ signal }) => + getVercelProjects({ orgSlug, orgId }, signal) + ) + } + }, [orgSlug]) +} diff --git a/studio/hooks/misc/useAutoAuthRedirect.tsx b/studio/hooks/misc/useAutoAuthRedirect.tsx index 3a63cae6976..ca97fe8d486 100644 --- a/studio/hooks/misc/useAutoAuthRedirect.tsx +++ b/studio/hooks/misc/useAutoAuthRedirect.tsx @@ -19,9 +19,7 @@ export function usePushNext() { // vercel integration const isVercelIntegration = next.includes('https://vercel.com') if (isVercelIntegration) { - searchParams.delete('returnTo') - - return await router.push(`/vercel/integrate?${searchParams.toString()}`) + return } // database.new integration diff --git a/studio/pages/integrations/vercel.tsx b/studio/pages/integrations/vercel.tsx new file mode 100644 index 00000000000..173a0eb2460 --- /dev/null +++ b/studio/pages/integrations/vercel.tsx @@ -0,0 +1,67 @@ +import { useParams } from 'common' +import { WizardLayout } from 'components/layouts' +import OrganizationPicker from 'components/ui/OrganizationPicker' +import { useVercelIntegrationCreateMutation } from 'data/integrations/vercel-integration-create-mutation' +import { useVercelProjectsQuery } from 'data/integrations/vercel-projects-query' +import { useStore } from 'hooks' +import { useState } from 'react' +import { NextPageWithLayout, Organization } from 'types' +import { Button } from 'ui' + +const VercelIntegration: NextPageWithLayout = () => { + const { ui } = useStore() + const { code, configurationId } = useParams() + const [selectedOrg, setSelectedOrg] = useState(null) + const [hasInstalled, setHasInstalled] = useState(true) + + const { mutate, isLoading } = useVercelIntegrationCreateMutation({ + onSuccess() { + setHasInstalled(true) + }, + }) + + function onInstall() { + const orgId = selectedOrg?.id + if (!orgId) { + return ui.setNotification({ category: 'error', message: 'Please select an organization' }) + } + + if (!code) { + return ui.setNotification({ category: 'error', message: 'Vercel code missing' }) + } + + if (!configurationId) { + return ui.setNotification({ category: 'error', message: 'Vercel Configuration ID missing' }) + } + + mutate({ + code, + configurationId, + orgId, + }) + } + + const { data: projects } = useVercelProjectsQuery( + { + orgId: selectedOrg?.id, + orgSlug: selectedOrg?.slug, + }, + { enabled: hasInstalled } + ) + + return ( +
    +

    Vercel Integration

    + + + + +
    + ) +} + +VercelIntegration.getLayout = (page) => {page} + +export default VercelIntegration From 4d8df9602d4399ce7dc2a8f09fbfae313cd90ba2 Mon Sep 17 00:00:00 2001 From: Alaister Young Date: Tue, 30 May 2023 15:49:53 +1000 Subject: [PATCH 041/909] adds integrations page scaffold in settings --- .../components/layouts/OrganizationLayout.tsx | 40 +++++++++++++++---- studio/pages/org/[slug]/billing.tsx | 35 +--------------- studio/pages/org/[slug]/general.tsx | 35 +--------------- studio/pages/org/[slug]/integrations.tsx | 14 +++++++ studio/pages/org/[slug]/invoices.tsx | 35 +--------------- 5 files changed, 53 insertions(+), 106 deletions(-) create mode 100644 studio/pages/org/[slug]/integrations.tsx diff --git a/studio/components/layouts/OrganizationLayout.tsx b/studio/components/layouts/OrganizationLayout.tsx index 0b323386d03..0dadc3f8ae0 100644 --- a/studio/components/layouts/OrganizationLayout.tsx +++ b/studio/components/layouts/OrganizationLayout.tsx @@ -1,21 +1,47 @@ +import { useParams } from 'common' import { useStore } from 'hooks' import { observer } from 'mobx-react-lite' -import { FC, ReactNode } from 'react' +import { useRouter } from 'next/router' +import { PropsWithChildren } from 'react' +import { Tabs } from 'ui' import { AccountLayout } from './' -interface Props { - children: ReactNode -} - -const OrganizationLayout: FC = ({ children }) => { +const OrganizationLayout = ({ children }: PropsWithChildren<{}>) => { const { ui } = useStore() + const router = useRouter() + const { slug } = useParams() + const id = router.asPath.split('/').at(-1) return ( - {children} +
    +
    +
    +

    {ui.selectedOrganization?.name ?? 'Organization'} settings

    +
    + +
    + +
    {children}
    +
    ) } diff --git a/studio/pages/org/[slug]/billing.tsx b/studio/pages/org/[slug]/billing.tsx index 83c44735b40..83248fec7a6 100644 --- a/studio/pages/org/[slug]/billing.tsx +++ b/studio/pages/org/[slug]/billing.tsx @@ -1,56 +1,25 @@ -import { useRouter } from 'next/router' import { observer } from 'mobx-react-lite' -import { Tabs } from 'ui' import { NextPageWithLayout } from 'types' import { useStore } from 'hooks' -import { useParams } from 'common/hooks' import Loading from 'components/ui/Loading' import { OrganizationLayout } from 'components/layouts' import { BillingSettings } from 'components/interfaces/Organization' const OrgBillingSettings: NextPageWithLayout = () => { const { ui } = useStore() - const { slug } = useParams() - const router = useRouter() return ( <> {ui.selectedOrganization === undefined && (ui?.permissions ?? []).length === 0 ? ( ) : ( -
    -
    -
    -

    - {ui.selectedOrganization?.name ?? 'Organization'} settings -

    -
    - -
    - -
    - -
    -
    + )} ) } OrgBillingSettings.getLayout = (page) => {page} + export default observer(OrgBillingSettings) diff --git a/studio/pages/org/[slug]/general.tsx b/studio/pages/org/[slug]/general.tsx index f07415ba47e..a62ed0e7c4b 100644 --- a/studio/pages/org/[slug]/general.tsx +++ b/studio/pages/org/[slug]/general.tsx @@ -1,56 +1,25 @@ -import { useRouter } from 'next/router' import { observer } from 'mobx-react-lite' -import { Tabs } from 'ui' import { NextPageWithLayout } from 'types' import { useStore } from 'hooks' -import { useParams } from 'common/hooks' import Loading from 'components/ui/Loading' import { OrganizationLayout } from 'components/layouts' import { GeneralSettings } from 'components/interfaces/Organization' const OrgGeneralSettings: NextPageWithLayout = () => { const { ui } = useStore() - const { slug } = useParams() - const router = useRouter() return ( <> {ui.selectedOrganization === undefined && (ui?.permissions ?? []).length === 0 ? ( ) : ( -
    -
    -
    -

    - {ui.selectedOrganization?.name ?? 'Organization'} settings -

    -
    - -
    - -
    - -
    -
    + )} ) } OrgGeneralSettings.getLayout = (page) => {page} + export default observer(OrgGeneralSettings) diff --git a/studio/pages/org/[slug]/integrations.tsx b/studio/pages/org/[slug]/integrations.tsx new file mode 100644 index 00000000000..6a9c54bedfc --- /dev/null +++ b/studio/pages/org/[slug]/integrations.tsx @@ -0,0 +1,14 @@ +import { NextPageWithLayout } from 'types' +import { OrganizationLayout } from 'components/layouts' +// import { IntegrationSettings } from 'components/interfaces/Organization' + +const OrgIntegrationSettings: NextPageWithLayout = () => { + return ( +
    howdy
    + // + ) +} + +OrgIntegrationSettings.getLayout = (page) => {page} + +export default OrgIntegrationSettings diff --git a/studio/pages/org/[slug]/invoices.tsx b/studio/pages/org/[slug]/invoices.tsx index 5ccf1ebc825..f1c7127198a 100644 --- a/studio/pages/org/[slug]/invoices.tsx +++ b/studio/pages/org/[slug]/invoices.tsx @@ -1,56 +1,25 @@ -import { useRouter } from 'next/router' import { observer } from 'mobx-react-lite' -import { Tabs } from 'ui' import { NextPageWithLayout } from 'types' import { useStore } from 'hooks' -import { useParams } from 'common/hooks' import Loading from 'components/ui/Loading' import { OrganizationLayout } from 'components/layouts' import { InvoicesSettings } from 'components/interfaces/Organization' const OrgInvoices: NextPageWithLayout = () => { const { ui } = useStore() - const { slug } = useParams() - const router = useRouter() return ( <> {ui.selectedOrganization === undefined && (ui?.permissions ?? []).length === 0 ? ( ) : ( -
    -
    -
    -

    - {ui.selectedOrganization?.name ?? 'Organization'} settings -

    -
    - -
    - -
    - -
    -
    + )} ) } OrgInvoices.getLayout = (page) => {page} + export default observer(OrgInvoices) From 5baa37239be0a55c053c522d4e97957f3aa6c33d Mon Sep 17 00:00:00 2001 From: Nick Rayburn <52075362+nrayburn-tech@users.noreply.github.com> Date: Tue, 30 May 2023 19:43:12 -0500 Subject: [PATCH 042/909] Change global example code replacement to start and ends with replacement --- .../reference/RefFunctionSection.tsx | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/apps/docs/components/reference/RefFunctionSection.tsx b/apps/docs/components/reference/RefFunctionSection.tsx index 23b50392b5e..913d741929d 100644 --- a/apps/docs/components/reference/RefFunctionSection.tsx +++ b/apps/docs/components/reference/RefFunctionSection.tsx @@ -114,7 +114,13 @@ const RefFunctionSection: React.FC = (props) => { > {item.examples && item.examples.map((example, exampleIndex) => { - const exampleString = '' + const exampleString = + '' + + (example.code && + example.code + .trim() + .replace(/^```(js|ts|dart|c#|kotlin)/, '') + .replace(/```$/, '')) const codeBlockLang = example?.code?.startsWith('```js') ? 'js' @@ -133,7 +139,6 @@ const RefFunctionSection: React.FC = (props) => { // // Create a single supabase client for interacting with your database // const supabase = createClient('https://xyzcompany.supabase.co', 'public-anon-key') // ` - const currentExampleId = example.id const staticExample = item.examples[exampleIndex] const response = staticExample.response @@ -152,15 +157,7 @@ const RefFunctionSection: React.FC = (props) => { language={codeBlockLang} hideLineNumbers={true} > - {exampleString + - (example.code && - example.code - .replace(/```/g, '') - .replace('js', '') - .replace('ts', '') - .replace('dart', '') - .replace('c#', '') - .replace('kotlin', ''))} + {exampleString} {((tables && tables.length > 0) || sql) && ( From 3991383b164752b4848e88db7f8c9c25fa020080 Mon Sep 17 00:00:00 2001 From: Nick Rayburn <52075362+nrayburn-tech@users.noreply.github.com> Date: Wed, 31 May 2023 20:14:29 -0500 Subject: [PATCH 043/909] Change regex to be more general --- apps/docs/components/reference/RefFunctionSection.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/docs/components/reference/RefFunctionSection.tsx b/apps/docs/components/reference/RefFunctionSection.tsx index 913d741929d..2be99d3e0d7 100644 --- a/apps/docs/components/reference/RefFunctionSection.tsx +++ b/apps/docs/components/reference/RefFunctionSection.tsx @@ -119,7 +119,7 @@ const RefFunctionSection: React.FC = (props) => { (example.code && example.code .trim() - .replace(/^```(js|ts|dart|c#|kotlin)/, '') + .replace(/^```.*/, '') .replace(/```$/, '')) const codeBlockLang = example?.code?.startsWith('```js') From 2635932f8f781309e2210633e8b9b40d12bd95b9 Mon Sep 17 00:00:00 2001 From: Alaister Young Date: Thu, 1 Jun 2023 17:15:13 +1000 Subject: [PATCH 044/909] adds IntegrationSettings interface --- .../IntegrationSettings/Integration.tsx | 117 ++++++++++++++++++ .../IntegrationSettings.tsx | 30 +++++ .../interfaces/Organization/index.ts | 3 +- .../components/layouts/OrganizationLayout.tsx | 3 +- studio/lib/helpers.ts | 7 ++ studio/lib/void.ts | 7 ++ studio/pages/org/[slug]/integrations.tsx | 7 +- 7 files changed, 167 insertions(+), 7 deletions(-) create mode 100644 studio/components/interfaces/Organization/IntegrationSettings/Integration.tsx create mode 100644 studio/components/interfaces/Organization/IntegrationSettings/IntegrationSettings.tsx create mode 100644 studio/lib/void.ts diff --git a/studio/components/interfaces/Organization/IntegrationSettings/Integration.tsx b/studio/components/interfaces/Organization/IntegrationSettings/Integration.tsx new file mode 100644 index 00000000000..0e746edd52e --- /dev/null +++ b/studio/components/interfaces/Organization/IntegrationSettings/Integration.tsx @@ -0,0 +1,117 @@ +import dayjs from 'dayjs' +import { pluralize } from 'lib/helpers' +import { EMPTY_ARR } from 'lib/void' +import { Button, IconArrowRight } from 'ui' + +export interface OrganizationConnection { + id: string + orgName: string + addedByUser: string +} + +export interface ProjectConnection { + id: string + createdAt: string + /** External resource name */ + fromProjectName: string + /** Supabase project name */ + toProjectName: string +} + +export interface IntegrationProps { + title: string + description?: string + note?: string + organizationConnections?: OrganizationConnection[] + projectConnections?: ProjectConnection[] +} + +const Integration = ({ + title, + description, + note, + organizationConnections = EMPTY_ARR, + projectConnections = EMPTY_ARR, +}: IntegrationProps) => { + return ( + <> +
    +

    {title}

    +
    + +
    + {description !== undefined && ( +
    +

    How does the {title} integration work?

    +

    {description}

    +
    + )} + + {organizationConnections.length > 0 && ( +
      + {organizationConnections.map((connection) => ( +
    • +
      + + {title} integration connection | {connection.orgName} + + Added by {connection.addedByUser} +
      + +
      + +
      +
    • + ))} +
    + )} + +
    + + {projectConnections.length > 0 && ( +
    +

    + {projectConnections.length} project{' '} + {pluralize(projectConnections.length, 'connection')} +

    + +
      + {projectConnections.map((connection) => ( +
    • +
      +
      + {connection.fromProjectName} + + {connection.toProjectName} +
      + + + Connected {dayjs(connection.createdAt).fromNow()} + +
      + +
      + +
      +
    • + ))} +
    + + + {note !== undefined &&

    {note}

    } +
    + )} +
    + + ) +} + +export default Integration diff --git a/studio/components/interfaces/Organization/IntegrationSettings/IntegrationSettings.tsx b/studio/components/interfaces/Organization/IntegrationSettings/IntegrationSettings.tsx new file mode 100644 index 00000000000..e4564cf6a7e --- /dev/null +++ b/studio/components/interfaces/Organization/IntegrationSettings/IntegrationSettings.tsx @@ -0,0 +1,30 @@ +import Integration from './Integration' + +const IntegrationSettings = () => { + return ( +
    + +
    + ) +} + +export default IntegrationSettings diff --git a/studio/components/interfaces/Organization/index.ts b/studio/components/interfaces/Organization/index.ts index 08d77572274..48df8a473a6 100644 --- a/studio/components/interfaces/Organization/index.ts +++ b/studio/components/interfaces/Organization/index.ts @@ -2,5 +2,6 @@ import GeneralSettings from './GeneralSettings/GeneralSettings' import TeamSettings from './TeamSettings/TeamSettings' import BillingSettings from './BillingSettings/BillingSettings' import InvoicesSettings from './InvoicesSettings/InvoicesSettings' +import IntegrationSettings from './IntegrationSettings/IntegrationSettings' -export { GeneralSettings, TeamSettings, BillingSettings, InvoicesSettings } +export { GeneralSettings, TeamSettings, BillingSettings, InvoicesSettings, IntegrationSettings } diff --git a/studio/components/layouts/OrganizationLayout.tsx b/studio/components/layouts/OrganizationLayout.tsx index 0dadc3f8ae0..7eac56171f3 100644 --- a/studio/components/layouts/OrganizationLayout.tsx +++ b/studio/components/layouts/OrganizationLayout.tsx @@ -17,11 +17,12 @@ const OrganizationLayout = ({ children }: PropsWithChildren<{}>) => { title={ui.selectedOrganization?.name ?? 'Supabase'} breadcrumbs={[{ key: `org-settings`, label: 'Settings' }]} > -
    +

    {ui.selectedOrganization?.name ?? 'Organization'} settings

    +
    ) diff --git a/studio/data/integrations/integration-connections-create-mutation.ts b/studio/data/integrations/integration-connections-create-mutation.ts new file mode 100644 index 00000000000..82ffa0d8b27 --- /dev/null +++ b/studio/data/integrations/integration-connections-create-mutation.ts @@ -0,0 +1,51 @@ +import { useMutation, UseMutationOptions } from '@tanstack/react-query' +import { post } from 'lib/common/fetch' +import { API_URL } from 'lib/constants' + +export type IntegrationConnectionsCreateVariables = { + organizationIntegrationId: string + connections: { + foreignProjectId: string + supabaseProjectId: string + }[] +} + +export async function createIntegrationConnections({ + organizationIntegrationId, + connections, +}: IntegrationConnectionsCreateVariables) { + const response = await post(`${API_URL}/integrations/connections`, { + organizationIntegrationId, + connections, + }) + if (response.error) { + throw response.error + } + + return response +} + +type IntegrationConnectionsCreateData = Awaited> + +export const useIntegrationConnectionsCreateMutation = ({ + onSuccess, + ...options +}: Omit< + UseMutationOptions< + IntegrationConnectionsCreateData, + unknown, + IntegrationConnectionsCreateVariables + >, + 'mutationFn' +> = {}) => { + return useMutation< + IntegrationConnectionsCreateData, + unknown, + IntegrationConnectionsCreateVariables + >((vars) => createIntegrationConnections(vars), { + async onSuccess(data, variables, context) { + await onSuccess?.(data, variables, context) + }, + ...options, + }) +} diff --git a/studio/pages/integrations/vercel.tsx b/studio/pages/integrations/vercel.tsx index bb060a236fe..8d0e77d637a 100644 --- a/studio/pages/integrations/vercel.tsx +++ b/studio/pages/integrations/vercel.tsx @@ -14,13 +14,13 @@ import { Button } from 'ui' const VercelIntegration: NextPageWithLayout = () => { const { ui } = useStore() - const { code, configurationId } = useParams() + const { code, configurationId, next } = useParams() const [selectedOrg, setSelectedOrg] = useState(null) - const [hasInstalled, setHasInstalled] = useState(true) + const [organizationIntegrationId, setOrganizationIntegrationId] = useState(null) const { mutate, isLoading } = useVercelIntegrationCreateMutation({ - onSuccess() { - setHasInstalled(true) + onSuccess({ id }) { + setOrganizationIntegrationId(id) }, }) @@ -45,12 +45,14 @@ const VercelIntegration: NextPageWithLayout = () => { }) } - const { data: supabaseProjectsData } = useProjectsQuery({ enabled: hasInstalled }) + const { data: supabaseProjectsData } = useProjectsQuery({ + enabled: organizationIntegrationId !== null, + }) const supabaseProjects = useMemo( () => supabaseProjectsData ?.filter((project) => project.organization_id === selectedOrg?.id) - .map((project) => ({ id: project.ref, name: project.name })) ?? EMPTY_ARR, + .map((project) => ({ id: project.id.toString(), name: project.name })) ?? EMPTY_ARR, [selectedOrg?.id, supabaseProjectsData] ) @@ -59,7 +61,7 @@ const VercelIntegration: NextPageWithLayout = () => { orgId: selectedOrg?.id, orgSlug: selectedOrg?.slug, }, - { enabled: hasInstalled } + { enabled: organizationIntegrationId !== null } ) const vercelProjects = useMemo( () => @@ -74,7 +76,7 @@ const VercelIntegration: NextPageWithLayout = () => {

    Vercel Integration

    - {!hasInstalled ? ( + {organizationIntegrationId === null ? ( <> @@ -84,7 +86,16 @@ const VercelIntegration: NextPageWithLayout = () => { ) : ( <> - + { + if (next) { + window.location.href = next + } + }} + /> )}
    From 178697eed7006d219f9121466faf5666e3883ca4 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Wed, 14 Jun 2023 18:07:33 +0800 Subject: [PATCH 055/909] first pass on introducing new UI. although added a rogue new thing to mobx store --- .../Integrations/IntegrationPanels.tsx | 233 ++++++++++++++++++ studio/components/interfaces/Markdown.tsx | 18 ++ .../GitHubRepoSelection.tsx | 57 +++++ .../IntegrationSettings/Integration.tsx | 164 ++++++------ .../IntegrationSettings/IntegrationGitHub.tsx | 95 +++++++ .../IntegrationSettings.tsx | 50 +++- .../components/layouts/OrganizationLayout.tsx | 31 +-- studio/components/layouts/Scaffold.tsx | 84 +++++++ .../data/integrations/integrations-query.ts | 72 +++++- .../img/integrations/covers/github-cover.png | Bin 0 -> 196269 bytes .../img/integrations/covers/vercel-cover.png | Bin 0 -> 197501 bytes studio/stores/UiStore.ts | 7 + 12 files changed, 709 insertions(+), 102 deletions(-) create mode 100644 studio/components/interfaces/Integrations/IntegrationPanels.tsx create mode 100644 studio/components/interfaces/Markdown.tsx create mode 100644 studio/components/interfaces/Organization/IntegrationSettings/GitHubRepoSelection.tsx create mode 100644 studio/components/interfaces/Organization/IntegrationSettings/IntegrationGitHub.tsx create mode 100644 studio/components/layouts/Scaffold.tsx create mode 100644 studio/public/img/integrations/covers/github-cover.png create mode 100644 studio/public/img/integrations/covers/vercel-cover.png diff --git a/studio/components/interfaces/Integrations/IntegrationPanels.tsx b/studio/components/interfaces/Integrations/IntegrationPanels.tsx new file mode 100644 index 00000000000..5d301ecc747 --- /dev/null +++ b/studio/components/interfaces/Integrations/IntegrationPanels.tsx @@ -0,0 +1,233 @@ +import { Integration, IntegrationProjectConnection } from 'data/integrations/integrations-query' +import dayjs from 'dayjs' +import React from 'react' +import { + Button, + IconArrowRight, + IconCloudLightning, + IconGitHub, + IconSquare, + IconTriangle, +} from 'ui' +import { cn } from 'ui/src/utils/cn' + +var relativeTime = require('dayjs/plugin/relativeTime') +dayjs.extend(relativeTime) + +const ICON_STROKE_WIDTH = 2 +const ICON_SIZE = 14 +export interface IntegrationInstallationProps extends React.HTMLAttributes { + title: string + orgName: string + connection: Integration +} + +type HandleIconType = Integration['type'] | 'SUPABASE' + +const HandleIcon = ({ type }: { type: HandleIconType }) => { + switch (type) { + case 'GITHUB': + return + break + case 'NETLIFY': + return + break + case 'VERCEL': + return ( + + + + ) + + // + break + case 'SUPABASE': + return ( + Supabase + ) + // + break + + default: + return <> + break + } +} + +const IntegrationInstallation = React.forwardRef( + ({ className, title, orgName, connection, ...props }, ref) => { + const IntegrationIconBlock = () => { + return ( +
    + +
    + ) + } + + return ( +
  • +
    +
    + + + + + +
    +
    + + {title} integration connection •{' '} + {connection.metadata?.vercelTeam || connection.metadata?.gitHubConnectionOwner} + +
    + + Created {dayjs(connection.createdAt).fromNow()} + + Added by {connection.createdBy} +
    +
    +
    + + +
  • + ) + } +) + +export interface IntegrationConnectionProps extends React.HTMLAttributes { + connection: IntegrationProjectConnection + type: Integration['type'] +} + +const IntegrationConnection = React.forwardRef( + ({ className, connection, type, ...props }, ref) => { + return ( +
  • +
    +
    +
    +
    + + {connection.from.name} + + + {connection.to.name} +
    + + + Connected {dayjs(connection.createdAt).fromNow()} + +
    + +
    + +
    +
    +
  • + ) + } +) + +const IntegrationConnectionOption = React.forwardRef( + ({ className, connection, type, ...props }, ref) => { + return ( +
  • +
    +
    + + {connection.from.name} + + + {connection.to.name} +
    + + + Connected {dayjs(connection.createdAt).fromNow()} + +
    + + +
  • + ) + } +) + +const EmptyIntegrationConnection = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => { + return ( +
    +
    + +
    +
    + ) +}) + +interface IntegrationConnectionHeader extends React.HTMLAttributes { + name?: string +} + +const IntegrationConnectionHeader = React.forwardRef( + ({ className, name, ...props }, ref) => { + return ( +
    +

    {props.title}

    +

    + Repository connections for {name?.toLowerCase()} +

    +
    + ) + } +) + +IntegrationInstallation.displayName = 'IntegrationInstallation' +IntegrationConnection.displayName = 'IntegrationConnection' +IntegrationConnectionHeader.displayName = 'IntegrationConnectionHeader' +EmptyIntegrationConnection.displayName = 'EmptyIntegrationConnection' +IntegrationConnectionOption.displayName = 'IntegrationConnectionOption' + +export { + EmptyIntegrationConnection, + IntegrationConnection, + IntegrationConnectionHeader, + IntegrationInstallation, + IntegrationConnectionOption, +} diff --git a/studio/components/interfaces/Markdown.tsx b/studio/components/interfaces/Markdown.tsx new file mode 100644 index 00000000000..db85f97f4f3 --- /dev/null +++ b/studio/components/interfaces/Markdown.tsx @@ -0,0 +1,18 @@ +import { ReactMarkdownProps } from 'react-markdown/lib/complex-types' +import { ReactMarkdown } from 'react-markdown/lib/react-markdown' +import { cn } from 'ui/src/utils/cn' + +interface Props extends Omit { + className?: string + content: string +} + +const Markdown = ({ className, content, ...props }: Props) => { + return ( + + {content} + + ) +} + +export { Markdown } diff --git a/studio/components/interfaces/Organization/IntegrationSettings/GitHubRepoSelection.tsx b/studio/components/interfaces/Organization/IntegrationSettings/GitHubRepoSelection.tsx new file mode 100644 index 00000000000..fb036c6cabc --- /dev/null +++ b/studio/components/interfaces/Organization/IntegrationSettings/GitHubRepoSelection.tsx @@ -0,0 +1,57 @@ +import { useParams } from 'common' +import { IntegrationConnectionOption } from 'components/interfaces/Integrations/IntegrationPanels' +import { Markdown } from 'components/interfaces/Markdown' +import { useIntegrationsQuery } from 'data/integrations/integrations-query' +import { useStore } from 'hooks' +import { observer } from 'mobx-react-lite' +import { IconGitHub, IconSearch, Input, Select, SidePanel } from 'ui' + +const GitHubRepoSelection = () => { + const { ui } = useStore() + const { slug } = useParams() + const { data } = useIntegrationsQuery({ orgSlug: slug }) + + const visible = ui.showGitHubRepoSelectionPanel + + const githubIntegrations = data?.filter((integration) => integration.type === 'GITHUB') + + return ( + ui.setShowGitHubRepoSelectionPanel(false)} + > +
    + + + + + +
    + + } className="w-full" placeholder="Search..." /> +
    +
    + +
      +
    • + {/* */} +
    • +
    +
    +
    +
    + ) +} + +export default observer(GitHubRepoSelection) diff --git a/studio/components/interfaces/Organization/IntegrationSettings/Integration.tsx b/studio/components/interfaces/Organization/IntegrationSettings/Integration.tsx index 835d58a42ff..4e8bfc3739e 100644 --- a/studio/components/interfaces/Organization/IntegrationSettings/Integration.tsx +++ b/studio/components/interfaces/Organization/IntegrationSettings/Integration.tsx @@ -1,14 +1,28 @@ +import { + EmptyIntegrationConnection, + IntegrationConnection, + IntegrationConnectionHeader, + IntegrationInstallation, +} from 'components/interfaces/Integrations/IntegrationPanels' +import { Markdown } from 'components/interfaces/Markdown' +import { + ScaffoldContainer, + ScaffoldSection, + ScaffoldSectionContent, + ScaffoldSectionDetail, +} from 'components/layouts/Scaffold' import { Integration as TIntegration } from 'data/integrations/integrations-query' -import dayjs from 'dayjs' +import { useStore } from 'hooks' import { pluralize } from 'lib/helpers' import { EMPTY_ARR } from 'lib/void' import { useMemo } from 'react' -import { Button, IconArrowRight } from 'ui' + export interface IntegrationProps { title: string orgName?: string description?: string note?: string + detail?: string integrations?: TIntegration[] } @@ -17,8 +31,11 @@ const Integration = ({ orgName, description, note, + detail, integrations = EMPTY_ARR, }: IntegrationProps) => { + const { ui } = useStore() + const projectConnections = useMemo( () => integrations.flatMap((integration) => integration.connections), [integrations] @@ -26,81 +43,80 @@ const Integration = ({ return ( <> -
    -

    {title}

    -
    + + + + {detail && } + cover + + +
    + +
    +
    + {integrations.length > 0 && + integrations.map((integration, i) => { + return ( +
    + + {integration.connections.length > 0 ? ( + <> + -
    - {description !== undefined && ( -
    -

    How does the {title} integration work?

    -

    {description}

    -
    - )} - - {integrations.length > 0 && ( -
      - {integrations.map((connection) => ( -
    • -
      - - {title} integration connection | {orgName} - - Added by {connection.createdBy} -
      - -
      - -
      -
    • - ))} -
    - )} - -
    - - {projectConnections.length > 0 && ( -
    -

    - {projectConnections.length} project{' '} - {pluralize(projectConnections.length, 'connection')} -

    - -
      - {projectConnections.map((connection) => ( -
    • -
      -
      - {connection.from.name} - - {connection.to.name} +
        + {integration.connections.map((connection, i) => ( + + ))} +
      + + ) : ( + + )} + ui.setShowGitHubRepoSelectionPanel(true)} + > + Add new project connection +
      + ) + })} +
      - - Connected {dayjs(connection.createdAt).fromNow()} - -
    - -
    - -
    - - ))} - - - - {note !== undefined &&

    {note}

    } -
    - )} -
    + + + + ) } diff --git a/studio/components/interfaces/Organization/IntegrationSettings/IntegrationGitHub.tsx b/studio/components/interfaces/Organization/IntegrationSettings/IntegrationGitHub.tsx new file mode 100644 index 00000000000..11ff03fdf45 --- /dev/null +++ b/studio/components/interfaces/Organization/IntegrationSettings/IntegrationGitHub.tsx @@ -0,0 +1,95 @@ +import { + EmptyIntegrationConnection, + IntegrationConnection, + IntegrationConnectionHeader, + IntegrationInstallation, +} from 'components/interfaces/Integrations/IntegrationPanels' +import { Markdown } from 'components/interfaces/Markdown' +import { + ScaffoldContainer, + ScaffoldSection, + ScaffoldSectionContent, + ScaffoldSectionDetail, +} from 'components/layouts/Scaffold' +import { Integration as TIntegration } from 'data/integrations/integrations-query' +import { pluralize } from 'lib/helpers' +import { EMPTY_ARR } from 'lib/void' +import { useMemo } from 'react' + +export interface IntegrationProps { + title: string + orgName?: string + description?: string + note?: string + integrations?: TIntegration[] +} + +const Integration = ({ + title, + orgName, + description, + note, + integrations = EMPTY_ARR, +}: IntegrationProps) => { + const projectConnections = useMemo( + () => integrations.flatMap((integration) => integration.connections), + [integrations] + ) + + return ( + <> + + + +

    {title}

    +
    + + {description !== undefined && ( + + )} +
    + {integrations.length > 0 && + integrations.map((integraton, i) => { + return ( +
    + + {integraton.connections.length > 0 && ( + <> + + +
      + {integraton.connections.map((connection, i) => ( + + ))} +
    + + + Add new project connection + + + )} +
    + ) + })} +
    + + +
    +
    +
    + + ) +} + +export default Integration diff --git a/studio/components/interfaces/Organization/IntegrationSettings/IntegrationSettings.tsx b/studio/components/interfaces/Organization/IntegrationSettings/IntegrationSettings.tsx index 154a869bf6c..a5e423fc918 100644 --- a/studio/components/interfaces/Organization/IntegrationSettings/IntegrationSettings.tsx +++ b/studio/components/interfaces/Organization/IntegrationSettings/IntegrationSettings.tsx @@ -1,8 +1,9 @@ -import { observer } from 'mobx-react-lite' - import { useParams } from 'common' +import { ScaffoldDivider } from 'components/layouts/Scaffold' import { useIntegrationsQuery } from 'data/integrations/integrations-query' import { useStore } from 'hooks' +import { observer } from 'mobx-react-lite' +import GitHubRepoSelection from './GitHubRepoSelection' import Integration from './Integration' const IntegrationSettings = () => { @@ -13,17 +14,54 @@ const IntegrationSettings = () => { const org = ui.selectedOrganization const vercelIntegrations = data?.filter((integration) => integration.type === 'VERCEL') + const githubIntegrations = data?.filter((integration) => integration.type === 'GITHUB') return ( -
    + <> -
    + + + + ) } diff --git a/studio/components/layouts/OrganizationLayout.tsx b/studio/components/layouts/OrganizationLayout.tsx index 7eac56171f3..35d35debe4f 100644 --- a/studio/components/layouts/OrganizationLayout.tsx +++ b/studio/components/layouts/OrganizationLayout.tsx @@ -5,6 +5,7 @@ import { useRouter } from 'next/router' import { PropsWithChildren } from 'react' import { Tabs } from 'ui' import { AccountLayout } from './' +import { ScaffoldContainer, ScaffoldDivider, ScaffoldHeader, ScaffoldTitle } from './Scaffold' const OrganizationLayout = ({ children }: PropsWithChildren<{}>) => { const { ui } = useStore() @@ -17,14 +18,14 @@ const OrganizationLayout = ({ children }: PropsWithChildren<{}>) => { title={ui.selectedOrganization?.name ?? 'Supabase'} breadcrumbs={[{ key: `org-settings`, label: 'Settings' }]} > -
    -
    -
    -

    {ui.selectedOrganization?.name ?? 'Organization'} settings

    -
    - + + + {ui.selectedOrganization?.name ?? 'Organization'} settings + + -
    - -
    {children}
    -
    + + + + {children} ) } diff --git a/studio/components/layouts/Scaffold.tsx b/studio/components/layouts/Scaffold.tsx new file mode 100644 index 00000000000..e69a4a44cd0 --- /dev/null +++ b/studio/components/layouts/Scaffold.tsx @@ -0,0 +1,84 @@ +import React from 'react' +import { cn } from 'ui/src/utils/cn' + +const maxWdithClasses = 'mx-auto w-full max-w-[1600px]' +const paddingClasses = 'px-6 lg:px-14 xl:px-28 2xl:px-32' + +// lg: pt - 8 + +const ScaffoldHeader = React.forwardRef>( + ({ className, ...props }, ref) => { + return ( +
    + ) + } +) + +const ScaffoldTitle = React.forwardRef< + HTMLHeadingElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => { + return

    +}) + +const ScaffoldContainer = React.forwardRef>( + ({ className, ...props }, ref) => { + return
    + } +) + +const ScaffoldDivider = React.forwardRef>( + ({ className, ...props }, ref) => { + return
    + } +) + +const ScaffoldSection = React.forwardRef>( + ({ className, ...props }, ref) => { + return ( +
    + ) + } +) + +const ScaffoldSectionDetail = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => { + return
    +}) + +const ScaffoldSectionContent = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => { + return ( +
    + ) +}) + +ScaffoldHeader.displayName = 'ScaffoldHeader' +ScaffoldTitle.displayName = 'ScaffoldTitle' +ScaffoldContainer.displayName = 'ScaffoldContainer' +ScaffoldDivider.displayName = 'ScaffoldDivider' +ScaffoldSection.displayName = 'ScaffoldSection' +ScaffoldSectionDetail.displayName = 'ScaffoldSectionDetail' +ScaffoldSectionContent.displayName = 'ScaffoldSectionContent' + +export { + ScaffoldHeader, + ScaffoldTitle, + ScaffoldContainer, + ScaffoldDivider, + ScaffoldSection, + ScaffoldSectionDetail, + ScaffoldSectionContent, +} diff --git a/studio/data/integrations/integrations-query.ts b/studio/data/integrations/integrations-query.ts index a15a6c0d55d..bb3e7e91015 100644 --- a/studio/data/integrations/integrations-query.ts +++ b/studio/data/integrations/integrations-query.ts @@ -24,6 +24,10 @@ export type Integration = { createdBy: string createdAt: string connections: IntegrationProjectConnection[] + metadata?: { + vercelTeam?: string + gitHubConnectionOwner?: string + } } export type IntegrationsResponse = Integration[] @@ -37,17 +41,71 @@ export async function getIntegrations({ orgSlug }: IntegrationsVariables, signal { id: '1', type: 'VERCEL', - createdBy: 'Alaister', + createdBy: 'alaister@supabase.io', createdAt: '2023-06-05T06:56:25.565Z', + metadata: { + vercelTeam: 'alaister-team', + }, connections: [ { - id: '1.1', - createdAt: '2023-06-05T06:56:25.565Z', - from: { - name: 'supabase-vercel', - }, + id: '1.0', + createdAt: '2023-06-05T01:56:25.565Z', to: { - name: 'alaister', + name: 'www prod', + }, + from: { + name: 'alaister project prod', + }, + }, + { + id: '1.1', + createdAt: '2023-06-14T06:56:25.565Z', + to: { + name: 'www staging', + }, + from: { + name: 'alaister project staging', + }, + }, + { + id: '1.1', + createdAt: '2023-06-02T21:56:25.565Z', + to: { + name: 'bees knees', + }, + from: { + name: 'jonny bee project', + }, + }, + ], + }, + { + id: '1.5', + type: 'VERCEL', + createdBy: 'alaister@supabase.io', + createdAt: '2023-06-05T06:56:25.565Z', + metadata: { + vercelTeam: 'alaister-team', + }, + connections: [], + }, + { + id: '2', + type: 'GITHUB', + createdBy: 'Alaister', + createdAt: '2023-06-05T06:56:25.565Z', + metadata: { + gitHubConnectionOwner: 'alaister', + }, + connections: [ + { + id: '1.2', + createdAt: '2023-06-05T06:56:25.565Z', + to: { + name: 'supabase/supabase', + }, + from: { + name: 'alaister project', }, }, ], diff --git a/studio/public/img/integrations/covers/github-cover.png b/studio/public/img/integrations/covers/github-cover.png new file mode 100644 index 0000000000000000000000000000000000000000..853f5322db52711cfba3cac2ec4b486bf8568ea9 GIT binary patch literal 196269 zcmV(^K-IsAP) zzBQ!GdU{UaPsg8*KOKKM{&f85_|x&H<4?z*jz1lLI{rU$*uVdq|KNasU7lMGGt*n~ z*p0oR*m6RV=U-xR{L(Dp}oWqhW3fSQjV}qYRwClM&pT9<$>T~6j zH;>XoMaxSeMni5#$aT9Xb|X7>oANQ987Vp?$kUak#DHN2MYkFS$3@02fscDfPn6I2 zes{%R{Px@T`JevjpPpI7{_%^(8;GZB6!D=laojk~oYAi5M~2D)_O--%6KYua<{M>1 z$w|5cJJCkOJ>rcmqojX2R99tOG@Qov`8(Z8E6xoLv*61*#azX*x7^v86Upw}xZlBK zV4faEa&_D=^z@lIzv&>c^ ze3S9cr?LlT5xLa7nD5wXQuIv{WHJxEd_7kj*fKJMP8}tzDfXFg(`N)Z^Om7E%x^LY zGiB570Tc7y`nl~{jZwPYJ0<^ynZEK#e!E)j(E8sq1d=U1+zBt1JkYw_@CsYKo5x37 zJOiqrJ6z&%iwUl2D%c5n0>Ds2i^Y=weR1OS!%zB1c07aP_fHs=pPPbT=o5y^lPk~1 zs(Ay9KnZka*l^}{{Ioc^H63q@lSeL&hysgjh>XUtfBal~Q^1*ioW054JVnhE=t;Lx z4)3}UVDb!y;@O}7`Jdr0|L~Xi!ykVhyVz0hG{DY2_l&7BkGJ$Ic`R%KUYwXnv_UXP zZnjy(e%I%Dj*QEZ&^B`;xnI!p@uUA7gh5HjFsk(o{MCc!vR;(`4MSwM*H1k^IYt;H z`TrOz^B+-M#kPjgVDxzJ*OV)Q+5Fil|4*J(ez?R-G;JA8u>b(7F&@QlyJivR%~23Z zkG?nw%;S75TxdAzp3NVTSYk+h&p+6z8H%RLZeVV@2+)}i1Q-=`$A`^)1JUAWhxZ)x z!U*yWhlB}#qqsJSNjq|V+W?9=fxA^7PyKSB>&ohDEv%U7=Xjozq`v9F4f}@hZ2fLK ziipClV?Ps)b%!?$bEY?@VE>Y&QYSe+3x8%TQA{3O_x^OV&xRdLnSB4`QfZ`=yow7r z)=Xk7aLZfHOP(!pkX#x6%~}sp^QYHZzO!B1eTjXPTGqPmsCrrbNdHkp(emGhV%X~* z^$hg<<72Z<5ay`vej?IzmiCFRImbf=Z`gV7-ELz%`||j#nA&Akej|z3!=#TN`7h5n zCClDDXE<)1h#Yv%>#E}zdc@DiqilQIVVZEf65?|*XezY$B)}+Tk7-n}F#efrEUe7b zBrp=H(=;kreZiHnengMvH|}Mj%Xy~PR&6u`-3DYo?c8#J|Fr7fj-31X*(pE8gY3x> z6-{%#Z94jT0O{iQn3wcb5Rr*TxD>IOJI2`nN?O$04Z?H$^FM$7@y*FUfB$^`QSWG; zGM1$#n4%3eikmEm!s!*4pv4*Mq`EfyYW2mifLF1EK0#BV3XPEtAy=A?kTm4Gg`UWM z;3)y)v3Aehe)Pq2-$f1?xURU0c)4Eyw>8DARF@$d)rjGg%NI>3{}Yk<9#674*N(uo zDdLGq5dlJ;h-7}7Vr*a!@47qQv4F7yzTl1TMYAxIc9Xs0t>o2n#SF0GGHD&5${~Bx zL7%hXwQ3AFr5JI~QAL~SE%|>0Xs+g2r2sd7p3M>K=Of0s7P^WJY0^2|77XKCOuw#= zJQi}?-@xXZ6>HxvFtVQ4)(qO2@9VuK|K&;8j5mIAIOHvWW6fP@suCh@bQI^6du+6zs>5L-HT=MuZYCv&icl8^pB{7jxnn zROPTWY={)T$b2D;c%<^R{*}u8?OEaD@ImJtaRRlavz%do$ z(b1ji9P>>MGYzzgWgF%Hezb?SJTu1sXOQH-Z+TzeOtLO_WO=huKemO*bHDWc2*ZcG zY~&(T45cTsNt_joxh9Put-QP79h_-C2CyGFqoF@SIrMd9HAlAcbSwIvfA}h6D~f%@pAR`;lpC!f@#KMu3-M3?`rNdC=s7W?;y+}S zXU)OUPi;+a69bOs0~yZoGM{{8is(lhYQAS(whYEF%2 z&n?dXlRMckkbE%3PR&8K$GJYI*}##%jvXX)Ii;OH+aVjZlk@#>iMW(__dWm9rjXhu zP0PsTvKiNwz`ba2;{M@YXCgitSJa}{A}2-+mfy?nGdEbjnDrTb1?iBv-15K9p6hu( z&f&c4{gHde$wO$%?+_miyXd*r@%q*Pi-}gho@a$!%_u$BbZDt;| z$$CB=n?{{t?+y&2*pvKked^$9So(j}ryryK|NFoB8z+*-@JI1;yCzM+f~mF79jm)D z?Ya`y)vw*|(YaLSs{=C9IN9Lij1-XwjR6B>CY;$K4Sh1K4!Fv&JbRn-D@XSWNr4F2 zEZC$*sR~-D1XN z+#}NVe4{6p8T@tE{hXcNSV>MdT#jJzVZaiFOTYjCpe0j{>lzv0ZH~3+CH}=vZK%-a zXRiGEn+aQqmA}QBMjL+1v8BcItkZ+43B2KS#i3SjAN`j6@5zIHzx&`=Cd83gSQIJd zWWb8IkrKtCrP7YcQ#N1(N95?z7x1RQsMXPYt^%^U&$#dk&$(uQZ%k2(keP!_ov3yD z+2Dc{i3KJZs<4B4OP3tzN8sJw!@M89f1h>dg7ueHZ#Q*Jpn-2wtEp zW3=M4>Vk3(4CMvKu{x|pRZMCn3CLK%dUSg|U-3%e$iapY7+TCHu!4lXuy3DyJlPgM z+rjB>JTC$jn8E5rkiV~J#E9#f&=s6huwjik3G~T%?%qH~ulr(!$MglwPlt)Te15K< z-PQ&e#+9!xECfpJ9+`HI=e)azR+OF2P6RFgqi0TU zihQ?M7G$Rw@FH@uZwMf}i9|5I%4ar#p^BOi&w@vS4~>6{t!-iPwqSk(V*bp{_H9f_ zSs&`n2zx%1^@{V0%p<>}ap-}RjBP%%x|chOCl(?u0+eOrA<5RC@@5DTyU2JcT?lg; zE;!ldS#X)=d#I70JrpnCk77d78Wn|Eur2lDw`Nnv*Yt>)K$L zR#18zen8|YHI{5P^%o@?Aa;13w)}?-&r8M@w%=ndtN1GIAiB2v4}P^<>WN#-4}-2! z*M-ZW+2&iDWKFJk<|_x>+&sr-Sd?G#>?NNP4VfL;JliH8MZM9R_9_CZuqerS?ih<3 z@<|07L_W4hEkrPyx1{VXzRsr*Em9&ym0HHs_$xcDFGAH!i25BzUFzysB<11)&2}^H z^0`mHObHG?Hm!Jk>P6VfV!a)KRh<9Q15^Jq=V9=PR)J}3P;E=!r(CYaX}*SkM{u;=aQa(_Iud<-gqLEx)9d#L~y@1#*qB+3b%v0Is|Ol0bU zsacb!V?(~pa9Wf|5*y(_z21J#EZZ|La3kd*KnofmS>|Eb(r7zwEARfSFIGl#wb52a z(-{@5;HCvWW8wWM&jqOf$W@jQ!?84Z@ZM(|t!U#(6PF@O;=*!I@y|Ni!PXh(?w@3t&`i>&oFJIBh)acI(e% zu{Y*XY&gHUK;=K-o=9R^q$`ZWpPxv1y$b(UD5Obi1Ng0>Y1g8`7QpTrm&b9$5C=~f ztUhxvo5A6|7~t66%g(DU$RpDaNTK4&t{Bk z4eJZO{E8O>!yciz$()&vW=*ZLi8sz;eL_l)e?v7g)_mV`ZtF)B0E$Q92r{n~hHS?c zZ+yt-Fv@JH|53PDE;7>L7kFI7ZaXw4!k;z_$#t&1sWgzxT4y9nBgaK|Eby;y-h}xO zOEb|$mx{j_X(Tfkk9OisES9~^&EAH`xA>wwl}+)H%T1gikN=qe@k{wz|Hktu)Eb6A ze1hL_0P4BBUv=AgMK7XtlkDQwTiMoPQuTyB&Sy z{dRC5s?F~~*lm=~h-X@L>&&1lLKJ0X+mguFNm7Tijs`G~c@--rT&fj`qRFG8(fIb~ z`CS|bq(Kw=#d!K$w4aLr-;5E9-yx}FLz~a^K>VXX=WaMmfIKQkEUJxc!@G|?Vr)Z# z6lx@4DQR+gTOC zbh?kRk!P_uJ`A}vsYX1;;^(8w9@pELjQN(PnS>eaprC)M2CIz|>zl7`yN7)vN84AeV1lGbZkvcPyfXYS_6$1IB50Xo0S8@+`+*v&rO-=VgbuR32l5=f5#!~ ziC8prP;$bn$2F7(6@$c1ADtC*_60BfavkGEv4LNYnANw0Jbgiarq{KVFHT5`|8+x* zeW|rF=vK|DSjsUc7KTp|F@a*v6FWZjBkGvc?>Y6>n*+!jPe#2l)G@wv(DXI>V!Ek14k9f~k; zq-@1I1%4Wvi^9!zvp{dp`I-~s?f9j{JK}r}V6AiPy3PnKBErgvFpu*n$u&$;gn%sr z9`ntIce3nvGl>g%zJNlU`E3a&6??JOii%gE`o#Gc7%I2@$X$AH5vXUy>?Azr)KV<& zd`NJvO5*o9kAX4>Xbf9B6S?M>w}W??3-AMT?(;K#yz>LqF3XV&cGikpmq!{o4paem zlBD0N04;tjjkkf0VMZp=ahC71t%4Wxazj=r;9P2sH3}wBhhX`4UIFPuuuZr+aiynj>v$x?;wUeowgt|19{Tja9BSCwDW_a3#CKVUT6ofT0q$MV- zk_2=w92bAx@4|1Bn|IcdT2IPG=X$Tt<7S1M`p}!^<+C2G>tSk-k|u%uX%rk23C?qO z+!&4BnG#cbk35sDagn$cDC5H7x%8w3OaIEAXVK4ahzT1%Or7u|+jxG=<1aL^fr!zh z#JH1(_A8P?fCM7@4&a*((mYdKRzv6OJmpt_J)ZZXy#jyD?KE>2+p4JYxD5*v5Dvbv zeObTM(=}SX3wU^Upcc)nPf>d(uj4dh9AjJ&Z17Y^n9ye~o}p-8Kx#cuoKwu>xTxn` zOL%_pjm3H-LNrLS7~y$6Stt+0ZXpQCoj&lN-Wbsvxq3=-IMMvIW>pK)-Ub|S$(ADH zj(Coypz>*qIoGyyGQ89?0QYW3aXENZgIr(Z>Wj#1Mio$#=`H`GPWU1R)`i2n?CX(> zsz<&B!0K+fQYb`u#w&HBp*~c^IK?l?HQN_yzL%)7LH~{sl#kbI4+4_Q{=aRkT4a*2w zFvQ#oJ{%n2@tdqm3)rst&5Ur^>)f^uK-JBn&zNE_{Xfv_yt^*;RG;(jpm1S~f;%Vp z#d!N$mfjo$cxq4;fXVK1bG|dLbBB!*ZrkGP!H+!|QrI)QgN+##KcWK~<^)8>PfX8T z80TVcFB(-0yU0Hz!T1I0BnWAWEOtVK_?)xIb*@Uz`0O<=?Ge!$EKtDObD-O)r!%sV z9JK=BA+tJnx*=O%5atfMD-cH${M0L>0^ESq_-zg)Anpej@9(jnUN{7bHwUgBzdi8$ zBb%+S^QW_q#srjQ4WFMAF!;Q(^>XTMft{i!fN8AvCcMTkph#Gwz*qDi(0p`^=CTM8 zhEY%zZ7Q%Fbm#c`Ypla(1N(a{d&OqYonA!PWLv@IW_oL)>+2enW|aRC@6NI1uK6#q z?3xq6wV^Ea=i;>A-^S~6twG^$+ls0oo8shol+SBC_RNK2&;MRq&KSmNKeemt&5OmV zdzs9;zVYyz%_s1ZTPGyL5(7Rbbe9Z)rOq`#wNPFtTuXkxTK{1}ZoJjvyfUTLX|p`+ zLy3`)GlRLyIgQWQAD<_0dK*QU&*VQTj?$NCy#TQ10p_vw2K+`$^4)hrv6$n{wJ=M4 zHpRU|u*<~dg6YTI#1&Mn4B0Y22W|%TIBxZ;{7V{epF!Au?jROeM!naF^w(N6@2`CV zrk~>8TWvg}!8!)-ulrGNi-bYb)tZb>c=W=NLRV`#IjiTt9X!h3xoXuMH*=>jGBAi` z*%x?Q{(l6MsTD?n>CTzJT$pdtI3&wf{{+Q;$*TS;t-od*Nm|g{%8(BADGJUY*^tQ;JdZ^+x~e^XKtDP7xVn9wLa7G=5Oq zcq^cyulvhF^bGm>M;jX*Nv>w+Y(S1c&)frg)D`G%kh1|ml@mV}CTj~5DnRxTrEPiM z4sX?i^QITp@D1y;AKlOIx`-@|#uld=u=md!=&2m-$t9#qmU<-~3n*O>xipuny^Y8L z;IA=M?Q8yMdIA2D|CNTS`t$n~Gu<_|`I<#Fu>uz3p#v4hK}~AMs4l}+BYwiKp7&cr z(6|jB8D;Olk-!_Hu{PzmCSRAG{n#;UJAPV-u{Pm{SV%%I8bgF^m z&ywLHe_UhtZG2{%@wXLnQ3AEQZ6I_vB?$$M*H*js!VFV17e}@b4iT&HU`Qa|F8F9IkOK_1|@DwR5(li(O?e z+I#-5uN1g#!Ei)Yx+y0JBxoL;qo}<%3N@3H z&YK=rT}&^!AHv4j%wf@|@%#4o$A>Ifc0&4qp3XECoQmI3frL9DC zX|vD(x(A;CK@_vf)yiK~@;#p|EzvW`>}UL}u~iJgO_bRv@^P&+_s<=S-yl zdTuR;w?f!s;8wf^XB)j~tBDPdPK3FW#nZU(1Eahd0EEHshPOBD?Y_I|QSoaIA6hOdrke>-$vVt@qGYw7{=UbhWD zTaM58J<%8+LWzjBCrd)&so9K?aLL1ktkTDc5hzw{@%R>#(Ijq7@w4ct+=-k>iL>BA zF~p3@zy7XXVl35v#$LhBrfq(?PGNAxGfH}_nh;ab+z&bz+PJYuwO?x#! zDX_wdiT08aUB_D?=j$t&H@aPj0C1uC49=gmoml~sY1442#t`NEYTFY)TEh$7(L|TG zH)LF(pf#}?1VdkdiS3hdW=~9(y*nad&417QiF>wkgZR7W|NqX> z>qp$XjV*b?S6-hPZ=Rct01)+!o1y#+j3zL7Y(Z*;UB#l9Z;eTeitvfrz;$Sgqtzcq z^8%->zm;o^>tV?JZ^utHDC<93{a=7D>Z83DJ%~Xzex*m?v**+!gw|?MEqmdum|wLU z%_m&{MP`zv9t3V|Z+mK9Eh%9k+iTP4j=ZwD_P+1CBg2K>m;ASX|2Kc*(xg!#GTV33c_%lFF`F5^zX_1k zyp-yz!O={3+eHG_ULgxG6>YPzd( z*s>-ots;i5#xk;!FGntNy@BBQa~7@bpcwT#r#@bES;rT!Kex!<{zKz&lj0J;oS$#` zI(Yk$vguxI3jCOU4rk6(+y_hZZDEB^W~pjd`5Z4&iZ?qfExi~okJ{Y|c7`YW;zY>LlekN!-so$}Fm z=UW@?wGK9kyDS?NILm;-CtmFFLN6u{dsFaH3o(x-fb=7e0DAxEo6q(xuX6k+%o4oz zx|O_LWt8iljWopQzAyUWO(b7?mVO5DSk=hlA#iVroXu zpKEE(Sa4F0?IpA_(PF9}n&+;iiaAt(+<;zc1F(8*083#Fzix8VxGJ<-YurKZjJI;i ztavD3iyfAu!5?fH8aBFlHg+<2h5$hK#}*w9ZSMNRI4{Pr))2e_qqSx#&Q3)m#<|xU zQ1)HgxaEJo2}nxb)b-ZGP<&BLO8zGRJbcx^Ez-OiH;6V6+bG`kqEI~R%^GM7oylF1 zX5F?intwE&ApRSy8a=ZQ{GT2>?$7)l{uP}Rzs4c(p)qm;N8xucM^ejc++g<v6zMAN2sk z4kQ2L!pjDtB*o7nr`$@Zm^Z~tbh-9? zZRvkV)*C_oT4L5Mf6x7u&kcORIp6Z1YN2AOON^A-@iQR0rkw4luOS9+hOj7-IWlWffH@b5 zn35D;z{jWT>h~@#!7Sx?WUWv2XB*8a*?=^eRx3?Xf-Z<=W zjBGx7(?Ix0W1k=OtEt^$OinjuC2*f0nNueoF!qH|vFNdNWjJry)<9ww=5ndaPr1se z@cPP=XNJy<0F~}u`Hv|pezEZO9NTiP8mj#nkLffN1N2->J5iFQyU1Fe`Fv9}@!Auo z=R#}$n!-;3teSr~)$jv)SHlsz0U=n6d3O-TXhDD8Jg17lCmN{M#iOECf#Y*ORYTXWeE>&Hm-ufLV=Bl&V;-DAfoH)UhP z`xp=&JY%wNICs}Y_MzpcxJinb4Gale5CN*=$G>!5`Oj{E9QrPS`+W;!Eia7!B;O8QNi2{<}96-F# z0S3@pP09ca8q?6sH~(Phl!Ho=%HMGx)A_aHE_*eJ5rJXoMUwa(W2%c|Hm+bD;1dHs zxCuN(p#nz)Kl9aFb&uvq@lo#Cu%6-0LZ5RsAgj;3osnZ1uh=F%j#2^R-&HWOHzk}w z;{0;~%9!%8HlVvN49Eo-7l%hP2QT!LUdzh{HleSM3}qg=mQP)ih9%(mO9XYG=RfQ8 zrZ?Ftnu%Tz#}Q3RD?qhi1FAsQwL^*fp%r}k#)e=A#R4i#np`EG-d=#bdB1?!HK)lS z?$CyW&!)U$ZVwSrQO*|sKjXgs#=B^~FlqnF(F^t0@%0PH+oENQn||n`@3G<6S5n@J z|7gm|sn_Prh?f?lL#NZW?|-Xk#{Hpq{5dfn>+yuP?4cu?WA?t;B9xW<=wp_u;`9US zNl*GE8&8Z>oYDLj`8)VZ4*JOB#J?3Fjq?BZ#p7s^n(V!i%|p{Kxof{eR1UcZ#FxZF13QJML90{FeWm zjCJoVJd;A$&}{Uq@m%7>G-YjxU0?G5CQtVN-@k)`2rx(j$%F>zX~1lEctvUXte05_ zD{}iTCB|wy6UQWlpT@(C<6U_gEp(bCn5R=wclsk25$!oI+Sp3+$$lTUs(40)+Uqk9 zWB})L)6sqW~Gf7USduj(BxZe^g6P|+}r)_S>t}qf8V@5 zi{Mj}>MJMM0YHj5PZq#j0O0%9hY=uH3sk%wcEQr?c=UWI3@!ZQaUE-QJTNiyXqNn# zN*aIYW4{3nLT3I)F3TH%AABzJm;7Yp!SQ89clqj8G6Pi=y9~gDGTU%LifI9M&#|j9*Rb zZ-4O{{@36CuQs*j82u?@miqsYCHy*%M;mZR)+Soz`dbjI3tK#9Xj5JGRc$Rb%aOV* z4(x9;-j2|R`_qt-KyaOBji1zieh%Gijo6>D)xV;u+%&aSaZB0nAoFwnZ+w9r9D9Xr z=&;EC+@EibdOyF*UUavX_16DCzk@5eX>7eNv(uE!gb z*1RyF)k;^yl;EtlK9gSrcLC)?JHyCoU~imt$>d93bUiWpLd(Ym>f9`+yjxMvqG-#b z+r6OGeyH)x1w@V`y^gFRGGrKZ0`UjUjUfQEL8G@Y-f5M^8Bjds7HQFhN&1|ym0%U0 z;A>p4(kF||qn>oh4S;E#=D7LJFB+?Fk8EMye6t;_NY1glKJD>%D`PhEkaD2EO(%}8L*=XDVCM=Ydh z0c|wj47Mg%*xE+4hb@ch!B#Gg*pHu@yWhLO;GMI#xxcHSG-z$Qg!MMB!pO4Wh~P1b zCyBEuZIR?K|72j`{O9~AA-ogdg$@^Od&Bg*?K*O>p%h*{^P>V;>DEG+uvEY-3`p`H zbL7`29{?a482S%v$8-VLffb(F9-P})2k-g+TGJe}m{-C0&;R*9<3IhU|AhbYU;fMY zUrbZ{>%S>?s~c4RYr!(vb-40VoWnNxw%(XKq2ZU$ z7@z&*y0)74Z%afk8F;y+LWEJ&;}{p8JI%QM`uX4w8gOmLk|z3=K#|AwM>ctZUwuvq zR0=-N9R2kkHwzronN+;6GHN~uLImkD;lm&3zh46O0_J?9Uf8W`%cm*%nMJWSF zA?`87kxCkYpE70zXlGMcVv{_szJh7s87Jwzz@o|aCX-ok>O1A8M2H4N52rITCeB2z zVM^ZM9A#UN-42k>Nt|+%NuMI^z$ge#ax$dW*9hX?i5J%$ZxTZQRxz9MKL&f{^X9Q0 zmm=I5-ZyZ74&rEqWzW-Cls`S4E9iSH&jMc6}dDb<&UJXUTr=LgH4)Qnyxw z`k3wWDwzMm_#A+H(^4rRevQ2A*siRe$yLUTn#Go{i@!~tDF$aAC7wnNjM!~4+8aAe zU$Dm;R8hTz)RomYhfMx11?7h<`)w*K3n`=Sg7T2-Sk{m3V_LK)J-_D^kIjWhuYch` zzs#3wle*-KY=8aNe~sUM`|aB%U+2I6|NZshR=K+MSfGZK^S^MtusP}~t3xizdEAS* z;D|;a<6nHODbT!c4#o3aaHcTG&*8r?%VOT5Rip(gI6cXQIe7F5r8%fb%bo3d%yz## zAYQ@WH0KRAWo<{)>mXVU``KhQuI;9|11B2Hqt}1Np%Q#9hN>@+9&5?}{ubx?VOm;$ zSx%+B(~aj}$43N16s;V1z(xw!8OK054yThBzM=`kLf|Oal^}9ytX|+`XO{t}&FhLY zt+=iQ0A^Msem=TeN8dnq6i62@#a}j7B|q_V))%OT9ob-E)7?gf7R~EX_6TH4sz>kg zDUTf#>d!#P;|E@F<`In|3g{Za?>V2;JO+>@4>TZdXEwNBjlljSd4p@KSn_I{3P;td zo-fW=Ryh9s{F9nY0MfE}hLuY0S|mxBELtaM_QuV3IiHJ`r%)S)J{=Xs&N*1*wix#{ z|KnrI0Q8JfsiSevTq~^V4R#Vd=^Wvhg%1SD1ma8EN3w9f`4CX>fZ`&b+I$<44MiiC z3ll0FjL8wNx!(qkwVq!ACaMHMW{5Y>I&wEFk^fVlU=eU;IR^tCeLaxE2(n989?-7Fz}% zx_|%oe~*9o$A9>~{yP8t|NQ%;7tm^>@STdt^*?wEHnZ;fEL22`+sJq{jzKS9DY6R2aHdG1t!3woS~Y9qC==dG}_$3LcNC>e~}t>LfA5zaoYN6qW#q%yy`FHEMy zYt(=LuIV5;c)^|Co7SaYu-550)^_jvt-}Y`e_v@ReNUR5*1!p`uN}%F(lq8c-HHa+ znzBMFc`fQJoJyShH-rrTHeDq&u(LDD&CMnut6+p{v^2rbo#idy z#-Hdjzf?NMUGgDl`P_BlV_T>cxxy3P9Adn6iRw=CuD5J1;ezA8^VsnE|76aaZHfTy z7}hav8~X!!nN&rm2zT195&oSP`Fl$-kcsiVcK=|BCyo#X=8#z67yfLG`ZdOa{tG5a z-FmdrM=i10OtFB$4SZJsaH-92`7g$CZIW*N!;kUVXogamZyvJvbrH1j`?~wvZ-0(I z{NWGyyTAK8eE#!i=Hiy?{T{>u&p8$<3gLCX+JySOjF9WskBKp96f|8qC#JZ~|E`fG zKFM^F-sXbJNdSVqDbkaUItmC;xeD z(E!zdpli8f!-4=rSMR&V8#LFrAL;%7ohI5syau)3LGf$B>Wh{!#!1Oy364P-9rPSp{E*29RD;_srxi#7+sodZxQw3OBQmc|=%k)1@S-mTR>ori zi|XYRbD-!gyQKUij8Pmoxafrq3Yg~(Hd7)nz7$AnpSTcb@(Wl~45l4Apfx*45_UV0 zQmHV?7miAT^JB}Rv+JagsMkbF$9VZu<%IBx{6{Y0^1TWSb++L#;s&E$OepUu^77phElzq7XNux>p(j?nDuAleG zxXae!JYv`zkY}AUYxEjk#oX^0VqA%4a71x6i4x^Yz&PL6VRq>70wkt9iyy@wcYSlx z?PBs7=$(R(Os#|&n7lx^KDIHgn^+2K%X6_*))&oxt}%VrwZGl%pEXyK6V;Wv&5bDn zU&T}|@_U!(k3awPkNsQOx5ruu;0_f-UwR#nfX(1E7C{7izT2wZxfLheE``ce;nNN9HK(1-VQ#5 z9i;;=7S{T2DiDVTZ&-7GI9nqdVvUCVqc)>vPbi-npQd}${HJ?;@ju^!FhE$!vb8?a zM!G}s(}W-WHN!nL)!DaQHr`>#JD<*Vy)_#U%GR9E2Jof%@xfou{T|=X#f|#{Y;_Hi zU6KY^t)PoGJ9=44paFGOmjL=sI6I4X7_yGu8pFzjc4m<63GR8j$g-A7e|uxbhL(o* z6p`IlP}+uRRAR3?zQ-1qbakd6a;lTyOp?MXSV~K2zD9K4&}YwIDYc zSeFTexWscd<2552r_d{l7{5&+dyOLu;LTSGL^+)sgDnQ>_#|{TXj9Nip17YEwBP^I zIVkQ^7*D@doa}P&6FWNa?ho4?JWl5OEB%Hrb&m??PmOx`sPBSfk%g8?uk>=M=0DJ* zrmJs4$yk5iiTq$C23bl zdwzmxQ7%_EV+~V-F6F4xJvITwS&t*{0&@NawsfXO8R{=S@tz&EAZFPzPwmi5at2xa zZS|iQ0fa5D$G~YT{0=^WnMS_iX;J?<-YCU8FXK?j>uPA9+xixmYr@==c>vDJM9}RQ zm4(Z{^|_|-|rGI-1skk#~ zK4U(GuD|3fZz>Gja{7lFi(EN`->6)J;1mIu&rcYJ0jLH7lJ9oLGyrPC-->(>CLg*W z8yu$7i=;NVdS(zQta241FH5s(DjCsSK&%!dCVZDzJ_6Y-8s|YExF4*gU#@FxE|`E} z=mNEi99`x&xr=4SU-60E79@as(2QvTa)9{lnU9RWXP6HwL`{-jB0&nH3E9XD64d~yULtT2}5M~XIaK8zoDb$Y}6?DqQ5h+F`WhI`;m>?rO5RoaCpm5 z9wV|^qic1|IU8@HUU42Tdb~XQX+iRPj>>-~sIp7#^Ve|_W-dV#@fsT@aRU$(5`@EQ^oB2V z&V@EG8q!}mF8#u%G$cN;i*%}M!)yR9h{Wz~`OmeC?Zfb0Z0UCzm_FvN{pgpoMF{^{ zqgewB*XN#@r~aGRlmw?a#&bbqTW#;W!?xC{s1XfL^SAVmySae`f2sdy zeFE3!qOA2Azl5vVs~EQv>b;Pm=CPF=x5a8-(5M?c_2NZ!*`VYg_kwlJ%|K3&CTr!Y z+Tx4$hjk|!$id6e3SKG!D*T5~HuofanvNf^#AF;66k(WXdZ01xG;iED{cic(sVGBb z!{oKx$Xy%ji7^2}4~MQ$`MY~`p9+zHixZwFMHDi1V5R166HE(oQ8aA9>sSa(fI6Q) zxdFX3B<{PcZ-;kg3MpLF_-&D6YM}l)1ztuKG?Pod8(S$J2@=5A4Wj~r7t8key&ZPB zJ9k~|=(N-EVSE0HO9Wo!@XGl6e)DAjjH2f`S^6Ri6Pg#zRy!2PN~z4BXTf|5hgb2h zw+#9VzBqGs%!toKB@^$o7QUOLfZvj0Z9M!C+h^Lg*eyf!vx`0W2)+VuRH_R%O~y0N zEAERB%M-#+zQ;Rcw|Q^J`rPN3UPN`cLmEad@_TJ09{l?~WuvsJ*FqXL-St9vDPR<2 zhD*R9b*@d3pASc4C^f>`h@-C!0_bm)BL75QJ2tY)(eK-5p~6^U!ZT;&)H$X~?F)%sttz<%Py&;SgE?&5N9Ut8Q@j8+hDbmEXgyW*$$4CPfx%S80Vh?9QsuYek;X#gLUO-O@@Z+LeE=3y7I4^m6~!t zfqce8+L_MXAJy2RY~HieT@k6_qk!faE50_vn(qcsy%8POhRigTV8J7w#fA{TMJC5`f~JwM#b?uwfk&ad=gcTRi|-J7@WdRi=84%yRgg- z$7ku&%AF{V!?#^DtC)TKTb~OHI1{L#kgaYd)`DV&^E_<{m5c9^i@L*`sjuAI72Is z2rv0$dFz?yGi~Sb0Hw-r*cYs0Dx=5SV5)C|`w)y$aAUDt$lSx+Dc@Zaig}q~;h4Da z(*m~02^b$Dtu_*E60<%V*I5%B>0d(`J|TO=0ygW0X+QOd!{5ws7-LE{^mHOjd9ag) z5^nsIQ(Fb8=CvWq$@dwT-u!N1yjp~M8HJ})e%%r3nJ!|KX0oTukSH+uYYoE;Lpk=KWad!90 z%LIpNZhpl}!onyq6NftFEeYD{!im)^ifaw95~7lCPqLb`H=we@rG}}@RG)Rlr+^W( z?2Hf9vXO}!*&KTVRg)$oC~(iGL8d8`&(8;OT>?4@wIxnPOv)d(CAwSOdL()w3BijM z5P)LB6jrPk1O_E$W>$&c7Mp9Zu)qY63>;zwHu&-9wp$vFTKpGbFHN0FE=THcXiBau zV1v;>7LSZGl05*g=xouizo_P9#F_ld;TplwxcFtBw{!BLyeoU_uB9obmjB3c-t?=h zupi?So_`e2N|u3HqiEkgY`=i02oOHXW?gLcv%SlcykNEW!8BeLQ|LM42@9Q!p%x># zzyoA4#5nv-%d}|n&RB9>u-Z%;x;H#u7a%XRK|0)OMdBn5K2fcC>|sJHl07jX?)3uR zuzDgy=v+lv3bv?fdU<|$Q*JC+FGubmyU*P59W#ykn#>X1L4Z=$Gn$qZRaS`5n)q zmY`Lm;D3Kx;>4@fe_&wx_#KoD6k|squKRPeL@STe&DNw;u`I=<;p8(3+_BPF7Viaw zBpCdCI93;3u>*pR&6Iq_pBt4Z7G;Q9Me~X}76jQmbE7G;qsfkw_n#tfR>u6{S=gfG zp+h>TGw+EJbMMbQY3JwWCvS9SLqF;DVp0pi0-2nCz%*mcOq!DiL+GA8^SKO_TTJYq zejf`8vZp)Vny3+1Aonau-PDsobHUx?8B>PsQ|fB#Tx}+lj^q~fkOl%_SC>Y1_}{ht z*MbqTYSLtv-yF9FuVap6ofCixAD}8x_{jttnR)?vFF?wh1yanzJZPNrII7WfYcwNS z6hPl`_p(u8Rxq1h-gSBdf|(0%3zpmGoM#b(d(3Px&zn+}{?C8bu$*_iVB* z6ekMs>h09+$iJnLO^yrVQfjUX!XwL`KQA(z+2gKZ@2%+kx@g+;u^?Ryu+;yrfA50q z8S?+6L(0-|);X6cL#YPUW+XCs##<9f|0qC=XOMBHC@w8o}2B1sSQb%0i2YYtN*++&>q34T^KbY*`nWrmQA)CqaL z5;zu2K}i7chohQ%$rgI9iH)t87)A`mnRh5kX9AE8c2-Jr^A(@DC=LXKQDPSl((;uIT3bL{BF`QMYJ71CWt)O;Gp1@5Os4u8Hj7c|a$>@4$mk@Kj+ z5ppma_4|s9>f!I07Y*eTZ#Aw8x3^q%2@_eIn&MRq>e0_wx)@?y`#Qd2HsqYN+L=}8 zwceKnYX%s-p~xp16Cp3>{|D7UnSMJM&)g-qug8F7vZaow4aVUkwBf%anVqONzVfmr5B+ z8?1-bhKdob;^KLZg+zarcK@8QTGlHcXZ`oMulX5aw?*io;=z}-p9oCh zdxHY`YPTalXFc|@F6aL2`Qgt+oB3&987~1s52T&m7AhZ*Bv1f0v|?=&G^7A0C~tNT7#~Lo}!02|d$BcJ~X8JmdNC!{@QP$)le1iFk|&mjdS%L#93x zTXI|`s8`|UT_ZEyNqI=uUdpg9gSv^zk`wIT-f-JO6OC6C*Zr6c8DHN3h#Q066s2V3 z1Jqq?4Is~inbK#XZF4M?4wq$6jD}+_>gHFpAV|VbV9U-VPZT z&4V@mCpiNN0Sok!o^yB6|iPJ;LQkNU2I29rxdx@|K<0{D2CGG zKji;d=y=~Sxz(wbd-RO!ZRP)SbIpI^|2aF*;uH1t)a}5X&8OXJvzI~kr-oinOwKvh zY|V=*bFKcPdW0Ulx%i;*k~5|lD)QOBX|>~EJkva-@~Tw4w3#`iF`;v&jB(yDz2k1> zzqlR#6JTKtaXCJ|R_g(d>~LP3cmlK*D}H|1DRZI)uKNNMGQPC#lq3i-B%Pzn$g4`p4y92Y~_>ff)(kBn&%E?7nr@-}ooC$R zMz(ev3WPhxiw~t>*e@jb+iUrtge;!IIRW$|Z}1|n6l>+;#F;M*z|iCPmUES#rzn@E z!A2%}B!A|C7IluJYckRpqCxp}J2-`S5oBrKhobj*hT7shl-TsnXz-@_Mw#nQ4b!fR zK~vi$aaj**I%uKl#g${5$K7Ib;0MVbpKs&%%wsw~wTIFkje$2_39wfFA*^&6=0nD= z^(HrFN+syTj%?K7_?$XpKYnGAm$l6l%@k)^z6E;%#*S^mpY+K%3_F?#EVv;xnucNP z1KidA+zkoV&$(#zpLyq-lMH(s2Cqyxv$Z|UM~Y;%+kDUe zmY;Bm18=d!i;|GPYx>m4ujikm$#?c+$QXS%LfILT7-EAsQ_dJ9^B z{Z=P8{tiynlQR-JjoztAF)4h-3r5Drz7UBTk~mIbt#zi%XVbXt8p-!|y!9D9*E^nu zZmgqXi>7+$)%lISgYJJsljh(eU&Y>M57BiXT7X!!*?9HC{WODg2(oh4K(mDVG z7`-fm+D|LU?u^nG+$t4c0CO!5;>8X`B@axRDl1kh&-o)jB|d+oFZLje-9p*aZjER!CM;{{ZDatZ7;|~P6{z@;%T$QeJ%B70+ctC~pF!Ua zZbvT={aJtydR$-Wu`Kc=rNZ@DJooaiR2RB9F*+M6jnUA9&+EPAS7e+c&mau0y8qy* zVClJSn1#)$h$}|Y0^6oOH$9o}TTbwp(qUh4bbeek$8Mf4b2rPH))^4C!uTzK2|jT4 zF}76`3Kt{m5qK__)rr9HN;?$b!SmTYK!8vypY(TyJ=f*MQFvFhzP`hUhIP>E8 zV4Uv{OHi!xe}0abe9J9Aw6czbCil*c{(5}U-5c$cn%@pLmF-~0iHfS_)myR5#udgC z`x;W0I}A(y6Q5?s%EM3egYf{Yd;V~);oe^`O>djVjA?fW7Il#UYujBcY#rk z7!FA=Zu&`Gp`?I~WYXXu9u}ZRJx@!PNXnMDa)cOR2M;x!bms=gNXD{N#7{0}h&+~t3~;*E z_)O7Stnt`k+Xg_zeDVmPOCJN?Dgz+JyaJHyN-?T3>1Sy!32-VVLORIvBShx!*c8~} z1CYj`^cJXw_`*AuD1L0aI1_IlnkDx1I~S8T;AbYasA|zX>_O;Imv^0&a7egKN z;rpQtzGfKt-^H3{uw~p6bk=fF7d#6_z8vnp$ZLwF(l0R2j`d$ZpVvCbbhusw&#&Vn zUL$u9Pk}ItQs-#xI+~3DiX|kn`4EHpEN~%gHj0^?KA<)NDvX$JVw%9(1SUO~XePuS zF?Ys)lHReZKOw&4T6c1{Z?68`W%1(J6Zi9c<)-guNsOK(G$Tbgc6U)(YWZYSsmC`T zAE`$Tw$aQx+2O~-G+C<{hWD!|#V2l(zjXe?AO3)U{crv?e*5h&5*$E{odc~D=_~VD zM4kzuuM}O1;hLte?N+#j~)_-S!LsFV#m7AMOgEbL0983 za!7aBavm^q6&h!{*cOs_fU!Q8US+#CkYwPG`E@<-$Bt3r3^f74muddgaMMj?sFkN0 zs3hEDo#KebMW1Si!E(?02qh5qccM zVjt{$gTU7~{zdm4eIRu~?k&gYJtFQkK@-zIDSxchpzHBWPJ6fRXT(S5QV33;C0|gO zmT%8IK9yW-Cy|tJ5~lcm%YT~8WKs_u>OY!B#WBgVM+MDov>H*hm2&^H{Vk+?X6c-k z{vK}>gPyS#0~;i_eg%h5o+0!}{OH4Kp~-Wrhpl;ip{+Hl)UMEWAzJ2q7;yduIqzjrf*Z?^LEtO&<&%8e8e*Waw})EezGfp1qcCc5@TM>rC=Qk z0YHOrF;JMnQJ@pNtjpNxp@8KE>}f62V)o2Ab_%);Fhg(VYag8tq)@VLqZkE&Q3UvN zg6Hk)Bm{Wz*;}Zx{mXbQm`t?NBx?-|&uB%&4{fwDon9}x48+Xq7+~@M294i-`wjo$ z|M`FLZ~pba!GHXZ{}CS_e|BUj8pbv;T{MR^d!okQ2(sl!Pj-&ut+AW>+WPFa0MLdk zXM{u~8{|-sK^yN2pto3~-$&_sat>!xXtn6^1+`>u(w(xhyxdU5=SpEN_lDb102_1d zat)%l-(#BH*Q_V!h@CUc_8e74V#h6Cwg#1mjxkXnMsdHG%>8|Hp)W$>o;6&(jpf+k zG5xy79M6rh)z~(<4~E7yHzI5PQ!^EK@N6cPA5(rnXbl-3fG=uB_wis8hi_t)0b7F* zdT%zGKIHtaF^aL14u9U>@}!RJyOW&hZ@cHQYl~?ROcZUN~;`MYNXMTGjiO)*Z7X&lXv+)IEOQ z>wnU0JaatLexAyIj~pidCKl89I&w1?Qx=lGV)yX*p6i|N=M#3IuYx+ijrO(vW9T6e zk}@!F4e{sM$H#jvZGOMy^X>X=eCP3`el33M%yraceCQb08~%Tchmi)3wE=Dti|`Bz zC#`E7fj5hKGX~S|ixd)3lwsce;IYpbV~Qi$GO%dAWbY!cHyL};$fB0xby1S5cT^Gc zmKeNBH@pXF@I`>EXO$cBM?+`KM3}w@tN5y-vKDt#uukP3_8ESZsu>r441i{EfFeDo zeZ4jLv$H7q^FRM{{N-Q%B|3-))res!2Jv%CR`<23JLpWhn44eW;=4Kz68 z6cldre3`o+H-KZBCVq>tHyRuLP1YjGVfA7pl_-Zx;}bT#Ex> z)@iFfabND?UN70?#41>TBAV{i7;b|3=(zOyx!p5n#45k>z@Fpz3|s%@>X>KXpr;jk z*=(_HahrKCXtkI!TkHRJD0?6N>vG-}KHFy&iF^FFzJWjUg78Iy6(=+n3->uDqdu*1 zXJ3EKupMW!QBbeJqp4mSC)b_pU>M@$H314I;8;}x>t`;;58cw)S|Ds@%*K=ChBzJx zbRx$su$+=Eb(6;c_Qjo{?0UG1{dqSa^b^|0AGdh%c79}hC=!$6(WE2gS5RS2u7Zss zlnv?;p^C`k&&|4{fb3zHBDQWIX@t-J*Z=x^{KG%|!}tBa`@6rx|M(w&H~5X6n?qKT zo!NyR&bv1?j%8uc=uKAXqlIj{_E%qQ&lzO<`G*3OfV|P@*LON5HmC+6Qtc<5HagGe zk|O9t*bvl+K6=K`W#4han^c`d1LFc;5Ey6SJ~8BkMG_l?McIUS?Nax~WC#L<2w*{j)%8e?vf=i=mH*5i$Jd2IH?UN5q;_&UQZWd_k8Tf+z&AVvT+*|$U+O(70n%$z~;zZW-8Ri?o5*LoWSzbE_3?VDX&NClADKTxOD0wdNZELg4 zwcOj!Ger6LUY4gUHuK@k!u!#iwr0Hor*z6O}~ykLq7<$gjA#VE@6S zLd}+selCuI89tbw`bi|X*q&~h_OrQQZ^ZnEm_O_qoj&}Q|0l)=i-uuYD{P^`kihi- zugACl{_nr}53VUzf{hiY?+VDG1TzTZKHBvmgnn>g>rL8NgiwJQ#^OEKEL`(Z!d@+iRDAjhvj$tL5N#aT>ES{Ah>rsQ)c z>W#MVzWEyV7r*_6fB46LlzT>38`ukkEpf(p;X$!AP&Kv|Lj4}|?YiIY{pwLX9?sQx z-TZpXnr+-0o#4++k@tGM&MkeF_RThr-4CBbviF>mr;}V*Xx<7xZ77I%YLC9#rLhun zQV!7P>+$k@;*8~#WQr}%xp-jeltyK`zWTJwz~nN|L5)kB$MjfkN3-Lht_yqeIVUcf zF1uiovofZ{K=^(mf6L=syrjadHk_}d@SAgM)cpnPXRU1ZgWbn;J#Eq@wuT~??1A;*8g4)h*q@+hQ4In?k`+vM!(k{A2Gy#s~_G2@N4YX*Um-^qUb-Q zE1^d^wcPG8koQik{A!$R{$1$;TU$rtFlwh+aOwe9pm~FZ>RUDAXOOlG- zU}aHM`*it56!wXgOpBl@&$;)kc;ljO>W+z$;{pq_>E~k$cNdTiUpqaYjn0z5tbYS> zOOZW&$cqz|yll`HG>UY?R8OP2CAM3wg3x^KO>A~ zV_b5%t{6*}8l$2tp%p9KK!|C?bH??m&peLajx<`o11^qiL5O2G0yScec5Q=@5gW7a zJoE;&*S#WR&HLrE!0=MbNmoaF+oUg4Y0$|3xF0;&&YTcVGUQm|T{Jfx7ef=?wy;Gj zL6p1R;;nMN*UIom{&-=GN>TqMEo}PCJ}F|*<1?MJ*TD4sJQM+jg^gnBi07 zBvTKhe7%3}*OH4~8w*vp_C*QvsJV_`TAaXJUTeJx%!zB(FJgn^qmK!_gs1QFf8@H{ z6#(H_ie3vyVQ@l#8q=rHYoLgfq=^{aJ?9Rg!zrl1#4_$FBvwV_#LZj4QcXnwZbV{U z(pVIB5EjoE?E&>ulcq%R-Ag@wgUe`!WYt9 zM|gO!6f5)`1r?)`SLH6fK+QIwi^EvQ6d*J{Ir}~H1iI!K8^H0n5_3Q0&r_?(v(YM z8VgL$ijn`A8*C)zwro83aMs_~Y! z?pFV|qx9l?hL0l;s);QFcTkE+{T|;Rl7oV@qF0(bZ{3S`$x$E|4h?{K9uiB407d3Q z9rkD%*Jn}TEGK&5It6dau8?7oUZB}x$3 zhz(SmHP9kJC)78-NL`DVbJdy6V9&+#Q}Gtyc>KhIQc{-y-eQ}89=e;02AnR$>T}|Y zm;Ms3zzWjYh>*WQG((PPVzx~IG@F`n`9wB4(WKOP{Nlku;>-Q#c>Y!q4Jrn$H`*P* z-0N92_>Y~ckwpQxfOOckSVUZBA$Aoho5=-_qIgP?YG$xFQ|>gl$QZ~?n^4YJhM4n- zvcUWC-bh;7PCdX_C#h2NKZipEC-^p&+!uZ{PjTwZJ!dpsLJ!VA&DSDY^~FoSv!<10*SgQ9kNLU`HJhALuJfQ-tIZ!7&Uaq0AW4OdxDT-yN}eZAA!)k zDN)ZVZc4V2JDV~f7b|^Zh@bKW{)yW0Llg|B9zubI4fDKOH}A2gOC=bH|ZB z$49KT$BCWufyw75H@P#aT;=?4(jxR)Ws}7b1h_T-(Xidl7?PKKvTg40@%i~VYt~_8 zRVctrxK`lQE`G-O&l?K2IP6Ey|ER~a=VuXir-qH{@w7+Z++;o*dfL z#xlxirs8=fI^6>*!F|3G&3n#;-#1~vW{}VpkWJXDb2GA;y(SCCBPmGyEzevGocJr{ zY9tcue*rASwM!Aa9#;Bm(-!wWMvyla0~o1HS4GW4UFHd2pn|swU&&a00$-EOKcg`q znUWu6X#ET2lG~^PSV`_wm=0^Pxox(9>Kd`m&1v{|YksyJkj_JzpT@62Q3HuYww3Pv zI3++p>-$QY-MGh1V3&{KLg%0s5zsN26B3ghG+k@B0zmz6EYhDQ@oK}C5d)Ar;otg` zYlhmKVlntqwevGMaxZe4vEX*-Zk2%2a(EVVjekoV``SoJ$mC9M(24uJ5U>3Amj6+R z8RyhQ+gF9?%|zU8IsGmA`Kv!W=JcVG|Bb)pPrZF-HyO(7w@o}=SOgw%zQ$+G|JsP) zxr!w~dPEG@bGdISE%@E>*qaXh^YLe56vh`0MgX*Jk{&TJxmvfUn4&_Z{j{-({^zF|9oWdfH6Iu zO$_#xHAPhqj}S`ml9d1a%5Y?6zJ0zk!_qacKW z-xW}zQ68&daKL%ydj@IP&^?RULz~zACbBSQ)Mf3$ce|`d2R%n}gT~b(&#_lE`+$UT zy3BHt**z9Y4p2p^duyVc%HtOx6S2?OmPawTaG?cx#0@KERQ!ThPhr`qzy$ve1iWAv zkarj=;5s_;dn-nL5!kO^qM=F2XT5jxX>a~37hHf;Wh%gp#^QNapZQ*#d2Y-vnsTF> zy&fy0DN+E~cTdls2>>Sf?*MrBHYa)eo-XS56AF9}|7ecPRCi4e4CT+Y(Y>3$gP(5h zke2q?BXBDaFh^{G3skd3{@Y~WJoRh-d!z5Ph~QYP7)qk3-{(-8bv%~%gpE3A@W-W@TI z>TCBmfVwF05ksoy^Q@Jyi9M)T(ps)@{}HL@q-k&TBlx!j=)1aXEGI^CrlQ*$5VQT4 zehgJ4n0_sGK=f%Y?gz`%dtcTq3_pFXJH;QyI|010{caa>EyU*7BOaPMhK^A}v{iS%% zdk)dbivurEw*`c#>FvA3PR$8FPaRwQQuIV?jh2GI#nuT)w&lqj7icw75SC{(aR z1L}wEFSZ>l=6y}TilHowM;3mABD-#`0Ft|vM_)-^Dt0kF8hC0I%ZH{5=3E$>C9jwz z*7@MCuh=LN6)$b4?T6#%5&NvsD3ae?&=PF{XBT=Kz;wXho(0|4^w+#N0TNBK#s$Pj z23^SHf<=lz&C9%`7z!&J)4l+Jvn+ul0_2NX&UNHTTIS3R5oYs?E3o(HTca}LI12Dg z%WT5IFB^lvrEM~()~ z-pD_CNBu*_Mz^`zTl1bR79mqM*nOLWUr=DPk2ZFmhUeJMT26DAhIrVW@ULX1jLkV^ zV@Yg*|UbreH551 zl(@EX?On`SGbFD97b6~Oq%`S~02wyC8QM0}wj)8#<=*yIPo{K*PEL1~l;)%tu@5gi zD?P~;O$GPLGwuItZak~-uDJMxHYe$RgrMCKrCWj9PsE<_kf3-QpN$#K_1EN!IC?N^^QM4Js};mIwe? zpu)3J99+)3Y^sC1DjbWrYV2tD?D>S;EJ<`SwG+ygPwvpy1AG(7>$&Ou$i1)!=V2|B z;xmq&4YV$l9AzB~`8}@~JDkUhz%?&y5;pa|3XmA|HD_uujOE#q|MYNcRQut%$WZ*@ zg$FlKSZJ=h!Jb8~g<=6*F47=gx*ohUof~mRDZ@#c9ZuOV>kK&l3HzM!rsx0cP1yb! z^`x&&tph13&H&z!T++W5AdKy}rN1ffmiPDkcWo{aZzOn=iZ_>iV%|a{7voU=VeE7 z54r?&!LJtw);;0UOk&Ab-XN9dh^z~C&*}N7zv*l$TG4jG%dj2u`Y7RD&JQ6C8dh`z z;Ruvyo_%@F2^z+`tv1&rw3=h!q?fp-Mn>OcurOWMh>FsWlhMiOj%u_#4SQk&ya*0AB!$0ou=;4uD2B>{u~DM4B!j{lvB};PM8ONT8EEiH0Dq z-G6SDiD%eUNrr!9MmzVz@#{y=qspf!YOxTEdD{sGAReCmw0i$<|Kcc7U^Ghayh5IrdX#0Aohtx zNVV}ftiwjixYdHh*$=HLVSAOC8b{p{su_v zAiy!^nWxEGa&^d8hLHSMeQS*DQerzYQ41f%q&$(#lK(ltv{s|OrWN_Y+U!Fp7y)-%xWoj2iajyh0;K~^%nQv~ zeiQKXy4QGjtz)600bR_w$zk9KT_x#SAmh;G9mmk58crkmDZV0BQ${TWwR=hllE9!v zfnzojHH#*JAH{V6UEcH7lpOiEKwW{)nKIcTo)a*j1ndh!-Z=x=tXx+zrVY)6ZzM}5 zXgjI_1x9hDTNN{1e#`kCh{qym_z*RhO0o4H0u*laxasC%w(ZF9_163>x7ye~VCL2D zJ$O+VMWA#!5qn}s7cLM$IZLu$D8}{op?|EipzLwEN-k#JL>qgqI%i9N3|iO5UEJY%ckJKJ#YLSg<)L z|82;fjSuQM%ar+eXsM5F$lh(8d_&(g|2@NxF&PcZ0)x@UWGwM#VDu=seE#+PcTJij z@Us9jtldTGL0>)Mq>RM0s+1?q69(6&3l-~D$e}Bn; z%Xks;R#?q7N;kh!5aoXq61;En$vn3CZET8g&wpOHk%u4~DGPg^tMgMl>dTreN7v{D zVrta)XJFXeDr0Ttq&Bf)`CN2(-c_4RJ`NjMJEKuCa4(ZGU+O<(s3m5efq-weCLh_X zTj~A|F5(Kp+J?HNf2Ce1?Zo=!21W4<0yMmhW6&0&!x@shNeUXpY zz>(Oz%b3MHfnJMz$QM>IvR6nD&+X$wVt6EKYC_52vEs)Mhb`Af;%E>}0i=Tp(mb3* zc4gCxLDAL;y!h(XJ$={;v}5M2pW-zeV9chs0cteg83JCreJ1Iy$Jf7oATjK`u&eyw z^N~t&!>s+Tg*QX22Lo=5bBgWf^Jo55j5j(z9aUt4wgQ%eW2s~**VMfb>;JjVTF@4UHZbN_^S{PK zZSIZb`%#fto05b}P+oU5q*q+L_~-lIxuQB)7=)_B3ILR7R-YqAsJRb9SNGoHK`C74sYXi^vr2NiE?Iplv)(8kg7G5Yt{AC=T40p=z*!6NKV27h~Q9~NCw7jcT z_OUg8c_AeTBUVul`{amPgdyp9`!DA@85PSlI58;krzjHi8C&kOFrDNh#{<0Md4QnW zX~uBetp#8aX7F>;jV;P=QR3P5d;>ksm$_I>F%opRFR^Af_BZcz^gy}S#4g7vB3Tq8 zW|^N!@nip#U#yKI`MHR@HhK))nNLeP_Z|Fm^W1XM#GAIxL-Ugf9_WTh=094j9D23j zrTllFxa*Z;{?=`fPSF&G&@L#`Pxv<+dgx<$vg~!1rEhC=~3-A$SYLLC~D6k+=L8-+HTml{0<8obh3c z{EY8mFUo(AZAa!Zz=dQ!^YFGfV_kxbE?iC6kkmr=4deTzvn{>o@Ww)J)?ieBDCh_P z5wBA#;wk%{uA(haoORO2#{457SQ62}eM&|E;PJ;|H1B@27V#}tR=c;RC3~N9FE;x) zhZX19CZVx6zPhMjJgNR+m(Mdbbp9OUgP-*O4GX`Xf3VwQfNSQ~{cW{FW0EkPl@hA+ zSdtE=ixXASnmjy_#Q>{IX*;1?tLEQQm;{<@GERIQ3NH#NQqj=NqpY(DG2*a5@}bq8l& zaMZ5KBO#Ls5bFF#2ho{&!i;>}}AB&5?(EGcZDn7e}_r8k-Jc7YF4zPX5Otq4HsCV2?7w zqcAD3vMC2AzBv9wE>xbNgcfwD&x3!9`q%sy^Eh3Dq0`d-)62z|sk_Ltnh zzIxp%UtRMcH@P?lykxd6C#uFLR#0toE;_A|{XNH9{&Vj(gOzhT#)F6FmcZND0qo8aBS%WezxgU znazo6Ew~68zbPAbe{e`iBGHf0!Z3?Scb#c0R3nNDRh2R%4f?v0rXt~33zS5(2vt0_ z_U^xomCp@3I6xa~O|qV#5jS}u8dd!%vmK$z2ygs=|g0!U(*5!;xpjwA{k~C_5dYy{Vmh(;GFx{9pa*D)5%qdb7&(Vih%I758XEr<75E#Ud`xi?d&pUNJaet7Wxr;(%eTK zHEw<>_8bEjd0`!kl6aDRiuK=lsJOBZlf109!c!k7J)X;|`(4j0K-6EzGuD&oEl2sj z^2kQe?mjPjJNlw8p8FC)J%Q@&k_k`e{$pev=f9qv$Bd_FjkQtsvyd*e47k{k`XJfJ z8T9BL+l6ZJ*s$yA4&b_>Xd?QNtD`0okkX=NBla?veez#FpPRLyo3-cK|F@9tVO%2l zdL8t?j*krhhEbP^(I9jof70KHPdbq3{8V(U7riKW&LF|y*?td%63Ri}=}qrRX+r?k zlUKAdcXgWVNOh%|s-r+?K1IP~yW>c{@w~3l=z(l?vdu3{;$IY84PIBsrwrsOHNEEdAJuMX07g-X@Zb0wlH_Y`z{) zO?d&=Lg7@{#^R^vV%|^bn!X*do$lRy(&^aC*nV``il^Sw(JIf<^nw~#5|i^I7jRH{ zILFbba6^U6e-TRZ{|Af3|DX%fqF?tw6}FlGx7_J*{Yfzr=g=+*8F$M|Eec6|D>Mc0-f3B z&R?&fKb;nbR~tZNn@wcJBFhr_R88d3iSZ~6Sq@8zE!Oo``9*6L+nI73E+ZZFH7SXB zn{S)d?lx-&;b8dM45L=MYi@_#d#%-o5M<2pxzR$6u3rJ5?`pFy?OuKqN6uP+X1jHM zRh1s+bstSsYrPHkWKS%8Y`VJ6mj@YhR`s734aFU|qgNTt|B8RfAE#(^A7k~tr8Kd* z7?|%(6)w7MUpywye*;YbgUIvtt16e-B#Py#s>BM^^yOCwPu?CkjAVQ1yLj`4ZScdY{jA3 z?Szg&sK!pDu9!mF0kUXP-_$J5N{~H+4lhWNpD}F7`C!zj^@xf;MR zIzIBvwsF978T-4ea+a825?xQv9_BWd-$F4*UhtU$0I2+*(Gf5M0f2~0#?^fOQ~uX= zr6z3}KZ>C8<%}kMxUMrjep})+pF&l6yRUZI!eI1MeHz8k@R<=Wv$g&^@s7Sk@XMWS z#aOTCn^?Ih5sQ+toyP7~r$F)mWJ8MgHTDm^k1FIYhU!IUBzoG-S&GM4&c8&~9L7OJ zAmY@_b;0@Iw=O{j=qq|Zz@MKc9T2#At>EfejSCvC9Ii)i9vHx%xw_Ef+^(d{xJ<8( zRVkgf)aC`FbsFx2-WDLttv+rkSoh6XDyE>tcq_z%vf2K$0}LmXX`Ix~V{1BO9wixA z2S9ayK0jc_piWOIJ_AsqNn!C7+wNfzd`XlmK09fCvZMfP4v7xG!P4s`9lr3ZH?`vA~b1FN)^8dX2)gUX#sq)39X*N3{z}Wm{gxlht1s-cxQ(L2 z*LUBCj&ocrh=M_my>hU$8)1%9Dfd-r4Z?!5x`%s!4eu9e%UH77bvmV zs|{FJDxTKmw}HWLyH9xIZ_6`VGTEw-1&@}p3o|H&sp$!$3pa-VLcb%Lajm9tDgxu9 z)Pn2bM62b$t?7T_k9q2lr$#wZCvG0GTbm3|+&B?i8u6UdsYb4xnBW3=o@ady`NOon zTcd`yTH_U;TK`Sm_4V$P#D!0RW`ojYR_2Vox+9IlQO% zDo20pm(QL$cdTa`y)OFo*>kgD{4)s|Y);FW3npjdF7*hR_t7UN25hzZ;3oI30tHrE z?^*vd$BolJW4CYEMDABh>eOfSm@x|FX}6zZyPtdi|3R=<%AyP*JKorL@rD5H?Cpn} z1hf01(o09|D*1P$lpE_9PO0n`~NRnII!2M|l2soSQ9D0!6PnvrS2 z5%Um1KO7aX>~N5r?9WZM{m>vHA=;?mS$8H70N5~*?7viV1khd~+jgWsCzYn(JXPHaomEo=BrL7e%o_w7SF;o6FHyVXx7QE zc$xZ8vXuL{;+3rYSxZk1_VKjF2dmr^I1TiJN6gl)0Pr-Mgt>zY<9C-&WlkJtGX6eK zS(WW%;Q!Jk& zy27ic2l0r7db@J#eI)*}=8p8|1^}>@x%|1+XC+Vhzx6XVY4GEC<^@=aNgjQZS3DcY zPhNJZq&WR+P%${wT|Hj%pJG&F5@XSOi{}qCV2fsJ+a=^iEQq}|xEZiP17);KLhcN` zzZx=Zz5JO@vXx?<#x3xOf*H?4wnwJ)7NQWb%voj8Kn5*!PY|#pdb1dfM#;?!LZ#o2 zZ85QdU0;~+4qgCrU$yq*c7GYk67HazL4H2kFlP>ASyxg|m2bS;_o$aSS-^1D-Hgw+ z%Pg|SGcBy_W2bn|;^zv{L7b%#fZ3j1l6mH%f}}^6f|&=**{sh&%X=Q*a>M&`m4oF` zTF>|mPr8kRZ&42{$?+31KBQwo+jTO7)FZ#=w%mY_&N5Iy5_&wur+ z@ZkHDFT$Vmf#hKu^h`41;Rw8|^foBwR8Fd1wkQ7)wJ>~xAZxi0V;{;TTa5?FV>u4M z9pi?HYr~13X^u9Ty3CYAJ$9;DW={}xV_7+#;4B&3>hacF&U-Zz`}%U!R|^$f8)yD+eNl{ii^qFD8`lo6?1^r|BJzG0x>lG+hUdQj^`xKq}-76L+9M^V>dB% z*pGFk`c#gq8U73Xzgb(1=<|Mby!hzaL`iXPsNUgHZ4fi7+zA1@Ys$)ty1qKx8rHseVO~`zNO53k2Qfepn_RZ9P{)F2DMr73 zlyn6EC@@0-<@fn>f|KmLwPz$WEh4;)jyG2jei7q<4_))i~y> zNhqRQ5s%ymy+hmH_>M-HxQbn=Xz?N>#OeCJ(VZFK%h`apLO14a&w9BDT}qB$OT%u%$lw2>F!=V#A1Kd`S2cfEfH9^DELT_)jLCTO z+5vrQlA?iYHBhdd|McDzINlc5k;6J?@`|y+ikpR3oTGcrH@C1p&$uBAzTPlRIZQl_ z#x2GKe)J|dx7HXVgwK0}S#QY!fyhxjTF*geN9XNVKHKrw7*hWwWyB$1zLKSx7awu1m~FpH^e;tiCMy?sJp-~*Z-S5w>;nPGmpZ2P5mZ;6fX;$$<3r z^YQV4zx>O;#Baa-20plP1kWX`eQKA!UD#mhcKpkK`7ghJWWi-~!NPX`m1A#gAL+_J zI+m}y&TqWANPPc7rBvRn*#XMe$Yg7nNYA@PRbIw`M;7%$&QSzU$K;Y#J$bft`#FcJuB#Z!gtE0jTa`(a&0sVleD(|Qmifc&p2WLT0o`0jaOh!hUEcL9=jdGU*d-P z=7QjFu!ODiRzA?0y2(Z9&jKPAVO+LDaN!|f#|NnJ-;0P28lh}>?B`}Rb*0RFPh6Cjz-H)JPAB%SD+BYHf*Ro9-Wt-4pZYfr16QdD(8xu~b1&hs zD7-fJ6R_C@Q&a_0wr2t$Dj^4m`}|tuY+aOoT!ZKX3bs6^UvKw#5xgK>-*x>x!HLGG!7e~>}Hn8!8$&wts&a$G}mwbLKigavd#=q#~QyFuk_e_eDrF(mh#>QS>5OBlX z7jew97WVaq_q0VME84t{J0|jO3oPO7$c0Jz*MYtW`_6yA#UjaOhmK>^|2Q}uBNM01 zePeVQ&vu&@5MTd)oJKAhH}OZC%sEuo*6`IXwe^w_QR~tkHJyQ#kK*R5`O&}w4|iSPrA5$z@aTOJF(Q(W_=)ldD*?P+ZK87TkX z8UR@=Osdgqe|{~BDfD?!&$-(T!}TuYi*qbaA6d^27Sk@q*Z$>j@>!obo@>0y((e!U zX3(C$T}K@M-+%KT7^V_%&xdLdE&`N#r5P8n(XK)h_NU+)^0b)Id$nue z$(wYoj~SGb?O4VwHmc%NQ-vqnr3O6r)H+N6e8}_PaabhQFZlNVy`${%@QZscMfXP_ zk+>=_b>GJ5YkRxI*smOqKR?8;-6bV|(cj~OcYPKeNy`3t^SQOL45Z0#YZ^8HeTj$C z%(7wA$9;C$3ae@cH?_gHt}@g6XnnOO6>| zjA@55sP{ZF8^tc+%&BN)*XPf@MVr`+Mqhc^swdC6-Q)XHzx(mV_d0)b{s?WdGj2FC zAsC{KOd zt3JfXq@})|{9qd0<GjgwUO+-)DT&ECrrOw;&93^!;fc^07_~g} z$oTDF!veHCBO}|E1%3vdByy<4i)K{5{j5^UmxHF*B zg*<=9%eAp2KgQz3k8oyfrT-JiY=@T=^ZkxWD}^&=q;iD^a8*6SI^SQjTMo5lo9 z%A7CR{a^s!-rKdu~5~8a-8X{=do$kdG%3@5)5kb zWZ3gl<#ysu*ivMeBxcXS@Hp_dnp3{I$Y5gxaL1K34FtP_jA$*`1O(e=HQlQ9362XfS$G zhTXF`WC76eF)re!@S_9ox$jsCDlm7Q3Va;}06Bgn3RZe!WhqiwCh`@OX8jpF7~K0k zDHT*9Bk8!vj^hSYN!ynqTY5d9nB_u<)I7VgQss%BI|OL^tfdLk=1R{$9R>QuuNQ$D z=i?qw$&J?Jg(kch&gW2F`?Hb;S1<#C3*VD-JKoK5np*FXtPM{6IE|VzRDrR~H^CMX zmBBXH8U2^M2pfu>`b|~$Y-UQd@*5Za8t-jB`H3)U!vWH+KCN96U;Dry&MfER$@4u` zIhdsz7ExrGvNq;EFgWhVbxxVne(vXvbPwH=D)CjINMM8KR4sVPVw_h%yIli z?-}kt=09UZ;0I4(cYVFF?O4`poj$~{Ni=D)KyYLe5%Vf;_WUoNMke9<-}4$R`>i!b zYP%3k>eYr_k79YwvVO3@i(v!A{p(yYVC*LQ5=V%yN%Eg+kh}U!umlv$WZjEjN9_52-wCzq?Th2hTyG0JyL|5H zFAfGkkH3dwmNiY73$vDL3oKzc8Bn((&*7N2=hVw6m==-FuUI4xbtZE>d0u^!pSIM*pBeS|7qxq`13 zsI&C$jw&BrPH$A(HOm177zW-=soqF-+S^fpXJClb4B;_qk>I^CHNvO}smRCJ&4t+C zQB9epEF6yyI}^6-&v@R)WMgvle8wofPCvA8YHqjjqbayry~pcw&#B-Yh>4F#tpEPn zP5B@faxMQ^o_U5eMlq-Ll>^HIi(`D>VdLjTbE!jZEjg@0v&n&TT-& z`bPUL|Jhf)Wu%MlhesO3r^D zWaW-4Eo7b_A4klkZ%||C7RRGTZ80wWaq#$whq1A7>R9$*QM0P}bipq`TSI%k;nnsm zb9-8Sfg!?t+Sw|^yT z=sg#l$Y(l5mh(NF${f|`2p>6Dp}*#ojP3cH@$A$?k$g?o(3x>Bw-l`MTdY9!GkWkF z?(#Y5Ulu91zN$7&)i-_42TzJ(--USyso}YC;#^F68GSSd82yLQId^AHGHu1A%LSkn zJx$DKz7`8^KDZ7U>vGViR(fadr&B^^exZ1rA~_x&$6upx}~dys)q?*O?c; zXb+AO%l3d^~f zN*gWuDp>I5!hz|7psjX){-{Dq&w#ZCay$eNTtGv3(OjdsQM{Fa7L54LZS3>_PVqfs zXKKUok8Bos#(KLEt>U=bBty0wuw}V zpPB8ly0mzY!vTmD1yUjiD6i)NTTYT!pL&bD0hQYUY4PsFj^P&5G} zH%kbor2embdrqv?`!e1~{?9s9WNfSJ?o{VI<9Iu)0H7o@ik%b4k0f>fifxJIirIR7 z@=cf=W4c6y^jfz5t)DX6v@B96cMtG~wQ=Rf0r{?GqO4&=SfT`0w3jkK5@Qw*D{MZt<+`DTs zpKtLx{pd6Knx36@#;vt`XX@uC{c>Pp$xqU4!Xon$M$H$RuHENkxSCTS%7EIzwf|)Z zKUtrBZT5psGciWfd7bI{wWO~dc5Y%{n}997=>FOuG@EK}slI)2*ALFc+m4&knf~GD zH81Y>IgeId?jaZ07L>bKa5MajM0@n8Hp+h{qOs&D^N}9$b*{~ibMX>$rp>Ccaghhq z%yA=B3xIkKa6FU(+~`*mg@M@L&pykDea95T5|_hE#+VWImoaqF>p#~7#_^PvG0Yzs zzy2lqtj*9ycpyP0#Gcs_$<3Bv zLz|;UON+d^#h=70G=>blMpizuj4IfYV2z&kU8P^zts{f@b-CAtEoD-t502ZB7>@4f z71DpgIe>gtmK(G>-o(faiv{D_GwA)jUvT*hPz?P0zxf*%Q7_6dfOk7R)|7|F8e`zv93D_y10O(D)Qs1z&9-gC{1h#B*!z>=xK* zsDcw0k%P2cx|o;xWF5S&ZEhzS4!)ElsMfn~wk$85K;EKK8mZ~TqM zui%h>=&{7SK1b0OS|FgcYvVh1b|(9`v``$uZYn1^ZpX8zyDxz6BHqxK=f~y(h6rmz z-O`Dh)lL79KSs|T<30bU?WUhFY_Y`KLaTTK`+^B;6Sw6|^2YSwn*Wz^YKt44{^n#~ zOvmSkCp!dGHfnQ?n;~B01D6H=atx0wxUx3(YyMAp*JI27{=xKZ&_+D)S9YZrdA0_BGo{wdaI&`N6nvA;8HL%(m?zG=!iSR3MO3tk|FI6l|_U6VVXn9HGkr?OxT zk7_ZtZ~RsM_h)f1{f`HnEX8;-*vbhO5LN-{BzCDx48jPJ2X|yifgYBY6atvPIh)Dc zQ2guX|N6iFuYCT8Kl~x@*Z5O-zon|36pk}X+q2uA*NJT8YJd)rW4Zjg&iMpXlh@6e zRv8`%h5Wr8YXa@}N$q3Y=W_r|`ttkw6WpW}fjZAd zZi1~o-=O4h^YC?0kIlfSgsIZeO1WB$dct3CW@Ab;9PFOH zFo}Cz#<*9{Ebj*g#eXecWuMZoa`o;%maF?ng7Elk#un8&XZ)KvGxEQ=>1*Mc)5Z57 z-8}8UcGSg+(fFymkNhtziT|?EO`%Db{4YN1c|;%K3ezawYiR|DZHN$V={Pp>UtHi+ zXPyT(oZ#e}*ii9SXRF@!#fjuj1QRzA@&kyl{6jQdSa{wOZ+46n08N1&8Y54P@@`^X z#xr~N*r(?|n576_08n)Xi7VoNuR4^qAn>QzCL_?vK6J*3t>9Ukclh}r9JLhiSoU;WH#eQI8^ECA_drCHe#Y3qo8Kk=6&7%!nZhUA(5CpIe68FwKV$++3&_a1wM z$D{s>F;ws9+55ul`>j%iX(TDq8ByqS=RF7kgJG!2g^qgFLkE&zPRQjay2~*AHEl{K zihTV;gkQ(k*Gc~NZ~s;lWTiDpk@U34R-q3ubH!J8shGCi;{k$@;>`A1)It@H(m|8O z2%$mA(nwQ~3V6gEjW&S5E#@#SIhMKg?0GJ)vyG-01Soqv#H93rJ2owOu~v-uzPIN( z&K=UI7NFl3Ay47M(hw|MS`7<+AwqBDa%YcYwdEtj2wTLtV>~us(Bcq_eBfMY39!=Y zI*J|0QD^geO7CifdRDQk zjf2*AZ5~oK;y*a7@?g=yEB7cZYDe9wfyh4=o(-eS)=(k&CXI;gK9}XyMjh~uNpP~O zMncTjn!&kOG&moV2f>w3Wm5mj1y>&Y8Jz##^502@u5*vo5}_6&EZU6gywCoj`Y!qZ zBxoogO?|W!c9`2SKZLv#-}C=mFoZ?j4cyHpcFTWg0P`Ck zIUWJW{fvWThQiD$=JN-gR`FKqNSV<%YyP;5=QxjiVV`qOl`o$FoxN7WZzCq8cgJH} z`V*7q$H9kAF3wmhYJk~Z`BtvS5!HY1Lb3Sds~GDYFzCEM)$=thrYa0=)IX>EDt%mR z8!?b?8^y2NW@7t_9m_oG|A__qFKigJk{+4C0rW*JFC@4}DZcs*hSdFl=gfb7!y4F; z@_l{$`ifT=Fu=12SvoV_K+X+hU}(!EVn=z}>ja~|!sa~BaS2C!?#FZgFaPo{zyFo? z_*Yuz&QpKYWW+}u6TCZU^<|kpFM847%BxM17L7lB61rXPc$Udcmg(0+DY6C2B6p-Y z#z6mh|NLQ_UqG}7RJ<=ddHSY-iL~7weNOP;LNyDx#(>Vl;9q8#e&%PP*A~lfG0r3o?2h|ywYM0N(3=-bcfNd^mk&__h3R7(D91z#*LA!RujM|8L_3A92@jn|DUP7H|es z`mDG^KEW`$`hEp49vislifc!P#~#1{fbC!`d4#AKwdo`A&+wl&f0Hcjx%O+&dPbso z122(H>aEtjBBGAV-iR27E?eJNl##k5wJc&fzL6huI_}wpXZ4rfN_@MAvX%6pt(Wf4 zxc&=&@*Nz5hHj9PtltY10KI`2poex)qp~RyjC#XfMg=(%YFv9OJZeaG#WYx_Tla7E zn(4kZ1F~uta5RC9D_ZqP>i|V#)c#6uo5qT)xCgwHP2jy^+Z2%s+aTyP@G2(z^u=bs zaDU`Lb9A7M7jpfCSsOs2yYr6DIM)^6HOka4FGVHC^`ya`|6g|a zX!+mct?#HLqoB{l+%XbW7R7#Skh(yCEba-uH~g48)YD>b0IcI6P4exyV~v&&rt_;9 z^mgc5vLN5853?tcV(2RMi1YBVUvjRGdw=%UfN#%k#|~jz{=Cqm|%Rhg+p;Y$R$QRax&K# zuL&v|H@d}58#7>Q*w#j{$<*}+D0VNwA&bQyk7p7$;Jmr=ixK!xYH^Y^q=!F#h2%@{ zif?M@kaiJsH0vXVN>KLGuPg*tt7u1__jtpdYhBn(s7g&FWjCqcT?Ag7+_N8*#}XSn zuq~2A<(Zeh3xnRXy!S--Isccj-tD(QGW+-Ak<~IIvuFb8`qgd$G-!k?S_0);ujqmy5KBMRHdNdxGRqT|+Ci4oY%Ez%#?3zb@TnvY3 zrZNF}T+9Fb;r#bSLJqu$b8r$g;Ezef+X?{EPQlO;vb+?wie+Q6h_@>)G8cAWG{bcb z8b8betjz&bhl!rxc-Ch|b4cgG=bHILj~r{(03e>a+;hH9cND{%;{Apob;R54p5xzt zUa+C-vF95Wx;J03ohv}KUm>l}zZcbIO3B@qD1L0g9AY8C*rl?Y$hZ~yh{d_cR=moe zVl4UJ(=uqM%=K*{+9w+Ede47dF%v$$6Ov=@~fxTOMQPCOtSXYK4u*$eFH*YvuP0SOcbg z&HxHt)_XDC^y#NJF+FPnZ}wuLHT<;YP@6RK5`=#yfIj3u_s3sYAobrT6XV!bqR}^E z$ZS>TlFUe^L=5_E&10j#VR>%fPWt-)qoTHy ziD8FRe&Q8hj4wwY;}F=-0AL4Wy;dbL6z+YNf_shi9!xcZ@=T+}PyBG<6|ew8y5?AJ%a!q7?>DIly5%rp_O3WKGdmgfV5U#_bd3s zJub9G(VCxG%6*rX|HbbtAR4X0cg}a2TRWCIkK?V&pN+bjk!w5ggEmDzckaDqj(dBZ z?JmG&0&;4#VCrfJ6*R6n?ilnIK#$yK858iZ6s7vmXe{@7uH;x#3_6n|Z3&V#QcM0T z(3&ig`n(xCd@pm_<35)Re%lIk4^5yaC15mW+iB!;(~tdZ?M!i})sO9<`h{-YuA7a~ z@?TY)`FYzEs0}Ku1%2G)U&qJC*Vlpn1^)W4{|dkT_7{zB$OGzQY~)K-gQHW6QJmO+ zZt&D@LoZ&J{GakUwzo?0xnGZH8u4Z0J~uh3!f~{(^_)NXsADp8!Q!fkCl*n)3BJ(U zFsMjD^DQpvvy^<(^a_kI%2?C-7zoSqFrC6F(%ZYP=Yc~Y!l%bD^CPCsdYI6{_-5R* zJUUcu^O6_1=D#erz5G3G3^3Tl>cYOmh>p#&s@zs0ba9r3Xxh2NW z9K7|`(s$by&j1z(s$42R*Bg`^R{<|)S*7)zY5V?1|Lnt*v2)(F3}xAD{v<18yqsrS zGkcg}?mG46Qf7GVnwm90f#h8^1kl0~&jOryC!n4yU!y;RVdA#S?b0=XlbQ$zur`aP zD{9gA+>f9RNf>;S-b;tQHTUVLR#eh2S3f*sYKq#X>+p7Pfi9Yk`D$^eHJc)hw`wFH z&4K`ZOYm;ST`yo1O1Lv9`ypNo0O>dC7$SGfru==;%WtVPx97omKI3KsXU}=7CP1*XVzvewpfH&J?)RsziWx2oyVh_{$ zzW4cA%?n|{(8D#Z@)|o{a3n_5B<_0M&Bn;vWa)s259PnasN}y<>>A#iKY-szDt0s`ICrxCx4IzM zvF86V&T8wSX8QZ-i{|sRg0cS8oSM>p{IIsXCx0!)W(#M`x_%BDM4YJ(5oi4k3Nr8g zTxX6kSa6~Qz5hRZe;;e@cHDgdlN(kaF@z5SX%& z7*Q-zh(#G9FG-0adC%nR{j8b!{bpu8d%u?wWm)ec&)xf3&su9f*355a*7Kb6*6jkh zx->CMFfT)1tdkkye-?mwcp(rH@PR{la_W8qK8bh}v0V9J#5s5WA9b^s4WD#FT(*Ek z&Vw|E0cXLDtA^rX*ID0{0on@mkswGiO8iDMtnHOUqYKw9L1XOj(TUr<}c@$$Q|yTbs|5 zl*M)cbLBS*_UgX^dn~dE-uXiewtVkY^$oaRT^Q69(mk^CRcz&CL1DwFX&kSBER zij06O41DpK%5{J0jr(@RMBbOi^DbGheU-(@pUkTNAH_7j}?!!^jniZa2|YQ!mIiO#ZU==?GK*Z3pd|?&4op7jR9FamR?@n!K4;X zft^p7wLX)i-HJJr|10v)aYcspB2HJkgD+Zn0AA4LT;3?mu9q5y5-03y4i+%ZXB_IN z-%5YYVhZ-X*h*)$+&3Oec!u%`#($A^P)%53qn%7`&Izrc8pxp{wFIH!Mzb%UV}<%t z4&M?pmQA3af#Uk}xa>Li)E4Z)TQr~=NJWJXz7p1@9@^pIqlpZ%TGLU)e@oef$)ucq zPy1_g94860eZMkF2V(*g{v^^6_X>MKi0xbAJRf@^FNS05LjTD)f|l~3FYA!9y!OBd|7 zxg+^Z>#m8K?<1Os+rq=c1FY8Vifz=0X0@jrUtd+rr!x4nTVKH_$3jD)5XB_MwNU!- zQ-<|K^L<#yglZ$?KZ$nf|C?amY30{?60Oc3T)RKweA0=M*$J9M4bt;>OYrS z!6PtxGqOM1+VXK<75An9fD|ERZ)1IZ{DJ<#|4q;@0beao2LphlV`|d$&&r<`zNGk_ zF!yFdA6-S?q+Z6?gCG2kg_YCsLy61%2iJkg=o_pBn}`a=6D%~a@I`xKyeNBC?(b~3 z+8WI?8?8&>zx6&osTXDFw&+#_gzLY$e);hv3!h%#X?Q0l%QmGWZu9?IehhC-2&VS< zrhw+>qMI^o{K?!Gmj3|%p@YTvrTZ}e3V!!vDJ`BR1#Q{LHQAkoWW6D734J2|p2dH( zYszQBZ?Z4RvhB<^miu6lV=AV}ViezdqKbP6$%#ybCfmJ43=90yL4%OPK2ZLm9G}*I z`x7`M3R7U;P52dBw>rTJ9J$D~`$C!7A$`KjxS zdjV^DVX%6VuVSbeaD0RC)M_e#9HBfn(h6ph4&#r#6#9IRvNBI+3mII8-XC&F-p6|| zKI0E;5PpKbv^sZe1DpoHG!u?`sxXgQx=?qVoz+i$NB?n3%E?M?XkT97aMCKUhO{KA zpLV7%lP-l(dI)Ta(GR6j9TC zimt1D37V3I?K@~t0gl;|B!<-7zxuy`&Qcz}kB1qxn3xJl>^sN!#2{jR?OG<)^>gaO zPgFLxwXURG%jvxX0xKMZtV~L=cp*Mgp6;8rku~qnST83H@VA=`^)nC2|7Sn@*=td9 znfHY+eBt^NW0y|IXCrb||A+Ov)3z~l{E-`W;`0?~8+|`ZCIa(u9^K2a3Vq>U&ZCe9 zBoof#e=olHf;>DuiF)Db^LQd9bRQYQ*yFK5fvy0b9*YQ5K^Dh76eYP6T4(nE$B+$J zq?{t~$;wk6z}gs_OtCAfU=kFa1~H}|Kw5ES6HMlXIbQ1!YrrZI7Igm>{}m3I!T;HM zM5O3_XNJAtiHkL#<9oH6ENGIL`8<_|L<*Ffz_yA=%oS^(h#27b7r{2>piGri#45{c zAEUy>o*&%Vyi|}4)4|s^MdnyWYjxfG!-J_HFp{F&E4Y(+iBj%|R`y#$YOB_N5*Z?>!>};tWfN!W;pO)roJj>=BRc5Bm*u+FeU8Qmz=Aa%t>Fa$ zWf-~*NmFPXWsqukqes^#_PJ^Soue_lTGna{}QKKBc29gYi-LC0DiRwLO9wSuuT zCE!D3D&P_~WHZM5r#{xFHhk8$Kppc4{vQ^Ib}s_SOeT!zyVu`8RZNcc`Xt&)&x z<0A952y<>R#HgC=Fm9aqA>1bT*7D?L#k~jj17Y6kAqB=swi}825f*}`Q2ZAKSwi9L z|B2^1V`br~-6=Sd`I2P7a7CDZ)$sqzPd_mq{8yG71$!fr6(~TWz{`Tf{P0k?9G<1! z^cUMQ64vssz`8< zh||?vpSH&FmP3B5W5~;ZA$jOwn>>5x|3=p-6!YS1KcunM)6DFrRzTTv&vdLpXzjpY z8{rTKZ6<*WU{aULDm;sn{Hg~h7drz-#_RaLZbyI2NCOGL3xo8^mK`vw%v78AV*m|9 zcc2n3z7+Ydx;41JCSjt}jH_IauI_xV03;<)JcgnQOCIR8j2#H!iJ*_20TzY5-R6BR zNV1(X_w&g?9dq!;#mdn~_z11a8mC9$E1I|{^NGBA5+)fe{d?seY zwggyVT``}sY!W*px5H|`k{xGK0se0|w8&AnS?B%jNi*9do)r1#Vk743)+7~d4h61C zVBwL?NQRR;qL5=(V7L0}P?@V`4c8;!2GYKA`=GP`KQhRpkJcjT@p124b?nX$r`XVS z?|Pt_(XT_2>EEL`@i_rmw*CuG4hT05;^1Tqxi^eob-&Pm=0u>jI)<(1B^APn*gr}0%jn7&REyg@aItc~&_kJ= zH-mJ^a~8*jl>mgEmTuxe5cO*UiEAN-vCngw3HLlHUb^DF!+Zl{td#__;=ycBoG+Dq zaPzHj;WBLeza4H_%3N*C|GaRuV%NKS*s&Lnz=G0uE&Ut!XE6XQ$p0(mV_)&3Fj9{P zkq27R^?8U>X$WaYYl1pX!QOZbzpCOPWvu(|{9^=}V!k48E~ll5`k{<(ulM=b>aWpX zeUkiNhWM|`XTb4moBCFJ5CCmAC35--kYyvURkpZNbMv$eKa`WSBypiBp%4tv?m;a< zaf%O^WO%EIq$)7El0g-=Hw{{gb<2XpB8=tWa6U+E%_@k?avXtma}l%BAL>OgF5oS~ zvI=Wz4KAUwGz8}%I9~c6ri`IeVtzEo+K_CbJR%}n8&%Fk+{otPpgSY=F^~~}KtfNf!TL?wm5)GupB3)V{6WPsP))?Zv2w z?u)BVW7+9u4#uYJ>kLiF0=5@lc=1}Ky!hga5gVk%v|<|(qga=YWu6!K-OFA)TK;j7 zH`Z$?xB^KJK5kBMnW%wWjxneHFBzvWwlzJ;dMctUu>r1e5K_W7SDI6Kc;Vst*Wljv zwpZjU-trY0!-@$x#zg_Newqv=0Z5Ovh7!)V^ND)7{sW_D&EtqKW|H?R+u_d)-Wu2*L%rGyiz_39 zZOyp3utM?)N?YD@31OeEmOaIPYw_Rp>M;%YM%9H{YAk0SYHks9r5DEs=D-_4%O7aX z0WvF&ttTiPL>#2tQK=P2r;|lX5N6dPC}(fw5CfW7BS}dgCT$+9b$MGRh&l#>+{pay z3lYu$ujT=NZF1GEYcbXv)mE(B1OPU{0ObuQ4_SLqM+2P<)q}y5lu-}>2Og6*-y0DQ z3T)*J5HK!*IUTG%_CvnhsSx24)YxVxo%EKrh;*K%)#TI@bfnA9I?vy)4;KocfHr{u zIJ9c>XFxYh&M}^R4f7PnRNVKB!$B|oAN&YO3=2o1w46X2P6-42@~^61O!y|-pBnnn z>H*(Lf5QR|W{-SIm6j3!j(I zeeQGe3%~FS5MywzqsJKp4w7BNaE*e=PAEW3m_=UYNC{PT*cVIdh@IcU0c`m2W+M*XHToOE149FTM1VG(nX06bY+l zpJcX%BqEWvqL=*IZG~dJ%S!v01tCpec3k;$tlrus*j#-+_^Mic)a&_KV4Ct-<50FXFz-_BW*XG$~qBE6=XBG*==ySbD zI?=IqDs>J{u6P8bBi~3sY^lHa<1?z@fPJLxS8|JvUHyybL6|1P5*=Ci+UW(ngU&##zcFb!>& zPNOZ-Gl_{Zuitsm6FyPTsoSyeeA6wH23A?MIo>}yB=P?A z#&`UTEA0o8wJ=#A%Y1;m*P`?RPLZGfcX?8^2K8jj=eY9$lLnuL7{7Q?J@A;@W1R$&>Ua9{cn;e5&aLnlkYyg4Hq@O8Loz6m`aW>p>QEC0ky#><=1tO}=n`Em+WT9@g)oJZL{%C+0BI zHY+x3b7G6%OT5@O=J~w2oXBe5>oe!KAqmG5U@Sa%e6_)jdYIrIEZE7u8wInvcQIzz z(^(Fo`*n;KgR68za9#HQlt+u10Iwh%pQO&F@>G%kt)Jv~Q-*c!%~P!r6exExB^z*v3(>Sd2cOEnQXYE57bRtr1o4y$gIj%Eo9zyQ?Bz`ARVYp9S z_=d?H(ylyPi5=bldwyeZP1|CahlsdM`n~S|9(aX$1WjF@6gjbre|-MwNmbimz%)9Y z*S?n?pV@mfa*JJSdtC0h+>;clm?s#0;)(cz5t4srYc$4JD?Wkxwj4$Go~eO7;59bN zhsd)57m1eA)8`vja)P4UK!1$YK{@D% zXz(&57a#*V*g*6iP2jd6Z_y`8j_)!i%`~^3py1lcXHQ=FbrbAI`F4ejj}g6b{#6`$ zx=+dF&f@0{9*ft33QiJ{-5#=T%TAF_#=SRNPe^9Ft9q{M%^;}TWY=xAuOp*fcm#bxzxv&!PLzNP4dw@8>36wyBvH^tZO+#s4q= zs3S$qV<~!_LBM_?d>%>Lv-{+&{#)%HUs4gq>0!_2b?!6P3 z_NTwjb#sMj-((*{IRQ8*T5r8kJVN)*O(R1^8jSs(cXdo1E!efQVdVmr;W zaR)-5O3@Pr5ma&!%+mMoNg5?8zL}K}YHR584ci$w%&;QsXjn3thJ?%%#|Y4rc%O`> z_T6e{4l^ayBJ#|EaqEmbhHvce{j~21{?!g@FuuRlg5_3n?_>BnR-^uj*S(8%v^*=0 zra~zbx%=8(NzYd13ZHLI|D6ZQ9N@diZ~9HY>8VJ0IY$2UPye)h@{^yGFQx5#NS+~8 zmo@vrx_Fkxi4gExK+8}6BJsNeUqsGqqxxF4SMTq{YggX^E{WqvD0Lf$ zqxVi54}!MoJ2L}2bg;9PsX)0?-AICRlwBc&%gaO)=RadnQlFk|i;$y}64=^bmhY+n z+dfs*n@*ghnLqiz40BySESc8pN?j?O%7I#FVwdcPh&#v69Xp_Bm9vX(;g#yBhfJ1tUp zNLJ0NkuYG2`D4j6915*ke@Rbc6+aas;Kj9(CV&C%UN<7AN${8YyixEJ;}%$-`*Rqda~?bl-cGrw;49UOScV=UUW zuQTyb?ZJ!W+Rh4)IWhN79ml0y1KPideeV3F&eC`E`t;<*7hj@rZ++`m!koE{CpU_} zTV!+%qZ)5JT~6a}*~@u5bTE!{ABeSdsa~NodAj~3roaNZyV+fXS7bQ=px8~_!+RPg zpE*DM!U42!VR9Q|Ff)+cgV?8fO*{~bceOFzeTl7MFWt<<5qaQPJ^7lP_NlLFLwv)4 zwthSooXVm7HAulnli z6X2I#ep$|%zam8}PWoDTQm~KyFKK_zT$~(C%*9E#i{@wXt>!m6F5jD;6rX6zTAX+j zBS)ge&xwEO{!i;_UvSPHEOSn`g=vNpfraT8?$Ks(LEv@6+gVY9{kX?fw|#$-1ls0Q z&|_@%B+us|AYqZoVszTOWPJKw$IJkaPsKEN#rqNoBzZ>o?!IZ`fg)_sKi2ue7rwau zb#SLA^7B9c^MDDi1EwD+6hxvyG4Qkfw6qh)2V^dE2(*m?ZmR z#gM6S43K>*i3eQdWXI6u7kBwTEM5Pk?Xg1#{s&3S8NlwySAga{@kb%q6w*7aryVmC z=IZ+2Em~-g`Ag*MMnZ|iNwOwAv{8x)&bwHT{!jhyc*i@Q3Y4#scfRwT^7UW$b!TMYPS0iZCs=Vwhm{ zw>{-tght?0w%>4S@!*&9+uTAW3pObQmM2yQ$*Thj%R1KwY&cY{OEu2((_hsa;4~%^ zb&&3p4lS=B>2SVD9cXjiQLNHe==b@l_Ta-$jjVdNh}1%3a?lDG^?uc}pDZS581=br z7rc^N#Ru{^(cbT8Uv~%Q6^Jnqru_;O1VX%|-5&DRVy5#r@mB9~A@JY*cRzXk*TOG_ z%Fq7nC*+f#{1ot}W&GSaaHm|X8x2_zS0;_7xRd{+PWBG3lj>Qlp{4NQY8#5O|+2-k$Tcl4{2 z1VB(WEJkeIZ@!~hNL%o0v3-V&$+N_N5urFGk$coU1Jz#(9&9aksSxe@bj5j50sFj( znd|;*?|%1nTlMk}&5Q_qs~K{5C|Z}&BpsaI(QAUG(kO0{;3_xmH(2QrBsZ~M!^ok} zR}ic39XgBoUUkSJ5Cg1&frKn%OoG2uwEDm~&{?YCV3JgujygX3T?N?B6P@f^-9YPo ztQ;6py+nYOW0La^3~uHy&6=oJx#+sC32bb97C4lV&h&{ko%@r;yDH0ltSco6Valu@ z-ph%f+AqNW4)`__3kE`zgKgkhY^hMw>32~kTf^3Aldl?&ttVgp9q+|xlW}kJKHFSx zY|m%Dw!c?p-sl<hEaH)9nU#0d zQ4lSbw*l3wm_lNa#2#XlB9qGZn`~Mn4{yzlmOz4jG@WKo7?$=(s zzTWjSfA{aor#|(m7=FKn**pPwqL?q4n~do44E~RKUR@j8J!7^s2EX;B-mk+3*WOax zP-!_^VXk1o`VU>hmx}wv#wj-xcLgu<(GP_EQ{Z(ulddl?Zf)^j+IJtE{LJxxNPSM5 z`$-g|q+j%Zc{Z4Ij$eE2sX!r5AFMj9J1*T1ix&%J)gsNQ!_h@5x(F38+7*GxgVbaK z=F|kvs*#EeiTR%1)C%kCy90g&QVqE|F-oI@!EDSj;rqTA8E~+0+TojJtz)#TSDpyq z2nc36Fc(SDl#t!+8TVQG5p9C)IwOhpp;`?aqO|a4NFP3`V(!g8S}v zj~-9P5P-3LUAtEhtFqLhbMk|pLmoo+pcqjYhrUlGl+!_8%iO^c?xWodZ zvDfVp_qi7S4<5*+&|A1gHd1kN%t(r?OaBq0E6>G5W^Knp(hElsj{ix=lgC)I6ftX% zh|Lszjqv}n4)GOiP6>eQ-G2}si&@*LqOPOTK-few#+1)d{d?s9avVgJXryO%r1(Aztt{eW3_k$4& zot^UMd_c15|F#YuPLr>RB#v1gU^omb;e>4BKZqfFm)k+haXnzL_JS$chx=4m?LyL! zi#!&7kV_Pm zlF(W7ML-1}T|v8|1=lx_xfKM`d?0094v$Hy2)rNaMn<9=$(f0R^9iIzZ}3-!Y<(W@ zCED8N8Z4&-8THam+J|okUl8oEPy5MH2DYsbKm&~>c^XGAb9K-(gH9=dL-+hEe5$0~ zF#8*?J86{MQ38ilkMC^DQW72?<7-JIf@$xE&1jR;C1AdI%)PR)Zj&xAH*e$*@An)p9)2Tf*edIThmj>p+LAcz)-8Pb=eg-gRyhT zStI}NH)R=bUbh4wS)|YM9TTWVk9=v3)x-=Dup<*jIP)CHWGYU`i>=FEd9^Jrth>$s z%X-FRBX=|Y{SJjWF|N309!@CHX$KUSz6VYI#YWqEmS(_T^e8?p(Y$tFR`dbDc+VB$ zGJPi3g0Ucp?`thiYU9|R{(q<<54WdDT%7neEZi>sU$MqxnT21@yt%tzj7_)7oWABi z&c{*EEBk+-zwe0@=jaXf_&|as#n{j_MF?;MbTqyrPzDiXV%Zcm(#r3roy(_RoOc(juS`}eWid+Z8-*#P4rbMG8Z3p-{3VFMfSmP znp4*n>RY2lIuy%UAyl7c%wuhHedr;RdZYUc>`EZ*azw79XZ+<}`hN0#njyY7$roE& z(#5`t2|N!^*qj-2;V%DwQ0WPV+rEk-=mKUSE@05YX0T@UKk~@}F^LUpu00})c*?nz@(=CB=yHE)qaefr! zLb^3!6zzDWA`JnnYT~Ixc4VOt?7>D#$DO>xveLB}WbdyTdW<9T>o^i=nDfcX>#e`J$@Wmi@WF73T$f- zkrrcpm5|gJb4gzXYcUq)y~O*J6KV4rG)~H!HO1GcfSrsV)yLI6Zkxf=f;F@mxC>SdL*TtZKydO=Ljjm>1+~dBJW<7y?JBC`*dU#9xuH_9 zTs&u>MrJjP@&F5vp|nhD({mP%fCD(FA8ZD`MR}g)=0t%J zij}xlvP_lSSKt+b34$p(i4`zMnT%gOLq41AIw!}j;p(JQks<)hUX(00+E^<#VTE<% zKtnGM)|ER(235VWhg~1|iEXwK6Q<{V_sl&TW2bX6DP&$y*A#Ed+Q>Ki5r1;QY1GHI zgMMYezrlK1c&PL^D1iH{rp4a;1gq><4d4_t3y@l#fARgJJ#1~Kw|3%I?_p%#_&+B+ zkBfcwaZJGKz3TJ%Js4xY1WsRLoHqVrt|Bp^IKl)}s-3mvG@m|rTv(_fEmk^5860H= z);f&IsYLu87~nX+FjAcwI+DjYE$dQ@Hu@wvr(eUs#`pEx{MtA>r_lAu(){-s%R~b~WY$^N8!QaE| z(_8-l83b0obuhKepC~+r9;?3rEn`2}hK%Lcd=37OGEe>wzJRv5-4Ed0^{&F(?|$LA zBO);uSQb{21sJoHYjR9!PeMqn`A|A|Gv2$K{x9e(+|FY8Lpsc0ByJg^mHXmc4qHpj zl(?r6n!7#ok9%w+O~Ru!u@oWf5x`f}b_7F~U~K?@jD zmNZLteb*OIElEixHJo%E2AZ#zppMaS>uEiBljZ{Ig?0`K>%ByX|o#r7ElikD5#Gf19mpOZ8q&Iyb544`@ce9 zCjXa-HF15Q|CgH*0H_jrK|Tq<%U6$$v9A<>YE(cSft;r*bMTgk8yw_SFgdfvqp`UN z=$+Uxo<=MH`Z`7?`BZE18>@OOdcnP`C#FoEfV$6@$OuTGuC~yDW4sp+8+v0m3SIIV z(ZWN;b?7A%Ri%5!de+EMKO}p;da9)Ozpr3YV!&F@;P*zr|9wK{Unrk+-C6FRC(~%B zl)sUW^Pbn!cWj2qKdy&1SNuQnQ0*=}HWl(E#uV^jOdtX?Eo=*UQ|)M3-7oen*#K%L zD4Q1hiuhmFiYwZC?@R2-pFYpmuQKhL<8174H5_Lz{6#CfOb6oH!*%fmwn~#SfQ{+8 z12pt9NOlfl>|?GGf>{|9n<6k)!YQIVf-?x`hJ`31?!XcWywC567V{jY5py0XL2RMi z4$VwHXOhWbO>lCJG}V9v<@diKwifEL$*FC;XGKRxpKT1g3v~K8IrtV~y9L3E(T4F> z!(vnD!7C{e6JzDBFvpB-fP(ABi*PCJkCp2wN@oB`7}+F(Mi$q+RVY3?0pgwVwN6!Gl2Zle7+n84gi=;+|i!4~;2@ z&{oCIAv4CevO>AGjKeZxTYH@&rXHP-?!U9UmCyfB6qi@)(byi@d}24G91z?1T(!NI$inoXKMY@-39u&i)@09M`4m*vf{{sd*VI z$iHpo65sP)OIhuh+8`zFU6BMtdx;|T%={GC!_g&>bb0&gnhxq`1C zkUXIgT5YKjPj+Uf;-?5;+RO3J^6D1r5D1m^fXOO9b?Q26m3PQl`Yu&)dG9@{>=kwC z)Mr}MSB^dR0A0rGX0DYn26I791O`7Dk%`Vpt9Eq{@G_W8uiWukTYU+?Pg)Cs7-h3^ zW?tPMc-}PDlX9n*psbRI0NU(u0>)na$SLjnn+|K36z~%_l$wCY6Ei9nrT7W%>Ewe+ z7uRy#FrL+e4z>x$BN~BrWBCdIz*BtkX{o|Dg=?I_GzhfI7-#Y!{$W33-xFaouG>(z zU*TtWANsZ4yRHwtWs{o!hYU8;n>zJO0OqRXwR!K#&oSS3M}7RkoY)v8EVkMGM`_c; zSY_l2@m-Qu^txREWlZ!960@*LL$Q<+uF>US-TVAsWsA>lYXpN#J7Uq&tycR5)7RC9 zC;qzj3KM-TKQjtT=$3G`TnCTB3(=F6MrDp0Nh2|^KaI*U&P&T%puau|(Xy%6{N$nc z*D=r30${-ok-r`mVXiD&&86Ii5YzJshRy3-udUf0KLL;iLUa&A|8@S2ZA$VJ5;xdG z!aNa!F|om6VA4)Jaep;LOoHwd8)t~3$9Z3CW8mIHEUz`KJ+)ql*y)^_{PXDtjV#5d zMIWF3Tdak?QMiot_k{rlJOLS;*JEw+C7eAhTZ5;siQgyiyj{FlTMPRuKeZ5_6=PNCZ%e{tMhRUbx>6T2`Nfk}$5dWJCqs zdSQt4pAwsN=oi!t#+C>M!k8dPlTRwAeP&(zVrXv$z|VWapp=JFhieokb{sWar6|CJ zb2LLP@`>;?Pm~XMOcJAU6+c9b*rlbofcPc~HeqESA*R&Co*Mbb&i}2gC7Ku$a=|@u zUqgShq?1Z;;*!oYIiZ$$0)>Y1mYB?D7vo8MW1eDc+F};b8tgEYYOlbIbPPrR2kn9? zx(~+$^h(!PAYFu)uLS^1%Uj^d$Z#ZdU&$ZU7Fb7uI=oQvKo}kEr zB6mErBeQ{e4zRQgVGvdr=@od+zy9wr9fJ&1_6CXu6xRxls`XvK{E|-uQg}Q$$M3bd z;YFf>_XZhcT^}kf?@oqO6;LPnS&!^jUH~u`Xn6IL<;d@tWUyXDrY8ZepDBSh5l-qi zEpJF$Cf~*4Nv{MYwXXb3jD)k^0V)81tOdq z62v`UtL~xB8K3ML+tPlV`%UHPzNb6fYO;t05uGmG2y!@QcPca&DSY^G+~WXL*B9we zTi4aPE`C(}nEg}&!=|6Lf>a-%wbuyFMN>XRC}~*4Por6m^1E0>8+~;tYqLeVy9cI8 zd!UQd0YD)-WG$)4=x4=Y^bwpZ%u4+AE{u_qL0*8Ql$gg0FQ1k?U8G>(`V{a78}uQ| z2Vloo?P#blulTNc85zXoki>y zZ7akft69%y(3bbx7kt##3W@XKnTM2B(*NPfp|R`}CZ6ft3SIUQ*n8ty7!xY~d)9DW z?jfH$Dg18@$$fI07hY>BM2KJMJRBz6v&-OHLo4b2f@I0 z`F|`nT2g+th+Lw!vuEr^feZ=)z$Yg3tyr-k?h$}nPzW|4sSZxyJ8p14v5_z|15tH^ z6#m7tIGqN$>S=_J<07VmLk4}7mtK5PUVQrD({VIBp=*=_8zw(Sfq(IB34%rmjEoMU zMQ<{W;Mab3Ed!CPJy%*B13>WY%R*mumRQq+M$er2d#MJdqOFjn{&Oucub5bKlAW}1 zf0IqLYY{n(5NRuZ-2v$YtPKN+jNhFP2IsWZw4vjgK}858&k8%V?b>#QhtolO&w^YE zZ@CtoT&iwm_dW8pon9S>`;-N!Y{vC#41Ng22cOOHJ&lG* z&y<#KOX8_yH+h}OI&MMydo=o3@fC~eVc23dw-f9>bFj2A1*gNe zLMVoG2Z`~(+G(Q$IvH$b?TI2yRH~r=3-smmBNj<%pg-_`!FcXIVjz=P46po$22bSn zqHlcC(BX^Zu@?Wa?R+fn)%d^jOB{;_`u^Hh%OfTqbh5g)hwA?iw9XLZ@`e-D62P_= z5Vx0Gq{-JrsM?<>3&C7PlHiY>Wnxhrd=vzqgJ!Z{wFUhED3l-x_Xox)IF1JrgJ2?7 ziWt`tu50mgS?^Mq$O4xaUwjFeROw0KqGI_uB|mdwlqdVgJY8!X{V%=rlKjTs_#5Sw zS6<0E0%}vHpWAI5GqpQNe5z#dBhX7B)1k|sJXL|>p#YU99cvA@5ySOSk!Q$qquD(@ z#=qmkMF1ocYd*3zJyDp7nE51y=N@ZUR6#$N6YyfN>j}Kkn93i1BAtm|78PejNMeM~ zVP1{acb%pEu`S|hZ!adfAA=O`MbZcp6f92A?25#rkG4^$N2BQ?5pWSv@^-ieEQU!8 zXMD&+wHKlBw$>tCEVH}+Tll|*|4VXxOj_$ANelpM{}+8hxuoKBRq7(FIT!Ii7|%r) zUG$ZzWf>-??wp4QSi`2dR`k~}&-Wks_ToQ6HZRaol~vaK7c!#K|HQ=%qDG&n=<^h*8nscO@_r9#Qz6nnPRlSXZAV98OXu3InD@(6#NS6g7N{i$M2v3R_QRo70TDX`M9$G$BKg8n9}fbpOwZ2g$XR2grzZ2 zQX$f$Zb^frGSN}1a>%D3*$Mkq*FRYP>I>jB;Xq%TN)IN&JmF)%>Zq4rKCeXwCpz=% zTBx6%1p8Vx8uq2{o$q|7{D$A~8?HqP5wEKoIu4d$2W>GtbsG3I_^FFt=OjoYe|gdE zN{YihnsGp>9$pF>r#H1-KaEixW^`aqhhJc9UHoeCzF!DF$Mr*ir5Bz7ck9{=*JQui zwf>YKZ3%;bk1^}=d!p2zUe1KOE!zoyIj8zXrIAJ2OtU{lQSuL8*8>8sOZXui7;=v> zxLBbr#4qn{bJq#u~a~K%n64vZ8Hrvh4ti{+~kH ziqcL8F`;swvxN9sp2q$UiHyta_@x*WY_d%)KX#f>;*)jSvl0q-IFqVL9bP)T@X>W0 zatp+#0skvs23HDkUV!f$c;-ufG2rt+zbr6}GpTVjK5<_#!E!$X{hE&f|BUhKd5TNA zCoX;n!KlgJ#C!hW7XXWqxy}!qDpj>4g71xpiY><%%*^b>{ z%7+_IP)LAcEhHgp&$K)>vHBkM9xS;CvT=-T9DLGuUTaK^BA0?q2CCfu`GlR-Py<`# zc|Kt|`W42_{PzBwZzV9MZ=vmV8oQ?_eM}w4^5xt~HokxGByIjIrWOAQ^l9@hzdWCQ zDrIe!9rvLIj=3nB*Cq2DOi`u#zpSCUTMVL!*=`n$MNnLTpeURtPSuxM(gH!r=Tva< zWEADnVn>jeHD}rRKVo>u&I!fWef`(T*FXJG!IG2&?Sf-mZ5m047|RxM!IEwqW<`97 zFe0IUv!>pPW%)!w*jCJ!(a^2+n{)}F8WLkmTz3l|@uA6$r5fNv(5*!s{z zf&A1xZO;?;RFn!jwk4xvPlt|~6`$epzvJsMgZOh_Xt5LRE;nJX2Wj!&MA+7Vk0WPO zUZk*#bIzWwJbOQXq5$bt3lpS2UB@R`sthB!6#u@}0uCBzkWW~1D85v{BX0*BDd@5b z#jlJp9`Qj{+K11bcV85w<6s`%Zf@S{X*Q3)@=MK)5Onyw2poPW`Qre%`RPLzlW#?%M6 zmmCLwl1||O)01~y|1AIn_Z8+|c)M)o8*jW3dc1tcz~=^4ixB1uf>>!-WjiOVi`38O zKmU38$)Eg5`PrZS*%qvEzFCQPR->Q0q7+*aF!1920-z+Frr=r%b|`7|5r`fiR}44y z?pRXuUR7ufO5Q(xmuczxczc=}&>Dq=fK7OisX#QZRe?#UVPam3Ba!YmUL5({R=`Q8 zMJH9puawn$JfHUu?hH0Hp`&Hc2!3aKJlf>{R{SA-q!wD}O9}Ge=URPHqu=NIJzvXz z*iZYulmDY61q)oX7!$t1gC;Dzd|sa3y3M#hIiY60$YA?!`Jv$dtCNPsZA>HiO!wu*ZMOHYS&Q=^k)><3#*?8sQa-$^4~R2i$zcsn)N4tIa_!w3=F!YEt@|MC5FU*$uv?qeLM1qz}m{u}t0g?#u% zlocGHbxiK^e|`1c@3vTE=SdRoB4wvH*C81h^4f6@L};)J1$*%#k!T)*_fTOXE$LI3 zf2=?72n`DsUqO*&$?pbCRELafBrZix;thGu-$~JOU)j5*pROX63LYn$OT3}+vm?~N zp->cFDGqwVor+{Fwts)pa)V2eK}&frzlQI^Fpn=`k15bBh_JkEOu4T1+qfTec|Jx9 zdv*P)gSMKG7nwkjgFN@K@{Ie_ZGd@WnuSa4LGSFd%Uqu@l%RE|EXX7J|IQcYYo|Fi zE#{T_Mt@Z@PosIxXQzqY(fwa(wfvr(_4|J3_y=mW$?cdd=#iF5f)&S8{sM{p(0c9 z;!F0T@J+UwONM~{75S3%C#ebdx^ct*M_Mcz$lkG3e_-&eEpqc=P20r(j%`@fEf0A0wRd0taF^9!0@DHs%7SHA0Jy*?wXSxb65L4I zXt0qA26$g&u-U;ercE&j5R*~#IEtW>j8Kq1F@OpPy$ItgiA*JbYIw6^2n9nJQ|N|G)55{z4W{%fnrgg_$0Mv27h6I_KoBTnR5eCiZm zYcbHW#26+GB5-Zzb)X%ENl9`mnTQR8Zr@x2*fFeQr*Fmnux2U*eNNIjK9;K%`$#*E zxgvtUXM(>wG09eol~KIH^TWf#)=r&19*A(RWDP3M+`nPQ#{Vxp56U^M&)X&2NHcZ2 z!7$1EvF0JUXLjQL&ldlyJ>9a+`{Ta|=DU9VW}2`4RG_@(NN}uWP`51&QGlWbmb+YDMGcRy+X!Cn@mAE`|eV<8Ok)S6G|TTqu)7Dmogdtb1n;g3q*b5PJd;!JlyrwfpUH7=>!*Tj zQ`@5VuHdL;9V?>FPtA68vabT5&+V$jeVpi?CH=hr!~yV8Jr&o-f(lQ2tCJ?LycaA_ zZ#8*48964}JG&NnCjYnP0~kziEqPnGm@pq~t@~jNMW>W_Zwv-ks4ZI zcggr{ZSvQ%>stw%4*aW}#i--E$GeQ(LMmc=o@`&b?qv4=%oSwQDtAGkjl;xS1pVLX z3H75aFzhqWqDO`eLN*EtqOa+>(uN?xY#Q@iKHgX!@79LK@P?Y`1+pLmvr!ERPb77EO( z5xu=$w82s>AXYETt%(iOl}KtT5K9YYm@G}Y$*$?%1oV}L2N~vPrwoLF5OW?*sRln|5q z8rA+d_JW&;h_$$K^hxpmHNVCGXOBm=iFIv_qSfi}%eHYd1|8R~A&so4(-wjK(ey{i zU4p-*L^@3N1*+_2qy4oc_r+W@<-)j% zYninqK7yDaU_;7Oc9Ie|i@Hz$}gh}3)4 zR*@g3Q_bH2oA0~MYVxq7vuj!$bT=*6W1yS@Y>v0E<+4jbTOl9;SJHFbTo?DE+Rh{w zZ#VxkBX|Dh8MK1-)j!1#T! zbhaTJB&n4u>d2N8hXO_Mw^{2{%mnQX4NdWtO zOyhlLd&N&e5}TrTQt&Z!U-KUOQWZ!~O;VfBfMixvqbdH&h[bnxQs@;fYc5`=3! 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ŠIw{eZ#?pq}fj=wK zsaSx?64~k|FyNw3sLKFAq}njd%6k8Ou=Nz)e!S(~ci+vgLUzYa_$CnmrysaA7W9%$ z41;anwST>?Li`JClPNBcz;d^LBl~Y8r24=zns|tluW03Y9h!8|+&6;;D6}0$_Z#kO zil;xDG(A7Yc!YcG7hIp+9YlajK1365OlU0~Z_}L^b+dI6G9_P!{PK?f9K;sctJf{5 zE7HxmB`!8J5w_1dK^cO0-hjAQUpI26jmztei;h3jd5y)+b1Cz}eilcUW9R*W=FrEN zG1i+l&Vdn<$rhJU|F90nS#^=@LktdT-uinic;j77)=%bazQt>4?yQ26KjtV^b$C$B ztim9GCf>u9z;E}eprDn{!b2oCE73X8?=%E0AZ?oG?8I{BaaI)t&in}pK7QmKl0q9N z)eOjDvCcypaoueZ4@l3!!Ovv-d%OQCT`4KB(Ccrbz)GOiNSdo8eVY}u}k628z-`CK*RTXop&IIE|p;kN9YaNp`Y4n zs4FId37$z^uhIIK$(ZbJCv&BfBwwMMK92Tw*cEq9eJ91naX#9Tzif{Vb1CKEa8=oE zR9kn_GoNz}#!LWHZWUGtnh360;Fx8Yw!tvm`Abcb>#?NRXecYZ(zvb^2NRxmr&nnI z9!g?z8c_`z=5g{Bi(K!IzP$VHdqPRPK~gW_2E=`mgJf*D(LHaRYmWu7td?oh=+;LP zTb&=jLAomgdW3o!*?)!p7$0iTqnM=L;YK5Sd89$eb>hFy^HLdI4ETSk<`2QRw1Tlh z%5HINGRG9*FV4X-d70>*=PEMhGB^q14?t=cu%_NkS^`*5k{`UU0Ss66zY74eJU)IH z{2yP|a{gGb&&&O`kgZ%kRiHS_XkI9ftEU)d{3M6tK>>NEMflq9tpwZkF>B&A@r3Pm zWlUu9CihR!Iom^gq@b*(gEkF

    LeKto{YiJtTCi8!8W|DP542-qMHux-O6_Pv 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�`4yXUeWrD;DFGjU8fBCOez91#c$TAW^o;qdmr-0^>@Tw9u~=i%IbYQs`7To_6fE>AltdmB2ln{U>tajR9et zi%^C74gPcc$0BCfzmmKdq=Ik7b6oo%Jd>0kH1gW|1LS-YTyWBu5#t-BZNm=14;2fK$d7%4e} z8j6f}T)f}U`B_LKgJ9fMxdmXkQyqjtK=&G90p@-o(C~M7YakNM4Q41;v+|8&Inr@i{40@&4*qesDKSMLjfj&18#wRh7Xl;%@=f93b?OE*xX#osIHM*5UNT{XYCp(%R7<$Cz*znyQcA`TWPWr=8!y zt9sFBLY;J}7uw8g$vIKZuh(Q#AciCCEP|T&UnFXTXZAn{ ziQZ=r|6{x$Pa#|%8VA)KuK7xLt=<7C@!vd&w^rsj&(C)>SV;g--g$jmf~F_T!UNYZ zH?Tu4qQZCCxM;yK&S&+wNNc^mhJUw^~hLBWRA7dEWia7-2Y zu7KGUCb_5vcm$MD1%I(KZH=<5H*m$Zh`{0m$ByGn{{7r#HU6f~ zl)D>O^7nPiTvMV5N?G`w4I`TCT5+KxO|EEyFZ$!=_JG4hSIsR^Hn`4XO!83+imt%L zcIBU+RdI5(H`MQ-R0ej{Uj6KDE1_UI=h1|VmL_x%NLM-s1EXN)hl)jckaj$-jtq}` zqZI@+FQh}-sTd^@mJZIZ(OnBI&I4%hgj!*qlQM$tJfHuDzs7ho&*@GB%p1iC$Vnx4 zb)4==z;MpS@4EQ0W;nzo4OUeaU7$cGGY|@fVZ3_6t;swBLtGw20?i$*3LK>{R8mes z421|K%m7{1$HbB#{6j`{j~q_S$L3@ zsKhn&!T2)Z7>bVtgjL_6ywfd^Tv~~^7Ce{pn)JxJ1U??k$MK8t&KC0nhUqZOsITHh zo4cPpxIH<&KE{2G7P_p^{VZFJ2Z3i3b$79$YgS-oPQrde0k#*Z=yyAr2wamAqdNGO zjLAx1HU8tYF8&L+83Q~K|1X?C zeL^MRm_Q<*xIHoFJV{BG$&m;@k)i}=ZS28vt^!S9Raz}J*OKlc&OFiQ@J4j!?a>2h z@RvD;iPZS7IgU2ibo0cG2=RgX+imV7{QizhY=&Lr=|saDs3K?+rDz{RfSu~B zNgC5h9bV0MW8!fuONkuFUwGkpdGW<}$y?w07Wv)Z{XO~pfBpLrP;JMrRx=fl=?uUT z(B^GkcM=6=ItdN9Br6-UqL?wEVl4xw6Crp9JI+IN7hAN@jeO7uK(PB5=vpfcXKVQWdJ|F z`KXa?#of|TqAi#feePi1!o||RZZzl6i}JYMEjk{{YuX7u-iJ23_rXun98UF%T`Wi@ zrY#m47FibBMGDWBcgMi-%tY15F|P%-NOAuCafhdqo1sHuYTKAZ_78J*wi0;c8QXt4 zx?y80F2>7#i)}!qyH71MKIC1U^p`_ki3DS0;*;rH`I^HWmtD`Kjl&%8F$bCPsfp>h zqX1A|21%pB0jk?8bJILGIycQ`%5LHE4n=_3_PYCdiie*Prl zUcUExzwi87)4RLp`_rro@8L|RPcZ|+1f0uUPmLht0a4*)dYSx{&}wtM<{(WW z`OuW_{0E0*@uJIknU3KUgH0zN49C-5iG;%l+Xz- z2R-J4)i zR+d(9H%t~h66;Z~1zux(Dtmr%ZEUeqfool>aBC8MCc>L}QsI{*MZhPApAjMdi@NtL ziW7_h_pak+OYB&1fq!51B4M9Hg?*qkW9CV$v*ESED}KYFXC-du>eq4nglh#S>WTvX z0nh)NB;2EhSjY(kB2*{{4NY1A@l2CmmHqQ-c>i)?wf{mE*$`dfaqjc;p7Q)x?~2_B zCE%#9?z>Mo%9EC&OZl@)Qfm&v^NNJXObrs|ylyCzahdqabwgj4#fis%)qbi1%$xBa z$Cuw88Fbz+yzzD9-J1DA%%VKf3^YEmpur@)d$%`^!hfuSUDt`%!pGN_*R!}#8t*iD zF~UEOA^H^~uU3sSi;qfjWzORz5betPS0E@BiXsS^$!#lf@{K(nCyud33@`SFSp+t+$oKzFK@1!5`Ul63?HSMG`gRq? zbB?I$zIWdLCj$3&ca=m@lt>;*s%}T9rt<;YR8L@r=p&>a^$B=6)G^?T@^lo<`=fiO z4?w_ScGU2FRzJPrEt3?}oX^ExIOqaA2#vU6+3 zQ2it!?HIosHRgrNE=gn8Ue4T_YXRey&hmJFYU$0`zrD=!Pi@8Iq_9;ha0%_e2w6TLhd%WG{@?%qcKxfbzOvu_?so^^OD{Wg`Py<# z+YHSTf={j{#O!LYU!cAUq<-?MP8{;-7#ps=#b7e(HnPR27j!%enz9k?pkj=0fpV7? z9HWc0d&mP0!YZKC@ic=#?o}7-P)N_A&7A~rrrIaumF?(n-VD7)1$o+GaW0*6v8$|e zl8(5Y0k)1bU_X;Lu1KXMr*6V()Xw&l$4ysZ1S~`P?o^)1p${tC&>iaU1hohp4Eu__ zrTq{&{51CN$VS;eCnA&l(igo>{uRrMBV8pd_X6o7Wv-}`&F4Z>o9CNxPjyW1-DlmK z(N~wpVt(a4m$}ZK-%fxDW8iZCw5c&`PLN3UA2yNzwf`HvW&3v&*d#Gl(0)2!s&~8b zYIqYLHj#@Cu$VLaZOKsjh~a{A$3b^hQqW^;f?_K!FeWZgY*6tZ>(%??H5V^kboR>d zYi^Ubi_Y{LK#6};pWj6MHv?M=wDatP5%A_8Vtji4+7Ka(_&<(m8TA8oWLCV8DE>F^ z4_W4gUgm??Zg6PiNEznDqle+n47PLV5a%0z#>4}Y27kaWV_%U+ zR|hubiz4Vd0Pb0q}T@vyd6*v$cpi}37 zP5jYWKFLA)cLN|`)VZ@8N9a#ST}m-bI?QYW4LU%99pk3x3i6ZgOMlMsKHE9Q0p3si zXX-$#H+@llm>`gVRH$ih!Fxrg8zms3dZ^E0|1P!(a=G$3=kFME0BW41pj65BqQlb9 zgZ~WtN4Xr+S!C))$A6S>#wN$?u$$BVqk!DF*HPz$g!eRWnt-?pg5Q_!1wZz?3qPB@ zjCD@(W1CWMlIf`2J`>iJUD-rece2No{YT74Plwd!9HuhY^1LhiN2vWG`*)kLfyyxP zN&6ocVZNwsP;Byx_&;CMS1n@#i0{S!zHSWw0_73^4fd46mhr!M_wj%9%Z$E)INPek zj%{@nbxCT-R$|A~W;t zk_1hdPUQ^LXT$X}@zC$DK1+-V zpS;p&j?c4m(YCtZVc};|U{$~m_ns&Gif5iVEr;05KU<=q5_4d-ygd4!pA+1TK5LT3 zydB%I*%4#n5f&ul?DT6rFeA`7B6s#L12pPv@bXiBixSMubhQf9arW6vSI3Veu2$zz zXW17#zS9G*a&TjHB+H}lB2&o#35nVgaX0v?Xb#dL?Wijrn|2L|NzI2<@b7zvZ3#FT zpGIDGEUb(F#_`|0 zpJo@P#d9ZP+30@(cs}lK*YV$GIhOHX##+lBWvbn3KZbnAn7X=0;OoG%W?{*ZW%}I= ze&~J%`jwREJ#Xh9CqCR~_NPAizI#5mlTjC#x@2dC$+7+;^ie&7vZ8J)>FQcemeuY^ z7f6-nl|VJJXn3MQ8nof2ze;*abn;*)R}KbsV2u;QNk8Ai6^62bSL2$tn=+*X&CjEK zgG*tC#(%UC<1*Q6I`d{QW*Do24zN<;!^l>W~l{lPYj#q3Wq^*t zYqqxkoRg}5^K1Jb+IQBWLEGd*0Jz_@6{mVnH&Hm?;5&ok`E!|@&Z=s1j{nl9fY_7z zZ&&{h){n%0!*)vnef&>8hL@Of+MWz1rurKHk?-+}W9C$@${6T?+bGPK zWlt-E`K;ILv(fum7t!L$!mlynQpTnpyT%mH>2A!&x-^+l44v;$HoV`Jdk%e+N4!2p z>ax&u7~M7=8h5#OHW&;ZxSCUZli$KoS(P#KiEkxU$j>Gj&Ue%&YzwJ#*avTx0qYR2eZokDbM$0lPg;kq1 znnsb);kBf@^Lm079l35KgZdV=iYNCKXz>v+=H0bZ014Uz<;M8)@!lGqu61G!gof-- zzfhiI{WRwqfEF;(e8ER`p>4YKrR2+xVw1sk^|6R@9rTw3k z$90GqmT_kI1dZ!CWEiV>l^bIa$prBczZ$oAf{cs#zT>}5{awa?d0$8CqLD2m`7qN{ zGRO7uHQkN_%U0JPJ<0PaCnry|6O?yOy#1C2&}Y^8SvV|>rpjY-v!35+fcYKd=Wjs7 z>|mOh+!$EO$Ey;x>Tvr+yrEaZqjwrv_V~;W;^SA-M1y#(sr%@8-T1>Z&*CsI} zSFWuCF#-%vfevtL4FI`xrz^yzh#gmg)a?!w^v z=PcxWjIEQ>l zvhAx?j%=e|W0D``Mdy|BXnAd`USl}>*W&bCXGT z&K>M5=~Ui__BDCfOmVgo#=1e9y>p)g{e{~9cppOno_&B$m94U%qrVb2F-GEhj8n(w8i6uV9{`_u z#S7zq@yeKQ6#uKV_5<7R`j%}}JN9wJe^b3xJDjjNwR`v}6YOS&&tP;5CwedMuY8#D zSS`kUO0*M{cSPL|$rF9~v>RI)hId3fvMwR$BPaW4Ko(be&&I6IE1qg0Rh#I zAa0IlQTgaqy44}?QG)@qRRGWO=JU#V%-+^eo%u*>240kbg0}^=gWX0K9l#4I!><0g z8MgEE<69&j3S&Ad*)2yHPeJ99Lim^)t}Y%oL&}_&fi?av2_D~@rV#>)1WcCC7$ulP zP-T^_1nd%=e>xWsi0Y)wYdLl~etIlMX^ahlHk-c5$&>F{HdoHaU+~-^UQPRsa^pR4 zNFn{qcHE2uY!hVf1>P>$>pe|qy2J&q=lHdASYC(yTO%93SM-MbbIem-bhuKFY#!x> zHgP!2yc^u(1GWF*n;x`(WPR&{`45fnN_HbmKQr4-gVJ$4@)Ot7UDo$oDVw~?c2c*9nl%K0%e$;f3}S} z#MLE?&tY}XPB2>9$0rbMLT&il0R&#W0)0lhXaGhEbO4YP!AF5A8#cepUa`lDq;7qZ#MKP$}Cha5V2e_^E>! zFw96ACk5uU48&pHv>XCH&&J2An@!1w2A-Sj?$Z%9?W;^5`6B zC<+h<;ec{TmeIswrzqlXAjW`=0er|R0H6Z|({ncp0)%JGLL?)_>c@KoBg02Fx-#Pj zoG2djohmX&B8fo+EKl6ebr~=JEL7QMA0iZ~V`CFOC1lwbJiPr@CWSIa?HcLRoa^Aq7O8(OKjQBVU zji%E9Y!o@;BzGgI4)V-v8vl_;AOFqXeEi3L1@XrCul=ub9RGC!Vv_Pm{Abh(xn^{jy(8hWS-<;QK9vvU;r9Ffp?ufh za#rmrZz_KV)HBYQiK8z~L18nFSQZ2_22Zp4s!EB_gUzYLY}(k*=xllWWe^r?PcUK4zKXgd5KC4nTai<vW)5k^__Li`xX09XXvvg({$~8#r7-%B-F`%4B6BH zq^6pFS**SUBt|)xdsh?-e)r0E<=Shf%-Lt}nND97o&2WHNe<6Yn6=}NyHS+X;dt7$ z{gs8+q0{eY|1j^NjaB>a(*9k2V`Kl+H?v8e-u|UL@&_jL{Egue9F)2Q!#IW}SasAi zF?PBYNREs6KbiMs{AY~7a%P$A$32j1bOw~u+s;R^$|0)phD4#t?olq6GVDY%LF&Ke zFzdwRDA{gwMZ$)|O+G8fgZ)%TReg527N+0iVaBULOx1@ehWW4_Q@cn$`h5mo8gOQc;PYtLNBarF0tzMo z$p&1($=QG0c?$R&kZ%a@B$wkW$mgICAF^_{d;oL+ClR9`siOpG4t2wgk_Cr$63~a4 zb-&x73BdFtb^wCItR}Q$0?e}(L2Mg7+4w8^s|)~y^Q)7S-?$GtGQ4Lz2WdrcG(GRQ zbcsjzUP)IRSI4}% z$GzkaT5fsvG1!*zUq3$@|Mg+=b=!}}f9%)WivLrHKKZlX$Rl{@k5Wc1mpbUF?&BY| z48E)S-uo&&%KEAAqU;3a9TNpYm|L~I8FCH5dm35R&xu{U%dl=G%w&b2c!xL{Hgb`g zo@*pHP%vBaUIYm0K$1|VeO z5>`hW!T?nG8Pp8LWnf_NnZQdjJoS9GVP-wB$j`ySel(KJyG=g`hvJd*3j|8gNB04R zPK+Llh@ALrMS`~DB}}6=_A|>Wuugp|3JBznyt1s%y8t=I^0!X{+OBUb<977H zewSos%migPWzC&)WL793z0X@Hu6ZA+CLPvtS}_~(Cpth3S@7G54LOjH?{x2zkcz> zEBorJuWqLsMhV9@WDbFtDHX_%pUFI1waI@XG%}0wknPT9tGa*JD zmgCLG|AT+}(nsPy%ejvK*2tv&_wl}5SWsCl7lE@iWp(S0m*QXbh5h`M-^=n@7Wsdw zv=fwfOc9Qdob^zvymEJIJXQ0Y{dIAyy{dmbn ztL_O5F_1NYIY0-lfr}${@dbb?k+!Y{?92eb9-cygx?@=kuBTiEuS0$X*ubv?c34+~ zINsCbrAuxMwDR`F#U#Xv2*7=PX$g?eeb zeojV@ylSWKiPP>&e)2?dW&b={@7w-UhGQO<0@n6_G@zQR*i_el@Pp&n^^bn^BTJv{ z(C>RU3S}BVEEA7+~Guy&3L2*fRcOTP0W4 ze^>E8^{TpNxv(Ej_p(p=jIB{3lKOVhTkm7?KJs7flpwAAoW8F7T*vcMq953%cSf3R z;|@u_=KY$K4hEUPyc}d2eHtYK^`lLb&o1S|)ES_`vvaJnGv$4~mi#g)LucXSg!4M@ z>O|v+ZOEd5C6lk&Zo_O!%9vMI0RqS#0a2PLAh2tt|Gu<;)eY%0^@L+c6=7_^Njk~^1Q-O5+eZ}zd+zn%8K@_%fH zHXH-pAI(%^^>pm|)vH(bx4->u_~(pcw{O7m^XMGr>hn#Q#dRGXBpANf-b56*M|zyc_?`2i{4%mE~WKPA<~<%-i1iIi@zy>6W}MGMLC0le0!6uY0Hm*6|2e zr!&F;14Rh9W?N%K!e#*K)H}LAau%;ZVW$koPC*^T391dD;Oy6J6*FM>#4W>b=0zE+ z3D8!za^-%wZvv#ZMCQDoeI0G)R1O;nK+1Jga?`0aoWG|4hr%5LQ(1Ux)AE|RhG9BPdAd3=1B-Y@@v6jpdjCDr=KWhSnG-PsL-tVYSW^mP&6G#W%p?YV==Nx4j z%Kn?WGFEK=uw!DZr>r~dU)nWk&%>rKaLD$0`}biJX#e(+*gt+8ujll?w*M-R_W$%- zFMs*VpY7YfeOtQmI?^;2oV;{z5{J{YsU0xIn!iE!=J;<^PN#*oJHL0~S6b?xIjK6l z%kVbif8OKR{=E2Kli{WD->83uvjUP5E_1Y%{ky-@p@|FrsUOmv8ojsjcb^jN1m(RE z8?q5lKb!*}*D8mR23JNFfgT*-r83oSRmoTVIhbm&m||S5rj5Qu1z(3iejuQeZBURO ze9n6VC?u~#+T&wpLs-{NaB+I!5P?fq2FXVyV2QUeSX(;h5ka}lii78voxBmKB%}Q3 zfQG6_Kp&hQ5I@~L1?PGg9o`RwQGK@5cZiM+bQm}%tFCL1zvD74|7D{eto_%(*!Up!Kl((rmpZhy{aa`MW^??nn9PbRj8n(9v)#wy zzv=*YKn!FT`}a)Ro&jDf;8nr$P*Lw7JTndjH(s%H?0>kA6-GKQeQ2RpBuB&C zjRDj~uS9PUe9bCYBfoL13))GLF|~*M@r^g_8?>nv^PA9gdW6xlI|OF@73pFezYDA9 zbOMqDkU8Ax8-G&Q`miyoAtGPTL~#sW!l@{E-3OoJ)oVu~a3||5mqCcTJ_hPw33CL% z7_GVqxE(_gwX+h+`>bbVV{y(!NqnO8H|l|m14u)A)F;u)=vUOl4AbPo#(Pv7?P`cG zEg#`hx9V{D5Wg_XjB;lqM^X`GiourWpch1osH>yTr#JE1H3@WBmNpnQ{#m9Ja`5zK zFEwn;kKX>{Y%A^G8~cwB-~Ns5sk8s%e)09r{=HoG(*B3+C(o#IHb6GUlj^ujKPx7? zTq_x2h~eIh6R>`@YZCuccr$+9G|R-v+sUR%_CqVH_@BqO?#KVEGqfV2fv=fx~L|uk`yuaP0 zAYINQ$nllqu!T{C@Jq*2hRolf0p52wv#ehZ2%RyXRb^+&u`~@j08Egy)Tab6*ar*% z?1W2ZeQ59aD<_(DOSamH8EiB1R2FasBBx+K$uQXPSOluoA#6nffg`6$&sfC^z^JBd zfDp47pSATc7>B&()lG{6ExDo!VsKBe@18*Hd>_`xh3$!Yyv0-6D?$daYOBLhJf;FDnJ0qXF1(3}7Y?oAF90kpeqljs2UA`9keyVS@@L^Br|R z-Up4fIkO1tbJQ5K{kzz|e|YwP_F?Qm6D{mN->d!KZhEiyX*#B%}z@lTJb55?IX(IeQb-v6qj|=T?l=j-`X*pxCWZZ*%+@IAOzw0P%X)C*+Y!Yd(TZ1-jHPkAaOymcb2t>!ddDks~pv=Kx;Sx6@$X z%I6l_)9H?Y;HT5d;0rQm2Qa8AXd&5<0)k(*;dI;bjJ6Lzah9zX%GbwHE}%b_`n39N z$rtpMFC{||Sa5?ro6}s$_6N9hZsAZ91lvG;y(SQqU~ZIigG9gvf5ey$(K50u0@7>> z5CvLYBB7cR=g!+;fjcSeU#f;Rz*hWBmi0PzDJaJdy_I8u=~?!l@3C)D6K&YkStfT# zL)u@h9;zS3qcw9qpAs7O8*>{+QX15jr(CBtYu+8Y82t_2X*vs)UQR)Cyucg7xPaZI zfyZcV=xnr`ea@sKqI{OxcYxo88$1&N%9hQ1NcK-(k!@g~evHp#|D#vWu>bSlF<*To zOrxHI*^}z{1cH;TRzXc%Xv*-kr1q3o0bMSC@I^aGEeCuqExhUYU+ttFali4%n)DR- z8?|W`FNptk)-y8;=?C_${>uDvq13@IcDuN+v+ZtOV$vlP9WV4@yx_uR_YTUYH%fD$ zEXa{gs>_bq7|RJHi0GVK0azdWa|^c&m7PO6mNEnfxyz}clcYdk)owXcr?!$8I;?CP z`=<`3$~yJEoOJO`oheR8U9qz&fP@abbXELVzvp`+?ADgKNj>`}?5+(cm&hW(l}5b| ztfHTDjzF8Yzmu24SY}Wi$I7glHe*mTb}6D{^g{f%YezY0xTf|1AP1munx6wO1I(@1xh^(=k*0o7jN>_=7`ny%4^C{9!P~I_h6H8YM zHF24$P=Omc4QGTFfSKTB?dp%@0+e;vum zak$Ck&JT_|&&4-w|0B@=Ip3N6XIZb;d-k7+lmoz3`?sb2+qg%%B7to9eg>p5#_qq3~?@x2Fk{7&^|jC(|{gVð$;rFzgtY&DUkPe6Y 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 literal 0 HcmV?d00001 diff --git a/studio/public/img/integrations/covers/vercel-cover.png b/studio/public/img/integrations/covers/vercel-cover.png new file mode 100644 index 0000000000000000000000000000000000000000..d2965eefdc6465e972dc79bb46742f9e240628f5 GIT binary patch literal 197501 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 mO*<+mP#N(rS+`rAD4aS8AeZa)Y{4V+PgPk void setProjectRef: (ref?: string) => void setOrganizationSlug: (slug?: string) => void setNotification: (notification: Notification) => string setPermissions: (permissions?: Permission[]) => void + setShowGitHubRepoSelectionPanel: (visible?: boolean) => void } export default class UiStore implements IUiStore { rootStore: IRootStore @@ -24,6 +26,7 @@ export default class UiStore implements IUiStore { selectedOrganizationSlug?: string notification?: Notification permissions?: Permission[] = [] + showGitHubRepoSelectionPanel: boolean = false constructor(rootStore: IRootStore) { this.rootStore = rootStore @@ -101,4 +104,8 @@ export default class UiStore implements IUiStore { setPermissions(permissions?: any) { this.permissions = permissions } + + setShowGitHubRepoSelectionPanel(visible: boolean) { + this.showGitHubRepoSelectionPanel = visible + } } From 2598b269d46e7eb586f83604c5aa4a982554820c Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Fri, 16 Jun 2023 03:05:53 +0800 Subject: [PATCH 056/909] upgrade UI for vercel integration. added icons for frameworks as well --- .../Integrations/IntegrationPanels.tsx | 122 +++--- .../interfaces/Integrations/ProjectLinker.tsx | 99 +++-- .../GitHubRepoSelection.tsx | 8 +- .../IntegrationSettings/Integration.tsx | 53 +-- .../IntegrationSettings.tsx | 5 +- ...integration-connections-create-mutation.ts | 2 + .../integrations-github-repos-query.ts | 137 +++++++ .../data/integrations/integrations-query.ts | 347 +++++++++++++----- ... => integrations-vercel-projects-query.ts} | 8 +- .../vercel-integration-create-mutation.ts | 9 +- studio/next.config.js | 2 +- studio/pages/integrations/vercel.tsx | 22 +- .../public/img/icons/frameworks/angular.svg | 1 + studio/public/img/icons/frameworks/astro.svg | 15 + .../public/img/icons/frameworks/blitzjs.svg | 30 ++ studio/public/img/icons/frameworks/brunch.svg | 3 + .../img/icons/frameworks/create-react-app.svg | 1 + .../img/icons/frameworks/docusaurus-2.svg | 1 + .../img/icons/frameworks/docusaurus.svg | 1 + studio/public/img/icons/frameworks/dojo.svg | 1 + .../public/img/icons/frameworks/eleventy.svg | 1 + studio/public/img/icons/frameworks/ember.svg | 1 + studio/public/img/icons/frameworks/gatsby.svg | 1 + .../public/img/icons/frameworks/gridsome.svg | 1 + studio/public/img/icons/frameworks/hexo.svg | 1 + studio/public/img/icons/frameworks/hugo.svg | 5 + .../public/img/icons/frameworks/hydrogen.svg | 12 + .../img/icons/frameworks/ionic-angular.svg | 4 + .../img/icons/frameworks/ionic-react.svg | 4 + studio/public/img/icons/frameworks/jekyll.svg | 19 + .../public/img/icons/frameworks/middleman.svg | 9 + studio/public/img/icons/frameworks/nextjs.svg | 1 + studio/public/img/icons/frameworks/nuxtjs.svg | 5 + studio/public/img/icons/frameworks/parcel.svg | 9 + .../public/img/icons/frameworks/polymer.svg | 1 + studio/public/img/icons/frameworks/preact.svg | 1 + .../public/img/icons/frameworks/redwoodjs.svg | 1 + studio/public/img/icons/frameworks/remix.svg | 6 + studio/public/img/icons/frameworks/saber.svg | 1 + studio/public/img/icons/frameworks/sanity.svg | 6 + studio/public/img/icons/frameworks/sapper.svg | 1 + studio/public/img/icons/frameworks/scully.svg | 94 +++++ .../img/icons/frameworks/solidstart.svg | 1 + .../public/img/icons/frameworks/stencil.svg | 4 + .../public/img/icons/frameworks/storybook.svg | 9 + studio/public/img/icons/frameworks/svelte.svg | 1 + .../img/icons/frameworks/sveltekit-1.svg | 1 + .../public/img/icons/frameworks/sveltekit.svg | 1 + studio/public/img/icons/frameworks/umijs.svg | 19 + studio/public/img/icons/frameworks/vite.svg | 15 + .../public/img/icons/frameworks/vitepress.svg | 15 + studio/public/img/icons/frameworks/vue.svg | 1 + .../public/img/icons/frameworks/vuepress.svg | 1 + studio/public/img/icons/frameworks/zola.svg | 4 + .../state/github-connection-config-panel.ts | 15 + studio/stores/UiStore.ts | 7 - 56 files changed, 910 insertions(+), 235 deletions(-) create mode 100644 studio/data/integrations/integrations-github-repos-query.ts rename studio/data/integrations/{vercel-projects-query.ts => integrations-vercel-projects-query.ts} (95%) create mode 100644 studio/public/img/icons/frameworks/angular.svg create mode 100644 studio/public/img/icons/frameworks/astro.svg create mode 100644 studio/public/img/icons/frameworks/blitzjs.svg create mode 100644 studio/public/img/icons/frameworks/brunch.svg create mode 100644 studio/public/img/icons/frameworks/create-react-app.svg create mode 100644 studio/public/img/icons/frameworks/docusaurus-2.svg create mode 100644 studio/public/img/icons/frameworks/docusaurus.svg create mode 100644 studio/public/img/icons/frameworks/dojo.svg create mode 100644 studio/public/img/icons/frameworks/eleventy.svg create mode 100644 studio/public/img/icons/frameworks/ember.svg create mode 100644 studio/public/img/icons/frameworks/gatsby.svg create mode 100644 studio/public/img/icons/frameworks/gridsome.svg create mode 100644 studio/public/img/icons/frameworks/hexo.svg create mode 100644 studio/public/img/icons/frameworks/hugo.svg create mode 100644 studio/public/img/icons/frameworks/hydrogen.svg create mode 100644 studio/public/img/icons/frameworks/ionic-angular.svg create mode 100644 studio/public/img/icons/frameworks/ionic-react.svg create mode 100644 studio/public/img/icons/frameworks/jekyll.svg create mode 100644 studio/public/img/icons/frameworks/middleman.svg create mode 100644 studio/public/img/icons/frameworks/nextjs.svg create mode 100644 studio/public/img/icons/frameworks/nuxtjs.svg create mode 100644 studio/public/img/icons/frameworks/parcel.svg create mode 100644 studio/public/img/icons/frameworks/polymer.svg create mode 100644 studio/public/img/icons/frameworks/preact.svg create mode 100644 studio/public/img/icons/frameworks/redwoodjs.svg create mode 100644 studio/public/img/icons/frameworks/remix.svg create mode 100644 studio/public/img/icons/frameworks/saber.svg create mode 100644 studio/public/img/icons/frameworks/sanity.svg create mode 100644 studio/public/img/icons/frameworks/sapper.svg create mode 100644 studio/public/img/icons/frameworks/scully.svg create mode 100644 studio/public/img/icons/frameworks/solidstart.svg create mode 100644 studio/public/img/icons/frameworks/stencil.svg create mode 100644 studio/public/img/icons/frameworks/storybook.svg create mode 100644 studio/public/img/icons/frameworks/svelte.svg create mode 100644 studio/public/img/icons/frameworks/sveltekit-1.svg create mode 100644 studio/public/img/icons/frameworks/sveltekit.svg create mode 100644 studio/public/img/icons/frameworks/umijs.svg create mode 100644 studio/public/img/icons/frameworks/vite.svg create mode 100644 studio/public/img/icons/frameworks/vitepress.svg create mode 100644 studio/public/img/icons/frameworks/vue.svg create mode 100644 studio/public/img/icons/frameworks/vuepress.svg create mode 100644 studio/public/img/icons/frameworks/zola.svg create mode 100644 studio/state/github-connection-config-panel.ts diff --git a/studio/components/interfaces/Integrations/IntegrationPanels.tsx b/studio/components/interfaces/Integrations/IntegrationPanels.tsx index 5d301ecc747..3ac3b3e79d8 100644 --- a/studio/components/interfaces/Integrations/IntegrationPanels.tsx +++ b/studio/components/interfaces/Integrations/IntegrationPanels.tsx @@ -1,38 +1,34 @@ +import { useParams } from 'common' +import { Markdown } from 'components/interfaces/Markdown' import { Integration, IntegrationProjectConnection } from 'data/integrations/integrations-query' import dayjs from 'dayjs' +import { useStore } from 'hooks' +import Image from 'next/image' +import { useRouter } from 'next/router' import React from 'react' -import { - Button, - IconArrowRight, - IconCloudLightning, - IconGitHub, - IconSquare, - IconTriangle, -} from 'ui' +import { Project } from 'types' +import { Button, IconArrowRight, IconGitHub, IconSquare } from 'ui' import { cn } from 'ui/src/utils/cn' -var relativeTime = require('dayjs/plugin/relativeTime') -dayjs.extend(relativeTime) - const ICON_STROKE_WIDTH = 2 const ICON_SIZE = 14 export interface IntegrationInstallationProps extends React.HTMLAttributes { title: string - orgName: string + // orgName: string connection: Integration } -type HandleIconType = Integration['type'] | 'SUPABASE' +type HandleIconType = Integration['integration']['name'] | 'Supabase' const HandleIcon = ({ type }: { type: HandleIconType }) => { switch (type) { - case 'GITHUB': + case 'GitHub': return break - case 'NETLIFY': + case 'Netlify': return break - case 'VERCEL': + case 'Vercel': return ( { // break - case 'SUPABASE': - return ( - Supabase - ) + case 'Supabase': + return Supabase // break @@ -64,11 +54,11 @@ const HandleIcon = ({ type }: { type: HandleIconType }) => { } const IntegrationInstallation = React.forwardRef( - ({ className, title, orgName, connection, ...props }, ref) => { + ({ className, title, connection, ...props }, ref) => { const IntegrationIconBlock = () => { return (

    - +
    ) } @@ -93,9 +83,11 @@ const IntegrationInstallation = React.forwardRef
    - Created {dayjs(connection.createdAt).fromNow()} + Created {dayjs(connection.created_at).fromNow()} + + + Added by {connection?.added_by?.primary_email} - Added by {connection.createdBy}
    @@ -108,36 +100,51 @@ const IntegrationInstallation = React.forwardRef { connection: IntegrationProjectConnection - type: Integration['type'] + type: Integration['integration']['name'] } const IntegrationConnection = React.forwardRef( ({ className, connection, type, ...props }, ref) => { + const { app } = useStore() + + const { projects } = app + return (
  • - - {connection.from.name} + + {projects.byId(connection.project_ref)?.name} - - {connection.to.name} + {!connection.metadata.framework ? ( + + ) : ( + {`icon`} + )} + + {connection.metadata.name}
    - - Connected {dayjs(connection.createdAt).fromNow()} - +
    + + Connected {dayjs(connection?.created_at).fromNow()} + + + Added by {connection?.added_by?.primary_email} + +
    @@ -151,6 +158,9 @@ const IntegrationConnection = React.forwardRef( ({ className, connection, type, ...props }, ref) => { + const { app } = useStore() + + const { projects } = app return (
  • - - {connection.from.name} + + {projects.byId(connection.project_ref)?.name} - {connection.to.name} + {connection.metadata.name}
    - Connected {dayjs(connection.createdAt).fromNow()} + Connected {dayjs(connection.created_at).fromNow()}
    @@ -183,7 +193,12 @@ const EmptyIntegrationConnection = React.forwardRef< React.HTMLAttributes >(({ className, ...props }, ref) => { return ( -
    +
    +
    @@ -203,16 +217,18 @@ const EmptyIntegrationConnection = React.forwardRef< interface IntegrationConnectionHeader extends React.HTMLAttributes { name?: string + markdown?: string } const IntegrationConnectionHeader = React.forwardRef( - ({ className, name, ...props }, ref) => { + ({ className, name, markdown = '', ...props }, ref) => { return ( -
    -

    {props.title}

    +
    + {/*

    {props.title}

    Repository connections for {name?.toLowerCase()} -

    +

    */} +
    ) } @@ -228,6 +244,6 @@ export { EmptyIntegrationConnection, IntegrationConnection, IntegrationConnectionHeader, - IntegrationInstallation, IntegrationConnectionOption, + IntegrationInstallation, } diff --git a/studio/components/interfaces/Integrations/ProjectLinker.tsx b/studio/components/interfaces/Integrations/ProjectLinker.tsx index 05a4b10d94f..9c694ead9ab 100644 --- a/studio/components/interfaces/Integrations/ProjectLinker.tsx +++ b/studio/components/interfaces/Integrations/ProjectLinker.tsx @@ -1,6 +1,8 @@ import { databaseIcon, vercelIcon } from 'components/to-be-cleaned/ListIcons' import { useIntegrationConnectionsCreateMutation } from 'data/integrations/integration-connections-create-mutation' +import { VercelProjectsResponse } from 'data/integrations/integrations-vercel-projects-query' import { useState } from 'react' +import { TRUE } from 'sass' import { Button, IconArrowRight, IconPlus, IconX, Listbox } from 'ui' interface Project { @@ -8,14 +10,18 @@ interface Project { name: string } +// to do: move this somewhere +const INTEGRATION_INTERNAL_ID = 1 + export interface ProjectLinkerProps { organizationIntegrationId: string - foreignProjects: Project[] + foreignProjects: VercelProjectsResponse[] supabaseProjects: Project[] onCreateConnections?: () => void } const UNDEFINED_SELECT_VALUE = 'undefined' +const UNDEFINED_METADATA_VALUE = {} const ProjectLinker = ({ organizationIntegrationId, @@ -24,12 +30,28 @@ const ProjectLinker = ({ onCreateConnections: _onCreateConnections, }: ProjectLinkerProps) => { const [connections, setConnections] = useState([ - { foreignProjectId: UNDEFINED_SELECT_VALUE, supabaseProjectId: UNDEFINED_SELECT_VALUE }, + { + foreignProjectId: UNDEFINED_SELECT_VALUE, + supabaseProjectId: UNDEFINED_SELECT_VALUE, + integrationId: INTEGRATION_INTERNAL_ID, + metadata: UNDEFINED_METADATA_VALUE, + }, ]) function onSetForeignProjectId(idx: number, id: string) { + console.log(id) + + console.log(foreignProjects) const newConnections = [...connections] + const projectDetails = foreignProjects.filter((x) => x.id === id)[0] + newConnections[idx].metadata = { ...projectDetails } newConnections[idx].foreignProjectId = id + newConnections[idx].supabaseConfig = { + projectEnvVars: { + write: true, + }, + } + setConnections(newConnections) } @@ -42,7 +64,12 @@ const ProjectLinker = ({ function addConnection() { setConnections([ ...connections, - { foreignProjectId: UNDEFINED_SELECT_VALUE, supabaseProjectId: UNDEFINED_SELECT_VALUE }, + { + foreignProjectId: UNDEFINED_SELECT_VALUE, + supabaseProjectId: UNDEFINED_SELECT_VALUE, + integrationId: INTEGRATION_INTERNAL_ID, + metadata: UNDEFINED_METADATA_VALUE, + }, ]) } @@ -59,6 +86,7 @@ const ProjectLinker = ({ }) function onCreateConnections() { + console.log('connections', connections) createConnections({ organizationIntegrationId, connections, @@ -71,6 +99,7 @@ const ProjectLinker = ({ {connections.map((connection, i) => ( void removeConnection: () => void canRemove: boolean + connections: any[] } const ProjectLinkerItem = ({ @@ -132,30 +162,6 @@ const ProjectLinkerItem = ({ return (
  • -
    - - - Choose a project - - - {foreignProjects.map((project) => ( - vercelIcon} - > - {project.name} - - ))} - -
    -
    - -
    +
    + +
    +
    + + + Choose a project + + + {foreignProjects.map((project) => ( + { + return ( + <> + {!project?.framework ? ( + vercelIcon + ) : ( + {`icon`} + )} + + ) + }} + > + {project.name} + + ))} + +
    {canRemove && ( -
    +
    {actions}
  • ) @@ -216,8 +211,6 @@ const EmptyIntegrationConnection = React.forwardRef< >
    { return (
    - {/*

    {props.title}

    -

    - Repository connections for {name?.toLowerCase()} -

    */}
    ) diff --git a/studio/components/interfaces/Integrations/ProjectLinker.tsx b/studio/components/interfaces/Integrations/ProjectLinker.tsx index 9c694ead9ab..7488298a8a8 100644 --- a/studio/components/interfaces/Integrations/ProjectLinker.tsx +++ b/studio/components/interfaces/Integrations/ProjectLinker.tsx @@ -2,8 +2,7 @@ import { databaseIcon, vercelIcon } from 'components/to-be-cleaned/ListIcons' import { useIntegrationConnectionsCreateMutation } from 'data/integrations/integration-connections-create-mutation' import { VercelProjectsResponse } from 'data/integrations/integrations-vercel-projects-query' import { useState } from 'react' -import { TRUE } from 'sass' -import { Button, IconArrowRight, IconPlus, IconX, Listbox } from 'ui' +import { Button, IconArrowRight, IconPlus, IconX, Listbox, Select } from 'ui' interface Project { id: string @@ -18,6 +17,7 @@ export interface ProjectLinkerProps { foreignProjects: VercelProjectsResponse[] supabaseProjects: Project[] onCreateConnections?: () => void + installedConnections?: any[] } const UNDEFINED_SELECT_VALUE = 'undefined' @@ -28,20 +28,34 @@ const ProjectLinker = ({ foreignProjects, supabaseProjects, onCreateConnections: _onCreateConnections, + installedConnections, }: ProjectLinkerProps) => { - const [connections, setConnections] = useState([ - { - foreignProjectId: UNDEFINED_SELECT_VALUE, - supabaseProjectId: UNDEFINED_SELECT_VALUE, - integrationId: INTEGRATION_INTERNAL_ID, - metadata: UNDEFINED_METADATA_VALUE, - }, - ]) + const [connections, setConnections] = useState( + installedConnections && installedConnections.length > 0 + ? installedConnections?.map((connection) => { + return { + foreignProjectId: connection?.foreign_project_id, + supabaseProjectId: connection?.supabase_project_id, + integrationId: INTEGRATION_INTERNAL_ID, + metadata: UNDEFINED_METADATA_VALUE, + } + }) + : [ + { + foreignProjectId: UNDEFINED_SELECT_VALUE, + supabaseProjectId: UNDEFINED_SELECT_VALUE, + integrationId: INTEGRATION_INTERNAL_ID, + metadata: UNDEFINED_METADATA_VALUE, + }, + ] + ) + + console.log('installedConnections', installedConnections) + console.log('connections', connections) + console.log('foreignProjects', foreignProjects) + console.log('supabaseProjects', supabaseProjects) function onSetForeignProjectId(idx: number, id: string) { - console.log(id) - - console.log(foreignProjects) const newConnections = [...connections] const projectDetails = foreignProjects.filter((x) => x.id === id)[0] newConnections[idx].metadata = { ...projectDetails } @@ -86,13 +100,14 @@ const ProjectLinker = ({ }) function onCreateConnections() { - console.log('connections', connections) createConnections({ organizationIntegrationId, connections, }) } + console.log(connections) + return (
      @@ -159,29 +174,27 @@ const ProjectLinkerItem = ({ removeConnection, canRemove, }: ProjectLinkerItemProps) => { + console.log(supabaseProjectId) return (
    • - - +
      diff --git a/studio/components/interfaces/Organization/IntegrationSettings/Integration.tsx b/studio/components/interfaces/Organization/IntegrationSettings/Integration.tsx index 9be3d46e382..ecbd6751ea2 100644 --- a/studio/components/interfaces/Organization/IntegrationSettings/Integration.tsx +++ b/studio/components/interfaces/Organization/IntegrationSettings/Integration.tsx @@ -1,3 +1,4 @@ +import { useParams } from 'common' import { EmptyIntegrationConnection, IntegrationConnection, @@ -11,11 +12,17 @@ import { ScaffoldSectionContent, ScaffoldSectionDetail, } from 'components/layouts/Scaffold' -import { Integration as TIntegration } from 'data/integrations/integrations-query' +import { useIntegrationConnectionsCreateMutation } from 'data/integrations/integration-connections-create-mutation' +import { + Integration as TIntegration, + useIntegrationsQuery, +} from 'data/integrations/integrations-query' +import { useIntegrationsVercelInstalledConnectionDeleteMutation } from 'data/integrations/integrations-vercel-installed-connection-delete-mutation' import { pluralize } from 'lib/helpers' import { EMPTY_ARR } from 'lib/void' import { useMemo } from 'react' import { useGithubConnectionConfigPanelSnapshot } from 'state/github-connection-config-panel' +import { Button, Dropdown, IconChevronDown, IconRefreshCcw, IconTrash } from 'ui' export interface IntegrationProps { title: string @@ -35,6 +42,11 @@ const Integration = ({ integrations = EMPTY_ARR, }: IntegrationProps) => { const githubConnectionConfigPanelShotshot = useGithubConnectionConfigPanelSnapshot() + const deleteMutation = useIntegrationsVercelInstalledConnectionDeleteMutation({ + onSuccess: (data, variables, context) => { + // Handle the success case + }, + }) const ConnectionHeading = ({ integration }: { integration: TIntegration }) => { return ( @@ -49,6 +61,16 @@ Repository connections for ${title?.toLowerCase()} ) } + // Call the mutation when needed + const handleDelete = (organizationIntegrationId: string, projectIntegrationId: string) => { + const variables = { + organization_integration_id: organizationIntegrationId, + id: projectIntegrationId, + } + + deleteMutation.mutate(variables) + } + return ( <> @@ -84,6 +106,42 @@ Repository connections for ${title?.toLowerCase()} key={i} connection={connection} type={integration.integration.name} + actions={ + + + +
      + } + > +
      Refresh Enviroment Variables
      +
      + Reapply env vars in vercel. +
      + + + } + onSelect={() => + handleDelete(integration.id, connection.id) + } + > + Delete + + + } + > + + + } /> ))}
    diff --git a/studio/components/interfaces/Organization/IntegrationSettings/IntegrationSettings.tsx b/studio/components/interfaces/Organization/IntegrationSettings/IntegrationSettings.tsx index 4e13f013ad0..7576bb5187c 100644 --- a/studio/components/interfaces/Organization/IntegrationSettings/IntegrationSettings.tsx +++ b/studio/components/interfaces/Organization/IntegrationSettings/IntegrationSettings.tsx @@ -3,8 +3,10 @@ import { ScaffoldDivider } from 'components/layouts/Scaffold' import { useIntegrationsQuery } from 'data/integrations/integrations-query' import { useStore } from 'hooks' import { observer } from 'mobx-react-lite' -import GitHubRepoSelection from './GitHubRepoSelection' +import GitHubRepoSelection from './SidePanelGitHubRepoSelection' import Integration from './Integration' +import SidePanelGitHubRepoSelection from './SidePanelGitHubRepoSelection' +import SidePanelVercelProjectLinker from './SidePanelVercelProjectLinker' const IntegrationSettings = () => { const { ui } = useStore() @@ -68,7 +70,8 @@ You can change the scope of the access for Supabase by configuring here. `} integrations={githubIntegrations} /> - + {/* */} + ) } diff --git a/studio/components/interfaces/Organization/IntegrationSettings/GitHubRepoSelection.tsx b/studio/components/interfaces/Organization/IntegrationSettings/SidePanelGitHubRepoSelection.tsx similarity index 100% rename from studio/components/interfaces/Organization/IntegrationSettings/GitHubRepoSelection.tsx rename to studio/components/interfaces/Organization/IntegrationSettings/SidePanelGitHubRepoSelection.tsx diff --git a/studio/components/interfaces/Organization/IntegrationSettings/SidePanelVercelProjectLinker.tsx b/studio/components/interfaces/Organization/IntegrationSettings/SidePanelVercelProjectLinker.tsx new file mode 100644 index 00000000000..44132a299db --- /dev/null +++ b/studio/components/interfaces/Organization/IntegrationSettings/SidePanelVercelProjectLinker.tsx @@ -0,0 +1,108 @@ +import { useParams } from 'common' +import ProjectLinker from 'components/interfaces/Integrations/ProjectLinker' +import { Markdown } from 'components/interfaces/Markdown' +import { useIntegrationsQuery } from 'data/integrations/integrations-query' +import { useStore } from 'hooks' +import { observer } from 'mobx-react-lite' +import { useMemo, useState } from 'react' +import { useGithubConnectionConfigPanelSnapshot } from 'state/github-connection-config-panel' +import { SidePanel } from 'ui' + +import { useVercelProjectsQuery } from 'data/integrations/integrations-vercel-projects-query' +import { useProjectsQuery } from 'data/projects/projects-query' +import { EMPTY_ARR } from 'lib/void' +import { Organization } from 'types' +import { useVercelProjectConnectionsQuery } from 'data/integrations/integrations-vercel-installed-connections-query' + +const SidePanelVercelProjectLinker = () => { + const { ui } = useStore() + const { slug } = useParams() + const { data } = useIntegrationsQuery({ orgSlug: slug }) + + const vercelIntegrations = data?.filter((integration) => integration.integration.id === 1) // vercel + + const selectedOrg = ui.selectedOrganization + + const [organizationIntegrationId, setOrganizationIntegrationId] = useState( + '880cb835-54b4-415b-8178-6f7920fdc40d' + ) + + const githubConnectionConfigPanelSnapshot = useGithubConnectionConfigPanelSnapshot() + + const { data: supabaseProjectsData } = useProjectsQuery({ + enabled: organizationIntegrationId !== null, + }) + const supabaseProjects = useMemo( + () => + supabaseProjectsData + ?.filter((project) => project.organization_id === selectedOrg?.id) + .map((project) => ({ id: project.id.toString(), name: project.name })) ?? EMPTY_ARR, + [selectedOrg?.id, supabaseProjectsData] + ) + + const { data: vercelProjectConnectionsData } = useVercelProjectConnectionsQuery( + { + organization_integration_id: organizationIntegrationId, + }, + { enabled: organizationIntegrationId !== null } + ) + + const vercelProjectConnections = useMemo( + () => vercelProjectConnectionsData ?? EMPTY_ARR, + [vercelProjectConnectionsData] + ) + + const { data: vercelProjectsData } = useVercelProjectsQuery( + { + orgId: selectedOrg?.id, + orgSlug: selectedOrg?.slug, + }, + { enabled: organizationIntegrationId !== null } + ) + + console.log('vercelProjectsData', vercelProjectsData) + const vercelProjects = useMemo(() => vercelProjectsData ?? EMPTY_ARR, [vercelProjectsData]) + + return ( + githubConnectionConfigPanelSnapshot.setVisible(false)} + > +
    + + + + + { + // if (next) { + // window.location.href = next + // } + }} + installedConnections={vercelProjectConnections} + /> + + +
      +
    • + {/* */} +
    • +
    +
    +
    +
    + ) +} + +export default observer(SidePanelVercelProjectLinker) diff --git a/studio/components/layouts/Scaffold.tsx b/studio/components/layouts/Scaffold.tsx index e69a4a44cd0..b3adc0714f7 100644 --- a/studio/components/layouts/Scaffold.tsx +++ b/studio/components/layouts/Scaffold.tsx @@ -1,7 +1,7 @@ import React from 'react' import { cn } from 'ui/src/utils/cn' -const maxWdithClasses = 'mx-auto w-full max-w-[1600px]' +const maxWidthClasses = 'mx-auto w-full max-w-[1600px]' const paddingClasses = 'px-6 lg:px-14 xl:px-28 2xl:px-32' // lg: pt - 8 @@ -23,7 +23,7 @@ const ScaffoldTitle = React.forwardRef< const ScaffoldContainer = React.forwardRef>( ({ className, ...props }, ref) => { - return
    + return
    } ) diff --git a/studio/data/integrations/integration-connections-create-mutation.ts b/studio/data/integrations/integration-connections-create-mutation.ts index d60828ca565..6881b405fab 100644 --- a/studio/data/integrations/integration-connections-create-mutation.ts +++ b/studio/data/integrations/integration-connections-create-mutation.ts @@ -16,7 +16,7 @@ export async function createIntegrationConnections({ organizationIntegrationId, connections, }: IntegrationConnectionsCreateVariables) { - const response = await post(`${API_URL}/integrations/connections`, { + const response = await post(`${API_URL}/integrations/vercel/connections`, { organizationIntegrationId, connections, }) diff --git a/studio/data/integrations/integrations-vercel-installed-connection-delete-mutation.ts b/studio/data/integrations/integrations-vercel-installed-connection-delete-mutation.ts new file mode 100644 index 00000000000..5c9825553b4 --- /dev/null +++ b/studio/data/integrations/integrations-vercel-installed-connection-delete-mutation.ts @@ -0,0 +1,41 @@ +import { useMutation, UseMutationOptions } from '@tanstack/react-query' +import { delete_ } from 'lib/common/fetch' +import { API_URL } from 'lib/constants' +import { UserContent } from 'types' + +type DeleteVariables = { organization_integration_id: string; id: string } + +export async function deleteConnection( + { organization_integration_id, id }: DeleteVariables, + signal?: AbortSignal +) { + if (!organization_integration_id) { + throw new Error('organization_integration_id is required') + } + + const response = await delete_( + `${API_URL}/integrations/vercel/connections/${id}`, + { organization_integration_id }, + { signal } + ) + + if (response.error) throw response.error + return response +} + +type DeleteContentData = Awaited> + +export const useIntegrationsVercelInstalledConnectionDeleteMutation = ({ + onSuccess, + ...options +}: Omit, 'mutationFn'> = {}) => { + return useMutation( + (args) => deleteConnection(args), + { + async onSuccess(data, variables, context) { + await onSuccess?.(data, variables, context) + }, + ...options, + } + ) +} diff --git a/studio/data/integrations/integrations-vercel-installed-connections-query.ts b/studio/data/integrations/integrations-vercel-installed-connections-query.ts new file mode 100644 index 00000000000..f4136c2f11d --- /dev/null +++ b/studio/data/integrations/integrations-vercel-installed-connections-query.ts @@ -0,0 +1,90 @@ +import { useQuery, useQueryClient, UseQueryOptions } from '@tanstack/react-query' +import { get } from 'lib/common/fetch' +import { API_URL } from 'lib/constants' +import { useCallback } from 'react' +import { integrationKeys } from './keys' + +export type VercelProjectsVariables = { + organization_integration_id?: string +} + +export type VercelProjectsResponse = { + id: string + name: string + metadata: { + id: string + name: string + framework: string + link: string + } +} + +export async function getVercelInstalledConnections( + { organization_integration_id }: VercelProjectsVariables, + signal?: AbortSignal +) { + if (!organization_integration_id) { + throw new Error('organization_integration_id is required') + } + + const response = await get( + `${API_URL}/integrations/vercel/connections/${organization_integration_id}`, + { + signal, + } + ) + if (response.error) { + throw response.error + } + + return response as VercelProjectsResponse[] +} + +export type VercelProjectsData = Awaited> +export type VercelProjectsError = unknown + +export const useVercelProjectConnectionsQuery = ( + { organization_integration_id }: VercelProjectsVariables, + { + enabled = true, + ...options + }: UseQueryOptions = {} +) => + useQuery( + integrationKeys.vercelProjectList(organization_integration_id), + ({ signal }) => getVercelInstalledConnections({ organization_integration_id }, signal), + { + enabled: + enabled && + typeof organization_integration_id !== 'undefined' && + typeof organization_integration_id !== 'undefined', + ...options, + } + ) + +/** + * useVercelProjectsPrefetch is used for prefetching data. For example, starting a query loading before a page is navigated to. + * + * @example + * const prefetch = useVercelProjectsPrefetch({ orgSlug }) + * + * return ( + * prefetch()}> + * Start loading on hover + * + * ) + */ +export const useVercelProjectsPrefetch = ({ + organization_integration_id, +}: VercelProjectsVariables) => { + const client = useQueryClient() + + return useCallback(() => { + if (organization_integration_id) { + client.prefetchQuery( + integrationKeys.vercelConnectionsList(organization_integration_id), + ({ signal }) => getVercelInstalledConnections({ organization_integration_id }, signal) + ) + } + }, [organization_integration_id]) +} diff --git a/studio/data/integrations/keys.ts b/studio/data/integrations/keys.ts index f317710e2b3..be833c0d307 100644 --- a/studio/data/integrations/keys.ts +++ b/studio/data/integrations/keys.ts @@ -2,4 +2,6 @@ export const integrationKeys = { list: (orgSlug: string | undefined) => ['organizations', orgSlug, 'integrations'] as const, vercelProjectList: (orgSlug: string | undefined) => ['organizations', orgSlug, 'vercel-projects'] as const, + vercelConnectionsList: (organization_integration_id: string | undefined) => + ['organizations', organization_integration_id, 'vercel-connections'] as const, } From dc9f9956df3a0a27ec043aafd69806de465dadf8 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Mon, 19 Jun 2023 18:50:18 +0800 Subject: [PATCH 059/909] fix issues using new API changes --- .../interfaces/Integrations/ProjectLinker.tsx | 20 +-- .../IntegrationSettings.tsx | 4 +- .../SidePanelVercelProjectLinker.tsx | 4 +- ...integration-connections-create-mutation.ts | 2 +- .../data/integrations/integrations-query.ts | 128 +++--------------- .../integrations-vercel-projects-query.ts | 2 +- 6 files changed, 34 insertions(+), 126 deletions(-) diff --git a/studio/components/interfaces/Integrations/ProjectLinker.tsx b/studio/components/interfaces/Integrations/ProjectLinker.tsx index 7488298a8a8..81e9ca7e6d2 100644 --- a/studio/components/interfaces/Integrations/ProjectLinker.tsx +++ b/studio/components/interfaces/Integrations/ProjectLinker.tsx @@ -34,16 +34,16 @@ const ProjectLinker = ({ installedConnections && installedConnections.length > 0 ? installedConnections?.map((connection) => { return { - foreignProjectId: connection?.foreign_project_id, - supabaseProjectId: connection?.supabase_project_id, + foreign_project_id: connection?.foreign_project_id, + supabase_project_id: connection?.supabase_project_id, integrationId: INTEGRATION_INTERNAL_ID, metadata: UNDEFINED_METADATA_VALUE, } }) : [ { - foreignProjectId: UNDEFINED_SELECT_VALUE, - supabaseProjectId: UNDEFINED_SELECT_VALUE, + foreign_project_id: UNDEFINED_SELECT_VALUE, + supabase_project_id: UNDEFINED_SELECT_VALUE, integrationId: INTEGRATION_INTERNAL_ID, metadata: UNDEFINED_METADATA_VALUE, }, @@ -59,7 +59,7 @@ const ProjectLinker = ({ const newConnections = [...connections] const projectDetails = foreignProjects.filter((x) => x.id === id)[0] newConnections[idx].metadata = { ...projectDetails } - newConnections[idx].foreignProjectId = id + newConnections[idx].foreign_project_id = id newConnections[idx].supabaseConfig = { projectEnvVars: { write: true, @@ -71,7 +71,7 @@ const ProjectLinker = ({ function onSetSupabaseProjectId(idx: number, id: string) { const newConnections = [...connections] - newConnections[idx].supabaseProjectId = id + newConnections[idx].supabase_project_id = id setConnections(newConnections) } @@ -79,8 +79,8 @@ const ProjectLinker = ({ setConnections([ ...connections, { - foreignProjectId: UNDEFINED_SELECT_VALUE, - supabaseProjectId: UNDEFINED_SELECT_VALUE, + foreign_project_id: UNDEFINED_SELECT_VALUE, + supabase_project_id: UNDEFINED_SELECT_VALUE, integrationId: INTEGRATION_INTERNAL_ID, metadata: UNDEFINED_METADATA_VALUE, }, @@ -117,9 +117,9 @@ const ProjectLinker = ({ connections={connections} foreignProjects={foreignProjects} supabaseProjects={supabaseProjects} - foreignProjectId={connection.foreignProjectId} + foreignProjectId={connection.foreign_project_id} setForeignProjectId={(id) => onSetForeignProjectId(i, id)} - supabaseProjectId={connection.supabaseProjectId} + supabaseProjectId={connection.supabase_project_id} setSupabaseProjectId={(id) => onSetSupabaseProjectId(i, id)} removeConnection={() => removeConnection(i)} canRemove={connections.length > 1} diff --git a/studio/components/interfaces/Organization/IntegrationSettings/IntegrationSettings.tsx b/studio/components/interfaces/Organization/IntegrationSettings/IntegrationSettings.tsx index 7576bb5187c..240cce5449c 100644 --- a/studio/components/interfaces/Organization/IntegrationSettings/IntegrationSettings.tsx +++ b/studio/components/interfaces/Organization/IntegrationSettings/IntegrationSettings.tsx @@ -11,7 +11,7 @@ import SidePanelVercelProjectLinker from './SidePanelVercelProjectLinker' const IntegrationSettings = () => { const { ui } = useStore() const { slug } = useParams() - const { data } = useIntegrationsQuery({ orgSlug: slug }) + const { data } = useIntegrationsQuery({ orgId: ui.selectedOrganization?.id }) const org = ui.selectedOrganization @@ -71,7 +71,7 @@ You can change the scope of the access for Supabase by configuring here. integrations={githubIntegrations} /> {/* */} - + {/* */} ) } diff --git a/studio/components/interfaces/Organization/IntegrationSettings/SidePanelVercelProjectLinker.tsx b/studio/components/interfaces/Organization/IntegrationSettings/SidePanelVercelProjectLinker.tsx index 44132a299db..f5c459773b5 100644 --- a/studio/components/interfaces/Organization/IntegrationSettings/SidePanelVercelProjectLinker.tsx +++ b/studio/components/interfaces/Organization/IntegrationSettings/SidePanelVercelProjectLinker.tsx @@ -16,8 +16,8 @@ import { useVercelProjectConnectionsQuery } from 'data/integrations/integrations const SidePanelVercelProjectLinker = () => { const { ui } = useStore() - const { slug } = useParams() - const { data } = useIntegrationsQuery({ orgSlug: slug }) + + const { data } = useIntegrationsQuery({ orgId: ui.selectedOrganization?.id }) const vercelIntegrations = data?.filter((integration) => integration.integration.id === 1) // vercel diff --git a/studio/data/integrations/integration-connections-create-mutation.ts b/studio/data/integrations/integration-connections-create-mutation.ts index 6881b405fab..3c58ea49072 100644 --- a/studio/data/integrations/integration-connections-create-mutation.ts +++ b/studio/data/integrations/integration-connections-create-mutation.ts @@ -17,7 +17,7 @@ export async function createIntegrationConnections({ connections, }: IntegrationConnectionsCreateVariables) { const response = await post(`${API_URL}/integrations/vercel/connections`, { - organizationIntegrationId, + organization_integration_id: organizationIntegrationId, connections, }) if (response.error) { diff --git a/studio/data/integrations/integrations-query.ts b/studio/data/integrations/integrations-query.ts index 1dff671601a..39cc1f7b7ad 100644 --- a/studio/data/integrations/integrations-query.ts +++ b/studio/data/integrations/integrations-query.ts @@ -7,20 +7,15 @@ type metadata = { metadata: { id: string supabaseConfig: { - // branching: { - // prodBranch: string - // } projectEnvVars: { write: boolean } - // supabaseDeploymentConfig: { - // functions: { - // deploy: false - // } - // } } link?: | { + /** + * GitHub link + */ org?: string repo?: string repoId?: number @@ -39,6 +34,9 @@ type metadata = { productionBranch?: string } | { + /** + * GitLab link + */ projectId?: string projectName?: string projectNameWithNamespace?: string @@ -59,6 +57,9 @@ type metadata = { productionBranch?: string } | { + /** + * Bitbucket link + */ name?: string slug?: string owner?: string @@ -138,7 +139,7 @@ export type IntegrationProjectConnection = { } export type IntegrationsVariables = { - orgSlug?: string + orgId?: number } export type IntegrationProjectConnectionPayload = { @@ -174,87 +175,12 @@ export type Integration = { export type IntegrationsResponse = Integration[] -export async function getIntegrations({ orgSlug }: IntegrationsVariables, signal?: AbortSignal) { - if (!orgSlug) { - throw new Error('orgSlug is required') +export async function getIntegrations({ orgId }: IntegrationsVariables, signal?: AbortSignal) { + if (!orgId) { + throw new Error('orgId is required') } - // const response: IntegrationsResponse = [ - // { - // id: '1', - // type: 'VERCEL', - // createdBy: 'alaister@supabase.io', - // createdAt: '2023-06-05T06:56:25.565Z', - // metadata: { - // vercelTeam: 'alaister-team', - // }, - // connections: [ - // { - // id: '1.0', - // createdAt: '2023-06-05T01:56:25.565Z', - // to: { - // name: 'www prod', - // }, - // from: { - // name: 'alaister project prod', - // }, - // }, - // { - // id: '1.1', - // createdAt: '2023-06-14T06:56:25.565Z', - // to: { - // name: 'www staging', - // }, - // from: { - // name: 'alaister project staging', - // }, - // }, - // { - // id: '1.1', - // createdAt: '2023-06-02T21:56:25.565Z', - // to: { - // name: 'bees knees', - // }, - // from: { - // name: 'jonny bee project', - // }, - // }, - // ], - // }, - // { - // id: '2', - // type: 'VERCEL', - // createdBy: 'alaister@supabase.io', - // createdAt: '2023-06-05T06:56:25.565Z', - // metadata: { - // vercelTeam: 'alaister-team', - // }, - // connections: [], - // }, - // { - // id: '3', - // type: 'GITHUB', - // createdBy: 'Alaister', - // createdAt: '2023-06-05T06:56:25.565Z', - // metadata: { - // gitHubConnectionOwner: 'alaister', - // }, - // connections: [ - // { - // id: '1.2', - // createdAt: '2023-06-05T06:56:25.565Z', - // to: { - // name: 'supabase/supabase', - // }, - // from: { - // name: 'alaister project', - // }, - // }, - // ], - // }, - // ] - - const response = await get(`${API_URL}/integrations/${orgSlug}`, { + const response = await get(`${API_URL}/integrations/${orgId}`, { signal, }) if (response.error) { @@ -264,24 +190,6 @@ export async function getIntegrations({ orgSlug }: IntegrationsVariables, signal return response as IntegrationsResponse } -// export async function getProjectIntegrationConnections( -// { orgSlug }: IntegrationsVariables, -// signal?: AbortSignal -// ) { -// if (!orgSlug) { -// throw new Error('orgSlug is required') -// } - -// const response = await get(`${API_URL}/integrations`, { -// signal, -// }) -// if (response.error) { -// throw response.error -// } - -// return response as IntegrationsResponse -// } - export type IntegrationsData = Awaited> export type ProjectIntegrationConnectionsData = Awaited< ReturnType @@ -289,11 +197,11 @@ export type ProjectIntegrationConnectionsData = Awaited< export type IntegrationsError = unknown export const useIntegrationsQuery = ( - { orgSlug }: IntegrationsVariables, + { orgId }: IntegrationsVariables, { enabled = true, ...options }: UseQueryOptions = {} ) => useQuery( - integrationKeys.list(orgSlug), - ({ signal }) => getIntegrations({ orgSlug }, signal), - { enabled: enabled && typeof orgSlug !== 'undefined', ...options } + integrationKeys.list(orgId), + ({ signal }) => getIntegrations({ orgId }, signal), + { enabled: enabled && typeof orgId !== 'undefined', ...options } ) diff --git a/studio/data/integrations/integrations-vercel-projects-query.ts b/studio/data/integrations/integrations-vercel-projects-query.ts index da159791234..493cfd83dae 100644 --- a/studio/data/integrations/integrations-vercel-projects-query.ts +++ b/studio/data/integrations/integrations-vercel-projects-query.ts @@ -25,7 +25,7 @@ export async function getVercelProjects({ orgId }: VercelProjectsVariables, sign throw new Error('orgId is required') } - const response = await get(`${API_URL}/integrations/vercel/projects/${orgId}`, { + const response = await get(`${API_URL}/integrations/vercel/connections/${orgId}`, { signal, }) if (response.error) { From 8c1d4f716297739b7f5241c5d670e89cdd0ce845 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Tue, 20 Jun 2023 00:13:21 +0800 Subject: [PATCH 060/909] add source and teamId to new org integration payload --- .../vercel-integration-create-mutation.ts | 10 +++++++++- studio/pages/integrations/vercel.tsx | 11 ++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/studio/data/integrations/vercel-integration-create-mutation.ts b/studio/data/integrations/vercel-integration-create-mutation.ts index 9b8a8b21ead..04781212e39 100644 --- a/studio/data/integrations/vercel-integration-create-mutation.ts +++ b/studio/data/integrations/vercel-integration-create-mutation.ts @@ -7,6 +7,10 @@ export type VercelIntegrationCreateVariables = { configurationId: string orgId: number metadata: { [key: string]: string } + source: string + // teamId is only present when a team is being installed + // personal accounts (hobby) will not have this value defined + teamId?: string } export async function createVercelIntegration({ @@ -14,13 +18,17 @@ export async function createVercelIntegration({ configurationId, orgId, metadata, + source, + teamId, }: VercelIntegrationCreateVariables) { - console.log('payload', { code, configurationId, orgId, metadata }) + console.log('payload', { code, configurationId, orgId, metadata, source, teamId }) const response = await post(`${API_URL}/integrations/vercel`, { code, configuration_id: configurationId, organization_id: orgId, metadata, + source, + teamId, }) if (response.error) { throw response.error diff --git a/studio/pages/integrations/vercel.tsx b/studio/pages/integrations/vercel.tsx index 3c7930ca83c..0a9b9b60d89 100644 --- a/studio/pages/integrations/vercel.tsx +++ b/studio/pages/integrations/vercel.tsx @@ -14,7 +14,7 @@ import { Button } from 'ui' const VercelIntegration: NextPageWithLayout = () => { const { ui } = useStore() - const { code, configurationId, next } = useParams() + const { code, configurationId, next, teamId, source } = useParams() const [selectedOrg, setSelectedOrg] = useState(null) const [organizationIntegrationId, setOrganizationIntegrationId] = useState(null) @@ -38,6 +38,13 @@ const VercelIntegration: NextPageWithLayout = () => { return ui.setNotification({ category: 'error', message: 'Vercel Configuration ID missing' }) } + if (!source) { + return ui.setNotification({ + category: 'error', + message: 'Vercel Configuration source missing', + }) + } + const metadata = {} mutate({ @@ -45,6 +52,8 @@ const VercelIntegration: NextPageWithLayout = () => { configurationId, orgId, metadata, + source, + teamId, }) } From 321fd0818c289005b6b5604abbbdcf01a9ce1cc2 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Tue, 20 Jun 2023 01:59:27 +0800 Subject: [PATCH 061/909] fix visuals --- .../Integrations/IntegrationPanels.tsx | 2 +- .../integrations-vercel-projects-query.ts | 29 +++++++++++++------ studio/pages/integrations/vercel.tsx | 3 +- 3 files changed, 23 insertions(+), 11 deletions(-) diff --git a/studio/components/interfaces/Integrations/IntegrationPanels.tsx b/studio/components/interfaces/Integrations/IntegrationPanels.tsx index 46b9b59db37..6817050500b 100644 --- a/studio/components/interfaces/Integrations/IntegrationPanels.tsx +++ b/studio/components/interfaces/Integrations/IntegrationPanels.tsx @@ -91,7 +91,7 @@ const IntegrationInstallation = React.forwardRef - {connection.metadata.account.plan} + {connection.metadata.account.type}
    diff --git a/studio/data/integrations/integrations-vercel-projects-query.ts b/studio/data/integrations/integrations-vercel-projects-query.ts index 493cfd83dae..2f3307b373b 100644 --- a/studio/data/integrations/integrations-vercel-projects-query.ts +++ b/studio/data/integrations/integrations-vercel-projects-query.ts @@ -7,6 +7,7 @@ import { integrationKeys } from './keys' export type VercelProjectsVariables = { orgId?: number orgSlug?: string + organization_integration_id?: string } export type VercelProjectsResponse = { @@ -20,14 +21,20 @@ export type VercelProjectsResponse = { } } -export async function getVercelProjects({ orgId }: VercelProjectsVariables, signal?: AbortSignal) { - if (!orgId) { +export async function getVercelProjects( + { orgId, organization_integration_id }: VercelProjectsVariables, + signal?: AbortSignal +) { + if (!organization_integration_id) { throw new Error('orgId is required') } - const response = await get(`${API_URL}/integrations/vercel/connections/${orgId}`, { - signal, - }) + const response = await get( + `${API_URL}/integrations/vercel/projects/${organization_integration_id}`, + { + signal, + } + ) if (response.error) { throw response.error } @@ -39,7 +46,7 @@ export type VercelProjectsData = Awaited> export type VercelProjectsError = unknown export const useVercelProjectsQuery = ( - { orgSlug, orgId }: VercelProjectsVariables, + { orgSlug, orgId, organization_integration_id }: VercelProjectsVariables, { enabled = true, ...options @@ -47,7 +54,7 @@ export const useVercelProjectsQuery = ( ) => useQuery( integrationKeys.vercelProjectList(orgSlug), - ({ signal }) => getVercelProjects({ orgSlug, orgId }, signal), + ({ signal }) => getVercelProjects({ orgSlug, orgId, organization_integration_id }, signal), { enabled: enabled && typeof orgSlug !== 'undefined' && typeof orgId !== 'undefined', ...options, @@ -66,13 +73,17 @@ export const useVercelProjectsQuery = ( * * ) */ -export const useVercelProjectsPrefetch = ({ orgSlug, orgId }: VercelProjectsVariables) => { +export const useVercelProjectsPrefetch = ({ + orgSlug, + orgId, + organization_integration_id, +}: VercelProjectsVariables) => { const client = useQueryClient() return useCallback(() => { if (orgSlug) { client.prefetchQuery(integrationKeys.vercelProjectList(orgSlug), ({ signal }) => - getVercelProjects({ orgSlug, orgId }, signal) + getVercelProjects({ orgSlug, orgId, organization_integration_id }, signal) ) } }, [orgSlug]) diff --git a/studio/pages/integrations/vercel.tsx b/studio/pages/integrations/vercel.tsx index 0a9b9b60d89..049ad06a48e 100644 --- a/studio/pages/integrations/vercel.tsx +++ b/studio/pages/integrations/vercel.tsx @@ -53,7 +53,7 @@ const VercelIntegration: NextPageWithLayout = () => { orgId, metadata, source, - teamId, + teamId: teamId, }) } @@ -72,6 +72,7 @@ const VercelIntegration: NextPageWithLayout = () => { { orgId: selectedOrg?.id, orgSlug: selectedOrg?.slug, + organization_integration_id: organizationIntegrationId, }, { enabled: organizationIntegrationId !== null } ) From af5433acbecc543d196110b88b65c47529076139 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Tue, 20 Jun 2023 16:54:48 +0800 Subject: [PATCH 062/909] new UI for vercel integration marketplace flow --- packages/ui/index.tsx | 1 + .../src/components/Command/Command.utils.tsx | 2 +- .../{Command => LoadingLine}/LoadingLine.tsx | 2 +- .../ui/src/components/LoadingLine/index.tsx | 1 + .../Integrations/IntegrationPanels.tsx | 6 +- .../Integrations-Vercel.constants.ts | 52 +++ .../interfaces/Integrations/ProjectLinker.tsx | 297 ++++++++---------- .../Integrations/ProjectsLinker.tsx | 245 +++++++++++++++ studio/components/interfaces/Markdown.tsx | 2 +- .../IntegrationSettings.tsx | 8 +- .../SidePanelVercelProjectLinker.tsx | 2 +- .../layouts/IntegrationWindowLayout.tsx | 72 +++++ studio/components/layouts/Scaffold.tsx | 2 +- studio/pages/integrations/vercel.tsx | 119 +++++-- 14 files changed, 609 insertions(+), 202 deletions(-) rename packages/ui/src/components/{Command => LoadingLine}/LoadingLine.tsx (93%) create mode 100644 packages/ui/src/components/LoadingLine/index.tsx create mode 100644 studio/components/interfaces/Integrations/Integrations-Vercel.constants.ts create mode 100644 studio/components/interfaces/Integrations/ProjectsLinker.tsx create mode 100644 studio/components/layouts/IntegrationWindowLayout.tsx diff --git a/packages/ui/index.tsx b/packages/ui/index.tsx index 30d9ad7d52e..f5009a16d8d 100644 --- a/packages/ui/index.tsx +++ b/packages/ui/index.tsx @@ -63,6 +63,7 @@ export * from './src/components/Form' export * from './src/components/Command' // layout +export * from './src/components/LoadingLine' // banners export * from './src/layout/banners' diff --git a/packages/ui/src/components/Command/Command.utils.tsx b/packages/ui/src/components/Command/Command.utils.tsx index ee020395eb9..a7a44b0cc8b 100644 --- a/packages/ui/src/components/Command/Command.utils.tsx +++ b/packages/ui/src/components/Command/Command.utils.tsx @@ -7,7 +7,7 @@ import { DetailedHTMLProps, HTMLAttributes, KeyboardEventHandler } from 'react' import { Modal } from '../Modal' import { ModalProps } from '../Modal/Modal' import { useCommandMenu } from './CommandMenuProvider' -import { LoadingLine } from './LoadingLine' +import { LoadingLine } from '../LoadingLine/LoadingLine' type CommandPrimitiveElement = React.ElementRef type CommandPrimitiveProps = React.ComponentPropsWithoutRef diff --git a/packages/ui/src/components/Command/LoadingLine.tsx b/packages/ui/src/components/LoadingLine/LoadingLine.tsx similarity index 93% rename from packages/ui/src/components/Command/LoadingLine.tsx rename to packages/ui/src/components/LoadingLine/LoadingLine.tsx index 1e590e092b1..afb8522b653 100644 --- a/packages/ui/src/components/Command/LoadingLine.tsx +++ b/packages/ui/src/components/LoadingLine/LoadingLine.tsx @@ -1,5 +1,5 @@ import React from 'react' -import { cn } from './../../lib/utils' +import { cn } from '../../lib/utils' export const LoadingLine = ({ loading }: { loading: boolean }) => { return ( diff --git a/packages/ui/src/components/LoadingLine/index.tsx b/packages/ui/src/components/LoadingLine/index.tsx new file mode 100644 index 00000000000..16a23c1edfe --- /dev/null +++ b/packages/ui/src/components/LoadingLine/index.tsx @@ -0,0 +1 @@ +export * from './LoadingLine' diff --git a/studio/components/interfaces/Integrations/IntegrationPanels.tsx b/studio/components/interfaces/Integrations/IntegrationPanels.tsx index 6817050500b..9cf53225dfa 100644 --- a/studio/components/interfaces/Integrations/IntegrationPanels.tsx +++ b/studio/components/interfaces/Integrations/IntegrationPanels.tsx @@ -6,8 +6,7 @@ import Image from 'next/image' import React from 'react' -import { Badge, Button, IconArrowRight, IconGitHub, IconSquare } from 'ui' -import { cn } from 'ui/src/utils/cn' +import { Badge, Button, IconArrowRight, IconGitHub, IconSquare, cn } from 'ui' const ICON_STROKE_WIDTH = 2 const ICON_SIZE = 14 @@ -50,6 +49,7 @@ const HandleIcon = ({ type }: { type: HandleIconType }) => { } const Avatar = ({ src }: { src: string }) => { + console.log('src of avatar', src) return (
    avatar @@ -80,7 +80,7 @@ const IntegrationInstallation = React.forwardRef */}
    - +
    diff --git a/studio/components/interfaces/Integrations/Integrations-Vercel.constants.ts b/studio/components/interfaces/Integrations/Integrations-Vercel.constants.ts new file mode 100644 index 00000000000..4513c7a4aed --- /dev/null +++ b/studio/components/interfaces/Integrations/Integrations-Vercel.constants.ts @@ -0,0 +1,52 @@ +export const ENV_VAR_KEYS = { + POSTGRES_URL: { + key: 'POSTGRES_URL', + type: 'encrypted', + }, + POSTGRES_PRISMA_URL: { + key: 'POSTGRES_PRISMA_URL', + type: 'encrypted', + }, + POSTGRES_URL_NON_POOLING: { + key: 'POSTGRES_URL_NON_POOLING', + type: 'encrypted', + }, + POSTGRES_USER: { + key: 'POSTGRES_USER', + type: 'encrypted', + }, + POSTGRES_HOST: { + key: 'POSTGRES_HOST', + type: 'encrypted', + }, + POSTGRES_PASSWORD: { + key: 'POSTGRES_PASSWORD', + type: 'encrypted', + }, + POSTGRES_DATABASE: { + key: 'POSTGRES_DATABASE', + type: 'encrypted', + }, + SUPABASE_ANON_KEY: { + key: 'SUPABASE_ANON_KEY', + type: 'encrypted', + }, + SUPABASE_URL: { + key: 'SUPABASE_URL', + type: 'encrypted', + }, + SUPABASE_SERVICE_ROLE_KEY: { + key: 'SUPABASE_SERVICE_ROLE_KEY', + type: 'encrypted', + }, + NEXT_PUBLIC_SUPABASE_ANON_KEY: { + key: 'NEXT_PUBLIC_SUPABASE_ANON_KEY', + type: 'encrypted', + }, + NEXT_PUBLIC_SUPABASE_URL: { + key: 'NEXT_PUBLIC_SUPABASE_URL', + type: 'encrypted', + }, +} as const + +export const ENV_VAR_RAW_KEYS = Object.values(ENV_VAR_KEYS).map((x) => x.key) diff --git a/studio/components/interfaces/Integrations/ProjectLinker.tsx b/studio/components/interfaces/Integrations/ProjectLinker.tsx index 81e9ca7e6d2..8b8ac5f5758 100644 --- a/studio/components/interfaces/Integrations/ProjectLinker.tsx +++ b/studio/components/interfaces/Integrations/ProjectLinker.tsx @@ -1,8 +1,11 @@ -import { databaseIcon, vercelIcon } from 'components/to-be-cleaned/ListIcons' +import { ENV_VAR_RAW_KEYS } from 'components/interfaces/Integrations/Integrations-Vercel.constants' +import { Markdown } from 'components/interfaces/Markdown' +import { vercelIcon } from 'components/to-be-cleaned/ListIcons' import { useIntegrationConnectionsCreateMutation } from 'data/integrations/integration-connections-create-mutation' import { VercelProjectsResponse } from 'data/integrations/integrations-vercel-projects-query' +import { BASE_PATH } from 'lib/constants' import { useState } from 'react' -import { Button, IconArrowRight, IconPlus, IconX, Listbox, Select } from 'ui' +import { Button, IconArrowRight, IconPlus, IconX, Input, Listbox, Select, cn } from 'ui' interface Project { id: string @@ -30,68 +33,26 @@ const ProjectLinker = ({ onCreateConnections: _onCreateConnections, installedConnections, }: ProjectLinkerProps) => { - const [connections, setConnections] = useState( - installedConnections && installedConnections.length > 0 - ? installedConnections?.map((connection) => { - return { - foreign_project_id: connection?.foreign_project_id, - supabase_project_id: connection?.supabase_project_id, - integrationId: INTEGRATION_INTERNAL_ID, - metadata: UNDEFINED_METADATA_VALUE, - } - }) - : [ - { - foreign_project_id: UNDEFINED_SELECT_VALUE, - supabase_project_id: UNDEFINED_SELECT_VALUE, - integrationId: INTEGRATION_INTERNAL_ID, - metadata: UNDEFINED_METADATA_VALUE, - }, - ] - ) + const [supabaseProjectId, setSupabaseProjectId] = useState('') + const [vercelProjectId, setVercelProjectId] = useState('') - console.log('installedConnections', installedConnections) - console.log('connections', connections) - console.log('foreignProjects', foreignProjects) - console.log('supabaseProjects', supabaseProjects) + // function addConnection() { + // setConnections([ + // ...connections, + // { + // foreign_project_id: UNDEFINED_SELECT_VALUE, + // supabase_project_id: UNDEFINED_SELECT_VALUE, + // integrationId: INTEGRATION_INTERNAL_ID, + // metadata: UNDEFINED_METADATA_VALUE, + // }, + // ]) + // } - function onSetForeignProjectId(idx: number, id: string) { - const newConnections = [...connections] - const projectDetails = foreignProjects.filter((x) => x.id === id)[0] - newConnections[idx].metadata = { ...projectDetails } - newConnections[idx].foreign_project_id = id - newConnections[idx].supabaseConfig = { - projectEnvVars: { - write: true, - }, - } - - setConnections(newConnections) - } - - function onSetSupabaseProjectId(idx: number, id: string) { - const newConnections = [...connections] - newConnections[idx].supabase_project_id = id - setConnections(newConnections) - } - - function addConnection() { - setConnections([ - ...connections, - { - foreign_project_id: UNDEFINED_SELECT_VALUE, - supabase_project_id: UNDEFINED_SELECT_VALUE, - integrationId: INTEGRATION_INTERNAL_ID, - metadata: UNDEFINED_METADATA_VALUE, - }, - ]) - } - - function removeConnection(idx: number) { - const newConnections = [...connections] - newConnections.splice(idx, 1) - setConnections(newConnections) - } + // function removeConnection(idx: number) { + // const newConnections = [...connections] + // newConnections.splice(idx, 1) + // setConnections(newConnections) + // } const { mutate: createConnections, isLoading } = useIntegrationConnectionsCreateMutation({ onSuccess() { @@ -100,114 +61,99 @@ const ProjectLinker = ({ }) function onCreateConnections() { + const projectDetails = foreignProjects.filter((x) => x.id === vercelProjectId)[0] + createConnections({ organizationIntegrationId, - connections, + connections: [ + { + foreign_project_id: vercelProjectId, + supabase_project_id: supabaseProjectId, + integrationId: INTEGRATION_INTERNAL_ID, + metadata: { + ...projectDetails, + supabaseConfig: { + projectEnvVars: { + write: true, + }, + }, + }, + }, + ], }) } - console.log(connections) + const Panel = ({ children, className, ...props }: React.HTMLAttributes) => { + return ( +
    + {children} +
    + ) + } return (
    -
      - {connections.map((connection, i) => ( - onSetForeignProjectId(i, id)} - supabaseProjectId={connection.supabase_project_id} - setSupabaseProjectId={(id) => onSetSupabaseProjectId(i, id)} - removeConnection={() => removeConnection(i)} - canRemove={connections.length > 1} - /> - ))} -
    - - - -
    - - -
    - ) -} - -export default ProjectLinker - -interface ProjectLinkerItemProps { - foreignProjects: Project[] - supabaseProjects: Project[] - foreignProjectId: string - setForeignProjectId: (id: string) => void - supabaseProjectId: string - setSupabaseProjectId: (id: string) => void - removeConnection: () => void - canRemove: boolean - connections: any[] -} - -const ProjectLinkerItem = ({ - foreignProjects, - supabaseProjects, - foreignProjectId, - setForeignProjectId, - supabaseProjectId, - setSupabaseProjectId, - removeConnection, - canRemove, -}: ProjectLinkerItemProps) => { - console.log(supabaseProjectId) - return ( -
  • -
    -
    - -
    -
    - -
    -
    +
    + +
    + Supabase +
    setSupabaseProjectId(e)} > - Choose a project + Choose a Supabase project + + {supabaseProjects.map((project) => ( + { + return ( + <> +
    + Supabase +
    + + ) + }} + > + {project.name} +
    + ))} +
    +
    +
    + +
    + {/* integration icon */} + + + +
    + setVercelProjectId(e)} + > + + Choose a Vercel project - {foreignProjects.map((project) => ( ))} -
    - - {canRemove && ( -
    -
  • +
    + +
    +
    +

    + The following enviroment variables will be added: +

    +

    + {ENV_VAR_RAW_KEYS.map((x, idx) => { + return ( + + {x},{' '} + + ) + })} +

    +
    +
    ) } + +export default ProjectLinker diff --git a/studio/components/interfaces/Integrations/ProjectsLinker.tsx b/studio/components/interfaces/Integrations/ProjectsLinker.tsx new file mode 100644 index 00000000000..81e9ca7e6d2 --- /dev/null +++ b/studio/components/interfaces/Integrations/ProjectsLinker.tsx @@ -0,0 +1,245 @@ +import { databaseIcon, vercelIcon } from 'components/to-be-cleaned/ListIcons' +import { useIntegrationConnectionsCreateMutation } from 'data/integrations/integration-connections-create-mutation' +import { VercelProjectsResponse } from 'data/integrations/integrations-vercel-projects-query' +import { useState } from 'react' +import { Button, IconArrowRight, IconPlus, IconX, Listbox, Select } from 'ui' + +interface Project { + id: string + name: string +} + +// to do: move this somewhere +const INTEGRATION_INTERNAL_ID = 1 + +export interface ProjectLinkerProps { + organizationIntegrationId: string + foreignProjects: VercelProjectsResponse[] + supabaseProjects: Project[] + onCreateConnections?: () => void + installedConnections?: any[] +} + +const UNDEFINED_SELECT_VALUE = 'undefined' +const UNDEFINED_METADATA_VALUE = {} + +const ProjectLinker = ({ + organizationIntegrationId, + foreignProjects, + supabaseProjects, + onCreateConnections: _onCreateConnections, + installedConnections, +}: ProjectLinkerProps) => { + const [connections, setConnections] = useState( + installedConnections && installedConnections.length > 0 + ? installedConnections?.map((connection) => { + return { + foreign_project_id: connection?.foreign_project_id, + supabase_project_id: connection?.supabase_project_id, + integrationId: INTEGRATION_INTERNAL_ID, + metadata: UNDEFINED_METADATA_VALUE, + } + }) + : [ + { + foreign_project_id: UNDEFINED_SELECT_VALUE, + supabase_project_id: UNDEFINED_SELECT_VALUE, + integrationId: INTEGRATION_INTERNAL_ID, + metadata: UNDEFINED_METADATA_VALUE, + }, + ] + ) + + console.log('installedConnections', installedConnections) + console.log('connections', connections) + console.log('foreignProjects', foreignProjects) + console.log('supabaseProjects', supabaseProjects) + + function onSetForeignProjectId(idx: number, id: string) { + const newConnections = [...connections] + const projectDetails = foreignProjects.filter((x) => x.id === id)[0] + newConnections[idx].metadata = { ...projectDetails } + newConnections[idx].foreign_project_id = id + newConnections[idx].supabaseConfig = { + projectEnvVars: { + write: true, + }, + } + + setConnections(newConnections) + } + + function onSetSupabaseProjectId(idx: number, id: string) { + const newConnections = [...connections] + newConnections[idx].supabase_project_id = id + setConnections(newConnections) + } + + function addConnection() { + setConnections([ + ...connections, + { + foreign_project_id: UNDEFINED_SELECT_VALUE, + supabase_project_id: UNDEFINED_SELECT_VALUE, + integrationId: INTEGRATION_INTERNAL_ID, + metadata: UNDEFINED_METADATA_VALUE, + }, + ]) + } + + function removeConnection(idx: number) { + const newConnections = [...connections] + newConnections.splice(idx, 1) + setConnections(newConnections) + } + + const { mutate: createConnections, isLoading } = useIntegrationConnectionsCreateMutation({ + onSuccess() { + _onCreateConnections?.() + }, + }) + + function onCreateConnections() { + createConnections({ + organizationIntegrationId, + connections, + }) + } + + console.log(connections) + + return ( +
    +
      + {connections.map((connection, i) => ( + onSetForeignProjectId(i, id)} + supabaseProjectId={connection.supabase_project_id} + setSupabaseProjectId={(id) => onSetSupabaseProjectId(i, id)} + removeConnection={() => removeConnection(i)} + canRemove={connections.length > 1} + /> + ))} +
    + + + +
    + + +
    + ) +} + +export default ProjectLinker + +interface ProjectLinkerItemProps { + foreignProjects: Project[] + supabaseProjects: Project[] + foreignProjectId: string + setForeignProjectId: (id: string) => void + supabaseProjectId: string + setSupabaseProjectId: (id: string) => void + removeConnection: () => void + canRemove: boolean + connections: any[] +} + +const ProjectLinkerItem = ({ + foreignProjects, + supabaseProjects, + foreignProjectId, + setForeignProjectId, + supabaseProjectId, + setSupabaseProjectId, + removeConnection, + canRemove, +}: ProjectLinkerItemProps) => { + console.log(supabaseProjectId) + return ( +
  • +
    +
    + +
    +
    + +
    +
    + + + Choose a project + + + {foreignProjects.map((project) => ( + { + return ( + <> + {!project?.framework ? ( + vercelIcon + ) : ( + {`icon`} + )} + + ) + }} + > + {project.name} + + ))} + +
    + + {canRemove && ( +
    +
  • + ) +} diff --git a/studio/components/interfaces/Markdown.tsx b/studio/components/interfaces/Markdown.tsx index db85f97f4f3..1755f86c843 100644 --- a/studio/components/interfaces/Markdown.tsx +++ b/studio/components/interfaces/Markdown.tsx @@ -1,6 +1,6 @@ import { ReactMarkdownProps } from 'react-markdown/lib/complex-types' import { ReactMarkdown } from 'react-markdown/lib/react-markdown' -import { cn } from 'ui/src/utils/cn' +import { cn } from 'ui' interface Props extends Omit { className?: string diff --git a/studio/components/interfaces/Organization/IntegrationSettings/IntegrationSettings.tsx b/studio/components/interfaces/Organization/IntegrationSettings/IntegrationSettings.tsx index 240cce5449c..e535d1f0577 100644 --- a/studio/components/interfaces/Organization/IntegrationSettings/IntegrationSettings.tsx +++ b/studio/components/interfaces/Organization/IntegrationSettings/IntegrationSettings.tsx @@ -20,9 +20,11 @@ const IntegrationSettings = () => { vercelIntegrations?.map((x) => { let data: any = { ...x } - data['metadata']['account'][ - 'avatar' - ] = `https://vercel.com/api/www/avatar/${data.metadata.account.avatar}?w=48` + + const avatarSrc = data.metadata.account.avatar + ? `https://vercel.com/api/www/avatar/${data.metadata.account.avatar}?s=48` + : `https://vercel.com/api/www/avatar?teamId=${data.metadata.account.team_id}&s=48` + data['metadata']['account']['avatar'] = avatarSrc return data }) diff --git a/studio/components/interfaces/Organization/IntegrationSettings/SidePanelVercelProjectLinker.tsx b/studio/components/interfaces/Organization/IntegrationSettings/SidePanelVercelProjectLinker.tsx index f5c459773b5..be862353f74 100644 --- a/studio/components/interfaces/Organization/IntegrationSettings/SidePanelVercelProjectLinker.tsx +++ b/studio/components/interfaces/Organization/IntegrationSettings/SidePanelVercelProjectLinker.tsx @@ -1,5 +1,5 @@ import { useParams } from 'common' -import ProjectLinker from 'components/interfaces/Integrations/ProjectLinker' +import ProjectLinker from 'components/interfaces/Integrations/ProjectsLinker' import { Markdown } from 'components/interfaces/Markdown' import { useIntegrationsQuery } from 'data/integrations/integrations-query' import { useStore } from 'hooks' diff --git a/studio/components/layouts/IntegrationWindowLayout.tsx b/studio/components/layouts/IntegrationWindowLayout.tsx new file mode 100644 index 00000000000..98adc94be52 --- /dev/null +++ b/studio/components/layouts/IntegrationWindowLayout.tsx @@ -0,0 +1,72 @@ +import { FC } from 'react' +import Link from 'next/link' +import { IconChevronRight, IconX, cn } from 'ui' +import { withAuth, useFlag } from 'hooks' +import { observer } from 'mobx-react-lite' +import { BASE_PATH } from 'lib/constants' +import React from 'react' +import { ScaffoldContainer } from './Scaffold' + +const IntegrationWindowLayout: FC = ({ organization, project, children }) => { + const ongoingIncident = useFlag('ongoingIncident') + const maxHeight = ongoingIncident ? 'calc(100vh - 44px)' : '100vh' + + return ( +
    +
    + {children} +
    + ) +} + +const INTEGRATION_LAYOUT_MAX_WIDTH = '' // 'max-w-[720px]' + +export default withAuth(observer(IntegrationWindowLayout)) + +export const IntegrationWindowLayoutWithoutAuth = observer(IntegrationWindowLayout) + +const Header: FC = ({ organization, project }) => { + let stepNumber = organization ? 1 : project ? 2 : 0 + return ( +
    + +
    +
    +
    + Supabase +
    + +
    + {/* integration icon */} + + + +
    +
    + + Supabase + Vercel Integration Marketplace Connector + +
    +
    +
    + ) +} + +const maxWidthClasses = 'mx-auto w-full max-w-[1600px]' +const paddingClasses = 'px-6 lg:px-14 xl:px-28 2xl:px-32' + +const IntegrationScaffoldContainer = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => { + return
    +}) + +IntegrationScaffoldContainer.displayName = 'IntegrationScaffoldContainer' + +export { IntegrationScaffoldContainer } diff --git a/studio/components/layouts/Scaffold.tsx b/studio/components/layouts/Scaffold.tsx index b3adc0714f7..c0367141f76 100644 --- a/studio/components/layouts/Scaffold.tsx +++ b/studio/components/layouts/Scaffold.tsx @@ -1,5 +1,5 @@ import React from 'react' -import { cn } from 'ui/src/utils/cn' +import { cn } from 'ui' const maxWidthClasses = 'mx-auto w-full max-w-[1600px]' const paddingClasses = 'px-6 lg:px-14 xl:px-28 2xl:px-32' diff --git a/studio/pages/integrations/vercel.tsx b/studio/pages/integrations/vercel.tsx index 049ad06a48e..2133b293df6 100644 --- a/studio/pages/integrations/vercel.tsx +++ b/studio/pages/integrations/vercel.tsx @@ -2,7 +2,7 @@ import { useMemo, useState } from 'react' import { useParams } from 'common' import ProjectLinker from 'components/interfaces/Integrations/ProjectLinker' -import { WizardLayout } from 'components/layouts' + import OrganizationPicker from 'components/ui/OrganizationPicker' import { useVercelIntegrationCreateMutation } from 'data/integrations/vercel-integration-create-mutation' import { useVercelProjectsQuery } from 'data/integrations/integrations-vercel-projects-query' @@ -10,7 +10,12 @@ import { useProjectsQuery } from 'data/projects/projects-query' import { useStore } from 'hooks' import { EMPTY_ARR } from 'lib/void' import { NextPageWithLayout, Organization } from 'types' -import { Button } from 'ui' +import { Alert, Button, IconBook, IconLifeBuoy, Input, LoadingLine, cn } from 'ui' +import IntegrationWindowLayout from 'components/layouts/IntegrationWindowLayout' +import { ScaffoldContainer, ScaffoldDivider, ScaffoldSection } from 'components/layouts/Scaffold' +import { Markdown } from 'components/interfaces/Markdown' +import { BASE_PATH } from 'lib/constants' +import { ENV_VAR_RAW_KEYS } from 'components/interfaces/Integrations/Integrations-Vercel.constants' const VercelIntegration: NextPageWithLayout = () => { const { ui } = useStore() @@ -81,35 +86,95 @@ const VercelIntegration: NextPageWithLayout = () => { const vercelProjects = useMemo(() => vercelProjectsData ?? EMPTY_ARR, [vercelProjectsData]) return ( -
    -

    Vercel Integration

    + <> +
    + + {organizationIntegrationId === null && ( + <> + +

    Install Integration

    + <> + + +
    + +
    + +
    + + + + + + + )} - {organizationIntegrationId === null ? ( - <> - + {organizationIntegrationId !== null && ( + <> + +
    +

    + Link a Supabase project to a Vercel project +

    + +
    + {/* { + if (next) { + window.location.href = next + } + }} + /> */} - - - ) : ( - <> - { - if (next) { - window.location.href = next - } - }} - /> - - )} -
    + { + if (next) { + window.location.href = next + } + }} + /> + + + )} + + + +
    + Docs +
    +
    + Support +
    +
    + ) } -VercelIntegration.getLayout = (page) => {page} +VercelIntegration.getLayout = (page) => {page} export default VercelIntegration From 31091d3fe49282d9bfb263f716be6519267cb180 Mon Sep 17 00:00:00 2001 From: Alaister Young Date: Tue, 20 Jun 2023 21:47:10 +1000 Subject: [PATCH 063/909] chore: move orgs and projects to react-query --- .../interfaces/App/CommandMenuWrapper.tsx | 32 +- .../interfaces/App/RouteValidationWrapper.tsx | 24 +- .../Auth/AuthProvidersForm/ProviderForm.tsx | 20 +- .../AddNewPaymentMethodModal.tsx | 14 +- .../AddOns/ComputeInstanceSidePanel.tsx | 20 +- .../Tier/AddNewPaymentMethodModal.tsx | 11 +- .../Subscription/Tier/ExitSurveyModal.tsx | 20 +- .../Tier/MembersExceedLimitModal.tsx | 6 +- .../Tier/PaymentMethodSelection.tsx | 8 +- .../Tier/SubscriptionPaymentMethod.tsx | 16 +- .../Subscription/Tier/SubscriptionTier.tsx | 13 +- .../Subscription/Tier/TierUpdateSidePanel.tsx | 20 +- .../Database/Backups/BackupItem.tsx | 25 +- .../Database/Backups/BackupsList.tsx | 27 +- .../Database/Backups/PITR/PITRSelection.tsx | 32 +- .../Functions/FunctionsList/FunctionList.tsx | 22 +- .../Database/Hooks/EditHookPanel.tsx | 27 +- .../Database/Hooks/HTTPRequestFields.tsx | 29 +- .../Database/Hooks/HooksList/HookList.tsx | 27 +- .../Functions/EdgeFunctionsListItem.tsx | 17 +- .../Home/ProjectList/ProjectList.tsx | 45 +-- .../BillingAddress/BillingAddress.tsx | 21 +- .../BillingSettings/BillingEmail.tsx | 21 +- .../BillingSettings/BillingSettings.tsx | 38 +-- .../BillingSettings/PaymentMethods.tsx | 45 +-- .../BillingSettings/TaxID/TaxID.tsx | 25 +- .../DeleteOrganizationButton.tsx | 23 +- .../GeneralSettings/GeneralSettings.tsx | 29 +- .../InvoicesSettings/InvoicesSettings.tsx | 17 +- .../NewProject/EmptyPaymentMethodWarning.tsx | 88 +++--- .../NotOrganizationOwnerWarning.tsx | 2 +- .../TeamSettings/TeamSettings.tsx | 20 +- .../Settings/Database/ConnectionPooling.tsx | 292 +++++++++--------- .../CustomDomainConfig/CustomDomainConfig.tsx | 24 +- .../DeleteProjectButton.tsx | 24 +- .../DeleteProjectPanel/DeleteProjectPanel.tsx | 14 +- .../interfaces/Settings/General/General.tsx | 22 +- .../ProjectUpgradeAlert.tsx | 28 +- .../interfaces/Support/SupportForm.tsx | 81 ++--- .../TableGridEditor/GridHeaderActions.tsx | 22 +- .../layouts/AccountLayout/AccountLayout.tsx | 25 +- .../layouts/AuthLayout/AuthLayout.tsx | 15 +- studio/components/layouts/BillingLayout.tsx | 24 +- .../layouts/DatabaseLayout/DatabaseLayout.tsx | 23 +- .../layouts/DocsLayout/DocsLayout.tsx | 19 +- .../layouts/LogsLayout/LogsLayout.tsx | 17 +- .../components/layouts/OrganizationLayout.tsx | 19 +- .../LayoutHeader/LayoutHeader.tsx | 33 +- .../NotificationsPopover/NotificationRow.tsx | 31 +- .../LayoutHeader/OrgDropdown.tsx | 24 +- .../LayoutHeader/ProjectDropdown.tsx | 30 +- .../NavigationBar/NavigationBar.tsx | 34 +- .../layouts/ProjectLayout/ProjectContext.tsx | 42 ++- .../layouts/ProjectLayout/ProjectLayout.tsx | 168 +++++----- .../ProjectLayout/ProjectPausedState.tsx | 27 +- .../layouts/ProjectLayout/RestoringState.tsx | 7 +- .../UpgradingState/UpgradingState.tsx | 7 +- .../layouts/ReportsLayout/ReportsLayout.tsx | 13 +- .../layouts/SettingsLayout/SettingsLayout.tsx | 11 +- .../layouts/StorageLayout/StorageLayout.tsx | 17 +- .../TableEditorLayout/TableEditorLayout.tsx | 29 +- .../Dropdown/OrganizationDropdown.js | 14 +- studio/components/ui/UpgradeToPro.tsx | 16 +- .../data/organizations/organizations-query.ts | 12 +- studio/data/projects/projects-query.ts | 29 +- studio/hooks/index.ts | 10 +- studio/hooks/misc/useCheckPermissions.ts | 32 +- studio/hooks/misc/useSelectedOrganization.ts | 17 + studio/hooks/misc/useSelectedProject.ts | 12 + studio/hooks/misc/withAuth.tsx | 9 +- studio/lib/auth.tsx | 20 +- studio/pages/new/[slug].tsx | 104 +++---- studio/pages/new/index.tsx | 17 +- studio/pages/org/[slug]/billing.tsx | 28 +- studio/pages/org/[slug]/general.tsx | 28 +- studio/pages/org/[slug]/invoices.tsx | 20 +- studio/pages/org/[slug]/team.tsx | 28 +- studio/pages/org/_/[[...routeSlug]].tsx | 23 +- studio/pages/project/[ref]/api/graphiql.tsx | 20 +- studio/pages/project/[ref]/api/index.tsx | 18 +- studio/pages/project/[ref]/auth/providers.tsx | 14 +- studio/pages/project/[ref]/auth/templates.tsx | 16 +- .../project/[ref]/auth/url-configuration.tsx | 21 +- studio/pages/project/[ref]/auth/users.tsx | 4 +- .../project/[ref]/database/backups/pitr.tsx | 34 +- .../[ref]/database/backups/scheduled.tsx | 22 +- .../project/[ref]/database/functions.tsx | 20 +- .../project/[ref]/database/hooks/index.tsx | 33 +- .../pages/project/[ref]/database/tables.tsx | 26 +- .../pages/project/[ref]/database/triggers.tsx | 18 +- studio/pages/project/[ref]/editor/index.tsx | 25 +- studio/pages/project/[ref]/index.tsx | 23 +- studio/pages/project/[ref]/logs/auth-logs.tsx | 15 +- .../project/[ref]/logs/explorer/recent.tsx | 20 +- .../project/[ref]/logs/explorer/saved.tsx | 21 +- .../pages/project/[ref]/reports/database.tsx | 21 +- studio/pages/project/[ref]/reports/index.tsx | 24 +- studio/pages/project/[ref]/settings/api.tsx | 17 +- studio/pages/project/[ref]/settings/auth.tsx | 16 +- .../[ref]/settings/billing/invoices.tsx | 34 +- .../pages/project/[ref]/settings/storage.tsx | 16 +- .../[ref]/storage/buckets/[bucketId].tsx | 22 +- .../project/[ref]/storage/buckets/index.tsx | 18 +- .../pages/project/[ref]/storage/policies.tsx | 19 +- studio/pages/projects.tsx | 17 +- studio/pages/vercel/integrate.tsx | 42 ++- studio/pages/vercel/setupOrg.tsx | 37 ++- 107 files changed, 1528 insertions(+), 1430 deletions(-) create mode 100644 studio/hooks/misc/useSelectedOrganization.ts create mode 100644 studio/hooks/misc/useSelectedProject.ts diff --git a/studio/components/interfaces/App/CommandMenuWrapper.tsx b/studio/components/interfaces/App/CommandMenuWrapper.tsx index c45cae8447f..b08467d59c3 100644 --- a/studio/components/interfaces/App/CommandMenuWrapper.tsx +++ b/studio/components/interfaces/App/CommandMenuWrapper.tsx @@ -1,25 +1,25 @@ -import remarkGfm from 'remark-gfm' -import ReactMarkdown from 'react-markdown' -import { PropsWithChildren, useMemo } from 'react' -import { useParams } from 'common' -import { CommandMenuProvider, markdownComponents } from 'ui' -import { observer } from 'mobx-react-lite' import { PermissionAction } from '@supabase/shared-types/out/constants' +import { useParams } from 'common' +import { PropsWithChildren, useMemo } from 'react' +import { CommandMenuProvider } from 'ui' -import { uuidv4 } from 'lib/helpers' -import { checkPermissions, useFlag, useStore } from 'hooks' -import { createSqlSnippetSkeleton } from '../SQLEditor/SQLEditor.utils' -import { useSqlEditorStateSnapshot } from 'state/sql-editor' import { codeBlock } from 'common-tags' -import { SqlSnippet } from 'data/content/sql-snippets-query' +import { useProjectContext } from 'components/layouts/ProjectLayout/ProjectContext' import { useProjectApiQuery } from 'data/config/project-api-query' +import { SqlSnippet } from 'data/content/sql-snippets-query' import { useEntityDefinitionsQuery } from 'data/database/entity-definitions-query' import { useProfileQuery } from 'data/profile/profile-query' +import { checkPermissions, useFlag, useSelectedOrganization, useStore } from 'hooks' +import { uuidv4 } from 'lib/helpers' +import { useSqlEditorStateSnapshot } from 'state/sql-editor' +import { createSqlSnippetSkeleton } from '../SQLEditor/SQLEditor.utils' -const CommandMenuWrapper = observer(({ children }: PropsWithChildren<{}>) => { +const CommandMenuWrapper = ({ children }: PropsWithChildren<{}>) => { const { ref } = useParams() const { ui } = useStore() - const { opt_in_tags } = ui.selectedOrganization ?? {} + const selectedOrganization = useSelectedOrganization() + const { project: selectedProject } = useProjectContext() + const opt_in_tags = selectedOrganization?.opt_in_tags const snap = useSqlEditorStateSnapshot() const allowCMDKDataOptIn = useFlag('dashboardCmdkDataOptIn') @@ -39,8 +39,8 @@ const CommandMenuWrapper = observer(({ children }: PropsWithChildren<{}>) => { const { data } = useEntityDefinitionsQuery( { - projectRef: ui.selectedProject?.ref, - connectionString: ui.selectedProject?.connectionString, + projectRef: selectedProject?.ref, + connectionString: selectedProject?.connectionString, }, { enabled: isOptedInToAI } ) @@ -105,6 +105,6 @@ const CommandMenuWrapper = observer(({ children }: PropsWithChildren<{}>) => { {children} ) -}) +} export default CommandMenuWrapper diff --git a/studio/components/interfaces/App/RouteValidationWrapper.tsx b/studio/components/interfaces/App/RouteValidationWrapper.tsx index f6ca98bf22d..201e1cd540f 100644 --- a/studio/components/interfaces/App/RouteValidationWrapper.tsx +++ b/studio/components/interfaces/App/RouteValidationWrapper.tsx @@ -1,15 +1,15 @@ -import { FC, useEffect } from 'react' import { observer } from 'mobx-react-lite' import { useRouter } from 'next/router' +import { FC, useEffect } from 'react' +import { useOrganizationsQuery } from 'data/organizations/organizations-query' +import { useProjectsQuery } from 'data/projects/projects-query' import { useStore } from 'hooks' -import { Organization, Project } from 'types' +import useLatest from 'hooks/misc/useLatest' // Ideally these could all be within a _middleware when we use Next 12 const RouteValidationWrapper: FC = ({ children }) => { - const { ui, app } = useStore() - const orgsInitialized = app.organizations.isInitialized - const projectsInitialized = app.projects.isInitialized + const { ui } = useStore() const router = useRouter() const projectRef = router.query.ref @@ -36,14 +36,17 @@ const RouteValidationWrapper: FC = ({ children }) => { return excemptUrls.includes(router?.pathname) } + const { data: organizations, isSuccess: orgsInitialized } = useOrganizationsQuery() + const organizationsRef = useLatest(organizations) + useEffect(() => { // check if current route is excempted from route validation check if (isExceptUrl()) return if (orgsInitialized && orgSlug) { // Check validity of organization that user is trying to access - const organizations = app.organizations.list() - const isValidOrg = organizations.some((org: Organization) => org.slug === orgSlug) + const organizations = organizationsRef.current ?? [] + const isValidOrg = organizations.some((org) => org.slug === orgSlug) if (!isValidOrg) { ui.setNotification({ category: 'error', message: 'This organization does not exist' }) @@ -53,14 +56,17 @@ const RouteValidationWrapper: FC = ({ children }) => { } }, [orgsInitialized]) + const { data: projects, isSuccess: projectsInitialized } = useProjectsQuery() + const projectsRef = useLatest(projects) + useEffect(() => { // check if current route is excempted from route validation check if (isExceptUrl()) return if (projectsInitialized && projectRef) { // Check validity of project that the user is trying to access - const projects = app.projects.list() - const isValidProject = projects.some((project: Project) => project.ref === projectRef) + const projects = projectsRef.current ?? [] + const isValidProject = projects.some((project) => project.ref === projectRef) if (!isValidProject) { ui.setNotification({ category: 'error', message: 'This project does not exist' }) diff --git a/studio/components/interfaces/Auth/AuthProvidersForm/ProviderForm.tsx b/studio/components/interfaces/Auth/AuthProvidersForm/ProviderForm.tsx index 673fdaebd80..43d80b3229c 100644 --- a/studio/components/interfaces/Auth/AuthProvidersForm/ProviderForm.tsx +++ b/studio/components/interfaces/Auth/AuthProvidersForm/ProviderForm.tsx @@ -1,16 +1,17 @@ -import { FC, useState } from 'react' -import ReactMarkdown from 'react-markdown' import * as Tooltip from '@radix-ui/react-tooltip' import { PermissionAction } from '@supabase/shared-types/out/constants' +import { FC, useState } from 'react' +import ReactMarkdown from 'react-markdown' import { Alert, Button, Collapsible, Form, IconCheck, IconChevronUp, Input } from 'ui' -import { useStore, checkPermissions } from 'hooks' -import { BASE_PATH } from 'lib/constants' -import { Provider } from './AuthProvidersForm.types' -import { ProviderCollapsibleClasses } from './AuthProvidersForm.constants' -import FormField from './FormField' -import { useCustomDomainsQuery } from 'data/custom-domains/custom-domains-query' import { useParams } from 'common' +import { useProjectContext } from 'components/layouts/ProjectLayout/ProjectContext' +import { useCustomDomainsQuery } from 'data/custom-domains/custom-domains-query' +import { checkPermissions, useStore } from 'hooks' +import { BASE_PATH } from 'lib/constants' +import { ProviderCollapsibleClasses } from './AuthProvidersForm.constants' +import { Provider } from './AuthProvidersForm.types' +import FormField from './FormField' interface Props { provider: Provider @@ -19,6 +20,7 @@ interface Props { const ProviderForm: FC = ({ provider }) => { const [open, setOpen] = useState(false) const { authConfig, ui } = useStore() + const { project: selectedProject } = useProjectContext() const { ref } = useParams() const doubleNegativeKeys = ['MAILER_AUTOCONFIRM', 'SMS_AUTOCONFIRM'] const canUpdateConfig = checkPermissions(PermissionAction.UPDATE, 'custom_config_gotrue') @@ -160,7 +162,7 @@ const ProviderForm: FC = ({ provider }) => { value={ customDomainData?.customDomain ? `https://${customDomainData.customDomain?.hostname}/auth/v1/callback` - : `https://${ui.selectedProjectRef}.supabase.co/auth/v1/callback` + : `https://${selectedProject?.ref}.supabase.co/auth/v1/callback` } /> diff --git a/studio/components/interfaces/Billing/AddNewPaymentMethodModal/AddNewPaymentMethodModal.tsx b/studio/components/interfaces/Billing/AddNewPaymentMethodModal/AddNewPaymentMethodModal.tsx index d8f6c0335f0..60d8715ba37 100644 --- a/studio/components/interfaces/Billing/AddNewPaymentMethodModal/AddNewPaymentMethodModal.tsx +++ b/studio/components/interfaces/Billing/AddNewPaymentMethodModal/AddNewPaymentMethodModal.tsx @@ -1,15 +1,15 @@ import HCaptcha from '@hcaptcha/react-hcaptcha' -import { loadStripe } from '@stripe/stripe-js' import { Elements } from '@stripe/react-stripe-js' +import { loadStripe } from '@stripe/stripe-js' import { FC, useCallback, useEffect, useState } from 'react' -import { Modal } from 'ui' -import { useStore } from 'hooks' -import { useIsHCaptchaLoaded } from 'stores/hcaptcha-loaded-store' +import { useTheme } from 'common' +import { useSelectedOrganization, useStore } from 'hooks' import { post } from 'lib/common/fetch' import { API_URL, STRIPE_PUBLIC_KEY } from 'lib/constants' +import { useIsHCaptchaLoaded } from 'stores/hcaptcha-loaded-store' +import { Modal } from 'ui' import AddPaymentMethodForm from './AddPaymentMethodForm' -import { useTheme } from 'common' interface Props { visible: boolean @@ -60,10 +60,12 @@ const AddNewPaymentMethodModal: FC = ({ visible, returnUrl, onCancel, onC captchaRef?.resetCaptcha() } + const selectedOrganization = useSelectedOrganization() + const setupIntent = async (hcaptchaToken: string | undefined) => { setIntent(undefined) - const orgSlug = ui.selectedOrganization?.slug ?? '' + const orgSlug = selectedOrganization?.slug ?? '' const intent = await post(`${API_URL}/organizations/${orgSlug}/payments/setup-intent`, { hcaptchaToken, }) diff --git a/studio/components/interfaces/BillingV2/Subscription/AddOns/ComputeInstanceSidePanel.tsx b/studio/components/interfaces/BillingV2/Subscription/AddOns/ComputeInstanceSidePanel.tsx index 43d224f320d..253b3c0e21e 100644 --- a/studio/components/interfaces/BillingV2/Subscription/AddOns/ComputeInstanceSidePanel.tsx +++ b/studio/components/interfaces/BillingV2/Subscription/AddOns/ComputeInstanceSidePanel.tsx @@ -1,15 +1,19 @@ import { PermissionAction } from '@supabase/shared-types/out/constants' +import { useQueryClient } from '@tanstack/react-query' import clsx from 'clsx' +import Link from 'next/link' +import { useRouter } from 'next/router' +import { useEffect, useState } from 'react' + import { useParams, useTheme } from 'common' +import { useProjectContext } from 'components/layouts/ProjectLayout/ProjectContext' +import { invalidateProjectsQuery } from 'data/projects/projects-query' import { useProjectAddonRemoveMutation } from 'data/subscriptions/project-addon-remove-mutation' import { useProjectAddonUpdateMutation } from 'data/subscriptions/project-addon-update-mutation' import { useProjectAddonsQuery } from 'data/subscriptions/project-addons-query' import { useProjectSubscriptionV2Query } from 'data/subscriptions/project-subscription-v2-query' import { checkPermissions, useStore } from 'hooks' -import { BASE_PATH, PROJECT_STATUS } from 'lib/constants' -import Link from 'next/link' -import { useRouter } from 'next/router' -import { useEffect, useState } from 'react' +import { BASE_PATH } from 'lib/constants' import { useSubscriptionPageStateSnapshot } from 'state/subscription-page' import { Alert, Button, IconExternalLink, Modal, Radio, SidePanel } from 'ui' @@ -34,10 +38,12 @@ const COMPUTE_CATEGORY_OPTIONS: { ] const ComputeInstanceSidePanel = () => { - const { ui, app } = useStore() + const queryClient = useQueryClient() + const { ui } = useStore() const router = useRouter() const { ref: projectRef } = useParams() const { isDarkMode } = useTheme() + const { project: selectedProject } = useProjectContext() const [isSubmitting, setIsSubmitting] = useState(false) const [showConfirmationModal, setShowConfirmationModal] = useState(false) @@ -55,7 +61,7 @@ const ComputeInstanceSidePanel = () => { const { mutateAsync: updateAddon } = useProjectAddonUpdateMutation() const { mutateAsync: removeAddon } = useProjectAddonRemoveMutation() - const projectId = ui.selectedProject?.id + const projectId = selectedProject?.id const selectedAddons = addons?.selected_addons ?? [] const availableAddons = addons?.available_addons ?? [] @@ -100,7 +106,7 @@ const ComputeInstanceSidePanel = () => { category: 'success', message: `Successfully updated compute instance to ${selectedCompute?.name}. Your project is currently being restarted to update its instance`, }) - app.onProjectStatusUpdated(projectId, PROJECT_STATUS.RESTORING) + await invalidateProjectsQuery(queryClient) onClose() router.push(`/project/${projectRef}`) } catch (error: any) { diff --git a/studio/components/interfaces/BillingV2/Subscription/Tier/AddNewPaymentMethodModal.tsx b/studio/components/interfaces/BillingV2/Subscription/Tier/AddNewPaymentMethodModal.tsx index b00322e8279..d5383ced140 100644 --- a/studio/components/interfaces/BillingV2/Subscription/Tier/AddNewPaymentMethodModal.tsx +++ b/studio/components/interfaces/BillingV2/Subscription/Tier/AddNewPaymentMethodModal.tsx @@ -1,15 +1,16 @@ import HCaptcha from '@hcaptcha/react-hcaptcha' import { Elements } from '@stripe/react-stripe-js' import { loadStripe } from '@stripe/stripe-js' +import { useCallback, useEffect, useState } from 'react' + +import { useTheme } from 'common' import ShimmeringLoader from 'components/ui/ShimmeringLoader' -import { useStore } from 'hooks' +import { useSelectedOrganization, useStore } from 'hooks' import { post } from 'lib/common/fetch' import { API_URL, STRIPE_PUBLIC_KEY } from 'lib/constants' -import { useCallback, useEffect, useState } from 'react' import { useIsHCaptchaLoaded } from 'stores/hcaptcha-loaded-store' import { Modal } from 'ui' import AddNewPaymentMethodForm from './AddNewPaymentMethodForm' -import { useTheme } from 'common' // [Joshen] Directly brought over from old Billing folder, so we can deprecate that folder easily next time @@ -66,10 +67,12 @@ const AddNewPaymentMethodModal = ({ captchaRef?.resetCaptcha() } + const selectedOrganization = useSelectedOrganization() + const setupIntent = async (hcaptchaToken: string | undefined) => { setIntent(undefined) - const orgSlug = ui.selectedOrganization?.slug ?? '' + const orgSlug = selectedOrganization?.slug ?? '' const intent = await post(`${API_URL}/organizations/${orgSlug}/payments/setup-intent`, { hcaptchaToken, }) diff --git a/studio/components/interfaces/BillingV2/Subscription/Tier/ExitSurveyModal.tsx b/studio/components/interfaces/BillingV2/Subscription/Tier/ExitSurveyModal.tsx index 404045ec10d..bafd70e66d2 100644 --- a/studio/components/interfaces/BillingV2/Subscription/Tier/ExitSurveyModal.tsx +++ b/studio/components/interfaces/BillingV2/Subscription/Tier/ExitSurveyModal.tsx @@ -1,17 +1,19 @@ import HCaptcha from '@hcaptcha/react-hcaptcha' -import * as Tooltip from '@radix-ui/react-tooltip' +import { useQueryClient } from '@tanstack/react-query' +import { includes, without } from 'lodash' +import { useRouter } from 'next/router' +import { useReducer, useRef, useState } from 'react' + import { useParams } from 'common' +import { invalidateProjectsQuery } from 'data/projects/projects-query' import { useProjectAddonsQuery } from 'data/subscriptions/project-addons-query' import { useProjectSubscriptionUpdateMutation } from 'data/subscriptions/project-subscription-update-mutation' import { useFlag, useStore } from 'hooks' import { post } from 'lib/common/fetch' -import { API_URL, PROJECT_STATUS } from 'lib/constants' -import { includes, without } from 'lodash' -import { useRouter } from 'next/router' -import { useReducer, useRef, useState } from 'react' +import { API_URL } from 'lib/constants' import { Button, Input, Modal } from 'ui' -import ProjectUpdateDisabledTooltip from '../../ProjectUpdateDisabledTooltip' import { CANCELLATION_REASONS } from '../../Billing.constants' +import ProjectUpdateDisabledTooltip from '../../ProjectUpdateDisabledTooltip' export interface ExitSurveyModalProps { visible: boolean @@ -21,7 +23,8 @@ export interface ExitSurveyModalProps { // [Joshen] For context - Exit survey is only when going to free plan from a paid plan const ExitSurveyModal = ({ visible, onClose }: ExitSurveyModalProps) => { - const { ui, app } = useStore() + const queryClient = useQueryClient() + const { ui } = useStore() const { ref: projectRef } = useParams() const captchaRef = useRef(null) const router = useRouter() @@ -35,7 +38,6 @@ const ExitSurveyModal = ({ visible, onClose }: ExitSurveyModalProps) => { const { data: addons } = useProjectAddonsQuery({ projectRef }) const { mutateAsync: updateSubscriptionTier } = useProjectSubscriptionUpdateMutation() - const projectId = ui.selectedProject?.id ?? -1 const subscriptionAddons = addons?.selected_addons ?? [] const hasComputeInstance = subscriptionAddons.find((addon) => addon.type === 'compute_instance') @@ -118,7 +120,7 @@ const ExitSurveyModal = ({ visible, onClose }: ExitSurveyModalProps) => { : 'Successfully downgraded project to the free plan', }) if (hasComputeInstance) { - app.onProjectStatusUpdated(projectId, PROJECT_STATUS.RESTORING) + await invalidateProjectsQuery(queryClient) router.push(`/project/${projectRef}`) } onClose(true) diff --git a/studio/components/interfaces/BillingV2/Subscription/Tier/MembersExceedLimitModal.tsx b/studio/components/interfaces/BillingV2/Subscription/Tier/MembersExceedLimitModal.tsx index 82d3c770205..501e9259135 100644 --- a/studio/components/interfaces/BillingV2/Subscription/Tier/MembersExceedLimitModal.tsx +++ b/studio/components/interfaces/BillingV2/Subscription/Tier/MembersExceedLimitModal.tsx @@ -1,5 +1,5 @@ import { useFreeProjectLimitCheckQuery } from 'data/organizations/free-project-limit-check-query' -import { useStore } from 'hooks' +import { useSelectedOrganization } from 'hooks' import { Button, Modal } from 'ui' export interface MembersExceedLimitModalProps { @@ -8,8 +8,8 @@ export interface MembersExceedLimitModalProps { } const MembersExceedLimitModal = ({ visible, onClose }: MembersExceedLimitModalProps) => { - const { ui } = useStore() - const slug = ui.selectedOrganization?.slug + const selectedOrganization = useSelectedOrganization() + const slug = selectedOrganization?.slug const { data: membersExceededLimit } = useFreeProjectLimitCheckQuery({ slug }) return ( diff --git a/studio/components/interfaces/BillingV2/Subscription/Tier/PaymentMethodSelection.tsx b/studio/components/interfaces/BillingV2/Subscription/Tier/PaymentMethodSelection.tsx index 6c499a3b6c5..f0716fe15f5 100644 --- a/studio/components/interfaces/BillingV2/Subscription/Tier/PaymentMethodSelection.tsx +++ b/studio/components/interfaces/BillingV2/Subscription/Tier/PaymentMethodSelection.tsx @@ -1,12 +1,13 @@ import * as Tooltip from '@radix-ui/react-tooltip' import { PermissionAction } from '@supabase/shared-types/out/constants' +import { useEffect, useMemo, useState } from 'react' + import { useParams } from 'common' import { useOrganizationCustomerProfileQuery } from 'data/organizations/organization-customer-profile-query' import { useOrganizationPaymentMethodsQuery } from 'data/organizations/organization-payment-methods-query' -import { checkPermissions, useStore } from 'hooks' +import { checkPermissions, useSelectedOrganization, useStore } from 'hooks' import { BASE_PATH } from 'lib/constants' import { getURL } from 'lib/helpers' -import { useEffect, useMemo, useState } from 'react' import { Button, IconAlertCircle, IconCreditCard, IconLoader, IconPlus, Listbox } from 'ui' import AddNewPaymentMethodModal from './AddNewPaymentMethodModal' @@ -21,7 +22,8 @@ const PaymentMethodSelection = ({ }: PaymentMethodSelectionProps) => { const { ui } = useStore() const { ref: projectRef } = useParams() - const slug = ui.selectedOrganization?.slug + const selectedOrganization = useSelectedOrganization() + const slug = selectedOrganization?.slug const [showAddNewPaymentMethodModal, setShowAddNewPaymentMethodModal] = useState(false) const { diff --git a/studio/components/interfaces/BillingV2/Subscription/Tier/SubscriptionPaymentMethod.tsx b/studio/components/interfaces/BillingV2/Subscription/Tier/SubscriptionPaymentMethod.tsx index 1b1a26c910f..5d976888e09 100644 --- a/studio/components/interfaces/BillingV2/Subscription/Tier/SubscriptionPaymentMethod.tsx +++ b/studio/components/interfaces/BillingV2/Subscription/Tier/SubscriptionPaymentMethod.tsx @@ -1,18 +1,19 @@ -import Panel from 'components/ui/Panel' -import { ProjectSubscriptionResponse } from 'data/subscriptions/project-subscription-v2-query' -import { Button, IconCreditCard, Modal } from 'ui' import * as Tooltip from '@radix-ui/react-tooltip' +import { PermissionAction } from '@supabase/shared-types/out/constants' import { useState } from 'react' -import PaymentMethodSelection from './PaymentMethodSelection' + import { useParams } from 'common' +import Panel from 'components/ui/Panel' import { SubscriptionTier, updateSubscriptionTier, } from 'data/subscriptions/project-subscription-update-mutation' -import { checkPermissions, useStore } from 'hooks' +import { ProjectSubscriptionResponse } from 'data/subscriptions/project-subscription-v2-query' +import { checkPermissions, useSelectedOrganization, useStore } from 'hooks' import { BASE_PATH } from 'lib/constants' -import { PermissionAction } from '@supabase/shared-types/out/constants' import Link from 'next/link' +import { Button, IconCreditCard, Modal } from 'ui' +import PaymentMethodSelection from './PaymentMethodSelection' export interface SubscriptionTierProps { subscription: ProjectSubscriptionResponse @@ -26,7 +27,8 @@ const SubscriptionPaymentMethod = ({ const { ref: projectRef } = useParams() const { ui } = useStore() - const currentOrgSlug = ui.selectedOrganization?.slug + const selectedOrganization = useSelectedOrganization() + const currentOrgSlug = selectedOrganization?.slug const canUpdatePaymentMethod = checkPermissions( PermissionAction.BILLING_WRITE, diff --git a/studio/components/interfaces/BillingV2/Subscription/Tier/SubscriptionTier.tsx b/studio/components/interfaces/BillingV2/Subscription/Tier/SubscriptionTier.tsx index a26e3eec82b..5a6e59c89cb 100644 --- a/studio/components/interfaces/BillingV2/Subscription/Tier/SubscriptionTier.tsx +++ b/studio/components/interfaces/BillingV2/Subscription/Tier/SubscriptionTier.tsx @@ -1,22 +1,23 @@ +import dayjs from 'dayjs' +import Link from 'next/link' + import { useParams } from 'common' import ShimmeringLoader from 'components/ui/ShimmeringLoader' import SparkBar from 'components/ui/SparkBar' import { useProjectSubscriptionV2Query } from 'data/subscriptions/project-subscription-v2-query' -import dayjs from 'dayjs' +import { useFlag, useSelectedOrganization } from 'hooks' import { useSubscriptionPageStateSnapshot } from 'state/subscription-page' import { Alert, Button, IconExternalLink } from 'ui' -import TierUpdateSidePanel from './TierUpdateSidePanel' -import Link from 'next/link' -import { useFlag, useStore } from 'hooks' import ProjectUpdateDisabledTooltip from '../../ProjectUpdateDisabledTooltip' import SubscriptionPaymentMethod from './SubscriptionPaymentMethod' +import TierUpdateSidePanel from './TierUpdateSidePanel' export interface SubscriptionTierProps {} const SubscriptionTier = ({}: SubscriptionTierProps) => { const { ref: projectRef } = useParams() - const { ui } = useStore() - const orgSlug = ui.selectedOrganization?.slug ?? '' + const selectedOrganization = useSelectedOrganization() + const orgSlug = selectedOrganization?.slug ?? '' const snap = useSubscriptionPageStateSnapshot() const projectUpdateDisabled = useFlag('disableProjectCreationAndUpdate') const { data: subscription, isLoading, refetch } = useProjectSubscriptionV2Query({ projectRef }) diff --git a/studio/components/interfaces/BillingV2/Subscription/Tier/TierUpdateSidePanel.tsx b/studio/components/interfaces/BillingV2/Subscription/Tier/TierUpdateSidePanel.tsx index d2b685bb27c..62f9a2aa6bc 100644 --- a/studio/components/interfaces/BillingV2/Subscription/Tier/TierUpdateSidePanel.tsx +++ b/studio/components/interfaces/BillingV2/Subscription/Tier/TierUpdateSidePanel.tsx @@ -1,28 +1,30 @@ +import * as Tooltip from '@radix-ui/react-tooltip' +import { PermissionAction } from '@supabase/shared-types/out/constants' import clsx from 'clsx' +import Link from 'next/link' +import { useEffect, useState } from 'react' + import { useParams } from 'common' import ShimmeringLoader from 'components/ui/ShimmeringLoader' import { useFreeProjectLimitCheckQuery } from 'data/organizations/free-project-limit-check-query' import { useProjectAddonsQuery } from 'data/subscriptions/project-addons-query' import { useProjectPlansQuery } from 'data/subscriptions/project-plans-query' import { useProjectSubscriptionUpdateMutation } from 'data/subscriptions/project-subscription-update-mutation' -import { checkPermissions, useStore } from 'hooks' -import Link from 'next/link' -import { useEffect, useState } from 'react' +import { useProjectSubscriptionV2Query } from 'data/subscriptions/project-subscription-v2-query' +import { checkPermissions, useSelectedOrganization, useStore } from 'hooks' +import { PRICING_TIER_PRODUCT_IDS } from 'lib/constants' +import { plans as subscriptionsPlans } from 'shared-data/plans' import { useSubscriptionPageStateSnapshot } from 'state/subscription-page' import { Alert, Button, IconCheck, IconExternalLink, Modal, SidePanel } from 'ui' import EnterpriseCard from './EnterpriseCard' import ExitSurveyModal from './ExitSurveyModal' import MembersExceedLimitModal from './MembersExceedLimitModal' import PaymentMethodSelection from './PaymentMethodSelection' -import { plans as subscriptionsPlans } from 'shared-data/plans' -import { useProjectSubscriptionV2Query } from 'data/subscriptions/project-subscription-v2-query' -import { PRICING_TIER_PRODUCT_IDS } from 'lib/constants' -import { PermissionAction } from '@supabase/shared-types/out/constants' -import * as Tooltip from '@radix-ui/react-tooltip' const TierUpdateSidePanel = () => { const { ui } = useStore() - const slug = ui.selectedOrganization?.slug + const selectedOrganization = useSelectedOrganization() + const slug = selectedOrganization?.slug const { ref: projectRef } = useParams() const [isSubmitting, setIsSubmitting] = useState(false) diff --git a/studio/components/interfaces/Database/Backups/BackupItem.tsx b/studio/components/interfaces/Database/Backups/BackupItem.tsx index e17c909e7e6..09196074c80 100644 --- a/studio/components/interfaces/Database/Backups/BackupItem.tsx +++ b/studio/components/interfaces/Database/Backups/BackupItem.tsx @@ -1,14 +1,15 @@ -import dayjs from 'dayjs' -import { FC, useState } from 'react' -import { useRouter } from 'next/router' -import { observer } from 'mobx-react-lite' -import { Badge, Button, IconDownload } from 'ui' import { PermissionAction } from '@supabase/shared-types/out/constants' +import { useQueryClient } from '@tanstack/react-query' +import dayjs from 'dayjs' +import { useRouter } from 'next/router' +import { FC, useState } from 'react' -import { useStore, checkPermissions } from 'hooks' -import { API_URL, PROJECT_STATUS } from 'lib/constants' -import { post } from 'lib/common/fetch' import { confirmAlert } from 'components/to-be-cleaned/ModalsDeprecated/ConfirmModal' +import { invalidateProjectsQuery } from 'data/projects/projects-query' +import { checkPermissions, useStore } from 'hooks' +import { post } from 'lib/common/fetch' +import { API_URL } from 'lib/constants' +import { Badge, Button, IconDownload } from 'ui' interface Props { projectRef: string @@ -17,13 +18,13 @@ interface Props { } const BackupItem: FC = ({ projectRef, backup, index }) => { + const queryClient = useQueryClient() const router = useRouter() - const { app, ui } = useStore() + const { ui } = useStore() const [isDownloading, setDownloading] = useState(false) const [isRestoring, setRestoring] = useState(false) - const projectId = ui.selectedProject?.id ?? -1 const canTriggerScheduledBackups = checkPermissions( PermissionAction.INFRA_EXECUTE, 'queue_job.restore.prepare' @@ -34,7 +35,7 @@ const BackupItem: FC = ({ projectRef, backup, index }) => { try { post(`${API_URL}/database/${projectRef}/backups/restore`, backup).then(() => { setTimeout(() => { - app.onProjectStatusUpdated(projectId, PROJECT_STATUS.RESTORING) + invalidateProjectsQuery(queryClient) ui.setNotification({ category: 'success', message: `Restoring database back to ${dayjs(backup.inserted_at).format( @@ -132,4 +133,4 @@ const BackupItem: FC = ({ projectRef, backup, index }) => { ) } -export default observer(BackupItem) +export default BackupItem diff --git a/studio/components/interfaces/Database/Backups/BackupsList.tsx b/studio/components/interfaces/Database/Backups/BackupsList.tsx index 59e94d83ed1..e0deec29580 100644 --- a/studio/components/interfaces/Database/Backups/BackupsList.tsx +++ b/studio/components/interfaces/Database/Backups/BackupsList.tsx @@ -1,23 +1,24 @@ -import { FC } from 'react' -import { observer } from 'mobx-react-lite' - -import { useStore, checkPermissions } from 'hooks' -import Loading from 'components/ui/Loading' -import UpgradeToPro from 'components/ui/UpgradeToPro' -import Panel from 'components/ui/Panel' - -import BackupItem from './BackupItem' -import BackupsError from './BackupsError' -import BackupsEmpty from './BackupsEmpty' import { PermissionAction } from '@supabase/shared-types/out/constants' +import { observer } from 'mobx-react-lite' +import { FC } from 'react' + +import { useProjectContext } from 'components/layouts/ProjectLayout/ProjectContext' import InformationBox from 'components/ui/InformationBox' +import Loading from 'components/ui/Loading' +import Panel from 'components/ui/Panel' +import UpgradeToPro from 'components/ui/UpgradeToPro' +import { checkPermissions, useStore } from 'hooks' import { IconAlertCircle, IconClock } from 'ui' +import BackupItem from './BackupItem' +import BackupsEmpty from './BackupsEmpty' +import BackupsError from './BackupsError' interface Props {} const BackupsList: FC = ({}) => { - const { ui, backups } = useStore() - const projectRef = ui.selectedProject?.ref || 'default' + const { project: selectedProject } = useProjectContext() + const { backups } = useStore() + const projectRef = selectedProject?.ref || 'default' const canTriggerScheduledBackups = checkPermissions( PermissionAction.INFRA_EXECUTE, 'queue_job.restore.prepare' diff --git a/studio/components/interfaces/Database/Backups/PITR/PITRSelection.tsx b/studio/components/interfaces/Database/Backups/PITR/PITRSelection.tsx index eb1ecceb2f0..ea30c520405 100644 --- a/studio/components/interfaces/Database/Backups/PITR/PITRSelection.tsx +++ b/studio/components/interfaces/Database/Backups/PITR/PITRSelection.tsx @@ -1,35 +1,37 @@ -import dayjs from 'dayjs' +import * as Tooltip from '@radix-ui/react-tooltip' +import { useQueryClient } from '@tanstack/react-query' import { format } from 'date-fns' +import dayjs from 'dayjs' +import { useRouter } from 'next/router' import { useState } from 'react' import DatePicker from 'react-datepicker' -import { Button, Modal, IconChevronLeft, IconChevronRight, IconHelpCircle, Alert } from 'ui' -import * as Tooltip from '@radix-ui/react-tooltip' +import { Alert, Button, IconChevronLeft, IconChevronRight, IconHelpCircle, Modal } from 'ui' import { useParams } from 'common' -import { useStore } from 'hooks' -import { post } from 'lib/common/fetch' -import { API_URL, PROJECT_STATUS } from 'lib/constants' import { FormHeader, FormPanel } from 'components/ui/Forms' import InformationBox from 'components/ui/InformationBox' -import TimeInput from './TimeInput' -import TimezoneSelection from './TimezoneSelection' +import { invalidateProjectsQuery } from 'data/projects/projects-query' +import { useStore } from 'hooks' +import { post } from 'lib/common/fetch' +import { API_URL } from 'lib/constants' +import BackupsEmpty from '../BackupsEmpty' import { Timezone } from './PITR.types' -import PITRStatus from './PITRStatus' import { constrainDateToRange, formatNumberToTwoDigits, getClientTimezone, getDatesBetweenRange, } from './PITR.utils' -import { useRouter } from 'next/router' -import BackupsEmpty from '../BackupsEmpty' +import PITRStatus from './PITRStatus' +import TimeInput from './TimeInput' +import TimezoneSelection from './TimezoneSelection' -const PITRSelection = ({}) => { +const PITRSelection = () => { + const queryClient = useQueryClient() const router = useRouter() const { ref } = useParams() - const { app, ui, backups } = useStore() - const projectId = ui.selectedProject?.id ?? -1 + const { ui, backups } = useStore() const [selectedTimezone, setSelectedTimezone] = useState(getClientTimezone()) @@ -114,7 +116,7 @@ const PITRSelection = ({}) => { } else { setTimeout(() => { setShowConfirmation(false) - app.onProjectStatusUpdated(projectId, PROJECT_STATUS.RESTORING) + invalidateProjectsQuery(queryClient) router.push(`/project/${projectRef}`) }, 3000) } diff --git a/studio/components/interfaces/Database/Functions/FunctionsList/FunctionList.tsx b/studio/components/interfaces/Database/Functions/FunctionsList/FunctionList.tsx index f08cdfde803..025e271ef86 100644 --- a/studio/components/interfaces/Database/Functions/FunctionsList/FunctionList.tsx +++ b/studio/components/interfaces/Database/Functions/FunctionsList/FunctionList.tsx @@ -1,13 +1,14 @@ -import { FC } from 'react' -import { useRouter } from 'next/router' -import { includes } from 'lodash' -import { Button, Dropdown, IconEdit3, IconFileText, IconMoreVertical, IconTrash } from 'ui' -import { observer } from 'mobx-react-lite' import * as Tooltip from '@radix-ui/react-tooltip' import { PermissionAction } from '@supabase/shared-types/out/constants' +import { includes, noop } from 'lodash' +import { observer } from 'mobx-react-lite' +import { useRouter } from 'next/router' +import { FC } from 'react' -import { checkPermissions, useStore } from 'hooks' +import { useProjectContext } from 'components/layouts/ProjectLayout/ProjectContext' import Table from 'components/to-be-cleaned/Table' +import { checkPermissions, useStore } from 'hooks' +import { Button, Dropdown, IconEdit3, IconFileText, IconMoreVertical, IconTrash } from 'ui' interface Props { schema: string @@ -19,18 +20,19 @@ interface Props { const FunctionList: FC = ({ schema, filterString, - editFunction = () => {}, - deleteFunction = () => {}, + editFunction = noop, + deleteFunction = noop, }) => { + const { project: selectedProject } = useProjectContext() const router = useRouter() - const { ui, meta } = useStore() + const { meta } = useStore() const functions = meta.functions.list((fn: any) => !meta.excludedSchemas.includes(fn.schema)) const filteredFunctions = functions.filter((x: any) => includes(x.name.toLowerCase(), filterString.toLowerCase()) ) const _functions = filteredFunctions.filter((x) => x.schema == schema) const isApiDocumentAvailable = schema == 'public' - const projectRef = ui.selectedProject?.ref + const projectRef = selectedProject?.ref const canUpdateFunctions = checkPermissions(PermissionAction.TENANT_SQL_ADMIN_WRITE, 'functions') diff --git a/studio/components/interfaces/Database/Hooks/EditHookPanel.tsx b/studio/components/interfaces/Database/Hooks/EditHookPanel.tsx index 4525d36feeb..6d5ad116972 100644 --- a/studio/components/interfaces/Database/Hooks/EditHookPanel.tsx +++ b/studio/components/interfaces/Database/Hooks/EditHookPanel.tsx @@ -1,24 +1,23 @@ -import Image from 'next/image' -import { useState, useRef, useEffect, MutableRefObject } from 'react' import { PostgresTable, PostgresTrigger } from '@supabase/postgres-meta' -import { Button, SidePanel, Form, Input, Listbox, Checkbox, Radio, Badge, Modal } from 'ui' +import Image from 'next/image' +import { MutableRefObject, useEffect, useRef, useState } from 'react' -import { useStore } from 'hooks' import { useParams } from 'common/hooks' -import { tryParseJson, uuidv4 } from 'lib/helpers' -import HTTPRequestFields from './HTTPRequestFields' -import { isValidHttpUrl } from './Hooks.utils' -import { AVAILABLE_WEBHOOK_TYPES, HOOK_EVENTS } from './Hooks.constants' -import ConfirmationModal from 'components/ui/ConfirmationModal' -import { FormSection, FormSectionLabel, FormSectionContent } from 'components/ui/Forms' import { useProjectContext } from 'components/layouts/ProjectLayout/ProjectContext' - +import ConfirmationModal from 'components/ui/ConfirmationModal' +import { FormSection, FormSectionContent, FormSectionLabel } from 'components/ui/Forms' +import { useDatabaseTriggerCreateMutation } from 'data/database-triggers/database-trigger-create-mutation' +import { useDatabaseTriggerUpdateMutation } from 'data/database-triggers/database-trigger-update-transaction-mutation' import { EdgeFunctionsResponse, useEdgeFunctionsQuery, } from 'data/edge-functions/edge-functions-query' -import { useDatabaseTriggerCreateMutation } from 'data/database-triggers/database-trigger-create-mutation' -import { useDatabaseTriggerUpdateMutation } from 'data/database-triggers/database-trigger-update-transaction-mutation' +import { useStore } from 'hooks' +import { tryParseJson, uuidv4 } from 'lib/helpers' +import { Button, Checkbox, Form, Input, Listbox, Modal, Radio, SidePanel } from 'ui' +import HTTPRequestFields from './HTTPRequestFields' +import { AVAILABLE_WEBHOOK_TYPES, HOOK_EVENTS } from './Hooks.constants' +import { isValidHttpUrl } from './Hooks.utils' export interface EditHookPanelProps { visible: boolean @@ -52,7 +51,7 @@ const EditHookPanel = ({ visible, selectedHook, onClose }: EditHookPanelProps) = const { mutateAsync: updateDatabaseTrigger } = useDatabaseTriggerUpdateMutation() const tables = meta.tables.list().sort((a, b) => (a.schema > b.schema ? 0 : -1)) - const restUrl = ui.selectedProject?.restUrl + const restUrl = project?.restUrl const restUrlTld = new URL(restUrl as string).hostname.split('.').pop() const isEdgeFunction = (url: string) => diff --git a/studio/components/interfaces/Database/Hooks/HTTPRequestFields.tsx b/studio/components/interfaces/Database/Hooks/HTTPRequestFields.tsx index 0eb915a6b8a..cc4cf1919cc 100644 --- a/studio/components/interfaces/Database/Hooks/HTTPRequestFields.tsx +++ b/studio/components/interfaces/Database/Hooks/HTTPRequestFields.tsx @@ -1,22 +1,23 @@ +import clsx from 'clsx' import Link from 'next/link' + +import { useParams } from 'common/hooks' +import { useProjectContext } from 'components/layouts/ProjectLayout/ProjectContext' +import { FormSection, FormSectionContent, FormSectionLabel } from 'components/ui/Forms' +import { useProjectApiQuery } from 'data/config/project-api-query' +import { useEdgeFunctionsQuery } from 'data/edge-functions/edge-functions-query' +import { uuidv4 } from 'lib/helpers' import { Button, - Listbox, - Input, - SidePanel, - IconTrash, - IconPlus, Dropdown, IconChevronDown, + IconPlus, + IconTrash, + Input, + Listbox, + SidePanel, } from 'ui' -import { FormSection, FormSectionLabel, FormSectionContent } from 'components/ui/Forms' import { HTTPArgument } from './EditHookPanel' -import { useStore } from 'hooks' -import { useParams } from 'common/hooks' -import { useEdgeFunctionsQuery } from 'data/edge-functions/edge-functions-query' -import clsx from 'clsx' -import { uuidv4 } from 'lib/helpers' -import { useProjectApiQuery } from 'data/config/project-api-query' interface HTTPRequestFieldsProps { type: 'http_request' | 'supabase_function' @@ -43,7 +44,7 @@ const HTTPRequestFields = ({ onUpdateParameter, onRemoveParameter, }: HTTPRequestFieldsProps) => { - const { ui } = useStore() + const { project: selectedProject } = useProjectContext() const { ref } = useParams() const { data: settings } = useProjectApiQuery({ projectRef: ref }) const { data: functions } = useEdgeFunctionsQuery({ projectRef: ref }) @@ -100,7 +101,7 @@ const HTTPRequestFields = ({ ) : type === 'supabase_function' && edgeFunctions.length > 0 ? ( {edgeFunctions.map((fn) => { - const restUrl = ui.selectedProject?.restUrl + const restUrl = selectedProject?.restUrl const restUrlTld = new URL(restUrl as string).hostname.split('.').pop() const functionUrl = `https://${ref}.functions.supabase.${restUrlTld}/${fn.slug}` diff --git a/studio/components/interfaces/Database/Hooks/HooksList/HookList.tsx b/studio/components/interfaces/Database/Hooks/HooksList/HookList.tsx index c1754672183..b92c5d3735a 100644 --- a/studio/components/interfaces/Database/Hooks/HooksList/HookList.tsx +++ b/studio/components/interfaces/Database/Hooks/HooksList/HookList.tsx @@ -1,17 +1,16 @@ -import Image from 'next/image' -import { FC } from 'react' -import { includes } from 'lodash' -import { observer } from 'mobx-react-lite' import * as Tooltip from '@radix-ui/react-tooltip' import { PermissionAction } from '@supabase/shared-types/out/constants' -import { Badge, Button, Dropdown, IconMoreVertical, IconTrash, IconEdit3 } from 'ui' +import { includes, noop } from 'lodash' +import Image from 'next/image' +import { FC } from 'react' -import { checkPermissions, useStore } from 'hooks' import { useParams } from 'common/hooks' -import { BASE_PATH } from 'lib/constants' -import Table from 'components/to-be-cleaned/Table' import { useProjectContext } from 'components/layouts/ProjectLayout/ProjectContext' +import Table from 'components/to-be-cleaned/Table' import { useDatabaseHooks } from 'data/database-triggers/database-triggers-query' +import { checkPermissions } from 'hooks' +import { BASE_PATH } from 'lib/constants' +import { Badge, Button, Dropdown, IconEdit3, IconMoreVertical, IconTrash } from 'ui' interface Props { schema: string @@ -20,13 +19,7 @@ interface Props { deleteHook: (hook: any) => void } -const HookList: FC = ({ - schema, - filterString, - editHook = () => {}, - deleteHook = () => {}, -}) => { - const { ui } = useStore() +const HookList: FC = ({ schema, filterString, editHook = noop, deleteHook = noop }) => { const { ref } = useParams() const { project } = useProjectContext() const { data: hooks } = useDatabaseHooks({ @@ -34,7 +27,7 @@ const HookList: FC = ({ connectionString: project?.connectionString, }) - const restUrl = ui.selectedProject?.restUrl + const restUrl = project?.restUrl const restUrlTld = new URL(restUrl as string).hostname.split('.').pop() const filteredHooks = (hooks ?? []).filter( @@ -137,4 +130,4 @@ const HookList: FC = ({ ) } -export default observer(HookList) +export default HookList diff --git a/studio/components/interfaces/Functions/EdgeFunctionsListItem.tsx b/studio/components/interfaces/Functions/EdgeFunctionsListItem.tsx index cea9b1e2fb2..4237781074c 100644 --- a/studio/components/interfaces/Functions/EdgeFunctionsListItem.tsx +++ b/studio/components/interfaces/Functions/EdgeFunctionsListItem.tsx @@ -1,14 +1,13 @@ -import dayjs from 'dayjs' -import { FC, useState } from 'react' -import { useRouter } from 'next/router' -import { observer } from 'mobx-react-lite' -import { IconCheck, IconClipboard } from 'ui' import * as Tooltip from '@radix-ui/react-tooltip' +import dayjs from 'dayjs' +import { useRouter } from 'next/router' +import { FC, useState } from 'react' -import { useStore } from 'hooks' import { useParams } from 'common/hooks' +import { useProjectContext } from 'components/layouts/ProjectLayout/ProjectContext' import Table from 'components/to-be-cleaned/Table' import { EdgeFunctionsResponse } from 'data/edge-functions/edge-functions-query' +import { IconCheck, IconClipboard } from 'ui' interface Props { function: EdgeFunctionsResponse @@ -16,12 +15,12 @@ interface Props { const EdgeFunctionsListItem: FC = ({ function: item }) => { const router = useRouter() - const { ui } = useStore() const { ref } = useParams() const [isCopied, setIsCopied] = useState(false) + const { project } = useProjectContext() // get the .co or .net TLD from the restUrl - const restUrl = ui.selectedProject?.restUrl + const restUrl = project?.restUrl const restUrlTld = new URL(restUrl as string).hostname.split('.').pop() const functionUrl = `https://${ref}.supabase.${restUrlTld}/functions/v1/${item.slug}` @@ -103,4 +102,4 @@ const EdgeFunctionsListItem: FC = ({ function: item }) => { ) } -export default observer(EdgeFunctionsListItem) +export default EdgeFunctionsListItem diff --git a/studio/components/interfaces/Home/ProjectList/ProjectList.tsx b/studio/components/interfaces/Home/ProjectList/ProjectList.tsx index 4f26eeb077b..0b040a4c051 100644 --- a/studio/components/interfaces/Home/ProjectList/ProjectList.tsx +++ b/studio/components/interfaces/Home/ProjectList/ProjectList.tsx @@ -1,25 +1,28 @@ -import Link from 'next/link' -import { FC } from 'react' -import { Badge, Button, IconPlus } from 'ui' +import { PermissionAction } from '@supabase/shared-types/out/constants' +import { groupBy } from 'lodash' import { observer } from 'mobx-react-lite' +import Link from 'next/link' +import { Badge, Button, IconPlus } from 'ui' -import { IS_PLATFORM } from 'lib/constants' +import { useOverdueInvoicesQuery } from 'data/invoices/invoices-overdue-query' +import { useOrganizationsQuery } from 'data/organizations/organizations-query' +import { useProjectsQuery } from 'data/projects/projects-query' import { checkPermissions, useStore } from 'hooks' -import { Organization, Project } from 'types' +import { IS_PLATFORM } from 'lib/constants' import { makeRandomString } from 'lib/helpers' import ProjectCard from './ProjectCard' import ShimmeringCard from './ShimmeringCard' -import { PermissionAction } from '@supabase/shared-types/out/constants' -import { useOverdueInvoicesQuery } from 'data/invoices/invoices-overdue-query' -interface Props { +export interface ProjectListProps { rewriteHref?: (projectRef: string) => string } -const ProjectList: FC = ({ rewriteHref }) => { - const { app, ui } = useStore() - const { organizations, projects } = app - const { isLoading: isLoadingProjects } = projects +const ProjectList = ({ rewriteHref }: ProjectListProps) => { + const { ui } = useStore() + const { data: organizations } = useOrganizationsQuery() + const { data: allProjects, isLoading: isLoadingProjects } = useProjectsQuery() + + const projectsByOrg = groupBy(allProjects, 'organization_id') const { data: allOverdueInvoices } = useOverdueInvoicesQuery({ enabled: IS_PLATFORM }) @@ -27,12 +30,11 @@ const ProjectList: FC = ({ rewriteHref }) => { return ( <> - {organizations.list().map((org: Organization) => { + {organizations?.map((org) => { const { id, name, slug, subscription_id } = org - const sortedProjects = projects.list( - ({ organization_id }: Project) => organization_id == id - ) - const isEmpty = sortedProjects?.length == 0 + const projects = projectsByOrg[id] + + const isEmpty = !projects || projects.length === 0 const canReadProjects = checkPermissions(PermissionAction.READ, 'projects', undefined, id) const overdueInvoices = (allOverdueInvoices || []).filter((it) => it.organization_id === id) @@ -40,7 +42,10 @@ const ProjectList: FC = ({ rewriteHref }) => { return (
    -

    {name}{subscription_id ? V2 : <>}

    +

    + {name} + {subscription_id ? V2 : <>} +

    {!!overdueInvoices.length && (
    @@ -65,7 +70,7 @@ const ProjectList: FC = ({ rewriteHref }) => {

    You need additional permissions to view projects from this organization

    - Contact your organization owner or adminstrator for assistance. + Contact your organization owner or administrator for assistance.

    @@ -86,7 +91,7 @@ const ProjectList: FC = ({ rewriteHref }) => {
    ) : ( - sortedProjects?.map((project: Project) => ( + projects?.map((project) => ( onAddressUpdated: (address: any) => void } -const BillingAddress: FC = ({ loading, address, onAddressUpdated }) => { +const BillingAddress = ({ loading, address, onAddressUpdated }: BillingAddressProps) => { const { ui } = useStore() - const orgSlug = ui.selectedOrganization?.slug ?? '' + const selectedOrganization = useSelectedOrganization() + const orgSlug = selectedOrganization?.slug ?? '' const { city, country, line1, line2, postal_code, state } = address const canReadBillingAddress = checkPermissions(PermissionAction.BILLING_READ, 'stripe.customer') diff --git a/studio/components/interfaces/Organization/BillingSettings/BillingEmail.tsx b/studio/components/interfaces/Organization/BillingSettings/BillingEmail.tsx index b5279fd1753..7fa6c9c14b0 100644 --- a/studio/components/interfaces/Organization/BillingSettings/BillingEmail.tsx +++ b/studio/components/interfaces/Organization/BillingSettings/BillingEmail.tsx @@ -1,16 +1,21 @@ -import { useEffect } from 'react' -import { Form, Input } from 'ui' import { PermissionAction } from '@supabase/shared-types/out/constants' -import { useStore, checkPermissions } from 'hooks' +import { useQueryClient } from '@tanstack/react-query' +import { useEffect } from 'react' + import { useParams } from 'common/hooks' -import { API_URL } from 'lib/constants' -import { patch } from 'lib/common/fetch' import { FormActions, FormPanel, FormSection, FormSectionContent } from 'components/ui/Forms' +import { invalidateOrganizationsQuery } from 'data/organizations/organizations-query' +import { checkPermissions, useSelectedOrganization, useStore } from 'hooks' +import { patch } from 'lib/common/fetch' +import { API_URL } from 'lib/constants' +import { Form, Input } from 'ui' const BillingEmail = () => { - const { app, ui } = useStore() + const queryClient = useQueryClient() + const { ui } = useStore() const { slug } = useParams() - const { name, billing_email } = ui.selectedOrganization ?? {} + const selectedOrganization = useSelectedOrganization() + const { name, billing_email } = selectedOrganization ?? {} const formId = 'org-billing-email' const initialValues = { @@ -45,7 +50,7 @@ const BillingEmail = () => { initialValues: { billing_email }, }) - app.onOrgUpdated(response) + invalidateOrganizationsQuery(queryClient) ui.setNotification({ category: 'success', message: 'Successfully saved settings', diff --git a/studio/components/interfaces/Organization/BillingSettings/BillingSettings.tsx b/studio/components/interfaces/Organization/BillingSettings/BillingSettings.tsx index 0e700116ef2..2bb878fd30c 100644 --- a/studio/components/interfaces/Organization/BillingSettings/BillingSettings.tsx +++ b/studio/components/interfaces/Organization/BillingSettings/BillingSettings.tsx @@ -1,25 +1,25 @@ -import { useState, useEffect } from 'react' -import { observer } from 'mobx-react-lite' +import { useEffect, useState } from 'react' -import { Project } from 'types' -import { useStore } from 'hooks' import { useParams } from 'common/hooks' -import { API_URL } from 'lib/constants' +import { useProjectsQuery } from 'data/projects/projects-query' +import { useSelectedOrganization, useStore } from 'hooks' import { get } from 'lib/common/fetch' - -import ProjectsSummary from './ProjectsSummary' +import { API_URL } from 'lib/constants' +import BillingAddress from './BillingAddress/BillingAddress' +import BillingEmail from './BillingEmail' import CreditBalance from './CreditBalance' import PaymentMethods from './PaymentMethods' -import BillingAddress from './BillingAddress/BillingAddress' +import ProjectsSummary from './ProjectsSummary' import TaxID from './TaxID/TaxID' -import BillingEmail from './BillingEmail' const BillingSettings = () => { - const { app, ui } = useStore() + const { ui } = useStore() const { slug } = useParams() - const organization = ui.selectedOrganization - const projects = app.projects.list((x: Project) => x.organization_id == organization?.id) || [] + const organization = useSelectedOrganization() + const { data: allProjects } = useProjectsQuery() + const projects = + allProjects?.filter((project) => project.organization_id == organization?.id) ?? [] const [customer, setCustomer] = useState(null) const [isLoadingCustomer, setIsLoadingCustomer] = useState(false) @@ -39,12 +39,6 @@ const BillingSettings = () => { ? customerBalance.toString().replace('-', '') : customerBalance - useEffect(() => { - getCustomerProfile() - getPaymentMethods() - getTaxIds() - }, [slug]) - const getCustomerProfile = async () => { try { setIsLoadingCustomer(true) @@ -93,6 +87,12 @@ const BillingSettings = () => { } } + useEffect(() => { + getCustomerProfile() + getPaymentMethods() + getTaxIds() + }, [slug]) + return (
    @@ -124,4 +124,4 @@ const BillingSettings = () => { ) } -export default observer(BillingSettings) +export default BillingSettings diff --git a/studio/components/interfaces/Organization/BillingSettings/PaymentMethods.tsx b/studio/components/interfaces/Organization/BillingSettings/PaymentMethods.tsx index c77d8b7fa7f..d74754969c9 100644 --- a/studio/components/interfaces/Organization/BillingSettings/PaymentMethods.tsx +++ b/studio/components/interfaces/Organization/BillingSettings/PaymentMethods.tsx @@ -1,28 +1,28 @@ -import { FC, useState } from 'react' -import { - Dropdown, - IconPlus, - IconCreditCard, - Button, - Input, - Badge, - Modal, - Alert, - IconMoreHorizontal, - IconX, -} from 'ui' import * as Tooltip from '@radix-ui/react-tooltip' import { PermissionAction } from '@supabase/shared-types/out/constants' +import { useState } from 'react' +import { + Alert, + Badge, + Button, + Dropdown, + IconCreditCard, + IconMoreHorizontal, + IconPlus, + IconX, + Input, + Modal, +} from 'ui' -import { checkPermissions, useStore } from 'hooks' -import { delete_, patch } from 'lib/common/fetch' -import { getURL } from 'lib/helpers' -import { API_URL, BASE_PATH } from 'lib/constants' -import Panel from 'components/ui/Panel' import { AddNewPaymentMethodModal } from 'components/interfaces/Billing' import NoPermission from 'components/ui/NoPermission' +import Panel from 'components/ui/Panel' +import { checkPermissions, useSelectedOrganization, useStore } from 'hooks' +import { delete_, patch } from 'lib/common/fetch' +import { API_URL, BASE_PATH } from 'lib/constants' +import { getURL } from 'lib/helpers' -interface Props { +export interface PaymentMethodsProps { loading: boolean defaultPaymentMethod: string paymentMethods: any[] @@ -31,16 +31,17 @@ interface Props { onPaymentMethodAdded: () => void } -const PaymentMethods: FC = ({ +const PaymentMethods = ({ loading, defaultPaymentMethod, paymentMethods, onDefaultMethodUpdated, onPaymentMethodsDeleted, onPaymentMethodAdded, -}) => { +}: PaymentMethodsProps) => { const { ui } = useStore() - const orgSlug = ui.selectedOrganization?.slug ?? '' + const selectedOrganization = useSelectedOrganization() + const orgSlug = selectedOrganization?.slug ?? '' const [selectedMethodForDefault, setSelectedMethodForDefault] = useState() const [selectedMethodToDelete, setSelectedMethodToDelete] = useState() diff --git a/studio/components/interfaces/Organization/BillingSettings/TaxID/TaxID.tsx b/studio/components/interfaces/Organization/BillingSettings/TaxID/TaxID.tsx index 02a33a6333e..0a7dc257ebd 100644 --- a/studio/components/interfaces/Organization/BillingSettings/TaxID/TaxID.tsx +++ b/studio/components/interfaces/Organization/BillingSettings/TaxID/TaxID.tsx @@ -1,18 +1,18 @@ -import { FC, useEffect, useState } from 'react' -import { isEqual } from 'lodash' -import { Input, Button, IconPlus, IconX, Listbox } from 'ui' import { PermissionAction } from '@supabase/shared-types/out/constants' +import { isEqual } from 'lodash' +import { useEffect, useState } from 'react' +import { Button, IconPlus, IconX, Input, Listbox } from 'ui' -import { checkPermissions, useFlag, useStore } from 'hooks' -import { uuidv4 } from 'lib/helpers' -import { post, delete_ } from 'lib/common/fetch' -import { API_URL } from 'lib/constants' -import Panel from 'components/ui/Panel' -import { StripeTaxId, TAX_IDS } from './TaxID.constants' import NoPermission from 'components/ui/NoPermission' +import Panel from 'components/ui/Panel' +import { checkPermissions, useSelectedOrganization, useStore } from 'hooks' +import { delete_, post } from 'lib/common/fetch' +import { API_URL } from 'lib/constants' +import { uuidv4 } from 'lib/helpers' +import { StripeTaxId, TAX_IDS } from './TaxID.constants' import { sanitizeTaxID } from './TaxID.utils' -interface Props { +export interface TaxIDProps { loading: boolean taxIds: any[] onTaxIdsUpdated: (taxIds: any) => void @@ -21,9 +21,10 @@ interface Props { // Stripe recommends to delete tax ids and create new ones to update // https://stripe.com/docs/billing/customer/tax-ids -const TaxID: FC = ({ loading, taxIds, onTaxIdsUpdated }) => { +const TaxID = ({ loading, taxIds, onTaxIdsUpdated }: TaxIDProps) => { const { ui } = useStore() - const slug = ui.selectedOrganization?.slug ?? '' + const selectedOrganization = useSelectedOrganization() + const slug = selectedOrganization?.slug ?? '' const [isSaving, setIsSaving] = useState(false) const [errors, setErrors] = useState([]) diff --git a/studio/components/interfaces/Organization/GeneralSettings/DeleteOrganizationButton.tsx b/studio/components/interfaces/Organization/GeneralSettings/DeleteOrganizationButton.tsx index c166fad4e7e..0f101f4871f 100644 --- a/studio/components/interfaces/Organization/GeneralSettings/DeleteOrganizationButton.tsx +++ b/studio/components/interfaces/Organization/GeneralSettings/DeleteOrganizationButton.tsx @@ -1,18 +1,21 @@ -import { useState, useContext } from 'react' -import { useRouter } from 'next/router' -import { observer } from 'mobx-react-lite' -import { Button, Form, Modal, Input } from 'ui' import { PermissionAction } from '@supabase/shared-types/out/constants' +import { useQueryClient } from '@tanstack/react-query' +import { useRouter } from 'next/router' +import { useState } from 'react' +import { Button, Form, Input, Modal } from 'ui' -import { useStore, checkPermissions } from 'hooks' +import { invalidateOrganizationsQuery } from 'data/organizations/organizations-query' +import { checkPermissions, useSelectedOrganization, useStore } from 'hooks' import { delete_ } from 'lib/common/fetch' import { API_URL } from 'lib/constants' -const DeleteOrganizationButton = observer(() => { +const DeleteOrganizationButton = () => { const router = useRouter() - const { app, ui } = useStore() + const queryClient = useQueryClient() + const { ui } = useStore() - const { slug: orgSlug, name: orgName } = ui.selectedOrganization || {} + const selectedOrganization = useSelectedOrganization() + const { slug: orgSlug, name: orgName } = selectedOrganization ?? {} const [isOpen, setIsOpen] = useState(false) const [value, setValue] = useState('') @@ -47,7 +50,7 @@ const DeleteOrganizationButton = observer(() => { }) setSubmitting(false) } else { - app.onOrgDeleted(ui.selectedOrganization) + invalidateOrganizationsQuery(queryClient) setSubmitting(false) router.push('/') ui.setNotification({ @@ -119,6 +122,6 @@ const DeleteOrganizationButton = observer(() => { ) -}) +} export default DeleteOrganizationButton diff --git a/studio/components/interfaces/Organization/GeneralSettings/GeneralSettings.tsx b/studio/components/interfaces/Organization/GeneralSettings/GeneralSettings.tsx index 6849fe6a8b8..1cd1f294b58 100644 --- a/studio/components/interfaces/Organization/GeneralSettings/GeneralSettings.tsx +++ b/studio/components/interfaces/Organization/GeneralSettings/GeneralSettings.tsx @@ -1,16 +1,12 @@ +import { PermissionAction } from '@supabase/shared-types/out/constants' +import { useQueryClient } from '@tanstack/react-query' import clsx from 'clsx' +import { observer } from 'mobx-react-lite' import Link from 'next/link' import { useEffect, useState } from 'react' -import { observer } from 'mobx-react-lite' -import { Collapsible, Form, IconChevronRight, IconHelpCircle, Input, Toggle } from 'ui' -import { PermissionAction } from '@supabase/shared-types/out/constants' +import { Collapsible, Form, IconChevronRight, Input, Toggle } from 'ui' -import { useStore, checkPermissions, useFlag } from 'hooks' import { useParams } from 'common/hooks' -import { API_URL } from 'lib/constants' -import { patch } from 'lib/common/fetch' - -import OrganizationDeletePanel from './OrganizationDeletePanel' import { FormActions, FormPanel, @@ -18,12 +14,19 @@ import { FormSectionContent, FormSectionLabel, } from 'components/ui/Forms' +import { invalidateOrganizationsQuery } from 'data/organizations/organizations-query' +import { checkPermissions, useFlag, useSelectedOrganization, useStore } from 'hooks' +import { patch } from 'lib/common/fetch' +import { API_URL } from 'lib/constants' +import OrganizationDeletePanel from './OrganizationDeletePanel' const GeneralSettings = () => { - const { app, ui } = useStore() + const queryClient = useQueryClient() + const { ui } = useStore() const { slug } = useParams() const [open, setOpen] = useState(false) - const { name, opt_in_tags } = ui.selectedOrganization ?? {} + const selectedOrganization = useSelectedOrganization() + const { name, opt_in_tags } = selectedOrganization ?? {} const formId = 'org-general-settings' const isOptedIntoAi = opt_in_tags?.includes('AI_SQL_GENERATOR_OPT_IN') @@ -49,7 +52,7 @@ const GeneralSettings = () => { const optInTags = values.isOptedIntoAi ? ['AI_SQL_GENERATOR_OPT_IN'] : [] const response = await patch(`${API_URL}/organizations/${slug}`, { name: values.name, - billing_email: ui.selectedOrganization?.billing_email ?? '', + billing_email: selectedOrganization?.billing_email ?? '', ...(allowCMDKDataOptIn && { opt_in_tags: optInTags }), }) @@ -60,7 +63,7 @@ const GeneralSettings = () => { }) } else { resetForm({ values, initialValues: values }) - app.onOrgUpdated(response) + invalidateOrganizationsQuery(queryClient) ui.setNotification({ category: 'success', message: 'Successfully saved settings' }) } setSubmitting(false) @@ -78,7 +81,7 @@ const GeneralSettings = () => { useEffect(() => { const values = { name: name ?? '', isOptedIntoAi } resetForm({ values, initialValues: values }) - }, [ui.selectedOrganization?.slug]) + }, [selectedOrganization?.slug]) return ( { const [count, setCount] = useState(0) const [invoices, setInvoices] = useState([]) - const { stripe_customer_id } = ui.selectedOrganization ?? {} + const selectedOrganization = useSelectedOrganization() + const { stripe_customer_id } = selectedOrganization ?? {} const offset = (page - 1) * PAGE_LIMIT const canReadInvoices = checkPermissions(PermissionAction.READ, 'invoices') diff --git a/studio/components/interfaces/Organization/NewProject/EmptyPaymentMethodWarning.tsx b/studio/components/interfaces/Organization/NewProject/EmptyPaymentMethodWarning.tsx index 7a94402fe18..74ae3d7735f 100644 --- a/studio/components/interfaces/Organization/NewProject/EmptyPaymentMethodWarning.tsx +++ b/studio/components/interfaces/Organization/NewProject/EmptyPaymentMethodWarning.tsx @@ -1,53 +1,53 @@ import { useState } from 'react' -import { observer } from 'mobx-react-lite' + +import { AddNewPaymentMethodModal } from 'components/interfaces/Billing' +import InformationBox from 'components/ui/InformationBox' +import { useSelectedOrganization } from 'hooks' +import { getURL } from 'lib/helpers' import { Button, IconAlertCircle } from 'ui' -import { useStore } from 'hooks' -import { getURL } from 'lib/helpers' -import InformationBox from 'components/ui/InformationBox' -import { AddNewPaymentMethodModal } from 'components/interfaces/Billing' +const EmptyPaymentMethodWarning = ({ + onPaymentMethodAdded, +}: { + onPaymentMethodAdded: () => void +}) => { + const selectedOrganization = useSelectedOrganization() + const slug = selectedOrganization?.slug -const EmptyPaymentMethodWarning = observer( - ({ onPaymentMethodAdded }: { onPaymentMethodAdded: () => void }) => { - const { ui } = useStore() - const slug = ui.selectedOrganization?.slug + const [showAddPaymentMethodModal, setShowAddPaymentMethodModal] = useState(false) - const [showAddPaymentMethodModal, setShowAddPaymentMethodModal] = useState(false) + const onLocalPaymentMethodAdded = () => { + setShowAddPaymentMethodModal(false) - const onLocalPaymentMethodAdded = () => { - setShowAddPaymentMethodModal(false) - - return onPaymentMethodAdded() - } - - return ( -
    - } - defaultVisibility={true} - hideCollapse - title="Your organization has no payment methods" - description={ -
    -

    - You need to add a payment method for your organization before creating a paid - project. -

    - -
    - } - /> - setShowAddPaymentMethodModal(false)} - onConfirm={() => onLocalPaymentMethodAdded()} - /> -
    - ) + return onPaymentMethodAdded() } -) + + return ( +
    + } + defaultVisibility={true} + hideCollapse + title="Your organization has no payment methods" + description={ +
    +

    + You need to add a payment method for your organization before creating a paid project. +

    + +
    + } + /> + setShowAddPaymentMethodModal(false)} + onConfirm={() => onLocalPaymentMethodAdded()} + /> +
    + ) +} export default EmptyPaymentMethodWarning diff --git a/studio/components/interfaces/Organization/NewProject/NotOrganizationOwnerWarning.tsx b/studio/components/interfaces/Organization/NewProject/NotOrganizationOwnerWarning.tsx index a80724fb25c..61bc8a39cff 100644 --- a/studio/components/interfaces/Organization/NewProject/NotOrganizationOwnerWarning.tsx +++ b/studio/components/interfaces/Organization/NewProject/NotOrganizationOwnerWarning.tsx @@ -13,7 +13,7 @@ const NotOrganizationOwnerWarning = () => { description={

    - Contact your organization owner or adminstrator to create a new project. + Contact your organization owner or administrator to create a new project.

    } diff --git a/studio/components/interfaces/Organization/TeamSettings/TeamSettings.tsx b/studio/components/interfaces/Organization/TeamSettings/TeamSettings.tsx index 7752b2f122f..fcb76dfc531 100644 --- a/studio/components/interfaces/Organization/TeamSettings/TeamSettings.tsx +++ b/studio/components/interfaces/Organization/TeamSettings/TeamSettings.tsx @@ -1,26 +1,26 @@ -import { useState } from 'react' -import { observer } from 'mobx-react-lite' -import { Button, Input, IconSearch } from 'ui' import * as Tooltip from '@radix-ui/react-tooltip' +import { useState } from 'react' +import { Button, IconSearch, Input } from 'ui' -import { useStore } from 'hooks' import { useParams } from 'common/hooks' +import { confirmAlert } from 'components/to-be-cleaned/ModalsDeprecated/ConfirmModal' +import { useOrganizationDetailQuery } from 'data/organizations/organization-detail-query' +import { useOrganizationRolesQuery } from 'data/organizations/organization-roles-query' +import { useProfileQuery } from 'data/profile/profile-query' +import { useSelectedOrganization, useStore } from 'hooks' import { delete_ } from 'lib/common/fetch' import { API_URL } from 'lib/constants' import InviteMemberButton from './InviteMemberButton' import MembersView from './MembersView' import { getRolesManagementPermissions, hasMultipleOwners } from './TeamSettings.utils' -import { confirmAlert } from 'components/to-be-cleaned/ModalsDeprecated/ConfirmModal' -import { useOrganizationDetailQuery } from 'data/organizations/organization-detail-query' -import { useOrganizationRolesQuery } from 'data/organizations/organization-roles-query' -import { useProfileQuery } from 'data/profile/profile-query' const TeamSettings = () => { const { ui } = useStore() const { slug } = useParams() const { data: profile } = useProfileQuery() - const isOwner = ui.selectedOrganization?.is_owner + const selectedOrganization = useSelectedOrganization() + const isOwner = selectedOrganization?.is_owner const { data: detailData } = useOrganizationDetailQuery({ slug }) const { data: rolesData } = useOrganizationRolesQuery({ slug }) @@ -128,4 +128,4 @@ const TeamSettings = () => { ) } -export default observer(TeamSettings) +export default TeamSettings diff --git a/studio/components/interfaces/Settings/Database/ConnectionPooling.tsx b/studio/components/interfaces/Settings/Database/ConnectionPooling.tsx index b9d6b89725c..abc87975cdc 100644 --- a/studio/components/interfaces/Settings/Database/ConnectionPooling.tsx +++ b/studio/components/interfaces/Settings/Database/ConnectionPooling.tsx @@ -1,24 +1,24 @@ -import { FC, useState, useEffect, Fragment } from 'react' -import { observer } from 'mobx-react-lite' -import { checkPermissions, useStore } from 'hooks' -import { pluckObjectFields } from 'lib/helpers' -import Loading from 'components/ui/Loading' -import Panel from 'components/ui/Panel' -import Divider from 'components/ui/Divider' -import { AutoField } from 'uniforms-bootstrap4' -import { API_URL } from 'lib/constants' -import { patch } from 'lib/common/fetch' -import ToggleField from 'components/to-be-cleaned/forms/ToggleField' -import SchemaFormPanel from 'components/to-be-cleaned/forms/SchemaFormPanel' -import { Input } from 'ui' -import ShimmeringLoader from 'components/ui/ShimmeringLoader' import { PermissionAction } from '@supabase/shared-types/out/constants' +import { FC, Fragment, useEffect, useState } from 'react' +import { AutoField } from 'uniforms-bootstrap4' + +import { useProjectContext } from 'components/layouts/ProjectLayout/ProjectContext' +import SchemaFormPanel from 'components/to-be-cleaned/forms/SchemaFormPanel' +import Divider from 'components/ui/Divider' +import Panel from 'components/ui/Panel' +import ShimmeringLoader from 'components/ui/ShimmeringLoader' +import { checkPermissions, useStore } from 'hooks' +import { patch } from 'lib/common/fetch' +import { API_URL } from 'lib/constants' +import { pluckObjectFields } from 'lib/helpers' +import { Input } from 'ui' interface Props {} const ConnectionPooling: FC = () => { - const { ui, app } = useStore() - const projectRef = ui.selectedProject?.ref ?? 'default' + const { app } = useStore() + const { project } = useProjectContext() + const projectRef = project?.ref ?? 'default' const [isLoading, setIsLoading] = useState(true) const [poolingConfiguration, setPoolingConfiguration] = useState() @@ -103,7 +103,7 @@ const ConnectionPooling: FC = () => { ) } -export default observer(ConnectionPooling) +export default ConnectionPooling interface ConfigProps { projectRef: string @@ -122,139 +122,137 @@ interface ConfigProps { } } -export const PgbouncerConfig: FC = observer( - ({ projectRef, bouncerInfo, connectionInfo }) => { - const { ui } = useStore() +export const PgbouncerConfig: FC = ({ projectRef, bouncerInfo, connectionInfo }) => { + const { ui } = useStore() - const canUpdateConnectionPoolingConfiguration = checkPermissions( - PermissionAction.UPDATE, - 'projects' - ) + const canUpdateConnectionPoolingConfiguration = checkPermissions( + PermissionAction.UPDATE, + 'projects' + ) - const [updates, setUpdates] = useState({ - pool_mode: bouncerInfo.pool_mode || 'transaction', - default_pool_size: bouncerInfo.default_pool_size || '', - ignore_startup_parameters: bouncerInfo.ignore_startup_parameters || '', - pgbouncer_enabled: bouncerInfo.pgbouncer_enabled, - }) + const [updates, setUpdates] = useState({ + pool_mode: bouncerInfo.pool_mode || 'transaction', + default_pool_size: bouncerInfo.default_pool_size || '', + ignore_startup_parameters: bouncerInfo.ignore_startup_parameters || '', + pgbouncer_enabled: bouncerInfo.pgbouncer_enabled, + }) - const updateConfig = async (updatedConfig: any) => { - try { - const response = await patch(`${API_URL}/projects/${projectRef}/config/pgbouncer`, { - pgbouncer_enabled: updatedConfig.pgbouncer_enabled, - default_pool_size: updatedConfig.default_pool_size, - ignore_startup_parameters: updatedConfig.ignore_startup_parameters, - pool_mode: updatedConfig.pool_mode, - max_client_conn: updatedConfig.max_client_conn, - }) - if (response.error) { - throw response.error - } else { - setUpdates({ ...response }) - ui.setNotification({ category: 'success', message: 'Successfully saved settings' }) - } - } catch (error: any) { - ui.setNotification({ - category: 'error', - message: `Failed to update config: ${error.message}`, - }) + const updateConfig = async (updatedConfig: any) => { + try { + const response = await patch(`${API_URL}/projects/${projectRef}/config/pgbouncer`, { + pgbouncer_enabled: updatedConfig.pgbouncer_enabled, + default_pool_size: updatedConfig.default_pool_size, + ignore_startup_parameters: updatedConfig.ignore_startup_parameters, + pool_mode: updatedConfig.pool_mode, + max_client_conn: updatedConfig.max_client_conn, + }) + if (response.error) { + throw response.error + } else { + setUpdates({ ...response }) + ui.setNotification({ category: 'success', message: 'Successfully saved settings' }) } + } catch (error: any) { + ui.setNotification({ + category: 'error', + message: `Failed to update config: ${error.message}`, + }) } - - const formSchema = { - properties: { - pool_mode: { - title: 'Pool Mode', - type: 'string', - options: [ - { - label: 'Transaction', - value: 'transaction', - }, - { - label: 'Session', - value: 'session', - }, - ], - }, - ignore_startup_parameters: { - title: 'Ignore Startup Parameters', - type: 'string', - help: 'Defaults are either blank or "extra_float_digits"', - }, - }, - required: ['pool_mode'], - type: 'object', - } - - return ( -
    - ) } -) + + const formSchema = { + properties: { + pool_mode: { + title: 'Pool Mode', + type: 'string', + options: [ + { + label: 'Transaction', + value: 'transaction', + }, + { + label: 'Session', + value: 'session', + }, + ], + }, + ignore_startup_parameters: { + title: 'Ignore Startup Parameters', + type: 'string', + help: 'Defaults are either blank or "extra_float_digits"', + }, + }, + required: ['pool_mode'], + type: 'object', + } + + return ( + + ) +} diff --git a/studio/components/interfaces/Settings/General/CustomDomainConfig/CustomDomainConfig.tsx b/studio/components/interfaces/Settings/General/CustomDomainConfig/CustomDomainConfig.tsx index e4c254536a5..0f5bbc5360f 100644 --- a/studio/components/interfaces/Settings/General/CustomDomainConfig/CustomDomainConfig.tsx +++ b/studio/components/interfaces/Settings/General/CustomDomainConfig/CustomDomainConfig.tsx @@ -1,29 +1,25 @@ import Link from 'next/link' -import { observer } from 'mobx-react-lite' -import { IconAlertCircle } from 'ui' -import { useStore } from 'hooks' import { useParams } from 'common/hooks' -import { useProjectApiQuery } from 'data/config/project-api-query' -import { - CustomDomainResponse, - useCustomDomainsQuery, -} from 'data/custom-domains/custom-domains-query' -import Panel from 'components/ui/Panel' +import { useProjectContext } from 'components/layouts/ProjectLayout/ProjectContext' import { FormHeader } from 'components/ui/Forms' +import Panel from 'components/ui/Panel' import UpgradeToPro from 'components/ui/UpgradeToPro' +import { useProjectApiQuery } from 'data/config/project-api-query' +import { useCustomDomainsQuery } from 'data/custom-domains/custom-domains-query' +import { PRICING_TIER_PRODUCT_IDS } from 'lib/constants' +import { IconAlertCircle } from 'ui' +import CustomDomainActivate from './CustomDomainActivate' import CustomDomainDelete from './CustomDomainDelete' import CustomDomainVerify from './CustomDomainVerify' -import CustomDomainActivate from './CustomDomainActivate' import CustomDomainsConfigureHostname from './CustomDomainsConfigureHostname' import CustomDomainsShimmerLoader from './CustomDomainsShimmerLoader' -import { PRICING_TIER_PRODUCT_IDS } from 'lib/constants' const CustomDomainConfig = () => { - const { ui } = useStore() + const { project } = useProjectContext() const { ref } = useParams() - const tier = ui.selectedProject?.subscription_tier + const tier = project?.subscription_tier const { isLoading: isSettingsLoading, data: settings } = useProjectApiQuery({ projectRef: ref, }) @@ -103,4 +99,4 @@ const CustomDomainConfig = () => { ) } -export default observer(CustomDomainConfig) +export default CustomDomainConfig diff --git a/studio/components/interfaces/Settings/General/DeleteProjectPanel/DeleteProjectButton.tsx b/studio/components/interfaces/Settings/General/DeleteProjectPanel/DeleteProjectButton.tsx index b1fe6d9553f..ed6215db382 100644 --- a/studio/components/interfaces/Settings/General/DeleteProjectPanel/DeleteProjectButton.tsx +++ b/studio/components/interfaces/Settings/General/DeleteProjectPanel/DeleteProjectButton.tsx @@ -1,24 +1,28 @@ -import { FC, useEffect, useState } from 'react' -import { useRouter } from 'next/router' -import { Button, Input } from 'ui' import * as Tooltip from '@radix-ui/react-tooltip' import { PermissionAction } from '@supabase/shared-types/out/constants' +import { useQueryClient } from '@tanstack/react-query' +import { useRouter } from 'next/router' +import { FC, useEffect, useState } from 'react' +import { Button, Input } from 'ui' -import { useStore, checkPermissions } from 'hooks' -import { API_URL, PRICING_TIER_PRODUCT_IDS } from 'lib/constants' -import { delete_, post } from 'lib/common/fetch' -import TextConfirmModal from 'components/ui/Modals/TextConfirmModal' import { CANCELLATION_REASONS } from 'components/interfaces/BillingV2/Billing.constants' +import { useProjectContext } from 'components/layouts/ProjectLayout/ProjectContext' +import TextConfirmModal from 'components/ui/Modals/TextConfirmModal' +import { invalidateProjectsQuery } from 'data/projects/projects-query' +import { checkPermissions, useStore } from 'hooks' +import { delete_, post } from 'lib/common/fetch' +import { API_URL, PRICING_TIER_PRODUCT_IDS } from 'lib/constants' interface Props { type?: 'danger' | 'default' } const DeleteProjectButton: FC = ({ type = 'danger' }) => { + const queryClient = useQueryClient() const router = useRouter() - const { app, ui } = useStore() + const { ui } = useStore() - const project = ui.selectedProject + const { project } = useProjectContext() const projectRef = project?.ref const projectTier = project?.subscription_tier ?? PRICING_TIER_PRODUCT_IDS.FREE const isFree = projectTier === PRICING_TIER_PRODUCT_IDS.FREE @@ -66,7 +70,7 @@ const DeleteProjectButton: FC = ({ type = 'danger' }) => { try { const response = await delete_(`${API_URL}/projects/${projectRef}`) if (response.error) throw response.error - app.onProjectDeleted(response) + await invalidateProjectsQuery(queryClient) ui.setNotification({ category: 'success', message: `Successfully deleted ${project.name}` }) router.push(`/projects`) } catch (error: any) { diff --git a/studio/components/interfaces/Settings/General/DeleteProjectPanel/DeleteProjectPanel.tsx b/studio/components/interfaces/Settings/General/DeleteProjectPanel/DeleteProjectPanel.tsx index 4c8c7267fdb..b05bc4d781e 100644 --- a/studio/components/interfaces/Settings/General/DeleteProjectPanel/DeleteProjectPanel.tsx +++ b/studio/components/interfaces/Settings/General/DeleteProjectPanel/DeleteProjectPanel.tsx @@ -1,19 +1,17 @@ import { FC } from 'react' -import { Alert } from 'ui' -import { useStore } from 'hooks' -import Panel from 'components/ui/Panel' - -import DeleteProjectButton from './DeleteProjectButton' +import { useProjectContext } from 'components/layouts/ProjectLayout/ProjectContext' import { FormHeader } from 'components/ui/Forms' +import Panel from 'components/ui/Panel' +import { Alert } from 'ui' +import DeleteProjectButton from './DeleteProjectButton' interface Props {} const DeleteProjectPanel: FC = ({}) => { - const { ui } = useStore() - const project = ui.selectedProject + const { project } = useProjectContext() - if (project === undefined) return <> + if (project === undefined) return null return (
    diff --git a/studio/components/interfaces/Settings/General/General.tsx b/studio/components/interfaces/Settings/General/General.tsx index 2fce9ce289b..28a53d0c74e 100644 --- a/studio/components/interfaces/Settings/General/General.tsx +++ b/studio/components/interfaces/Settings/General/General.tsx @@ -1,24 +1,28 @@ +import { PermissionAction } from '@supabase/shared-types/out/constants' +import { useQueryClient } from '@tanstack/react-query' import { FC } from 'react' import { Form, Input } from 'ui' -import { PermissionAction } from '@supabase/shared-types/out/constants' -import { useStore, checkPermissions } from 'hooks' -import { API_URL } from 'lib/constants' -import { patch } from 'lib/common/fetch' +import { useProjectContext } from 'components/layouts/ProjectLayout/ProjectContext' import { + FormActions, FormHeader, FormPanel, - FormActions, FormSection, - FormSectionLabel, FormSectionContent, + FormSectionLabel, } from 'components/ui/Forms' +import { invalidateProjectsQuery } from 'data/projects/projects-query' +import { checkPermissions, useStore } from 'hooks' +import { patch } from 'lib/common/fetch' +import { API_URL } from 'lib/constants' interface Props {} const General: FC = ({}) => { - const { app, ui } = useStore() - const project = ui.selectedProject + const queryClient = useQueryClient() + const { ui } = useStore() + const { project } = useProjectContext() const formId = 'project-general-settings' const initialValues = { name: project?.name ?? '', ref: project?.ref ?? '' } @@ -37,7 +41,7 @@ const General: FC = ({}) => { const { name } = response resetForm({ values: { name }, initialValues: { name } }) - app.onProjectUpdated(response) + await invalidateProjectsQuery(queryClient) ui.setNotification({ category: 'success', message: 'Successfully saved settings', diff --git a/studio/components/interfaces/Settings/General/Infrastructure/ProjectUpgradeAlert/ProjectUpgradeAlert.tsx b/studio/components/interfaces/Settings/General/Infrastructure/ProjectUpgradeAlert/ProjectUpgradeAlert.tsx index 0af657cae0e..f216f190b1d 100644 --- a/studio/components/interfaces/Settings/General/Infrastructure/ProjectUpgradeAlert/ProjectUpgradeAlert.tsx +++ b/studio/components/interfaces/Settings/General/Infrastructure/ProjectUpgradeAlert/ProjectUpgradeAlert.tsx @@ -1,3 +1,4 @@ +import { useQueryClient } from '@tanstack/react-query' import Link from 'next/link' import { useRouter } from 'next/router' import { FC, useState } from 'react' @@ -5,26 +6,28 @@ import { Alert, Button, Form, - Modal, - IconPackage, - Listbox, IconAlertCircle, IconExternalLink, + IconPackage, + Listbox, + Modal, } from 'ui' -import { useStore } from 'hooks' import { useParams } from 'common/hooks' -import { post } from 'lib/common/fetch' -import { API_ADMIN_URL, PROJECT_STATUS } from 'lib/constants' import InformationBox from 'components/ui/InformationBox' -import { BREAKING_CHANGES } from './ProjectUpgradeAlert.constants' import { useProjectUpgradeEligibilityQuery } from 'data/config/project-upgrade-eligibility-query' +import { invalidateProjectsQuery } from 'data/projects/projects-query' +import { useStore } from 'hooks' +import { post } from 'lib/common/fetch' +import { API_ADMIN_URL } from 'lib/constants' +import { BREAKING_CHANGES } from './ProjectUpgradeAlert.constants' interface Props {} const ProjectUpgradeAlert: FC = ({}) => { + const queryClient = useQueryClient() const router = useRouter() - const { app, ui } = useStore() + const { ui } = useStore() const { ref } = useParams() const [showUpgradeModal, setShowUpgradeModal] = useState(false) @@ -49,12 +52,9 @@ const ProjectUpgradeAlert: FC = ({}) => { }) setSubmitting(false) } else { - const projectId = ui.selectedProject?.id - if (projectId !== undefined) { - app.onProjectStatusUpdated(projectId, PROJECT_STATUS.UPGRADING) - ui.setNotification({ category: 'success', message: 'Upgrading project' }) - router.push(`/project/${ref}?upgradeInitiated=true`) - } + await invalidateProjectsQuery(queryClient) + ui.setNotification({ category: 'success', message: 'Upgrading project' }) + router.push(`/project/${ref}?upgradeInitiated=true`) } } diff --git a/studio/components/interfaces/Support/SupportForm.tsx b/studio/components/interfaces/Support/SupportForm.tsx index 9337a56cc63..00d71999044 100644 --- a/studio/components/interfaces/Support/SupportForm.tsx +++ b/studio/components/interfaces/Support/SupportForm.tsx @@ -1,36 +1,38 @@ +import { CLIENT_LIBRARIES } from 'common/constants' +import { observer } from 'mobx-react-lite' import Link from 'next/link' import { useRouter } from 'next/router' -import { useEffect, useState, FC, ChangeEvent, useRef } from 'react' -import { observer } from 'mobx-react-lite' +import { ChangeEvent, FC, useEffect, useRef, useState } from 'react' import { Button, + Checkbox, + Form, + IconAlertCircle, + IconExternalLink, + IconLoader, IconMail, IconPlus, IconX, Input, Listbox, - Form, - IconLoader, - IconAlertCircle, - IconExternalLink, - Checkbox, } from 'ui' -import { CLIENT_LIBRARIES } from 'common/constants' - -import { Project } from 'types' -import { useStore, useFlag } from 'hooks' -import { post, get } from 'lib/common/fetch' -import { detectBrowser } from 'lib/helpers' -import { API_URL, PRICING_TIER_PRODUCT_IDS } from 'lib/constants' import Divider from 'components/ui/Divider' +import InformationBox from 'components/ui/InformationBox' import Connecting from 'components/ui/Loading' import MultiSelect from 'components/ui/MultiSelect' -import InformationBox from 'components/ui/InformationBox' -import { formatMessage, uploadAttachments } from './SupportForm.utils' -import { CATEGORY_OPTIONS, SEVERITY_OPTIONS, SERVICE_OPTIONS } from './Support.constants' -import DisabledStateForFreeTier from './DisabledStateForFreeTier' +import { useOrganizationsQuery } from 'data/organizations/organizations-query' import { useProfileQuery } from 'data/profile/profile-query' +import { useProjectsQuery } from 'data/projects/projects-query' +import { useFlag, useStore } from 'hooks' +import useLatest from 'hooks/misc/useLatest' +import { get, post } from 'lib/common/fetch' +import { API_URL, PRICING_TIER_PRODUCT_IDS } from 'lib/constants' +import { detectBrowser } from 'lib/helpers' +import { Project } from 'types' +import DisabledStateForFreeTier from './DisabledStateForFreeTier' +import { CATEGORY_OPTIONS, SERVICE_OPTIONS, SEVERITY_OPTIONS } from './Support.constants' +import { formatMessage, uploadAttachments } from './SupportForm.utils' const MAX_ATTACHMENTS = 5 @@ -49,14 +51,16 @@ const SupportForm: FC = ({ setSentCategory }) => { const [uploadedDataUrls, setUploadedDataUrls] = useState([]) const [selectedServices, setSelectedServices] = useState([]) - // Get all orgs and projects from global store - const sortedOrganizations = app.organizations.list() - const sortedProjects = app.projects.list() + const { data: organizations, isSuccess: isOrganizationsSuccess } = useOrganizationsQuery() + // for use in useEffect + const organizationsRef = useLatest(organizations) - const isInitialized = app.projects.isInitialized + const { data: allProjects, isSuccess: isProjectsSuccess } = useProjectsQuery() + + const isInitialized = isOrganizationsSuccess && isProjectsSuccess const projectDefaults: Partial[] = [{ ref: 'no-project', name: 'No specific project' }] - const projects = [...sortedProjects, ...projectDefaults] + const projects = [...(allProjects ?? []), ...projectDefaults] const planNames = { [PRICING_TIER_PRODUCT_IDS.FREE]: 'Free', @@ -87,7 +91,7 @@ const SupportForm: FC = ({ setSentCategory }) => { ) } - const selectedProject = sortedProjects.find((project) => project.ref === ref) + const selectedProject = projects.find((project) => project.ref === ref) const selectedCategory = CATEGORY_OPTIONS.find((option) => { if (option.value.toLowerCase() === ((category as string) ?? '').toLowerCase()) return option }) @@ -95,16 +99,16 @@ const SupportForm: FC = ({ setSentCategory }) => { const initialProjectRef = selectedProject !== undefined ? selectedProject.ref - : sortedProjects.length > 0 - ? sortedProjects[0].ref + : projects.length > 0 + ? projects[0].ref : 'no-project' const initialOrganizationSlug = initialProjectRef !== 'no-project' - ? sortedOrganizations.find((org) => { - const project = sortedProjects.find((project) => project.ref === initialProjectRef) + ? organizations?.find((org) => { + const project = projects.find((project) => project.ref === initialProjectRef) return org.id === project?.organization_id })?.slug - : sortedOrganizations[0]?.slug + : organizations?.[0]?.slug const initialValues = { category: selectedCategory !== undefined ? selectedCategory.value : CATEGORY_OPTIONS[0].value, severity: 'Low', @@ -222,13 +226,16 @@ const SupportForm: FC = ({ setSentCategory }) => { // eslint-disable-next-line react-hooks/rules-of-hooks useEffect(() => { if (values.projectRef === 'no-project') { - const updatedValues = { ...values, organizationSlug: sortedOrganizations[0]?.slug } + const updatedValues = { + ...values, + organizationSlug: organizationsRef.current?.[0]?.slug, + } resetForm({ values: updatedValues, initialValues: updatedValues }) } else if (selectedProject) { if (!selectedProject.subscription_tier) { app.projects.fetchSubscriptionTier(selectedProject as Project) } - const organization = sortedOrganizations.find( + const organization = organizationsRef.current?.find( (org) => org.id === selectedProject.organization_id ) if (organization) { @@ -269,9 +276,7 @@ const SupportForm: FC = ({ setSentCategory }) => {
    {projects.map((option) => { - const organization = sortedOrganizations.find( - (x) => x.id === option.organization_id - ) + const organization = organizations?.find((x) => x.id === option.organization_id) return ( = ({ setSentCategory }) => { )}
    - {values.projectRef === 'no-project' && sortedOrganizations.length > 0 && ( + {values.projectRef === 'no-project' && (organizations?.length ?? 0) > 0 && (
    - {sortedOrganizations.map((option) => { + {organizations?.map((option) => { return ( = ({ setSentCategory }) => { Enhanced SLAs for support are available on our Enterprise Plan.

    - + diff --git a/studio/components/interfaces/TableGridEditor/GridHeaderActions.tsx b/studio/components/interfaces/TableGridEditor/GridHeaderActions.tsx index 0472136abab..a204e109d2f 100644 --- a/studio/components/interfaces/TableGridEditor/GridHeaderActions.tsx +++ b/studio/components/interfaces/TableGridEditor/GridHeaderActions.tsx @@ -1,11 +1,12 @@ -import { FC } from 'react' -import Link from 'next/link' -import { Button, IconAlertCircle, IconCode, IconLock } from 'ui' import * as Tooltip from '@radix-ui/react-tooltip' import type { PostgresPolicy, PostgresTable } from '@supabase/postgres-meta' - -import { useStore, checkPermissions } from 'hooks' import { PermissionAction } from '@supabase/shared-types/out/constants' +import Link from 'next/link' +import { FC } from 'react' + +import { useProjectContext } from 'components/layouts/ProjectLayout/ProjectContext' +import { useCheckPermissions, useStore } from 'hooks' +import { Button, IconAlertCircle, IconCode, IconLock } from 'ui' interface Props { table: PostgresTable @@ -20,13 +21,14 @@ const GridHeaderActions: FC = ({ setApiPreviewPanelOpen, refreshDocs, }) => { - const { ui, meta } = useStore() - const projectRef = ui.selectedProject?.ref + const { meta } = useStore() + const { project } = useProjectContext() + const projectRef = project?.ref const policies = meta.policies.list((policy: PostgresPolicy) => policy.table_id === table.id) - const isReadOnly = - !checkPermissions(PermissionAction.TENANT_SQL_ADMIN_WRITE, 'tables') && - !checkPermissions(PermissionAction.TENANT_SQL_ADMIN_WRITE, 'columns') + const canSqlWriteTables = useCheckPermissions(PermissionAction.TENANT_SQL_ADMIN_WRITE, 'tables') + const canSqlWriteColumns = useCheckPermissions(PermissionAction.TENANT_SQL_ADMIN_WRITE, 'columns') + const isReadOnly = canSqlWriteTables && canSqlWriteColumns function handlePreviewToggle() { setApiPreviewPanelOpen(!apiPreviewPanelOpen) diff --git a/studio/components/layouts/AccountLayout/AccountLayout.tsx b/studio/components/layouts/AccountLayout/AccountLayout.tsx index b503f308268..f4b7599e8a6 100644 --- a/studio/components/layouts/AccountLayout/AccountLayout.tsx +++ b/studio/components/layouts/AccountLayout/AccountLayout.tsx @@ -1,26 +1,26 @@ import Head from 'next/head' -import { FC, ReactNode } from 'react' import { useRouter } from 'next/router' -import { observer } from 'mobx-react-lite' +import { PropsWithChildren } from 'react' +import { useOrganizationsQuery } from 'data/organizations/organizations-query' +import { useFlag, useSelectedOrganization, withAuth } from 'hooks' import { useSignOut } from 'lib/auth' -import { useStore, withAuth, useFlag } from 'hooks' import { IS_PLATFORM } from 'lib/constants' -import WithSidebar from './WithSidebar' import { SidebarSection } from './AccountLayout.types' +import WithSidebar from './WithSidebar' -interface Props { +export interface AccountLayoutProps { title: string breadcrumbs: { key: string label: string }[] - children: ReactNode } -const AccountLayout: FC = ({ children, title, breadcrumbs }) => { +const AccountLayout = ({ children, title, breadcrumbs }: PropsWithChildren) => { const router = useRouter() - const { app, ui } = useStore() + const { data: organizations } = useOrganizationsQuery() + const selectedOrganization = useSelectedOrganization() const ongoingIncident = useFlag('ongoingIncident') const maxHeight = ongoingIncident ? 'calc(100vh - 44px)' : '100vh' @@ -32,11 +32,10 @@ const AccountLayout: FC = ({ children, title, breadcrumbs }) => { await router.push('/sign-in') } - const organizationsLinks = app.organizations - .list() + const organizationsLinks = (organizations ?? []) .map((organization) => ({ isActive: - router.pathname.startsWith('/org/') && ui.selectedOrganization?.slug === organization.slug, + router.pathname.startsWith('/org/') && selectedOrganization?.slug === organization.slug, label: organization.name + (organization.subscription_id ? ' (V2)' : ''), href: `/org/${organization.slug}/general`, key: organization.slug, @@ -147,6 +146,6 @@ const AccountLayout: FC = ({ children, title, breadcrumbs }) => { ) } -export default withAuth(observer(AccountLayout)) +export default withAuth(AccountLayout) -export const AccountLayoutWithoutAuth = observer(AccountLayout) +export const AccountLayoutWithoutAuth = AccountLayout diff --git a/studio/components/layouts/AuthLayout/AuthLayout.tsx b/studio/components/layouts/AuthLayout/AuthLayout.tsx index 8acef13d526..b5d7248ab75 100644 --- a/studio/components/layouts/AuthLayout/AuthLayout.tsx +++ b/studio/components/layouts/AuthLayout/AuthLayout.tsx @@ -1,11 +1,11 @@ -import { FC, ReactNode, useState, useEffect } from 'react' import { observer } from 'mobx-react-lite' import { useRouter } from 'next/router' +import { FC, ReactNode, useEffect, useState } from 'react' -import ProjectLayout from '../' -import { useStore, withAuth } from 'hooks' import Error from 'components/ui/Error' import ProductMenu from 'components/ui/ProductMenu' +import { useSelectedProject, useStore, withAuth } from 'hooks' +import ProjectLayout from '../' import { generateAuthMenu } from './AuthLayout.utils' interface Props { @@ -14,9 +14,10 @@ interface Props { } const AuthLayout: FC = ({ title, children }) => { - const { ui, meta } = useStore() + const { meta } = useStore() const { isInitialized, isLoading, error } = meta.tables - const projectRef = ui.selectedProject?.ref ?? 'default' + const selectedProject = useSelectedProject() + const projectRef = selectedProject?.ref ?? 'default' const router = useRouter() const page = router.pathname.split('/')[4] @@ -24,13 +25,13 @@ const AuthLayout: FC = ({ title, children }) => { const [loaded, setLoaded] = useState(isInitialized) useEffect(() => { - if (ui.selectedProject?.ref) { + if (selectedProject?.ref) { meta.policies.load() meta.tables.load() meta.roles.load() meta.schemas.load() } - }, [ui.selectedProject?.ref]) + }, [selectedProject?.ref]) useEffect(() => { if (!isLoading && !loaded) { diff --git a/studio/components/layouts/BillingLayout.tsx b/studio/components/layouts/BillingLayout.tsx index 402c8b480e2..5404de66c65 100644 --- a/studio/components/layouts/BillingLayout.tsx +++ b/studio/components/layouts/BillingLayout.tsx @@ -1,24 +1,22 @@ import Link from 'next/link' -import { FC, ReactNode } from 'react' -import { useStore, withAuth } from 'hooks' -import { observer } from 'mobx-react-lite' -import { IconX } from 'ui' +import { PropsWithChildren } from 'react' import BaseLayout from 'components/layouts' +import { useSelectedOrganization, useSelectedProject, withAuth } from 'hooks' +import { IconX } from 'ui' -interface Props { - children: ReactNode -} +export interface BillingLayoutProps {} -const BillingLayout: FC = ({ children }) => { - const { ui } = useStore() +const BillingLayout = ({ children }: PropsWithChildren) => { + const selectedOrganization = useSelectedOrganization() + const selectedProject = useSelectedProject() return (
    {/* Header */}
    - + @@ -27,7 +25,7 @@ const BillingLayout: FC = ({ children }) => {

    Customize your plan

    -

    {ui.selectedOrganization?.name}

    +

    {selectedOrganization?.name}

    = ({ children }) => { -

    {ui.selectedProject?.name}

    +

    {selectedProject?.name}

    @@ -55,4 +53,4 @@ const BillingLayout: FC = ({ children }) => { ) } -export default withAuth(observer(BillingLayout)) +export default withAuth(BillingLayout) diff --git a/studio/components/layouts/DatabaseLayout/DatabaseLayout.tsx b/studio/components/layouts/DatabaseLayout/DatabaseLayout.tsx index 6c721abe778..74360e1ef79 100644 --- a/studio/components/layouts/DatabaseLayout/DatabaseLayout.tsx +++ b/studio/components/layouts/DatabaseLayout/DatabaseLayout.tsx @@ -1,13 +1,13 @@ -import { FC, ReactNode, useEffect, useState } from 'react' import { observer } from 'mobx-react-lite' import { useRouter } from 'next/router' +import { FC, ReactNode, useEffect, useState } from 'react' -import { useFlag, useStore, withAuth } from 'hooks' -import ProjectLayout from '../' import Error from 'components/ui/Error' import ProductMenu from 'components/ui/ProductMenu' -import { generateDatabaseMenu } from './DatabaseMenu.utils' +import { useFlag, useSelectedProject, useStore, withAuth } from 'hooks' import { IS_PLATFORM } from 'lib/constants' +import ProjectLayout from '../' +import { generateDatabaseMenu } from './DatabaseMenu.utils' interface Props { title?: string @@ -15,12 +15,12 @@ interface Props { } const DatabaseLayout: FC = ({ title, children }) => { - const { meta, ui, vault, backups } = useStore() + const { meta, vault, backups } = useStore() const { isLoading: isSchemasLoading } = meta.schemas const { isLoading: isVaultLoading } = vault const { isInitialized, error } = meta.tables - const project = ui.selectedProject + const project = useSelectedProject() const router = useRouter() const page = router.pathname.split('/')[4] @@ -34,7 +34,7 @@ const DatabaseLayout: FC = ({ title, children }) => { const [loaded, setLoaded] = useState(isInitialized) useEffect(() => { - if (ui.selectedProject?.ref) { + if (project?.ref) { // Eventually should only load the required stores based on the pages meta.schemas.load() meta.tables.load() @@ -48,13 +48,13 @@ const DatabaseLayout: FC = ({ title, children }) => { backups.load() } } - }, [ui.selectedProject?.ref]) + }, [project?.ref]) useEffect(() => { if (isVaultEnabled) { vault.load() } - }, [ui.selectedProject?.ref, isVaultEnabled]) + }, [project?.ref, isVaultEnabled]) // Optimization required: load logic should be at the page level // e.g backups page is waiting for meta.tables to load finish when it doesnt even need that data @@ -77,7 +77,10 @@ const DatabaseLayout: FC = ({ title, children }) => { isLoading={!loaded} product="Database" productMenu={ - + } >
    diff --git a/studio/components/layouts/DocsLayout/DocsLayout.tsx b/studio/components/layouts/DocsLayout/DocsLayout.tsx index a4923f56077..d14142740f2 100644 --- a/studio/components/layouts/DocsLayout/DocsLayout.tsx +++ b/studio/components/layouts/DocsLayout/DocsLayout.tsx @@ -1,20 +1,21 @@ -import { ReactElement, useEffect } from 'react' import { observer } from 'mobx-react-lite' import { useRouter } from 'next/router' +import { ReactElement, useEffect } from 'react' -import ProjectLayout from '../' -import { useStore, withAuth } from 'hooks' import Error from 'components/ui/Error' import ProductMenu from 'components/ui/ProductMenu' -import { generateDocsMenu } from './DocsLayout.utils' +import { useSelectedProject, useStore, withAuth } from 'hooks' import { PROJECT_STATUS } from 'lib/constants' +import ProjectLayout from '../' +import { generateDocsMenu } from './DocsLayout.utils' function DocsLayout({ title, children }: { title: string; children: ReactElement }) { const router = useRouter() - const { meta, ui } = useStore() + const { meta } = useStore() const { data, isLoading, error } = meta.openApi + const selectedProject = useSelectedProject() - const isPaused = ui.selectedProject?.status === PROJECT_STATUS.INACTIVE + const isPaused = selectedProject?.status === PROJECT_STATUS.INACTIVE const getPage = () => { if (router.pathname.endsWith('graphiql')) return 'graphiql' @@ -25,10 +26,10 @@ function DocsLayout({ title, children }: { title: string; children: ReactElement } useEffect(() => { - if (ui.selectedProject?.ref && !isPaused) { + if (selectedProject?.ref && !isPaused) { meta.openApi.load() } - }, [ui.selectedProject?.ref]) + }, [selectedProject?.ref]) if (error) { return ( @@ -38,7 +39,7 @@ function DocsLayout({ title, children }: { title: string; children: ReactElement ) } - const projectRef = ui.selectedProject?.ref ?? 'default' + const projectRef = selectedProject?.ref ?? 'default' const tableNames = (data?.tables ?? []).map((table: any) => table.name) const functionNames = (data?.functions ?? []).map((fn: any) => fn.name) diff --git a/studio/components/layouts/LogsLayout/LogsLayout.tsx b/studio/components/layouts/LogsLayout/LogsLayout.tsx index 1d889b1735f..ff331f16c4c 100644 --- a/studio/components/layouts/LogsLayout/LogsLayout.tsx +++ b/studio/components/layouts/LogsLayout/LogsLayout.tsx @@ -1,26 +1,25 @@ -import { PropsWithChildren } from 'react' -import { observer } from 'mobx-react-lite' import { PermissionAction } from '@supabase/shared-types/out/constants' import { useRouter } from 'next/router' -import { checkPermissions, useStore, withAuth } from 'hooks' -import ProjectLayout from '../' +import { PropsWithChildren } from 'react' + import NoPermission from 'components/ui/NoPermission' -import { generateLogsMenu } from './LogsMenu.utils' import ProductMenu from 'components/ui/ProductMenu' +import { useCheckPermissions, useSelectedProject, withAuth } from 'hooks' +import ProjectLayout from '../' +import { generateLogsMenu } from './LogsMenu.utils' interface LogsLayoutProps { title?: string } const LogsLayout = ({ title, children }: PropsWithChildren) => { - const { ui } = useStore() const router = useRouter() const pathArr = router.pathname.split('/') const page = pathArr[pathArr.length - 1] - const project = ui.selectedProject + const project = useSelectedProject() - const canUseLogsExplorer = checkPermissions(PermissionAction.ANALYTICS_READ, 'logflare') + const canUseLogsExplorer = useCheckPermissions(PermissionAction.ANALYTICS_READ, 'logflare') if (!canUseLogsExplorer) { return ( @@ -45,4 +44,4 @@ const LogsLayout = ({ title, children }: PropsWithChildren) => ) } -export default withAuth(observer(LogsLayout)) +export default withAuth(LogsLayout) diff --git a/studio/components/layouts/OrganizationLayout.tsx b/studio/components/layouts/OrganizationLayout.tsx index 0b323386d03..c4479bcf785 100644 --- a/studio/components/layouts/OrganizationLayout.tsx +++ b/studio/components/layouts/OrganizationLayout.tsx @@ -1,18 +1,13 @@ -import { useStore } from 'hooks' -import { observer } from 'mobx-react-lite' -import { FC, ReactNode } from 'react' -import { AccountLayout } from './' +import { useSelectedOrganization } from 'hooks' +import { PropsWithChildren } from 'react' +import AccountLayout from './AccountLayout/AccountLayout' -interface Props { - children: ReactNode -} - -const OrganizationLayout: FC = ({ children }) => { - const { ui } = useStore() +const OrganizationLayout = ({ children }: PropsWithChildren<{}>) => { + const selectedOrganization = useSelectedOrganization() return ( {children} @@ -20,4 +15,4 @@ const OrganizationLayout: FC = ({ children }) => { ) } -export default observer(OrganizationLayout) +export default OrganizationLayout diff --git a/studio/components/layouts/ProjectLayout/LayoutHeader/LayoutHeader.tsx b/studio/components/layouts/ProjectLayout/LayoutHeader/LayoutHeader.tsx index 4ec5f0064ad..834f8feb806 100644 --- a/studio/components/layouts/ProjectLayout/LayoutHeader/LayoutHeader.tsx +++ b/studio/components/layouts/ProjectLayout/LayoutHeader/LayoutHeader.tsx @@ -1,39 +1,36 @@ -import Link from 'next/link' -import { observer } from 'mobx-react-lite' import { useParams } from 'common' +import Link from 'next/link' import { Badge } from 'ui' +import { getResourcesExceededLimits } from 'components/ui/OveragesBanner/OveragesBanner.utils' +import { useProjectReadOnlyQuery } from 'data/config/project-read-only-query' +import { useProjectUsageQuery } from 'data/usage/project-usage-query' +import { useFlag, useSelectedOrganization, useSelectedProject } from 'hooks' import { IS_PLATFORM, PRICING_TIER_PRODUCT_IDS } from 'lib/constants' -import { useFlag, useStore } from 'hooks' import BreadcrumbsView from './BreadcrumbsView' -import OrgDropdown from './OrgDropdown' -import ProjectDropdown from './ProjectDropdown' import FeedbackDropdown from './FeedbackDropdown' import HelpPopover from './HelpPopover' import NotificationsPopover from './NotificationsPopover' -import { getResourcesExceededLimits } from 'components/ui/OveragesBanner/OveragesBanner.utils' -import { useProjectUsageQuery } from 'data/usage/project-usage-query' -import { useProjectReadOnlyQuery } from 'data/config/project-read-only-query' -import { useProjectContext } from 'components/layouts/ProjectLayout/ProjectContext' +import OrgDropdown from './OrgDropdown' +import ProjectDropdown from './ProjectDropdown' const LayoutHeader = ({ customHeaderComponents, breadcrumbs = [], headerBorder = true }: any) => { - const { ui } = useStore() - const { selectedOrganization, selectedProject } = ui + const selectedOrganization = useSelectedOrganization() + const selectedProject = useSelectedProject() const { ref: projectRef } = useParams() - const { project } = useProjectContext() const { data: isReadOnlyMode } = useProjectReadOnlyQuery({ - projectRef: project?.ref, - connectionString: project?.connectionString, + projectRef: selectedProject?.ref, + connectionString: selectedProject?.connectionString, }) const { data: usage } = useProjectUsageQuery({ projectRef }) const resourcesExceededLimits = getResourcesExceededLimits(usage) const projectHasNoLimits = - ui.selectedProject?.subscription_tier === PRICING_TIER_PRODUCT_IDS.PAYG || - ui.selectedProject?.subscription_tier === PRICING_TIER_PRODUCT_IDS.ENTERPRISE || - ui.selectedProject?.subscription_tier === PRICING_TIER_PRODUCT_IDS.TEAM + selectedProject?.subscription_tier === PRICING_TIER_PRODUCT_IDS.PAYG || + selectedProject?.subscription_tier === PRICING_TIER_PRODUCT_IDS.ENTERPRISE || + selectedProject?.subscription_tier === PRICING_TIER_PRODUCT_IDS.TEAM const showOverUsageBadge = useFlag('overusageBadge') && @@ -120,4 +117,4 @@ const LayoutHeader = ({ customHeaderComponents, breadcrumbs = [], headerBorder =
    ) } -export default observer(LayoutHeader) +export default LayoutHeader diff --git a/studio/components/layouts/ProjectLayout/LayoutHeader/NotificationsPopover/NotificationRow.tsx b/studio/components/layouts/ProjectLayout/LayoutHeader/NotificationsPopover/NotificationRow.tsx index a523bd84c4d..a7b2c9887ae 100644 --- a/studio/components/layouts/ProjectLayout/LayoutHeader/NotificationsPopover/NotificationRow.tsx +++ b/studio/components/layouts/ProjectLayout/LayoutHeader/NotificationsPopover/NotificationRow.tsx @@ -1,17 +1,18 @@ -import dayjs from 'dayjs' -import { FC, useState } from 'react' -import { useQuery, useQueryClient } from '@tanstack/react-query' import * as Tooltip from '@radix-ui/react-tooltip' import { Notification, NotificationStatus } from '@supabase/shared-types/out/notifications' +import { useQuery, useQueryClient } from '@tanstack/react-query' +import dayjs from 'dayjs' +import { FC, useState } from 'react' -import { useStore } from 'hooks' import { notificationKeys } from 'data/notifications/keys' -import { Project } from 'types' -import { formatNotificationCTAText, formatNotificationText } from './NotificationRows.utils' -import NotificationActions from './NotificationActions' -import { get, delete_ } from 'lib/common/fetch' +import { useProjectsQuery } from 'data/projects/projects-query' +import { useStore } from 'hooks' +import { delete_, get } from 'lib/common/fetch' import { API_URL } from 'lib/constants' +import { Project } from 'types' import { Button, IconX } from 'ui' +import NotificationActions from './NotificationActions' +import { formatNotificationCTAText, formatNotificationText } from './NotificationRows.utils' interface Props { notification: Notification @@ -28,10 +29,11 @@ const NotificationRow: FC = ({ onSelectRollbackMigration, onSelectFinalizeMigration, }) => { - const { app, ui } = useStore() + const { ui } = useStore() const queryClient = useQueryClient() const [dismissing, setDismissing] = useState(false) - const [project] = app.projects.list((project: Project) => project.id === notification.project_id) + const { data: projects } = useProjectsQuery() + const project = projects?.find((project) => project.id === notification.project_id) const insertedAt = dayjs(notification.inserted_at).format('DD MMM YYYY, HH:mma') const changelogLink = (notification.data as any).changelog_link @@ -41,10 +43,11 @@ const NotificationRow: FC = ({ // have been removed, double check with Qiao before removing. // Relevant PR: https://github.com/supabase/supabase/pull/9229 const { data: ownerReassignStatus } = useQuery( - ['projects', project.ref, 'owner-reassign'], - ({ signal }) => get(`${API_URL}/database/${project.ref}/owner-reassign`, { signal }), + ['projects', project?.ref, 'owner-reassign'], + ({ signal }) => get(`${API_URL}/database/${project?.ref}/owner-reassign`, { signal }), { - enabled: (notification.data as any).upgrade_type === 'schema-migration', + enabled: + (notification.data as any).upgrade_type === 'schema-migration' && project !== undefined, } ) @@ -65,6 +68,8 @@ const NotificationRow: FC = ({ setDismissing(false) } + if (!project) return null + return (
    diff --git a/studio/components/layouts/ProjectLayout/LayoutHeader/OrgDropdown.tsx b/studio/components/layouts/ProjectLayout/LayoutHeader/OrgDropdown.tsx index b2033eace78..5e2bfffa05f 100644 --- a/studio/components/layouts/ProjectLayout/LayoutHeader/OrgDropdown.tsx +++ b/studio/components/layouts/ProjectLayout/LayoutHeader/OrgDropdown.tsx @@ -1,17 +1,17 @@ -import { useRouter } from 'next/router' import { toJS } from 'mobx' -import { observer } from 'mobx-react-lite' -import { Button, Dropdown, IconPlus } from 'ui' +import { useRouter } from 'next/router' -import { useFlag, useStore } from 'hooks' +import { useOrganizationsQuery } from 'data/organizations/organizations-query' +import { useFlag, useSelectedOrganization, useStore } from 'hooks' import { IS_PLATFORM } from 'lib/constants' +import { Button, Dropdown, IconPlus } from 'ui' const OrgDropdown = () => { const router = useRouter() - const { app, ui } = useStore() + const { ui } = useStore() - const sortedOrganizations: any[] = app.organizations.list() - const selectedOrganization: any = ui.selectedOrganization + const { data: organizations } = useOrganizationsQuery() + const selectedOrganization = useSelectedOrganization() const orgCreationV2 = useFlag('orgcreationv2') @@ -21,8 +21,8 @@ const OrgDropdown = () => { align="start" overlay={ <> - {sortedOrganizations - .sort((a, b) => a.name.localeCompare(b.name)) + {organizations + ?.sort((a, b) => a.name.localeCompare(b.name)) .map((x) => { const slug = toJS(x.slug) @@ -68,14 +68,14 @@ const OrgDropdown = () => { } > ) : ( ) } -export default observer(OrgDropdown) +export default OrgDropdown diff --git a/studio/components/layouts/ProjectLayout/LayoutHeader/ProjectDropdown.tsx b/studio/components/layouts/ProjectLayout/LayoutHeader/ProjectDropdown.tsx index 1f685d4ca6f..33675052915 100644 --- a/studio/components/layouts/ProjectLayout/LayoutHeader/ProjectDropdown.tsx +++ b/studio/components/layouts/ProjectLayout/LayoutHeader/ProjectDropdown.tsx @@ -1,10 +1,10 @@ import Link from 'next/link' -import { observer } from 'mobx-react-lite' -import { Button, Dropdown, IconPlus, Popover } from 'ui' import { useRouter } from 'next/router' import { ParsedUrlQuery } from 'querystring' +import { Button, Dropdown, IconPlus, Popover } from 'ui' -import { useStore } from 'hooks' +import { useProjectsQuery } from 'data/projects/projects-query' +import { useSelectedOrganization, useSelectedProject } from 'hooks' import { IS_PLATFORM, PROJECT_STATUS } from 'lib/constants' // [Fran] the idea is to let users change projects without losing the current page, @@ -31,10 +31,10 @@ const sanitizeRoute = (route: string, routerQueries: ParsedUrlQuery) => { } const ProjectDropdown = () => { - const { app, ui } = useStore() - const selectedOrganizationProjects = app.projects.list() - const selectedOrganizationSlug = ui.selectedOrganization?.slug - const selectedProject: any = ui.selectedProject + const selectedOrganization = useSelectedOrganization() + const selectedProject = useSelectedProject() + const { data: allProjects } = useProjectsQuery() + const selectedOrganizationSlug = selectedOrganization?.slug const router = useRouter() const sanitizedRoute = sanitizeRoute(router.route, router.query) @@ -44,10 +44,10 @@ const ProjectDropdown = () => { align="start" overlay={ <> - {selectedOrganizationProjects - .filter((x: any) => x.status !== PROJECT_STATUS.INACTIVE) - .sort((a: any, b: any) => a.name.localeCompare(b.name)) - .map((x: any) => ( + {allProjects + ?.filter((x) => x.status !== PROJECT_STATUS.INACTIVE) + .sort((a, b) => a.name.localeCompare(b.name)) + .map((x) => ( { { } > ) : ( ) } -export default observer(ProjectDropdown) +export default ProjectDropdown diff --git a/studio/components/layouts/ProjectLayout/NavigationBar/NavigationBar.tsx b/studio/components/layouts/ProjectLayout/NavigationBar/NavigationBar.tsx index 944df1f6c25..50bdff1621b 100644 --- a/studio/components/layouts/ProjectLayout/NavigationBar/NavigationBar.tsx +++ b/studio/components/layouts/ProjectLayout/NavigationBar/NavigationBar.tsx @@ -1,46 +1,46 @@ -import Link from 'next/link' -import { FC } from 'react' +import * as Tooltip from '@radix-ui/react-tooltip' import { isUndefined } from 'lodash' -import { observer } from 'mobx-react-lite' +import Link from 'next/link' import { useRouter } from 'next/router' +import { FC } from 'react' + +import { useTheme } from 'common' +import { useParams } from 'common/hooks' +import { useFlag } from 'hooks' +import { IS_PLATFORM } from 'lib/constants' +import { detectOS } from 'lib/helpers' import { Button, Dropdown, + IconCommand, IconHome, + IconSearch, IconSettings, IconUser, - IconSearch, useCommandMenu, - IconCommand, } from 'ui' -import * as Tooltip from '@radix-ui/react-tooltip' -import { useFlag, useStore } from 'hooks' -import { IS_PLATFORM } from 'lib/constants' +import { useProjectContext } from '../ProjectContext' import { generateOtherRoutes, generateProductRoutes, generateToolRoutes, } from './NavigationBar.utils' import NavigationIconButton from './NavigationIconButton' -import { useParams } from 'common/hooks' -import { useTheme } from 'common' -import { detectOS } from 'lib/helpers' interface Props {} const NavigationBar: FC = ({}) => { const router = useRouter() - const { ui } = useStore() const { isDarkMode, toggleTheme } = useTheme() const { ref: projectRef } = useParams() - const projectBaseInfo = ui.selectedProjectBaseInfo + const { project } = useProjectContext() const ongoingIncident = useFlag('ongoingIncident') const activeRoute = router.pathname.split('/')[3] - const toolRoutes = generateToolRoutes(projectRef, projectBaseInfo) - const productRoutes = generateProductRoutes(projectRef, projectBaseInfo) - const otherRoutes = generateOtherRoutes(projectRef, projectBaseInfo) + const toolRoutes = generateToolRoutes(projectRef, project) + const productRoutes = generateProductRoutes(projectRef, project) + const otherRoutes = generateOtherRoutes(projectRef, project) const showCmdkHelper = useFlag('dashboardCmdk') const os = detectOS() const { setIsOpen } = useCommandMenu() @@ -172,4 +172,4 @@ const NavigationBar: FC = ({}) => { ) } -export default observer(NavigationBar) +export default NavigationBar diff --git a/studio/components/layouts/ProjectLayout/ProjectContext.tsx b/studio/components/layouts/ProjectLayout/ProjectContext.tsx index 8fc28f52926..fd20266e468 100644 --- a/studio/components/layouts/ProjectLayout/ProjectContext.tsx +++ b/studio/components/layouts/ProjectLayout/ProjectContext.tsx @@ -1,8 +1,7 @@ import { useParams } from 'common/hooks' -import { useStore } from 'hooks' +import { useSelectedProject } from 'hooks' import { PROJECT_STATUS } from 'lib/constants' -import { observer } from 'mobx-react-lite' -import { createContext, PropsWithChildren, useContext, useMemo } from 'react' +import { PropsWithChildren, createContext, useContext, useMemo } from 'react' import { Project } from 'types' type ProjectContextType = { @@ -23,29 +22,28 @@ type ProjectContextProviderProps = { projectRef: string | undefined } -export const ProjectContextProvider = observer( - ({ projectRef, children }: PropsWithChildren) => { - // TODO(alaister): This will eventually be replaced with a react-query query - // once we remove mobx - const { ui } = useStore() - - const value = useMemo(() => { - if (ui.selectedProject?.ref === projectRef) { - return { - project: ui.selectedProject, - isLoading: false, - } - } +export const ProjectContextProvider = ({ + projectRef, + children, +}: PropsWithChildren) => { + const selectedProject = useSelectedProject() + const value = useMemo(() => { + if (selectedProject?.ref === projectRef) { return { - project: undefined, - isLoading: true, + project: selectedProject, + isLoading: false, } - }, [ui.selectedProject?.ref, projectRef]) + } - return {children} - } -) + return { + project: undefined, + isLoading: true, + } + }, [selectedProject, projectRef]) + + return {children} +} export const ProjectContextFromParamsProvider = ({ children }: PropsWithChildren<{}>) => { const { ref: projectRef } = useParams() diff --git a/studio/components/layouts/ProjectLayout/ProjectLayout.tsx b/studio/components/layouts/ProjectLayout/ProjectLayout.tsx index f00bbca7e2a..4bf38e4c26c 100644 --- a/studio/components/layouts/ProjectLayout/ProjectLayout.tsx +++ b/studio/components/layouts/ProjectLayout/ProjectLayout.tsx @@ -1,22 +1,21 @@ import Head from 'next/head' -import { ReactNode, Fragment } from 'react' -import { observer } from 'mobx-react-lite' import { useRouter } from 'next/router' -import { useStore, withAuth, useFlag } from 'hooks' -import { useParams } from 'common/hooks' -import { PROJECT_STATUS } from 'lib/constants' +import { Fragment, ReactNode } from 'react' +import { useParams } from 'common/hooks' import Connecting from 'components/ui/Loading' -import NavigationBar from './NavigationBar/NavigationBar' -import ProductMenuBar from './ProductMenuBar' -import LayoutHeader from './LayoutHeader' -import ConnectingState from './ConnectingState' -import PausingState from './PausingState' +import { useFlag, useSelectedOrganization, useSelectedProject, withAuth } from 'hooks' +import { PROJECT_STATUS } from 'lib/constants' import BuildingState from './BuildingState' +import ConnectingState from './ConnectingState' +import LayoutHeader from './LayoutHeader' +import NavigationBar from './NavigationBar/NavigationBar' +import PausingState from './PausingState' +import ProductMenuBar from './ProductMenuBar' import { ProjectContextProvider } from './ProjectContext' +import ProjectPausedState from './ProjectPausedState' import RestoringState from './RestoringState' import UpgradingState from './UpgradingState' -import ProjectPausedState from './ProjectPausedState' export interface ProjectLayoutProps { title?: string @@ -39,14 +38,15 @@ const ProjectLayout = ({ hideIconBar = false, selectedTable, }: ProjectLayoutProps) => { - const { ui } = useStore() const router = useRouter() const { ref: projectRef } = useParams() const ongoingIncident = useFlag('ongoingIncident') - const projectName = ui.selectedProject?.name - const organizationName = ui.selectedOrganization?.name + const selectedOrganization = useSelectedOrganization() + const selectedProject = useSelectedProject() + const projectName = selectedProject?.name + const organizationName = selectedOrganization?.name - const isPaused = ui.selectedProject?.status === PROJECT_STATUS.INACTIVE + const isPaused = selectedProject?.status === PROJECT_STATUS.INACTIVE const ignorePausedState = router.pathname === '/project/[ref]' || router.pathname.includes('/project/[ref]/settings') const showPausedState = isPaused && !ignorePausedState @@ -98,9 +98,9 @@ const ProjectLayout = ({ ) } -export const ProjectLayoutWithAuth = withAuth(observer(ProjectLayout)) +export const ProjectLayoutWithAuth = withAuth(ProjectLayout) -export default observer(ProjectLayout) +export default ProjectLayout interface MenuBarWrapperProps { isLoading: boolean @@ -108,10 +108,10 @@ interface MenuBarWrapperProps { children: ReactNode } -const MenuBarWrapper = observer(({ isLoading, productMenu, children }: MenuBarWrapperProps) => { - const { ui } = useStore() - return <>{!isLoading && productMenu && ui.selectedProject !== undefined ? children : null} -}) +const MenuBarWrapper = ({ isLoading, productMenu, children }: MenuBarWrapperProps) => { + const selectedProject = useSelectedProject() + return <>{!isLoading && productMenu && selectedProject !== undefined ? children : null} +} interface ContentWrapperProps { isLoading: boolean @@ -130,8 +130,8 @@ interface ContentWrapperProps { * * [TODO] Next iteration should scrape long polling and just listen to the project's status */ -const ContentWrapper = observer(({ isLoading, children }: ContentWrapperProps) => { - const { ui } = useStore() +const ContentWrapper = ({ isLoading, children }: ContentWrapperProps) => { + const selectedProject = useSelectedProject() const router = useRouter() const routesToIgnorePostgrestConnection = [ @@ -140,95 +140,93 @@ const ContentWrapper = observer(({ isLoading, children }: ContentWrapperProps) = '/project/[ref]/settings/database', '/project/[ref]/settings/billing/subscription', '/project/[ref]/settings/billing/usage', - '/project/[ref]/settings/billing/invoices' + '/project/[ref]/settings/billing/invoices', ] const requiresDbConnection: boolean = router.pathname !== '/project/[ref]/settings/general' const requiresPostgrestConnection = !routesToIgnorePostgrestConnection.includes(router.pathname) - const isProjectUpgrading = ui.selectedProject?.status === PROJECT_STATUS.UPGRADING - const isProjectRestoring = ui.selectedProject?.status === PROJECT_STATUS.RESTORING - const isProjectBuilding = ui.selectedProject?.status === PROJECT_STATUS.COMING_UP - const isProjectPausing = ui.selectedProject?.status === PROJECT_STATUS.GOING_DOWN - const isProjectOffline = ui.selectedProject?.postgrestStatus === 'OFFLINE' + const isProjectUpgrading = selectedProject?.status === PROJECT_STATUS.UPGRADING + const isProjectRestoring = selectedProject?.status === PROJECT_STATUS.RESTORING + const isProjectBuilding = selectedProject?.status === PROJECT_STATUS.COMING_UP + const isProjectPausing = selectedProject?.status === PROJECT_STATUS.GOING_DOWN + const isProjectOffline = selectedProject?.postgrestStatus === 'OFFLINE' return ( <> - {isLoading || ui.selectedProject === undefined ? ( + {isLoading || selectedProject === undefined ? ( ) : isProjectUpgrading ? ( ) : isProjectPausing ? ( - + ) : requiresPostgrestConnection && isProjectOffline ? ( - + ) : requiresDbConnection && isProjectRestoring ? ( ) : requiresDbConnection && isProjectBuilding ? ( - + ) : ( - {children} + {children} )} ) -}) +} /** * Shows the children irregardless of whether the selected project has loaded or not * We'll eventually want to use this instead of the current ProjectLayout to prevent * a catch-all spinner on the dashboard */ -export const ProjectLayoutNonBlocking = observer( - ({ - title, - product = '', - productMenu, - children, - hideHeader = false, - hideIconBar = false, - }: ProjectLayoutProps) => { - const { ui } = useStore() - const router = useRouter() - const { ref: projectRef } = useParams() - const ongoingIncident = useFlag('ongoingIncident') - const isPaused = ui.selectedProject?.status === PROJECT_STATUS.INACTIVE - const ignorePausedState = - router.pathname === '/project/[ref]' || router.pathname.includes('/project/[ref]/settings') - const showPausedState = isPaused && !ignorePausedState +export const ProjectLayoutNonBlocking = ({ + title, + product = '', + productMenu, + children, + hideHeader = false, + hideIconBar = false, +}: ProjectLayoutProps) => { + const selectedProject = useSelectedProject() + const router = useRouter() + const { ref: projectRef } = useParams() + const ongoingIncident = useFlag('ongoingIncident') + const isPaused = selectedProject?.status === PROJECT_STATUS.INACTIVE + const ignorePausedState = + router.pathname === '/project/[ref]' || router.pathname.includes('/project/[ref]/settings') + const showPausedState = isPaused && !ignorePausedState - return ( - - - {title ? `${title} | Supabase` : 'Supabase'} - - - -
    - {/* Left-most navigation side bar to access products */} - {!hideIconBar && } + return ( + + + {title ? `${title} | Supabase` : 'Supabase'} + + + +
    + {/* Left-most navigation side bar to access products */} + {!hideIconBar && } - {/* Product menu bar */} - {productMenu && !showPausedState && ( - {productMenu} - )} + {/* Product menu bar */} + {productMenu && !showPausedState && ( + {productMenu} + )} -
    - {!hideHeader && } - {showPausedState ? ( -
    -
    - -
    +
    + {!hideHeader && } + {showPausedState ? ( +
    +
    +
    - ) : ( - children - )} -
    -
    - - ) - } -) +
    + ) : ( + children + )} + +
    +
    + ) +} diff --git a/studio/components/layouts/ProjectLayout/ProjectPausedState.tsx b/studio/components/layouts/ProjectLayout/ProjectPausedState.tsx index 3bc5d3a4bd4..91d206b540e 100644 --- a/studio/components/layouts/ProjectLayout/ProjectPausedState.tsx +++ b/studio/components/layouts/ProjectLayout/ProjectPausedState.tsx @@ -1,25 +1,30 @@ +import * as Tooltip from '@radix-ui/react-tooltip' +import { PermissionAction } from '@supabase/shared-types/out/constants' +import { useQueryClient } from '@tanstack/react-query' import Link from 'next/link' import { useState } from 'react' -import * as Tooltip from '@radix-ui/react-tooltip' -import { Modal, Button, IconPauseCircle } from 'ui' -import { PermissionAction } from '@supabase/shared-types/out/constants' -import { checkPermissions, useStore, useFlag } from 'hooks' -import { post } from 'lib/common/fetch' -import { API_URL, PROJECT_STATUS } from 'lib/constants' +import { useParams } from 'common' import ConfirmModal from 'components/ui/Dialogs/ConfirmDialog' import { useFreeProjectLimitCheckQuery } from 'data/organizations/free-project-limit-check-query' -import { useParams } from 'common' +import { invalidateOrganizationsQuery } from 'data/organizations/organizations-query' +import { checkPermissions, useFlag, useSelectedOrganization, useStore } from 'hooks' +import { post } from 'lib/common/fetch' +import { API_URL } from 'lib/constants' +import { Button, IconPauseCircle, Modal } from 'ui' +import { useProjectContext } from './ProjectContext' export interface ProjectPausedStateProps { product?: string } const ProjectPausedState = ({ product }: ProjectPausedStateProps) => { - const { ui, app } = useStore() + const queryClient = useQueryClient() + const { ui } = useStore() const { ref } = useParams() - const project = ui.selectedProject - const orgSlug = ui.selectedOrganization?.slug + const selectedOrganization = useSelectedOrganization() + const { project } = useProjectContext() + const orgSlug = selectedOrganization?.slug const kpsEnabled = useFlag('initWithKps') const { data: membersExceededLimit } = useFreeProjectLimitCheckQuery({ slug: orgSlug }) @@ -53,7 +58,7 @@ const ProjectPausedState = ({ product }: ProjectPausedStateProps) => { } await post(`${API_URL}/projects/${project.ref}/restore`, { kps_enabled: kpsEnabled }) - app.onProjectUpdated({ ...project, status: PROJECT_STATUS.RESTORING }) + await invalidateOrganizationsQuery(queryClient) ui.setNotification({ category: 'success', message: 'Restoring project' }) } diff --git a/studio/components/layouts/ProjectLayout/RestoringState.tsx b/studio/components/layouts/ProjectLayout/RestoringState.tsx index ce1e8130d45..8c40d1c716f 100644 --- a/studio/components/layouts/ProjectLayout/RestoringState.tsx +++ b/studio/components/layouts/ProjectLayout/RestoringState.tsx @@ -1,16 +1,17 @@ import Link from 'next/link' import { FC, useEffect, useRef, useState } from 'react' -import { Button, IconAlertCircle, IconCheckCircle, IconLoader } from 'ui' import { useStore } from 'hooks' -import { API_URL, PROJECT_STATUS } from 'lib/constants' import { getWithTimeout } from 'lib/common/fetch' +import { API_URL, PROJECT_STATUS } from 'lib/constants' +import { Button, IconAlertCircle, IconCheckCircle, IconLoader } from 'ui' +import { useProjectContext } from './ProjectContext' interface Props {} const RestoringState: FC = ({}) => { const { app, ui, meta } = useStore() - const project = ui.selectedProject + const { project } = useProjectContext() const checkServerInterval = useRef() const [loading, setLoading] = useState(false) diff --git a/studio/components/layouts/ProjectLayout/UpgradingState/UpgradingState.tsx b/studio/components/layouts/ProjectLayout/UpgradingState/UpgradingState.tsx index 0ec3881d623..9436938f079 100644 --- a/studio/components/layouts/ProjectLayout/UpgradingState/UpgradingState.tsx +++ b/studio/components/layouts/ProjectLayout/UpgradingState/UpgradingState.tsx @@ -20,23 +20,24 @@ import { useParams } from 'common/hooks' import { IS_PLATFORM } from 'lib/constants' import { DATABASE_UPGRADE_MESSAGES } from './UpgradingState.constants' import { useProjectUpgradingStatusQuery } from 'data/config/project-upgrade-status-query' +import { useProjectContext } from '../ProjectContext' const UpgradingState = () => { const { ref } = useParams() - const { app, ui, meta } = useStore() + const { app, meta } = useStore() + const { project } = useProjectContext() const [loading, setLoading] = useState(false) const [isExpanded, setIsExpanded] = useState(false) const { data } = useProjectUpgradingStatusQuery( { projectRef: ref, - projectStatus: ui.selectedProject?.status, + projectStatus: project?.status, }, { enabled: IS_PLATFORM, } ) - const project = ui.selectedProject const { initiated_at, status, progress, target_version, error } = data?.databaseUpgradeStatus ?? {} const progressStage = Number((progress || '').split('_')[0]) diff --git a/studio/components/layouts/ReportsLayout/ReportsLayout.tsx b/studio/components/layouts/ReportsLayout/ReportsLayout.tsx index 6c789413f9e..f1517357776 100644 --- a/studio/components/layouts/ReportsLayout/ReportsLayout.tsx +++ b/studio/components/layouts/ReportsLayout/ReportsLayout.tsx @@ -1,9 +1,9 @@ -import { PropsWithChildren } from 'react' -import { observer } from 'mobx-react-lite' import { useRouter } from 'next/router' -import { useStore, withAuth } from 'hooks' -import ProjectLayout from '../' +import { PropsWithChildren } from 'react' + import ProductMenu from 'components/ui/ProductMenu' +import { useSelectedProject, withAuth } from 'hooks' +import ProjectLayout from '../' import { generateReportsMenu } from './ReportsMenu.utils' interface ReportsLayoutProps { @@ -11,10 +11,9 @@ interface ReportsLayoutProps { } const ReportsLayout = ({ title, children }: PropsWithChildren) => { - const { ui } = useStore() const router = useRouter() - const project = ui.selectedProject + const project = useSelectedProject() const page = router.pathname.split('/')[4] || '' return ( @@ -30,4 +29,4 @@ const ReportsLayout = ({ title, children }: PropsWithChildren = ({ title, children }) => { const { ui, meta } = useStore() - const projectRef = ui.selectedProjectRef as string - const projectBaseInfo = ui.selectedProjectBaseInfo + const project = useSelectedProject() const router = useRouter() // billing pages live under /billing/invoices and /billing/subscription, etc @@ -25,13 +24,13 @@ const SettingsLayout: FC = ({ title, children }) => { : router.pathname.split('/')[4] const isVaultEnabled = useFlag('vaultExtension') - const menuRoutes = generateSettingsMenu(projectRef, projectBaseInfo, isVaultEnabled) + const menuRoutes = generateSettingsMenu(project?.ref as string, project, isVaultEnabled) useEffect(() => { - if (ui.selectedProject?.ref) { + if (project?.ref) { meta.extensions.load() } - }, [ui.selectedProject?.ref]) + }, [project?.ref]) return ( = ({ title, children }) => { const { ui, meta } = useStore() + const project = useSelectedProject() const { ref: projectRef } = useParams() const storageExplorerStore = useStorageStore() const { @@ -32,7 +33,7 @@ const StorageLayout: FC = ({ title, children }) => { const { data: settings, isLoading } = useProjectApiQuery({ projectRef }) const apiService = settings?.autoApiService - const isPaused = ui.selectedProject?.status === PROJECT_STATUS.INACTIVE + const isPaused = project?.status === PROJECT_STATUS.INACTIVE useEffect(() => { if (!isLoading && apiService) initializeStorageStore(apiService) diff --git a/studio/components/layouts/TableEditorLayout/TableEditorLayout.tsx b/studio/components/layouts/TableEditorLayout/TableEditorLayout.tsx index 60143db8f77..909a195df81 100644 --- a/studio/components/layouts/TableEditorLayout/TableEditorLayout.tsx +++ b/studio/components/layouts/TableEditorLayout/TableEditorLayout.tsx @@ -1,21 +1,21 @@ -import { PropsWithChildren, useEffect } from 'react' -import { useRouter } from 'next/router' +import { PermissionAction } from '@supabase/shared-types/out/constants' import { noop } from 'lodash' import { observer } from 'mobx-react-lite' -import { PermissionAction } from '@supabase/shared-types/out/constants' +import { useRouter } from 'next/router' +import { PropsWithChildren, useEffect } from 'react' -import { checkPermissions, useStore } from 'hooks' import { useParams } from 'common/hooks' -import { Entity } from 'data/entity-types/entity-type-query' +import Connecting from 'components/ui/Loading/Loading' +import NoPermission from 'components/ui/NoPermission' import { ENTITY_TYPE } from 'data/entity-types/entity-type-constants' +import { Entity } from 'data/entity-types/entity-type-query' +import { checkPermissions, useSelectedProject, useStore } from 'hooks' +import useEntityType from 'hooks/misc/useEntityType' +import useLatest from 'hooks/misc/useLatest' import { useIsTableLoaded, useTableEditorStateSnapshot } from 'state/table-editor' import ProjectLayout from '../' -import TableEditorMenu from './TableEditorMenu' -import NoPermission from 'components/ui/NoPermission' -import useEntityType from 'hooks/misc/useEntityType' -import Connecting from 'components/ui/Loading/Loading' -import useLatest from 'hooks/misc/useLatest' import useTableRowsPrefetchWrapper from './TableEditorLayout.utils' +import TableEditorMenu from './TableEditorMenu' export interface TableEditorLayoutProps { selectedSchema?: string @@ -37,7 +37,8 @@ const TableEditorLayout = ({ onDuplicateTable = noop, children, }: PropsWithChildren) => { - const { vault, meta, ui } = useStore() + const { vault, meta } = useStore() + const selectedProject = useSelectedProject() const router = useRouter() const { ref, id: _id } = useParams() const id = _id ? Number(_id) : undefined @@ -49,14 +50,14 @@ const TableEditorLayout = ({ const isVaultEnabled = vaultExtension !== undefined && vaultExtension.installed_version !== null useEffect(() => { - if (ui.selectedProject?.ref) { + if (selectedProject?.ref) { meta.schemas.load() meta.types.load() meta.policies.load() meta.publications.load() meta.extensions.load() } - }, [ui.selectedProject?.ref]) + }, [selectedProject?.ref]) const isLoaded = useIsTableLoaded(ref, id) @@ -112,7 +113,7 @@ const TableEditorLayout = ({ if (isVaultEnabled) { vault.load() } - }, [ui.selectedProject?.ref, isVaultEnabled]) + }, [selectedProject?.ref, isVaultEnabled]) if (!canReadTables) { return ( diff --git a/studio/components/to-be-cleaned/Dropdown/OrganizationDropdown.js b/studio/components/to-be-cleaned/Dropdown/OrganizationDropdown.js index c0d03ac03c9..ddfa2ba75b0 100644 --- a/studio/components/to-be-cleaned/Dropdown/OrganizationDropdown.js +++ b/studio/components/to-be-cleaned/Dropdown/OrganizationDropdown.js @@ -1,17 +1,11 @@ -import React from 'react' import { useRouter } from 'next/router' -import { toJS } from 'mobx' -import { Button, Dropdown, IconPlus } from 'ui' -import { observer } from 'mobx-react-lite' + import { useFlag } from 'hooks' +import { Button, Dropdown, IconPlus } from 'ui' const OrganizationDropdown = ({ organizations }) => { const router = useRouter() - const organizationList = Object.values(toJS(organizations.data)).sort((a, b) => - a.name.localeCompare(b.name) - ) - const orgCreationV2 = useFlag('orgcreationv2') return ( @@ -21,7 +15,7 @@ const OrganizationDropdown = ({ organizations }) => { overlay={ <> Choose organization - {organizationList + {organizations .sort((a, b) => a.name.localeCompare(b.name)) .map((x) => ( { ) } -export default observer(OrganizationDropdown) +export default OrganizationDropdown diff --git a/studio/components/ui/UpgradeToPro.tsx b/studio/components/ui/UpgradeToPro.tsx index fb17a75452a..e1771980505 100644 --- a/studio/components/ui/UpgradeToPro.tsx +++ b/studio/components/ui/UpgradeToPro.tsx @@ -1,13 +1,13 @@ -import { Button } from 'ui' -import { observer } from 'mobx-react-lite' +import * as Tooltip from '@radix-ui/react-tooltip' +import { PermissionAction } from '@supabase/shared-types/out/constants' import Link from 'next/link' import { FC, ReactNode } from 'react' -import * as Tooltip from '@radix-ui/react-tooltip' -import { checkPermissions, useStore, useFlag } from 'hooks' import { useParams } from 'common/hooks' +import { useProjectContext } from 'components/layouts/ProjectLayout/ProjectContext' +import { checkPermissions, useFlag } from 'hooks' import { PRICING_TIER_PRODUCT_IDS } from 'lib/constants' -import { PermissionAction } from '@supabase/shared-types/out/constants' +import { Button } from 'ui' interface Props { icon?: ReactNode @@ -17,9 +17,9 @@ interface Props { } const UpgradeToPro: FC = ({ icon, primaryText, projectRef, secondaryText }) => { - const { ui } = useStore() const { ref } = useParams() - const tier = ui.selectedProject?.subscription_tier + const { project } = useProjectContext() + const tier = project?.subscription_tier const canUpdateSubscription = checkPermissions( PermissionAction.BILLING_WRITE, @@ -93,4 +93,4 @@ const UpgradeToPro: FC = ({ icon, primaryText, projectRef, secondaryText ) } -export default observer(UpgradeToPro) +export default UpgradeToPro diff --git a/studio/data/organizations/organizations-query.ts b/studio/data/organizations/organizations-query.ts index 598c8b17df4..72dc26b52b6 100644 --- a/studio/data/organizations/organizations-query.ts +++ b/studio/data/organizations/organizations-query.ts @@ -1,4 +1,4 @@ -import { useQuery, useQueryClient, UseQueryOptions } from '@tanstack/react-query' +import { QueryClient, useQuery, useQueryClient, UseQueryOptions } from '@tanstack/react-query' import { get } from 'lib/common/fetch' import { API_URL } from 'lib/constants' import { useCallback } from 'react' @@ -7,11 +7,13 @@ import { organizationKeys } from './keys' export type OrganizationsResponse = Organization[] -export async function getOrganizations(signal?: AbortSignal) { +export async function getOrganizations(signal?: AbortSignal): Promise { const data = await get(`${API_URL}/organizations`, { signal }) if (data.error) throw data.error - return data as OrganizationsResponse + const sorted = (data as Organization[]).sort((a, b) => a.name.localeCompare(b.name)) + + return sorted } export type OrganizationsData = Awaited> @@ -35,3 +37,7 @@ export const useOrganizationsPrefetch = () => { [] ) } + +export function invalidateOrganizationsQuery(client: QueryClient) { + return client.invalidateQueries(organizationKeys.list()) +} diff --git a/studio/data/projects/projects-query.ts b/studio/data/projects/projects-query.ts index 7429a1fd7c5..eb31d0f5d69 100644 --- a/studio/data/projects/projects-query.ts +++ b/studio/data/projects/projects-query.ts @@ -1,7 +1,8 @@ -import { useQuery, useQueryClient, UseQueryOptions } from '@tanstack/react-query' +import { QueryClient, useQuery, useQueryClient, UseQueryOptions } from '@tanstack/react-query' +import { useCallback, useRef } from 'react' + import { get } from 'lib/common/fetch' import { API_URL } from 'lib/constants' -import { useCallback } from 'react' import { Project } from 'types' import { projectKeys } from './keys' @@ -28,10 +29,28 @@ export const useProjectsQuery = ({ { enabled: enabled, ...options } ) -export const useProjectsPrefetch = () => { +export function prefetchProjects(client: QueryClient) { + return client.prefetchQuery(projectKeys.list(), ({ signal }) => getProjects(signal)) +} + +export function useProjectsPrefetch() { const client = useQueryClient() return useCallback(() => { - client.prefetchQuery(projectKeys.list(), ({ signal }) => getProjects(signal)) - }, []) + prefetchProjects(client) + }, [client]) +} + +export function useAutoProjectsPrefetch() { + const prefetch = useProjectsPrefetch() + + const called = useRef(false) + if (called.current === false) { + called.current = true + prefetch() + } +} + +export function invalidateProjectsQuery(client: QueryClient) { + return client.invalidateQueries(projectKeys.list()) } diff --git a/studio/hooks/index.ts b/studio/hooks/index.ts index 25a3607e163..c8c4d6b4db6 100644 --- a/studio/hooks/index.ts +++ b/studio/hooks/index.ts @@ -1,7 +1,9 @@ +export * from './deprecated' +export * from './misc/useCheckPermissions' +export * from './misc/useImmutableValue' +export * from './misc/useLocalStorage' +export * from './misc/useSelectedOrganization' +export * from './misc/useSelectedProject' export * from './misc/useStore' export * from './misc/withAuth' -export * from './misc/useImmutableValue' -export * from './misc/useCheckPermissions' -export * from './misc/useLocalStorage' -export * from './deprecated' export * from './ui' diff --git a/studio/hooks/misc/useCheckPermissions.ts b/studio/hooks/misc/useCheckPermissions.ts index 3866b4295ad..300285def31 100644 --- a/studio/hooks/misc/useCheckPermissions.ts +++ b/studio/hooks/misc/useCheckPermissions.ts @@ -1,35 +1,41 @@ -import { useStore } from 'hooks' import jsonLogic from 'json-logic-js' + +import { usePermissionsQuery } from 'data/permissions/permissions-query' import { IS_PLATFORM } from 'lib/constants' +import { useSelectedOrganization } from './useSelectedOrganization' const toRegexpString = (actionOrResource: string) => `^${actionOrResource.replace('.', '\\.').replace('%', '.*')}$` -export function checkPermissions( +export function useCheckPermissions( action: string, resource: string, data?: object, organizationId?: number ) { + const { data: permissions } = usePermissionsQuery({ + enabled: IS_PLATFORM, + }) + const organization = useSelectedOrganization() + if (!IS_PLATFORM) return true - const { ui } = useStore() - const orgId = organizationId ?? ui?.selectedOrganization?.id + const orgId = organizationId ?? organization?.id - return (ui?.permissions ?? []) + return (permissions ?? []) .filter( - (permission: { - actions: string[] - condition: jsonLogic.RulesLogic - organization_id: number - resources: string[] - }) => + (permission) => + permission.organization_id === orgId && permission.actions.some((act) => (action ? action.match(toRegexpString(act)) : null)) && - permission.resources.some((res) => resource.match(toRegexpString(res))) && - permission.organization_id === orgId + permission.resources.some((res) => resource.match(toRegexpString(res))) ) .some( ({ condition }: { condition: jsonLogic.RulesLogic }) => condition === null || jsonLogic.apply(condition, { resource_name: resource, ...data }) ) } + +/** + * @deprecated use useCheckPermissions instead + */ +export const checkPermissions = useCheckPermissions diff --git a/studio/hooks/misc/useSelectedOrganization.ts b/studio/hooks/misc/useSelectedOrganization.ts new file mode 100644 index 00000000000..b63927fd14b --- /dev/null +++ b/studio/hooks/misc/useSelectedOrganization.ts @@ -0,0 +1,17 @@ +import { useParams } from 'common' +import { useOrganizationsQuery } from 'data/organizations/organizations-query' +import { useMemo } from 'react' + +import { useSelectedProject } from './useSelectedProject' + +export function useSelectedOrganization() { + const { slug } = useParams() + const { data } = useOrganizationsQuery() + const selectedProject = useSelectedProject() + + return useMemo(() => { + return data?.find( + (org) => org.slug === slug || (selectedProject && org.id === selectedProject.organization_id) + ) + }, [data, selectedProject, slug]) +} diff --git a/studio/hooks/misc/useSelectedProject.ts b/studio/hooks/misc/useSelectedProject.ts new file mode 100644 index 00000000000..00c77b5a19e --- /dev/null +++ b/studio/hooks/misc/useSelectedProject.ts @@ -0,0 +1,12 @@ +import { useParams } from 'common' +import { useProjectsQuery } from 'data/projects/projects-query' +import { useMemo } from 'react' + +export function useSelectedProject() { + const { ref } = useParams() + const { data } = useProjectsQuery() + + return useMemo(() => { + return data?.find((project) => project.ref === ref) + }, [data, ref]) +} diff --git a/studio/hooks/misc/withAuth.tsx b/studio/hooks/misc/withAuth.tsx index be44628398e..3daa4716f66 100644 --- a/studio/hooks/misc/withAuth.tsx +++ b/studio/hooks/misc/withAuth.tsx @@ -2,9 +2,9 @@ import Head from 'next/head' import { useRouter } from 'next/router' import { ComponentType, useEffect } from 'react' +import { useParams } from 'common/hooks' import { usePermissionsQuery } from 'data/permissions/permissions-query' import { useStore } from 'hooks' -import { useParams } from 'common/hooks' import { useAuth } from 'lib/auth' import { IS_PLATFORM } from 'lib/constants' import { getReturnToPath, STORAGE_KEY } from 'lib/gotrue' @@ -34,17 +34,12 @@ export function withAuth( const rootStore = useStore() const { isLoading, session } = useAuth() - const { app, ui } = rootStore + const { ui } = rootStore const page = router.pathname.split('/').slice(3).join('/') const redirectTo = options?.redirectTo ?? defaultRedirectTo(ref) const redirectIfFound = options?.redirectIfFound - useEffect(() => { - if (!app.organizations.isInitialized) app.organizations.load() - if (!app.projects.isInitialized) app.projects.load() - }, [app.organizations.isInitialized, app.projects.isInitialized]) - usePermissionsQuery({ enabled: IS_PLATFORM, onSuccess(permissions) { diff --git a/studio/lib/auth.tsx b/studio/lib/auth.tsx index 762cc3da511..d6bef4ea744 100644 --- a/studio/lib/auth.tsx +++ b/studio/lib/auth.tsx @@ -1,6 +1,6 @@ import { useQueryClient } from '@tanstack/react-query' import { useRouter } from 'next/router' -import { PropsWithChildren, useCallback, useEffect, useRef } from 'react' +import { PropsWithChildren, useCallback, useEffect } from 'react' import { AuthContext as AuthContextInternal, @@ -8,17 +8,19 @@ import { gotrueClient, useTelemetryProps, } from 'common' +import { invalidateOrganizationsQuery } from 'data/organizations/organizations-query' +import { useProfileCreateMutation } from 'data/profile/profile-create-mutation' import { useProfileQuery } from 'data/profile/profile-query' import { useStore } from 'hooks' import Telemetry from 'lib/telemetry' import { GOTRUE_ERRORS, IS_PLATFORM } from './constants' import { clearLocalStorage } from './local-storage' -import { useProfileCreateMutation } from 'data/profile/profile-create-mutation' export const AuthContext = AuthContextInternal export const AuthProvider = ({ children }: PropsWithChildren<{}>) => { - const { ui, app } = useStore() + const queryClient = useQueryClient() + const { ui } = useStore() const router = useRouter() const telemetryProps = useTelemetryProps() @@ -56,12 +58,14 @@ export const AuthProvider = ({ children }: PropsWithChildren<{}>) => { }, []) const { mutate: createProfile } = useProfileCreateMutation({ - onSuccess() { + async onSuccess() { Telemetry.sendEvent( { category: 'conversion', action: 'sign_up', label: '' }, telemetryProps, router ) + + await invalidateOrganizationsQuery(queryClient) }, onError(err) { ui.setNotification({ @@ -75,12 +79,6 @@ export const AuthProvider = ({ children }: PropsWithChildren<{}>) => { useProfileQuery({ onSuccess(profile) { Telemetry.sendIdentify(profile, telemetryProps) - - // [Joshen] Temp fix: For new users, the GET profile call also creates a default org - // But because the dashboard's logged in state is using gotrue as the source of truth - // the home page loads before the GET profile call completes (and consequently before the - // creation of the default org). Hence why calling org load here - app.organizations.load() }, onError(err) { // if the user does not yet exist, create a profile for them @@ -104,5 +102,5 @@ export function useSignOut() { await queryClient.resetQueries() return result - }, []) + }, [queryClient]) } diff --git a/studio/pages/new/[slug].tsx b/studio/pages/new/[slug].tsx index fe03cf0ddc3..38c5c7dbb8f 100644 --- a/studio/pages/new/[slug].tsx +++ b/studio/pages/new/[slug].tsx @@ -1,47 +1,48 @@ -import Router, { useRouter } from 'next/router' -import { useRef, useState, useEffect, PropsWithChildren } from 'react' -import { debounce, isUndefined, values } from 'lodash' -import { toJS } from 'mobx' -import { observer } from 'mobx-react-lite' -import generator from 'generate-password' -import { Button, Listbox, IconUsers, Input, Alert, IconHelpCircle, Toggle, IconInfo } from 'ui' import { PermissionAction } from '@supabase/shared-types/out/constants' -import { NextPageWithLayout } from 'types' -import { passwordStrength, pluckObjectFields } from 'lib/helpers' +import generator from 'generate-password' +import { debounce, isUndefined } from 'lodash' +import { observer } from 'mobx-react-lite' +import Router, { useRouter } from 'next/router' +import { useEffect, useRef, useState } from 'react' + +import { useParams } from 'common/hooks' +import SpendCapModal from 'components/interfaces/Billing/SpendCapModal' +import { + EmptyPaymentMethodWarning, + FreeProjectLimitWarning, + NotOrganizationOwnerWarning, +} from 'components/interfaces/Organization/NewProject' +import { WizardLayoutWithoutAuth } from 'components/layouts' +import DisabledWarningDueToIncident from 'components/ui/DisabledWarningDueToIncident' +import InformationBox from 'components/ui/InformationBox' +import Panel from 'components/ui/Panel' +import PasswordStrengthBar from 'components/ui/PasswordStrengthBar' +import { useFreeProjectLimitCheckQuery } from 'data/organizations/free-project-limit-check-query' +import { useOrganizationsQuery } from 'data/organizations/organizations-query' +import { useCheckPermissions, useFlag, useStore, withAuth } from 'hooks' import { get, post } from 'lib/common/fetch' import { API_URL, - PROVIDERS, + AWS_REGIONS, + CloudProvider, DEFAULT_MINIMUM_PASSWORD_STRENGTH, - PRICING_TIER_LABELS, + DEFAULT_PROVIDER, + FLY_REGIONS, PRICING_TIER_DEFAULT_KEY, PRICING_TIER_FREE_KEY, + PRICING_TIER_LABELS, PRICING_TIER_PRODUCT_IDS, - AWS_REGIONS, - FLY_REGIONS, - CloudProvider, + PROVIDERS, Region, - DEFAULT_PROVIDER, } from 'lib/constants' -import { useStore, useFlag, withAuth, checkPermissions } from 'hooks' -import { useParams } from 'common/hooks' -import { useFreeProjectLimitCheckQuery } from 'data/organizations/free-project-limit-check-query' -import { WizardLayoutWithoutAuth } from 'components/layouts' -import Panel from 'components/ui/Panel' -import PasswordStrengthBar from 'components/ui/PasswordStrengthBar' -import DisabledWarningDueToIncident from 'components/ui/DisabledWarningDueToIncident' -import { - FreeProjectLimitWarning, - NotOrganizationOwnerWarning, - EmptyPaymentMethodWarning, -} from 'components/interfaces/Organization/NewProject' -import SpendCapModal from 'components/interfaces/Billing/SpendCapModal' -import InformationBox from 'components/ui/InformationBox' +import { passwordStrength, pluckObjectFields } from 'lib/helpers' +import { NextPageWithLayout } from 'types' +import { Alert, Button, IconHelpCircle, IconInfo, IconUsers, Input, Listbox, Toggle } from 'ui' const Wizard: NextPageWithLayout = () => { const router = useRouter() const { slug } = useParams() - const { app, ui } = useStore() + const { ui } = useStore() const projectCreationDisabled = useFlag('disableProjectCreationAndUpdate') const cloudProviderEnabled = useFlag('enableFlyCloudProvider') @@ -66,17 +67,17 @@ const Wizard: NextPageWithLayout = () => { const [isSpendCapEnabled, setIsSpendCapEnabled] = useState(true) - const organizations = values(toJS(app.organizations.list())) - const currentOrg = organizations.find((o: any) => o.slug === slug) + const { data: organizations, isSuccess: isOrganizationsSuccess } = useOrganizationsQuery() + const currentOrg = organizations?.find((o: any) => o.slug === slug) const billedViaOrg = Boolean(currentOrg?.subscription_id) const [availableRegions, setAvailableRegions] = useState( getAvailableRegions(PROVIDERS[cloudProvider].id) ) - const isAdmin = checkPermissions(PermissionAction.CREATE, 'projects') + const isAdmin = useCheckPermissions(PermissionAction.CREATE, 'projects') const isInvalidSlug = isUndefined(currentOrg) - const isEmptyOrganizations = organizations.length <= 0 && app.organizations.isInitialized + const isEmptyOrganizations = (organizations?.length ?? 0) <= 0 && isOrganizationsSuccess const isEmptyPaymentMethod = paymentMethods ? !paymentMethods.length : false const isSelectFreeTier = dbPricingTierKey === PRICING_TIER_FREE_KEY const hasMembersExceedingFreeTierLimit = (membersExceededLimit || []).length > 0 @@ -108,8 +109,8 @@ const Wizard: NextPageWithLayout = () => { * Redirect to first org if the slug doesn't match an org slug * this is mainly to capture the /project/new url, which is redirected from database.new */ - if (isInvalidSlug && organizations.length > 0) { - router.push(`/new/${organizations[0].slug}`) + if (isInvalidSlug && (organizations?.length ?? 0) > 0) { + router.push(`/new/${organizations?.[0].slug}`) } useEffect(() => { @@ -210,7 +211,6 @@ const Wizard: NextPageWithLayout = () => { message: `Failed to create new project: ${response.error.message}`, }) } else { - app.onProjectCreated(response) router.push(`/project/${response.ref}/building`) } } @@ -245,7 +245,7 @@ const Wizard: NextPageWithLayout = () => { return (

    Create a new project

    @@ -292,14 +292,14 @@ const Wizard: NextPageWithLayout = () => { 'border-panel-border-interior-light dark:border-panel-border-interior-dark', ].join(' ')} > - {organizations.length > 0 && ( + {(organizations?.length ?? 0) > 0 && ( router.push(`/new/${slug}`)} > - {organizations.map((x: any) => ( + {organizations?.map((x: any) => ( { ) } -const PageLayout = withAuth( - observer>(({ children }) => { - const router = useRouter() - const { slug } = router.query +const PageLayout = withAuth(({ children }) => { + const { slug } = useParams() - const { app } = useStore() - const organizations = values(toJS(app.organizations.list())) - const currentOrg = organizations.find((o: any) => o.slug === slug) + const { data: organizations } = useOrganizationsQuery() + const currentOrg = organizations?.find((o: any) => o.slug === slug) - return ( - - {children} - - ) - }) -) + return ( + + {children} + + ) +}) Wizard.getLayout = (page) => {page} diff --git a/studio/pages/new/index.tsx b/studio/pages/new/index.tsx index 8ca1dcfd02d..b4e54938c00 100644 --- a/studio/pages/new/index.tsx +++ b/studio/pages/new/index.tsx @@ -1,13 +1,15 @@ -import { useState } from 'react' +import { useQueryClient } from '@tanstack/react-query' import { observer } from 'mobx-react-lite' -import { Button, Input, Listbox } from 'ui' import { useRouter } from 'next/router' +import { useState } from 'react' +import { Button, Input, Listbox } from 'ui' -import { API_URL } from 'lib/constants' -import { useStore } from 'hooks' -import { post } from 'lib/common/fetch' import { WizardLayout } from 'components/layouts' import Panel from 'components/ui/Panel' +import { invalidateOrganizationsQuery } from 'data/organizations/organizations-query' +import { useStore } from 'hooks' +import { post } from 'lib/common/fetch' +import { API_URL } from 'lib/constants' import { NextPageWithLayout } from 'types' const ORG_KIND_TYPES = { @@ -33,7 +35,8 @@ const ORG_SIZE_DEFAULT = '1' * No org selected yet, create a new one */ const Wizard: NextPageWithLayout = () => { - const { ui, app } = useStore() + const queryClient = useQueryClient() + const { ui } = useStore() const router = useRouter() const [orgName, setOrgName] = useState('') @@ -81,7 +84,7 @@ const Wizard: NextPageWithLayout = () => { }) } else { const org = response - app.onOrgAdded(org) + await invalidateOrganizationsQuery(queryClient) router.push(`/new/${org.slug}`) } } diff --git a/studio/pages/org/[slug]/billing.tsx b/studio/pages/org/[slug]/billing.tsx index 83c44735b40..774a22c49c0 100644 --- a/studio/pages/org/[slug]/billing.tsx +++ b/studio/pages/org/[slug]/billing.tsx @@ -1,30 +1,29 @@ import { useRouter } from 'next/router' -import { observer } from 'mobx-react-lite' + +import { useParams } from 'common/hooks' +import { BillingSettings } from 'components/interfaces/Organization' +import { OrganizationLayout } from 'components/layouts' +import Loading from 'components/ui/Loading' +import { usePermissionsQuery } from 'data/permissions/permissions-query' +import { useSelectedOrganization } from 'hooks' +import { NextPageWithLayout } from 'types' import { Tabs } from 'ui' -import { NextPageWithLayout } from 'types' -import { useStore } from 'hooks' -import { useParams } from 'common/hooks' -import Loading from 'components/ui/Loading' -import { OrganizationLayout } from 'components/layouts' -import { BillingSettings } from 'components/interfaces/Organization' - const OrgBillingSettings: NextPageWithLayout = () => { - const { ui } = useStore() + const { data: permissions } = usePermissionsQuery() + const selectedOrganization = useSelectedOrganization() const { slug } = useParams() const router = useRouter() return ( <> - {ui.selectedOrganization === undefined && (ui?.permissions ?? []).length === 0 ? ( + {selectedOrganization === undefined && (permissions ?? []).length === 0 ? ( ) : (
    -

    - {ui.selectedOrganization?.name ?? 'Organization'} settings -

    +

    {selectedOrganization?.name ?? 'Organization'} settings