File Extension Image for UserView.jsx UserView.jsx
1664 Chars | 66 Lines | 1.66 kb | Text File Parent Directory
import React, { useState, useEffect } from 'react'
import { getUsersPacks } from '@/lib/pack'
import UserPacks from './Home/UserPacks'
import { useParams } from 'react-router-dom'
import Form from 'react-bootstrap/Form'

const UserView = function ({ username, minimal = false }) {
	const displayName = useParams()?.displayName || username
	const [usersPacks, setUsersPacks] = useState([])

	const [includeLocal, setIncludeLocal] = useState(false)

	// Packs to be excluded by default
	const localAuthors = ['NikashM']

	useEffect(() => {
		async function fetchData() {
			setUsersPacks(await getUsersPacks(displayName))
		}
		fetchData()
	}, [])

	if (usersPacks.length == 0) {
		return (
			<div className="container text-center">
				<div className="m-3">
					Profile not found or {displayName} has not published any packs
				</div>
			</div>
		)
	}

	return (
		<div className={!minimal && 'container'}>
			<div className={!minimal && 'm-3'}>
				{!minimal && (
					<>
						<h3>{displayName === 'tomes' ? `Tomes` : `${displayName}'s Packs`}</h3>

						{displayName === 'tomes' && (
							<Form.Check
								className="mt-1"
								label="Include local packs"
								type="checkbox"
								inline
								onChange={(e) => setIncludeLocal(e.target.checked)}
								checked={includeLocal}
							/>
						)}
					</>
				)}
				<UserPacks
					packs={
						displayName === 'tomes' && !includeLocal
							? usersPacks.filter(
									(pack) => !localAuthors.includes(pack.superficialAuthor)
							  )
							: usersPacks
					}
				/>
			</div>
		</div>
	)
}

export default UserView