// Depdendencies import { cloudflareConfig } from 'shared/config/cloudflare.mjs' import { freeSewingConfig } from 'shared/config/freesewing.config.mjs' // Context import { LoadingStatusContext } from 'shared/context/loading-status-context.mjs' // Hooks import { useState, useEffect, useContext } from 'react' import { useBackend } from 'shared/hooks/use-backend.mjs' import { useAccount } from 'shared/hooks/use-account.mjs' // Components import Link from 'next/link' import { Json } from 'shared/components/json.mjs' import { Mdx } from 'shared/components/mdx/dynamic.mjs' import { AccountRole } from 'shared/components/account/role.mjs' import { AccountStatus } from 'shared/components/account/status.mjs' import { Loading } from 'shared/components/spinner.mjs' import { Tabs, Tab } from 'shared/components/tabs.mjs' const roles = ['user', 'curator', 'bughunter', 'support', 'admin'] export const ImpersonateButton = ({ userId }) => { const backend = useBackend() const { setLoadingStatus } = useContext(LoadingStatusContext) const { impersonate } = useAccount() if (!userId) return null const impersonateUser = async () => { setLoadingStatus([true, 'status:contactingBackend']) const result = await backend.adminImpersonateUser(userId) if (result.success) { impersonate(result.data) setLoadingStatus([true, 'status:settingsSaved', true, true]) } else setLoadingStatus([true, 'status:backendError', true, false]) } return ( ) } export const Row = ({ title, val }) => ( {title} {val} ) export const Hits = ({ results }) => ( <> {results && results.username && results.username.length > 0 && ( <>

Results based on username

{results.username.map((user) => ( ))} )} {results && results.email && results.email.length > 0 && ( <>

Results based on E-mail address

{results.email.map((user) => ( ))} )} ) export const ShowUser = ({ user, button = null }) => (
{user.username} | | | {user.id}
{button}
) export const User = ({ user }) => (
Manage user } />
) export const ManageUser = ({ userId }) => { // Hooks const backend = useBackend() const { setLoadingStatus } = useContext(LoadingStatusContext) const { account } = useAccount() const { role } = account // State const [user, setUser] = useState({}) const [patterns, setPatterns] = useState({}) const [sets, setSets] = useState({}) // Effect useEffect(() => { const loadUser = async () => { const result = await backend.adminLoadUser(userId) if (result.success) { setUser(result.data.user) setPatterns(result.data.patterns) setSets(result.data.sets) } } loadUser() }, [userId]) const updateUser = async (data) => { setLoadingStatus([true, 'status:contactingBackend']) const result = await backend.adminUpdateUser({ id: userId, data }) if (result.success) { setLoadingStatus([true, 'status:settingsSaved', true, true]) setUser(result.data.user) } else setLoadingStatus([true, 'status:backendError', true, false]) } return user.id ? (
: null} /> {role === 'admin' ? (
{roles.map((role) => ( ))}
) : null}
{user.mfaEnabled && ( )} {Object.keys(freeSewingConfig.statuses).map((status) => ( ))}
{user.id ? : null} {patterns ? : null} {sets ? : null}
) : ( ) }