diff --git a/package.json b/package.json index bb74198f..99545c6e 100644 --- a/package.json +++ b/package.json @@ -91,6 +91,7 @@ "user-agents": "^1.1.387", "uuid": "^13.0.0", "winreg": "^1.2.5", + "workwonders-sdk": "0.0.10", "ws": "^8.18.1", "yaml": "^2.6.1", "yup": "^1.5.0" diff --git a/src/renderer/src/app.tsx b/src/renderer/src/app.tsx index 9334b5b9..ac7ded9f 100644 --- a/src/renderer/src/app.tsx +++ b/src/renderer/src/app.tsx @@ -1,6 +1,6 @@ import { useCallback, useEffect, useRef, useState } from "react"; import { Sidebar, BottomPanel, Header, Toast } from "@renderer/components"; - +import { WorkWondersSdk } from "workwonders-sdk"; import { useAppDispatch, useAppSelector, @@ -52,6 +52,8 @@ export function App() { const { clearDownload, setLastPacket } = useDownload(); + const wokwondersRef = useRef(null); + const { hasActiveSubscription, fetchUserDetails, @@ -114,7 +116,29 @@ export function App() { return () => unsubscribe(); }, [updateLibrary]); - useEffect(() => { + const setupWorkWonders = useCallback( + async (token?: string, locale?: string) => { + if (wokwondersRef.current) return; + + const possibleLocales = ["en", "pt", "ru"]; + + const parsedLocale = + possibleLocales.find((l) => l === locale?.slice(0, 2)) ?? "en"; + + wokwondersRef.current = new WorkWondersSdk(); + await wokwondersRef.current.init({ + organization: "hydra", + token, + locale: parsedLocale, + }); + + await wokwondersRef.current.initChangelogWidget(); + wokwondersRef.current.initChangelogWidgetMini(); + }, + [wokwondersRef] + ); + + const setupExternalResources = useCallback(async () => { const cachedUserDetails = window.localStorage.getItem("userDetails"); if (cachedUserDetails) { @@ -125,21 +149,26 @@ export function App() { dispatch(setProfileBackground(profileBackground)); } - fetchUserDetails() - .then((response) => { - if (response) { - updateUserDetails(response); - } - }) - .finally(() => { - if (document.getElementById("external-resources")) return; + const userPreferences = await window.electron.getUserPreferences(); + const userDetails = await fetchUserDetails().catch(() => null); - const $script = document.createElement("script"); - $script.id = "external-resources"; - $script.src = `${import.meta.env.RENDERER_VITE_EXTERNAL_RESOURCES_URL}/bundle.js?t=${Date.now()}`; - document.head.appendChild($script); - }); - }, [fetchUserDetails, updateUserDetails, dispatch]); + if (userDetails) { + updateUserDetails(userDetails); + } + + setupWorkWonders(userDetails?.workwondersJwt, userPreferences?.language); + + if (!document.getElementById("external-resources")) { + const $script = document.createElement("script"); + $script.id = "external-resources"; + $script.src = `${import.meta.env.RENDERER_VITE_EXTERNAL_RESOURCES_URL}/bundle.js?t=${Date.now()}`; + document.head.appendChild($script); + } + }, [fetchUserDetails, updateUserDetails, dispatch, setupWorkWonders]); + + useEffect(() => { + setupExternalResources(); + }, [setupExternalResources]); const onSignIn = useCallback(() => { fetchUserDetails().then((response) => { @@ -203,6 +232,7 @@ export function App() { useEffect(() => { if (contentRef.current) contentRef.current.scrollTop = 0; + wokwondersRef.current?.notifyUrlChange(); }, [location.pathname, location.search]); useEffect(() => { diff --git a/src/renderer/src/hooks/use-user-details.ts b/src/renderer/src/hooks/use-user-details.ts index eb374e28..8b9a7a17 100644 --- a/src/renderer/src/hooks/use-user-details.ts +++ b/src/renderer/src/hooks/use-user-details.ts @@ -59,6 +59,7 @@ export function useUserDetails() { username: userDetails?.username || "", subscription: userDetails?.subscription || null, featurebaseJwt: userDetails?.featurebaseJwt || "", + workwondersJwt: userDetails?.workwondersJwt || "", karma: userDetails?.karma || 0, }); }, diff --git a/src/types/index.ts b/src/types/index.ts index de792b05..d3d36006 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -187,6 +187,7 @@ export interface UserDetails { profileVisibility: ProfileVisibility; bio: string; featurebaseJwt: string; + workwondersJwt: string; subscription: Subscription | null; karma: number; quirks?: { diff --git a/yarn.lock b/yarn.lock index 9d354966..d98c554d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6354,6 +6354,11 @@ keyv@^4.0.0, keyv@^4.5.3: dependencies: json-buffer "3.0.1" +ky@^1.11.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/ky/-/ky-1.14.1.tgz#16f20b3bf3939abcc04e2a9613f47360fe5f64c9" + integrity sha512-hYje4L9JCmpEQBtudo+v52X5X8tgWXUYyPcxKSuxQNboqufecl9VMWjGiucAFH060AwPXHZuH+WB2rrqfkmafw== + language-subtag-registry@^0.3.20: version "0.3.23" resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz#23529e04d9e3b74679d70142df3fd2eb6ec572e7" @@ -9123,6 +9128,13 @@ word-wrap@^1.2.5: resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== +workwonders-sdk@0.0.10: + version "0.0.10" + resolved "https://registry.yarnpkg.com/workwonders-sdk/-/workwonders-sdk-0.0.10.tgz#377167370a39c905c5228f8972c37c19004b7b21" + integrity sha512-bnswhlLRz1TCiqGV8l+VEOBej7u1SAkzLMEv6A60Sp0+S4j4pnmSve92KeOts/GYtUeNDuNM7fLPwZwMKY3sAg== + dependencies: + ky "^1.11.0" + "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"