import { useState, useEffect, useRef } from 'react' import { useAuth } from '@redwoodjs/auth' import { Link, navigate, routes } from '@redwoodjs/router' import Editor from 'rich-markdown-editor' import Dialog from '@material-ui/core/Dialog' import ImageUploader from 'src/components/ImageUploader' import ConfirmDialog from 'src/components/ConfirmDialog' import Breadcrumb from 'src/components/Breadcrumb' import EmojiReaction from 'src/components/EmojiReaction' import Button from 'src/components/Button' import PartReactionsCell from '../PartReactionsCell' import { countEmotes } from 'src/helpers/emote' import { getActiveClasses } from 'get-active-classes' const PartProfile = ({ userPart, isEditable, onSave, onDelete, onReaction, onComment, }) => { const [comment, setComment] = useState('') const [isConfirmDialogOpen, setIsConfirmDialogOpen] = useState(false) const [isReactionsModalOpen, setIsReactionsModalOpen] = useState(false) const [isInvalid, setIsInvalid] = useState(false) const { currentUser } = useAuth() const editorRef = useRef(null) const canEdit = currentUser?.sub === userPart.id const isImageEditable = !isEditable && canEdit // image is editable when not in profile edit mode in order to separate them as it's too hard too to upload an image to cloudinary temporarily until the use saves (and maybe have to clean up) for the time being const part = userPart?.Part const emotes = countEmotes(part?.Reaction) const userEmotes = part?.userReactions.map(({ emote }) => emote) useEffect(() => { isEditable && !canEdit && navigate( routes.part({ userName: userPart.userName, partTitle: part?.title }) ) }, [currentUser]) const [input, setInput] = useState({ title: part?.title, mainImage: part?.mainImage, description: part?.description, userId: userPart?.id, }) const setProperty = (property, value) => setInput({ ...input, [property]: value, }) const onTitleChange = ({ target }) => setProperty('title', target.value.replace(/([^a-zA-Z\d_:])/g, '-')) const onDescriptionChange = (description) => setProperty('description', description()) const onImageUpload = ({ cloudinaryPublicId }) => { onSave(part?.id, { ...input, mainImage: cloudinaryPublicId }) } // setProperty('mainImage', cloudinaryPublicId) const onEditSaveClick = (hi) => { // do a thing if (isEditable) { if (!input.title) { setIsInvalid(true) return } setIsInvalid(false) onSave(part?.id, input) return } navigate( routes.editPart({ userName: userPart?.userName, partTitle: part?.title }) ) } return ( <>