File Extension Image for Home.jsx Home.jsx
4453 Chars | 158 Lines | 4.47 kb | Text File Parent Directory
import React, { useState, useEffect, useContext } from 'react'
import UserPacks from './Home/UserPacks'

import { useUser } from '@/stores/user'
import { useShallow } from 'zustand/react/shallow'
import { getMyPacks as getMyPacksLocal } from '@/lib/localstore'
import { ThemeContext } from './lib/context'

import ListGroup from 'react-bootstrap/ListGroup'
import Button from 'react-bootstrap/Button'

function Home() {
	const [user, newPack, deletePack, getMyPacks] = useUser(
		useShallow((state) => [state.user, state.newPack, state.deletePack, state.getMyPacks])
	)
	const [usersPacks, setUsersPacks] = useState([])
	const [localPacks, setLocalPacks] = useState([])

	const theme = useContext(ThemeContext)

	useEffect(() => {
		async function fetchData() {
			setUsersPacks(await getMyPacks())
		}
		fetchData()
	}, [user])

	useEffect(() => {
		async function fetchData() {
			setLocalPacks(await getMyPacksLocal())
		}
		fetchData()
	}, [])

	return (
		<div className="container">
			<div className="m-3">
				<h3>Your Packs</h3>
				<UserPacks canEdit packs={usersPacks} />

				{/* TODO: implement! */}
				{/* <div className="row row-cols-1 row-cols-sm-3 gy-4 mt-0">
					<div className="col">
						<div className="card text-center h-100">
							<div className="card-body">
								<div className="mx-auto">
									<h2>📂</h2>
									<h5>New Folder</h5>
								</div>
							</div>
						</div>
					</div>
					<div className="col">
						<div className="card text-center h-100">
							<div className="card-body">
								<h5>New Folder</h5>
							</div>
						</div>
					</div>
				</div>

				<div className="row row-cols-1 row-cols-sm-3 gy-4 mt-0">
					<div className="col">
						<div className="card text-center h-100">
							<div className="card-body">
								<div className="mx-auto">
									<h2>📖</h2>
									<h5>New Class</h5>
								</div>
							</div>
						</div>
					</div>
				</div> */}

				{localPacks.length > 0 && user?.uid !== undefined && (
					<>
						<h3 className="mt-3">Manage Local Packs</h3>
						<ListGroup className="mt-3">
							{localPacks.map((pack) => (
								<ListGroup.Item key={pack.uuid} className="theme-fg">
									<div className="d-flex justify-content-between align-items-center">
										{pack.name == '' ? (
											<a
												className="text-muted"
												href={`/view/me/${pack.uuid}`}
											>
												No Name
											</a>
										) : (
											<a href={`/view/me/${pack.uuid}`}>{pack.name}</a>
										)}
										<div>
											<Button
												variant={theme.color ? 'light' : 'dark'}
												size="sm"
												className="ms-2"
												onClick={async () => {
													await newPack(pack.uuid, {
														...pack,
														author: user.username,
														uid: user.uid,
														superficialAuthor: user.username,
													})
													window.location.reload()
												}}
											>
												Upload
											</Button>
											<Button
												variant="danger"
												size="sm"
												className="ms-2 me-2"
												onClick={() => deletePack(pack.uuid, true)}
											>
												Delete
											</Button>
											📖{' '}
											{pack.class == '' ? (
												<span className="text-muted me-2">No Name</span>
											) : (
												<span className="me-2">pack.class</span>
											)}
											📅 {pack.date}
										</div>
									</div>
								</ListGroup.Item>
							))}
						</ListGroup>
					</>
				)}

				{/* TODO: implement */}
				{/* <div className="d-flex justify-content-center text-muted font-monospace fw-bold text-uppercase mt-2 mb-2">
					Import
				</div>

				<div className="row row-cols-1 row-cols-sm-3 gy-4 mb-2">
					{[
						{ icon: '📲', description: 'Import Quizlet' },
						{ icon: '⭐', description: 'Import from Anki' },
						{ icon: '📁', description: 'Import from File' },
					].map((action) => (
						<div className="col" key={action.description}>
							<div className="card text-center" key={action.description}>
								<div className="card-body">
									<h2>{action.icon}</h2>
									<h5>{action.description}</h5>
								</div>
							</div>
						</div>
					))}
				</div> */}
			</div>
		</div>
	)
}

export default Home