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' const KeyValue = ({ keyName, children, hide = false, canEdit = false, onEdit, isEditable = false, }: { keyName: string children: React.ReactNode hide?: boolean canEdit?: boolean onEdit?: () => void isEditable?: boolean }) => { if (!children || hide) return null return (
{keyName} {canEdit && (isEditable ? ( ) : ( ))}
{children}
) } const ProjectProfile = ({ userProject, onSave, onDelete, onReaction, onComment, }) => { const [comment, setComment] = useState('') const [isEditable, setIsEditable] = 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 canEdit = 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(() => { isEditable && !canEdit && 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 (isEditable) { 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
{ if (!isEditable) { setIsEditable(true) } else { onEditSaveClick() setIsEditable(false) } }} isEditable={isEditable} >
e?.target?.id === 'description-wrap' && editorRef?.current?.focusAtEnd() } >
{new Date(project?.createdAt).toDateString()} {new Date(project?.updatedAt).toDateString()}
setIsReactionsModalOpen(true)} /> {!isEditable && ( <> {currentUser && ( <>