import React, { useEffect, useState } from 'react';
import * as BS from 'react-bootstrap'
import { useForm, Controller } from "react-hook-form";
import autosize from 'autosize';
import moment from 'moment';
import API_URL from "../Constants/constants.js";
import defaultAvatar from '../default_discord_avatar.png'
import { FaUser } from "react-icons/fa";
export default function MemberCard(props) {
const { register, handleSubmit, control } = useForm();
const [member, setMember] = useState(props.member);
const [ displayName, setDisplayName ] = useState("");
const [ birthday, setBirthday ] = useState("");
const [ birthdate, setBirthdate ] = useState("");
const [ pronouns, setPronouns ] = useState("");
const [ avatar, setAvatar ] = useState("");
const [ color, setColor ] = useState("");
const [ desc, setDesc ] = useState("");
const [ editDesc, setEditDesc ] = useState("");
const [ editMode, setEditMode ] = useState(false);
const [ privacyMode, setPrivacyMode ] = useState(false);
const [ privacyView, setPrivacyView ] = useState(false);
const [ errorAlert, setErrorAlert ] = useState(false);
useEffect(() => {
const { toHTML } = require('../Functions/discord-parser.js');
if (member.display_name) {
setDisplayName(member.display_name)
} else setDisplayName('')
if (member.birthday) {
setBirthdate(member.birthday)
if (member.birthday.startsWith('0004-')) {
var bday = member.birthday.replace('0004-','');
var bdaymoment = moment(bday, 'MM-DD').format('MMM D');
setBirthday(bdaymoment);
} else {
var birthdaymoment = moment(member.birthday, 'YYYY-MM-DD').format('MMM D, YYYY');
setBirthday(birthdaymoment);
}
} else { setBirthday('');
setBirthdate('');
}
if (member.pronouns) {
setPronouns(member.pronouns)
} else setPronouns('')
if (member.avatar_url) {
setAvatar(member.avatar_url)
} else setAvatar('')
if (member.color) {
setColor(member.color);
} else setColor('');
if (member.description) {
setDesc(toHTML(member.description));
setEditDesc(member.description);
} else { setDesc("(no description)");
setEditDesc("");
}
}, [member.description, member.color, member.birthday, member.display_name, member.pronouns, member.avatar_url]);
useEffect(() => {
autosize(document.querySelector('textarea'));
})
const submitEdit = data => {
fetch(`${API_URL}m/${member.id}`,{
method: 'PATCH',
body: JSON.stringify(data),
headers: {
'Content-Type': 'application/json',
'Authorization': JSON.stringify(localStorage.getItem("token")).slice(1, -1)
}}).then (res => res.json()
).then (data => { setMember(prevState => {return {...prevState, ...data}}); setEditMode(false)}
).catch (error => {
console.error(error);
setErrorAlert(true);
});
}
const submitPrivacy = data => {
fetch(`${API_URL}m/${member.id}`,{
method: 'PATCH',
body: JSON.stringify(data),
headers: {
'Content-Type': 'application/json',
'Authorization': JSON.stringify(localStorage.getItem("token")).slice(1, -1)
}}).then (res => res.json()
).then (data => { setMember(prevState => {return {...prevState, ...data}}); setPrivacyMode(false)}
).catch (error => {
console.error(error);
setErrorAlert(true);
})
}
return (
<>
{member.name} ({member.id})
{ member.avatar_url ? :
}
{ errorAlert ? Something went wrong, please try logging in and out again. : "" }
{ editMode ?
Name:
} name="name" control={control} defaultValue={member.name} />
AKA:
} name="display_name" control={control} defaultValue={displayName} />
Birthday:
} name="birthday" control={control} defaultValue={birthdate}/>
(YYYY-MM-DD)
Pronouns:
} name="pronouns" control={control} defaultValue={pronouns} />
Avatar url:
} name="avatar_url" control={control} defaultValue={avatar} />
Color:
} name="color" control={control} defaultValue={color} />
(hexcode)
Description:
} name="description" control={control} defaultValue={editDesc}/>
setEditMode(false)}>Cancel Submit
:
<>
ID: {member.id}
{ member.display_name ? AKA: {displayName} : "" }
{ member.birthday ? Birthday: {birthday} : "" }
{ member.pronouns ? Pronouns: {pronouns} : "" }
{ member.color ? Color: {color} : "" }
{ privacyView ? "" : Privacy: setPrivacyView(true)}>View }
{ privacyMode ?
Editing privacy settings
Visibility:
Name:
Description:
Birthday:
Pronouns:
Meta:
setPrivacyMode(false)}>Cancel Submit
: privacyView ? <>
Viewing privacy settings
Visibility: {member.visibility}
Name: {member.name_privacy}
Description: {member.description_privacy}
Birthday: {member.birthday_privacy}
Pronouns: {member.pronoun_privacy}
Meta: {member.metadata_privacy}
setPrivacyView(false)}>Exit setPrivacyMode(true)}>Edit
> : "" }
Description:
{ privacyMode ? "" : privacyView ? "" : setEditMode(true)}>Edit}
> }
>
)
}