// 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'
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}
)
export const User = ({ user }) => (
Manage user
}
/>
)
export const ManageUser = ({ userId }) => {
// Hooks
const backend = useBackend()
const { setLoadingStatus } = useContext(LoadingStatusContext)
// State
const [user, setUser] = useState({})
// Effect
useEffect(() => {
const loadUser = async () => {
const result = await backend.adminLoadUser(userId)
if (result.success) setUser(result.data.user)
}
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 ? (
} />
{roles.map((role) => (
))}
{user.mfaEnabled && (
)}
{Object.keys(freeSewingConfig.statuses).map((status) => (
))}
{user.id ?
: null}
) : (
)
}