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} }
) }