import { searchPlayersAcrossRegions, type AccountListItem, type AccountListWithServer, } from '@blitzkit/core'; import { literals } from '@blitzkit/i18n/src/literals'; import { CaretLeftIcon, Link2Icon, PersonIcon } from '@radix-ui/react-icons'; import { Badge, Button, Dialog, Flex, Heading, Spinner, Text, TextField, } from '@radix-ui/themes'; import { debounce } from 'lodash-es'; import { useCallback, useRef, useState } from 'react'; import { stringify } from 'urlon'; import type { embedConfigurations } from '../../constants/embeds'; import { useLocale } from '../../hooks/useLocale'; import { EmbedState, type EmbedStateStore } from '../../stores/embedState'; import { CopyButton } from '../CopyButton'; interface GenerateURLProps { embed: keyof typeof embedConfigurations; } export function GenerateURL({ embed }: GenerateURLProps) { const [searchDialogOpen, setSearchDialogOpen] = useState(false); const [copyDialogOpen, setCopyDialogOpen] = useState(false); const [copyUser, setCopyUser] = useState(null); const embedStateStore = EmbedState.useStore(); const input = useRef(null); const [searching, setSearching] = useState(false); const [results, setResults] = useState([]); const { strings } = useLocale(); const performSearch = useCallback( debounce(async () => { if (!input.current) return; const sanitized = input.current.value.trim(); if (sanitized.length === 0) { setSearching(false); return; } const results = await searchPlayersAcrossRegions(sanitized, 12); setSearching(false); setResults(results); }, 500), [], ); const handleChange = useCallback(() => { if (!input.current) return; const sanitized = input.current.value.trim(); if (sanitized.length === 0) { setSearching(false); setResults([]); } else { setSearching(true); performSearch(); } }, []); return ( <> {strings.website.tools.embed.configuration.export.generate.title} { strings.website.tools.embed.configuration.export.generate .subtitle } {searching && ( {strings.website.common.player_search.searching} )} {!searching && results.length === 0 && ( {strings.website.common.player_search.no_results} )} {!searching && results.length > 0 && ( {results.map((result) => ( ))} )} { strings.website.tools.embed.configuration.export.generate .success.title } {literals( strings.website.tools.embed.configuration.export.generate .success.info, [`${copyUser?.nickname}`], )} { if (!copyUser) return; 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: `${copyUser.account_id}`, state: stringify(shallowState), }); setSearchDialogOpen(false); setCopyDialogOpen(false); return `${location.origin}/tools/embed/${embed}/host?${searchParams.toString()}`; }} > {' '} { strings.website.tools.embed.configuration.export.generate .success.copy } ); }