import { useState, useEffect, useRef, lazy, Suspense } 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 ConfirmDialog from 'src/components/ConfirmDialog/ConfirmDialog' import EmojiReaction from 'src/components/EmojiReaction/EmojiReaction' import Button from 'src/components/Button/Button' import ProjectReactionsCell from '../ProjectReactionsCell' import { countEmotes } from 'src/helpers/emote' import { getActiveClasses } from 'get-active-classes' import IdeHeader from 'src/components/IdeHeader/IdeHeader' import CadPackage from 'src/components/CadPackage/CadPackage' import Gravatar from 'src/components/Gravatar/Gravatar' import { useIdeInit } from 'src/components/EncodedUrl/helpers' import ProfileViewer from '../ProfileViewer/ProfileViewer' import Svg from 'src/components/Svg/Svg' import OpenscadStaticImageMessage from 'src/components/OpenscadStaticImageMessage/OpenscadStaticImageMessage' import KeyValue from 'src/components/KeyValue/KeyValue' const ProjectProfile = ({ userProject, onSave, onDelete, onReaction, onComment, }) => { const [comment, setComment] = useState('') const [isEditing, setIsEditing] = useState(false) const onCommentClear = () => { onComment(comment) setComment('') } const [isConfirmDialogOpen, setIsConfirmDialogOpen] = useState(false) const [isReactionsModalOpen, setIsReactionsModalOpen] = useState(false) const { currentUser } = useAuth() const editorRef = useRef(null) const hasPermissionToEdit = currentUser?.sub === userProject.id || currentUser?.roles.includes('admin') const project = userProject?.Project const emotes = countEmotes(project?.Reaction) const userEmotes = project?.userReactions.map(({ emote }) => emote) useEffect(() => { isEditing && !hasPermissionToEdit && navigate( routes.project({ userName: userProject.userName, projectTitle: project?.title, }) ) }, [currentUser]) useIdeInit(project?.cadPackage, project?.code) const [newDescription, setNewDescription] = useState(project?.description) const onDescriptionChange = (description) => setNewDescription(description()) const onEditSaveClick = () => { if (isEditing) { onSave(project?.id, { description: newDescription }) return } navigate( routes.editProject({ userName: userProject?.userName, projectTitle: project?.title, }) ) } return ( <>
{}} projectTitle={project?.title} projectOwner={userProject?.userName} projectOwnerImage={userProject?.image} projectOwnerId={userProject?.id} projectId={project?.id} />
{/* Viewer */}
{/* Side panel */}

{project?.title.replace(/-/g, ' ')}

Built with
{ (project?.description || hasPermissionToEdit) && { if (!isEditing) { setIsEditing(true) } else { onEditSaveClick() setIsEditing(false) } }, }} >
e?.target?.id === 'description-wrap' && editorRef?.current?.focusAtEnd() } >
}
{new Date(project?.createdAt).toDateString()} {new Date(project?.updatedAt).toDateString()}
setIsReactionsModalOpen(true)} className="" /> { currentUser && {!isEditing && ( <> {currentUser && ( <>