import React, { useEffect, useState } from 'react'; import * as BS from 'react-bootstrap' import { useForm } from "react-hook-form"; import moment from 'moment'; import Popup from 'reactjs-popup'; import 'reactjs-popup/dist/index.css'; import API_URL from "../Constants/constants.js"; import defaultAvatar from '../default_discord_avatar.png' import { FaUser, FaTrashAlt } from "react-icons/fa"; export default function MemberCard(props) { 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 [ proxyTags, setProxyTags ] = useState(member.proxy_tags); const [ editMode, setEditMode ] = useState(false); const [ privacyMode, setPrivacyMode ] = useState(false); const [ privacyView, setPrivacyView ] = useState(false); const [ proxyView, setProxyView ] = useState(false); const [ proxyMode, setProxyMode ] = useState(false); const [open, setOpen] = useState(false); const closeModal = () => setOpen(false); const [ errorAlert, setErrorAlert ] = useState(false); const [ wrongID, setWrongID ] = useState(false); const [ memberDeleted, setMemberDeleted ] = useState(false); const { register: registerEdit, handleSubmit: handleSubmitEdit } = useForm(); const { register: registerPrivacy, handleSubmit: handleSubmitPrivacy } = useForm(); const { register: registerDelete, handleSubmit: handleSubmitDelete } = useForm(); const { register: registerProxy, handleSubmit: handleSubmitProxy, } = useForm(); 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, member.proxy_tags]); 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}}); setErrorAlert(false); 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}}); setErrorAlert(false); setPrivacyMode(false) } ).catch (error => { console.error(error); setErrorAlert(true); }) } const deleteMember = data => { if (data.memberID !== member.id) { setWrongID(true); } else { fetch(`${API_URL}m/${member.id}`,{ method: 'DELETE', headers: { 'Authorization': JSON.stringify(localStorage.getItem("token")).slice(1, -1) }}).then (() => { setErrorAlert(false); setMemberDeleted(true); }) .catch (error => { console.error(error); setErrorAlert(true); }) } } function addProxyField() { setProxyTags(oldTags => [...oldTags, {prefix: '', suffix: ''}] ) } function resetProxyFields() { setProxyMode(false); setProxyTags(member.proxy_tags); } const submitProxy = data => { const newdata = {proxy_tags: data.proxy_tags.filter(tag => !(tag.prefix === "" && tag.suffix === ""))} fetch(`${API_URL}m/${member.id}`,{ method: 'PATCH', body: JSON.stringify(newdata), 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}}); setProxyTags(data.proxy_tags); setErrorAlert(false) setProxyMode(false); } ).catch (error => { console.error(error); setErrorAlert(true); }); } return ( memberDeleted ? Member Deleted : <> {member.name} ({member.id}) { member.avatar_url ? : } { errorAlert ? Something went wrong, please try logging in and out again. : "" } { editMode ? <> Name: Display name: Birthday: (YYYY-MM-DD) Pronouns: Avatar url: Color: (hexcode) Description: setEditMode(false)}>Cancel Submit setOpen(o => !o)}>Delete Are you sure you want to delete {member.name}? { wrongID ? Incorrect ID, please check the spelling. : "" } If you're sure you want to delete this member, please enter the member ID ({member.id}) below. Member ID: Delete Cancel > : <> ID: {member.id} { member.display_name ? Display name: {displayName} : "" } { member.birthday ? Birthday: {birthday} : "" } { member.pronouns ? Pronouns: {pronouns} : "" } { member.color ? Color: {color} : "" } { privacyView ? "" : proxyView ? "" : Privacy: setPrivacyView(true)}>View } { privacyView ? "" : proxyView ? "" : Proxy tags: setProxyView(true)}>View } { privacyMode ? Editing privacy settings Visibility: public private Name: public private Description: public private Birthday: public private Pronouns: public private Meta: public private 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 > : "" } { proxyMode ? <> Editing proxy tags { proxyTags.map((item, index) => ( ))} addProxyField()}>Add new resetProxyFields()}>Exit Submit > : proxyView ? <> Viewing proxy tags { proxyTags.length === 0 ? No proxy tags set. : proxyTags.map((proxytag) => {proxytag.prefix}text{proxytag.suffix} )} setProxyView(false)}>Exit setProxyMode(true)}>Edit > : "" } Description: { proxyView ? "" : privacyMode ? "" : privacyView ? "" : setEditMode(true)}>Edit} > } > ) }
If you're sure you want to delete this member, please enter the member ID ({member.id}) below.
{proxytag.prefix}text{proxytag.suffix}
Description: