From 42c1cb653a57ac9df1d8b3d88e7547c1f107d8cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Sat, 2 Nov 2024 18:38:54 -0500 Subject: [PATCH] feat: login to generate --- .../src/pages/tools/embed/[embed]/_index.tsx | 44 +++++++++++++++++-- 1 file changed, 41 insertions(+), 3 deletions(-) diff --git a/packages/website/src/pages/tools/embed/[embed]/_index.tsx b/packages/website/src/pages/tools/embed/[embed]/_index.tsx index c163ff1ca..b34ac80f8 100644 --- a/packages/website/src/pages/tools/embed/[embed]/_index.tsx +++ b/packages/website/src/pages/tools/embed/[embed]/_index.tsx @@ -10,11 +10,11 @@ import { import { Box, Button, Flex, Heading, ScrollArea, Text } from '@radix-ui/themes'; import { capitalize, startCase } from 'lodash-es'; import { useEffect, useRef, useState, type ReactNode } from 'react'; +import { stringify } from 'urlon'; import { CopyButton } from '../../../../components/CopyButton'; import { Boolean } from '../../../../components/Embeds/Boolean'; import { Color } from '../../../../components/Embeds/Color'; import { Enum } from '../../../../components/Embeds/Enum'; -import { GenerateURL } from '../../../../components/Embeds/GenerateURL'; import { Import } from '../../../../components/Embeds/Import'; import { PreviewWrapper } from '../../../../components/Embeds/PreviewWrapper'; import { Radius } from '../../../../components/Embeds/Radius'; @@ -24,13 +24,18 @@ import { SizeWithout0 } from '../../../../components/Embeds/SizeWithout0'; import { Slider } from '../../../../components/Embeds/Slider'; import { TextController } from '../../../../components/Embeds/TextController'; import { PageWrapper } from '../../../../components/PageWrapper'; +import { WargamingLoginButton } from '../../../../components/WargamingLoginButton'; import { embedConfigurations, extractEmbedConfigDefaults, } from '../../../../constants/embeds'; import { NAVBAR_HEIGHT } from '../../../../constants/navbar'; import { App } from '../../../../stores/app'; -import { EmbedState, type EmbedConfig } from '../../../../stores/embedState'; +import { + EmbedState, + type EmbedConfig, + type EmbedStateStore, +} from '../../../../stores/embedState'; import { EmbedItemType } from '../../../../stores/embedState/constants'; export interface EmbedPreviewControllerProps { @@ -54,6 +59,10 @@ export function Page({ embed }: PageProps) { } function Content({ embed }: PageProps) { + const wargaming = App.useDeferred( + (state) => state.logins.wargaming, + undefined, + ); const embedStateStore = EmbedState.useStore(); const config = embedConfigurations[embed] as EmbedConfig; const [backgroundImage, setBackgroundImage] = useState( @@ -89,7 +98,36 @@ function Content({ embed }: PageProps) { - + {!wargaming && ( + + Log in to generate URL + + )} + {wargaming && ( + { + const state = embedStateStore.getState(); + const initial = embedStateStore.getInitialState(); + const shallowState: EmbedStateStore = {}; + + Object.entries(state).forEach(([key, value]) => { + if (value !== initial[key]) { + shallowState[key] = value; + } + }); + + const searchParams = new URLSearchParams({ + id: `${wargaming.id}`, + state: stringify(shallowState), + }); + + return `${location.origin}/tools/embed/${embed}/host?${searchParams.toString()}`; + }} + > + Generate URL + + )} +