// Dependencies import { cloudflareImageUrl, nsMerge } from 'shared/utils.mjs' // Context import { LoadingStatusContext } from 'shared/context/loading-status-context.mjs' // Hooks import { useTranslation } from 'next-i18next' import { useEffect, useState, useContext } from 'react' import { useBackend } from 'shared/hooks/use-backend.mjs' import { useRouter } from 'next/router' // Components import { AuthWrapper } from 'shared/components/wrappers/auth/index.mjs' import { Loading } from 'shared/components/spinner.mjs' import { DisplayRow } from 'shared/components/account/shared.mjs' import { PageLink } from 'shared/components/link.mjs' import Markdown from 'react-markdown' import { Error404, ns as errNs } from 'shared/components/errors/404.mjs' import { TrashIcon } from 'shared/components/icons.mjs' import { Popout } from 'shared/components/popout/index.mjs' export const ns = nsMerge('account', 'submissions', errNs) export const CsetSubmissions = () => { const { t } = useTranslation(ns) const { setLoadingStatus, LoadingProgress } = useContext(LoadingStatusContext) const backend = useBackend() const [suggested, setSuggested] = useState([]) const [selected, setSelected] = useState({}) const [refresh, setRefresh] = useState(0) useEffect(() => { const loadSuggestedSets = async () => { setLoadingStatus([true, 'status:loadingData']) const result = await backend.getSuggestedSets() if (result.success) { setLoadingStatus([true, 'status:dataLoaded', true, true]) setSuggested(result.data.suggested) } else setLoadingStatus([true, 'status:backendError', true, false]) } loadSuggestedSets() }, [refresh]) // Helper var to see how many are selected const selCount = Object.keys(selected).length // Helper method to toggle single selection const toggleSelect = (id) => { const newSelected = { ...selected } if (newSelected[id]) delete newSelected[id] else newSelected[id] = 1 setSelected(newSelected) } // Helper method to toggle select all const toggleSelectAll = () => { if (selCount === suggested.length) setSelected({}) else { const newSelected = {} for (const sug of suggested) newSelected[key.id] = 1 setSelected(newSelected) } } // Helper to delete one or more apikeys const removeSelectedSuggestions = async () => { let i = 0 for (const key in selected) { i++ await backend.removeSuggestedMeasurementsSet(key) setLoadingStatus([ true, , ]) } setSelected({}) setRefresh(refresh + 1) setLoadingStatus([true, 'nailedIt', true, true]) } if (suggested.length < 1) return (
There are no suggested measurements sets
) return ( <> {selCount ? ( ) : null} {suggested.map((sug, i) => ( ))}
{t('curate:img')} {t('curate:name')} {t('curate:user')} {t('curate:set')} {t('curate:height')} {t('curate:createdAt')}
toggleSelect(sug.id)} /> {sug.data.height}
) } export const CsetSubmission = ({ id }) => { // Hooks const { t } = useTranslation(ns) const backend = useBackend() const { setLoadingStatus } = useContext(LoadingStatusContext) const router = useRouter() const [submission, setSubmission] = useState(false) const [error, setError] = useState(false) useEffect(() => { const loadSubmission = async () => { setLoadingStatus([true, 'status:contactingBackend']) const result = await backend.loadConfirmation({ id, check: 'check' }) if (result.success) { setLoadingStatus([true, 'status:dataLoaded', true, true]) setSubmission(result.data.submission) } else { if (result.status === 404) setError(404) setLoadingStatus([true, 'status:backendError', true, false]) } } if (id) loadSubmission() }, [id]) const csetFromSuggestedSet = async () => { setLoadingStatus([true, 'status:contactingBackend']) const result = await backend.csetFromSuggestedSet(submission.id) console.log(result) if (result.success) { setLoadingStatus([true, 'status:nailedIt', true, true]) router.push(`/curated-sets/${result.data.set.id}`) } else setLoadingStatus([true, 'backendError', true, false]) } if (!id) return if (error === 404) return return (
{submission.name} {submission.height} {submission.notes} {submission.id && ( )}
) }