From userpage, link to /profile (which is always editable now)

This commit is contained in:
Austin Chen 2022-02-16 16:38:01 -08:00
parent 066ca4cfbc
commit 64267a7f1a
2 changed files with 56 additions and 67 deletions

View File

@ -11,6 +11,7 @@ import { Spacer } from './layout/spacer'
import { Row } from './layout/row' import { Row } from './layout/row'
import { LinkIcon } from '@heroicons/react/solid' import { LinkIcon } from '@heroicons/react/solid'
import { genHash } from '../../common/util/random' import { genHash } from '../../common/util/random'
import { PencilIcon } from '@heroicons/react/outline'
export function UserLink(props: { export function UserLink(props: {
name: string name: string
@ -53,14 +54,26 @@ export function UserPage(props: { user: User; currentUser?: User }) {
style={{ style={{
backgroundImage: `url(${bannerUrl})`, backgroundImage: `url(${bannerUrl})`,
}} }}
/> ></div>
<div className="relative -top-10 left-4"> <div className="relative mb-20">
<Avatar <div className="absolute -top-10 left-4">
username={user.username} <Avatar
avatarUrl={user.avatarUrl} username={user.username}
size={20} avatarUrl={user.avatarUrl}
className="bg-white ring-4 ring-white" size={20}
/> className="bg-white ring-4 ring-white"
/>
</div>
{/* Top right buttons (e.g. edit, follow) */}
<div className="absolute right-0 top-0 mt-4 mr-4">
{isCurrentUser && (
<SiteLink className="btn" href="/profile">
<PencilIcon className="h-5 w-5" />{' '}
<div className="ml-2">Edit</div>
</SiteLink>
)}
</div>
</div> </div>
{/* Profile details: name, username, bio, and link to twitter/discord */} {/* Profile details: name, username, bio, and link to twitter/discord */}

View File

@ -19,6 +19,7 @@ import { Row } from '../components/layout/row'
import { User } from '../../common/user' import { User } from '../../common/user'
import { updateUser } from '../lib/firebase/users' import { updateUser } from '../lib/firebase/users'
import { defaultBannerUrl } from '../components/user-page' import { defaultBannerUrl } from '../components/user-page'
import { SiteLink } from '../components/site-link'
function EditUserField(props: { function EditUserField(props: {
user: User user: User
@ -37,17 +38,13 @@ function EditUserField(props: {
<div> <div>
<label className="label">{label}</label> <label className="label">{label}</label>
{isEditing ? ( <input
<input type="text"
type="text" className="input input-bordered"
className="input input-bordered" value={value}
value={value} onChange={(e) => setValue(e.target.value || '')}
onChange={(e) => setValue(e.target.value || '')} onBlur={updateField}
onBlur={updateField} />
/>
) : (
<div className="ml-1 break-words text-gray-500">{value || '-'}</div>
)}
</div> </div>
) )
} }
@ -61,8 +58,6 @@ export default function ProfilePage() {
const [name, setName] = useState(user?.name || '') const [name, setName] = useState(user?.name || '')
const [username, setUsername] = useState(user?.username || '') const [username, setUsername] = useState(user?.username || '')
const [isEditing, setIsEditing] = useState(false)
useEffect(() => { useEffect(() => {
if (user) { if (user) {
setAvatarUrl(user.avatarUrl || '') setAvatarUrl(user.avatarUrl || '')
@ -130,23 +125,10 @@ export default function ProfilePage() {
<Col className="max-w-lg rounded bg-white p-6 shadow-md sm:mx-auto"> <Col className="max-w-lg rounded bg-white p-6 shadow-md sm:mx-auto">
<Row className="justify-between"> <Row className="justify-between">
<Title className="!mt-0" text="Profile" /> <Title className="!mt-0" text="Edit Profile" />
{isEditing ? ( <SiteLink className="btn btn-primary" href={`/${user?.username}`}>
<button Done
className="btn btn-primary" </SiteLink>
onClick={() => setIsEditing(false)}
>
Done
</button>
) : (
<button
className="btn btn-ghost"
onClick={() => setIsEditing(true)}
>
<PencilIcon className="h-5 w-5" />{' '}
<div className="ml-2">Edit</div>
</button>
)}
</Row> </Row>
<Col className="gap-4"> <Col className="gap-4">
<Row className="items-center gap-4"> <Row className="items-center gap-4">
@ -160,9 +142,7 @@ export default function ProfilePage() {
height={80} height={80}
className="flex items-center justify-center rounded-full bg-gray-400" className="flex items-center justify-center rounded-full bg-gray-400"
/> />
{isEditing && ( <input type="file" name="file" onChange={fileHandler} />
<input type="file" name="file" onChange={fileHandler} />
)}
</> </>
)} )}
</Row> </Row>
@ -170,35 +150,27 @@ export default function ProfilePage() {
<div> <div>
<label className="label">Display name</label> <label className="label">Display name</label>
{isEditing ? ( <input
<input type="text"
type="text" placeholder="Display name"
placeholder="Display name" className="input input-bordered"
className="input input-bordered" value={name}
value={name} onChange={(e) => setName(e.target.value || '')}
onChange={(e) => setName(e.target.value || '')} onBlur={updateDisplayName}
onBlur={updateDisplayName} />
/>
) : (
<div className="ml-1 text-gray-500">{name}</div>
)}
</div> </div>
<div> <div>
<label className="label">Username</label> <label className="label">Username</label>
{isEditing ? ( <input
<input type="text"
type="text" placeholder="Username"
placeholder="Username" className="input input-bordered"
className="input input-bordered" value={username}
value={username} onChange={(e) => setUsername(e.target.value || '')}
onChange={(e) => setUsername(e.target.value || '')} onBlur={updateUsername}
onBlur={updateUsername} />
/>
) : (
<div className="ml-1 text-gray-500">{username}</div>
)}
</div> </div>
{user && ( {user && (
@ -210,7 +182,12 @@ export default function ProfilePage() {
label="Banner Url" label="Banner Url"
isEditing={isEditing} isEditing={isEditing}
/> */} /> */}
<label className="label">Banner</label> <label className="label">
Banner image{' '}
<span className="text-sm text-gray-400">
Not editable for now
</span>
</label>
<div <div
className="h-32 w-full bg-cover bg-center sm:h-40" className="h-32 w-full bg-cover bg-center sm:h-40"
style={{ style={{
@ -231,7 +208,6 @@ export default function ProfilePage() {
// @ts-ignore // @ts-ignore
field={field} field={field}
label={label} label={label}
isEditing={isEditing}
/> />
))} ))}
</> </>