import React, { useEffect, useState } from 'react'; import { Link } from 'react-router-dom'; 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 autosize from 'autosize'; import Twemoji from 'react-twemoji'; import API_URL from "../Constants/constants.js"; import history from "../History.js"; import defaultAvatar from '../default_discord_avatar.png' import { FaLink, FaLock, FaTrashAlt } from "react-icons/fa"; export default function MemberPage(props) { const [ member, setMember] = useState(props.member); const system = JSON.parse(localStorage.getItem('user')); const sysID = system.id; const [ displayName, setDisplayName ] = useState(""); const [ birthday, setBirthday ] = useState(""); const [ birthdate, setBirthdate ] = useState(""); const [ pronouns, setPronouns ] = useState(""); const [ editPronouns, setEditPronouns ] = 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(() => { autosize(document.querySelectorAll('textarea')); }) 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(toHTML(member.pronouns)); setEditPronouns(member.pronouns); } else { setPronouns(''); setEditPronouns(''); } if (member.avatar_url) { var avatarsmall = member.avatar_url.replace('&format=jpeg', ''); setAvatar(avatarsmall.replace('?width=256&height=256', '')) } 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); }); } function copyLink() { var link = `https://spectralitree.github.io/pk-webs/profile/${sysID}/${member.id}` var textField = document.createElement('textarea') textField.innerText = link document.body.appendChild(textField); textField.select(); textField.setSelectionRange(0, 99999); document.execCommand('copy'); document.body.removeChild(textField); } return ( memberDeleted ? Member Deleted Member successfully deleted, click the button below to go back to the dash. history.push("/pk-webs/dash/reload")}>Back : <> { localStorage.getItem('colorbg') ? "" : member.color ? <>
: "" }
{ member.visibility === 'public' ? Copy public link }> copyLink()}> : }{member.name} ({member.id})
{ member.avatar_url ? } className="avatar" modal> {close => (
close()}>
)}
: }
{ 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 ? localStorage.getItem('twemoji') ? Display name: {displayName} : Display name: {displayName} : "" } { member.birthday ? Birthday: {birthday} : "" } { member.pronouns ? localStorage.getItem('twemoji') ? Pronouns: : Pronouns: : "" } { member.color ? Color: {color} : "" } { privacyView ? "" : proxyView ? "" : Privacy: setPrivacyView(true)}>View } { privacyView ? "" : proxyView ? "" : Proxy tags: setProxyView(true)}>View } { privacyMode ?
Editing privacy settings
Visibility: Name: Description: Avatar: Birthday: Pronouns: Meta: setPrivacyMode(false)}>Cancel Submit
: privacyView ? <>
Viewing privacy settings
Visibility: {member.visibility} Name: {member.name_privacy} Description: {member.description_privacy} Avatar: {member.avatar_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, index) => {proxytag.prefix}text{proxytag.suffix} )} setProxyView(false)}>Exit setProxyMode(true)}>Edit
: "" }

Description:

{ localStorage.getItem('twemoji') ?

:

} { proxyView ? "" : privacyMode ? "" : privacyView ? "" : <> setEditMode(true)}>Edit Back} }
) }