Added link in ProjectProfile and fork count to ProjectCard
This commit is contained in:
committed by
Kurt Hutten
parent
dd152709ff
commit
7540c908e7
@@ -90,16 +90,15 @@ export const forkProject = async ({ input }) => {
|
|||||||
title = await generateUniqueString(title, isUniqueCallback)
|
title = await generateUniqueString(title, isUniqueCallback)
|
||||||
|
|
||||||
const { code, description, cadPackage } = projectData
|
const { code, description, cadPackage } = projectData
|
||||||
const data = foreignKeyReplacement({
|
|
||||||
|
return db.project.create({
|
||||||
|
data: foreignKeyReplacement({
|
||||||
...input,
|
...input,
|
||||||
title,
|
title,
|
||||||
code,
|
code,
|
||||||
description,
|
description,
|
||||||
cadPackage,
|
cadPackage,
|
||||||
})
|
}),
|
||||||
console.log('forking data', data)
|
|
||||||
return db.project.create({
|
|
||||||
data
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -268,7 +267,8 @@ export const deleteProject = async ({ id }: Prisma.ProjectWhereUniqueInput) => {
|
|||||||
|
|
||||||
export const Project = {
|
export const Project = {
|
||||||
forkedFrom: (_obj, { root }) =>
|
forkedFrom: (_obj, { root }) =>
|
||||||
root.forkedFromId && db.project.findUnique({where: { id: root.forkedFromId}}),
|
root.forkedFromId &&
|
||||||
|
db.project.findUnique({ where: { id: root.forkedFromId } }),
|
||||||
childForks: (_obj, { root }) =>
|
childForks: (_obj, { root }) =>
|
||||||
db.project.findMany({ where: { forkedFromId: root.id } }),
|
db.project.findMany({ where: { forkedFromId: root.id } }),
|
||||||
user: (_obj, { root }: ResolverArgs<ReturnType<typeof project>>) =>
|
user: (_obj, { root }: ResolverArgs<ReturnType<typeof project>>) =>
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import { useAuth } from '@redwoodjs/auth'
|
import { useAuth } from '@redwoodjs/auth'
|
||||||
|
import { useLocation } from '@redwoodjs/router'
|
||||||
import { Popover } from '@headlessui/react'
|
import { Popover } from '@headlessui/react'
|
||||||
import { Link, navigate, routes } from '@redwoodjs/router'
|
import { Link, navigate, routes } from '@redwoodjs/router'
|
||||||
import { useIdeContext } from 'src/helpers/hooks/useIdeContext'
|
import { useIdeContext } from 'src/helpers/hooks/useIdeContext'
|
||||||
@@ -120,6 +121,7 @@ const IdeHeader = ({
|
|||||||
<DefaultTopButtons
|
<DefaultTopButtons
|
||||||
project={project}
|
project={project}
|
||||||
projectTitle={projectTitle}
|
projectTitle={projectTitle}
|
||||||
|
projectId={projectId}
|
||||||
_projectOwner={_projectOwner}
|
_projectOwner={_projectOwner}
|
||||||
handleRender={handleRender}
|
handleRender={handleRender}
|
||||||
canEdit={canEdit}
|
canEdit={canEdit}
|
||||||
@@ -141,18 +143,22 @@ export default IdeHeader
|
|||||||
function DefaultTopButtons({
|
function DefaultTopButtons({
|
||||||
project,
|
project,
|
||||||
projectTitle,
|
projectTitle,
|
||||||
|
projectId,
|
||||||
_projectOwner,
|
_projectOwner,
|
||||||
handleRender,
|
handleRender,
|
||||||
canEdit,
|
canEdit,
|
||||||
}) {
|
}) {
|
||||||
const { currentUser } = useAuth()
|
const { currentUser } = useAuth()
|
||||||
|
const { pathname } = useLocation()
|
||||||
|
|
||||||
const [createFork] = useMutation(FORK_PROJECT_MUTATION, {
|
const [createFork] = useMutation(FORK_PROJECT_MUTATION, {
|
||||||
onCompleted: ({ forkProject }) => {
|
onCompleted: ({ forkProject }) => {
|
||||||
navigate(
|
const params = {
|
||||||
routes.ide({
|
|
||||||
userName: forkProject?.user?.userName,
|
userName: forkProject?.user?.userName,
|
||||||
projectTitle: forkProject?.title,
|
projectTitle: forkProject?.title,
|
||||||
})
|
}
|
||||||
|
navigate(
|
||||||
|
pathname.includes('/ide') ? routes.ide(params) : routes.project(params)
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
@@ -161,7 +167,7 @@ function DefaultTopButtons({
|
|||||||
variables: {
|
variables: {
|
||||||
input: {
|
input: {
|
||||||
userId: currentUser.sub,
|
userId: currentUser.sub,
|
||||||
forkedFromId: project.id,
|
forkedFromId: project?.id || projectId,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -6,7 +6,14 @@ import { countEmotes } from 'src/helpers/emote'
|
|||||||
import ImageUploader from 'src/components/ImageUploader'
|
import ImageUploader from 'src/components/ImageUploader'
|
||||||
import { ImageFallback } from '../ImageUploader/ImageUploader'
|
import { ImageFallback } from '../ImageUploader/ImageUploader'
|
||||||
|
|
||||||
const ProjectCard = ({ title, mainImage, user, Reaction, cadPackage }) => (
|
const ProjectCard = ({
|
||||||
|
title,
|
||||||
|
mainImage,
|
||||||
|
user,
|
||||||
|
Reaction,
|
||||||
|
cadPackage,
|
||||||
|
childForks,
|
||||||
|
}) => (
|
||||||
<li
|
<li
|
||||||
className="rounded p-1.5 bg-ch-gray-760 hover:bg-ch-gray-710 shadow-ch"
|
className="rounded p-1.5 bg-ch-gray-760 hover:bg-ch-gray-710 shadow-ch"
|
||||||
key={`${user?.userName}--${title}`}
|
key={`${user?.userName}--${title}`}
|
||||||
@@ -45,7 +52,8 @@ const ProjectCard = ({ title, mainImage, user, Reaction, cadPackage }) => (
|
|||||||
{countEmotes(Reaction).reduce((prev, { count }) => prev + count, 0)}
|
{countEmotes(Reaction).reduce((prev, { count }) => prev + count, 0)}
|
||||||
</div>
|
</div>
|
||||||
<div className="px-2 flex items-center bg-ch-blue-650 bg-opacity-30 text-ch-gray-300 rounded-sm">
|
<div className="px-2 flex items-center bg-ch-blue-650 bg-opacity-30 text-ch-gray-300 rounded-sm">
|
||||||
<Svg name="fork-new" className="w-4 mr-2" />0
|
<Svg name="fork-new" className="w-4 mr-2" />
|
||||||
|
{childForks?.length || 0}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</Link>
|
</Link>
|
||||||
|
|||||||
@@ -26,9 +26,7 @@ export const QUERY = gql`
|
|||||||
mainImage
|
mainImage
|
||||||
createdAt
|
createdAt
|
||||||
updatedAt
|
updatedAt
|
||||||
userId
|
|
||||||
cadPackage
|
cadPackage
|
||||||
forkedFromId
|
|
||||||
forkedFrom {
|
forkedFrom {
|
||||||
id
|
id
|
||||||
title
|
title
|
||||||
|
|||||||
@@ -38,7 +38,6 @@ const ProjectProfile = ({
|
|||||||
const hasPermissionToEdit =
|
const hasPermissionToEdit =
|
||||||
currentUser?.sub === userProject.id || currentUser?.roles.includes('admin')
|
currentUser?.sub === userProject.id || currentUser?.roles.includes('admin')
|
||||||
const project = userProject?.Project
|
const project = userProject?.Project
|
||||||
console.log({ project })
|
|
||||||
|
|
||||||
const emotes = countEmotes(project?.Reaction)
|
const emotes = countEmotes(project?.Reaction)
|
||||||
const userEmotes = project?.userReactions.map(({ emote }) => emote)
|
const userEmotes = project?.userReactions.map(({ emote }) => emote)
|
||||||
@@ -73,10 +72,10 @@ const ProjectProfile = ({
|
|||||||
<div className="flex">
|
<div className="flex">
|
||||||
<IdeHeader
|
<IdeHeader
|
||||||
handleRender={() => {}}
|
handleRender={() => {}}
|
||||||
projectTitle={project?.title}
|
|
||||||
projectOwner={userProject?.userName}
|
projectOwner={userProject?.userName}
|
||||||
projectOwnerImage={userProject?.image}
|
projectOwnerImage={userProject?.image}
|
||||||
projectOwnerId={userProject?.id}
|
projectOwnerId={userProject?.id}
|
||||||
|
projectTitle={project?.title}
|
||||||
projectId={project?.id}
|
projectId={project?.id}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
@@ -147,9 +146,20 @@ const ProjectProfile = ({
|
|||||||
<KeyValue keyName="Updated on">
|
<KeyValue keyName="Updated on">
|
||||||
{new Date(project?.updatedAt).toDateString()}
|
{new Date(project?.updatedAt).toDateString()}
|
||||||
</KeyValue>
|
</KeyValue>
|
||||||
{ project.forkedFrom && <KeyValue keyName="Forked from">
|
{project.forkedFrom && (
|
||||||
{ project.forkedFrom.title } by { project.forkedFrom.user.userName }
|
<KeyValue keyName="Forked from">
|
||||||
</KeyValue> }
|
<Link
|
||||||
|
className="pink-link"
|
||||||
|
to={routes.project({
|
||||||
|
userName: project.forkedFrom.user.userName,
|
||||||
|
projectTitle: project.forkedFrom.title,
|
||||||
|
})}
|
||||||
|
>
|
||||||
|
{project.forkedFrom.title}
|
||||||
|
</Link>{' '}
|
||||||
|
by {project.forkedFrom.user.userName}
|
||||||
|
</KeyValue>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
<KeyValue keyName="Reactions">
|
<KeyValue keyName="Reactions">
|
||||||
<EmojiReaction
|
<EmojiReaction
|
||||||
|
|||||||
@@ -40,7 +40,10 @@ const ProjectsList = ({
|
|||||||
style={{ gridTemplateColumns: 'repeat(auto-fit, minmax(16rem, 1fr))' }}
|
style={{ gridTemplateColumns: 'repeat(auto-fit, minmax(16rem, 1fr))' }}
|
||||||
>
|
>
|
||||||
{filteredProjects.map(
|
{filteredProjects.map(
|
||||||
({ title, mainImage, user, Reaction, cadPackage }, index) => (
|
(
|
||||||
|
{ title, mainImage, user, Reaction, cadPackage, childForks },
|
||||||
|
index
|
||||||
|
) => (
|
||||||
<ProjectCard
|
<ProjectCard
|
||||||
key={index}
|
key={index}
|
||||||
title={title}
|
title={title}
|
||||||
@@ -48,6 +51,7 @@ const ProjectsList = ({
|
|||||||
user={user}
|
user={user}
|
||||||
Reaction={Reaction}
|
Reaction={Reaction}
|
||||||
cadPackage={cadPackage}
|
cadPackage={cadPackage}
|
||||||
|
childForks={childForks}
|
||||||
/>
|
/>
|
||||||
)
|
)
|
||||||
)}
|
)}
|
||||||
|
|||||||
@@ -9,6 +9,9 @@ export const QUERY = gql`
|
|||||||
title
|
title
|
||||||
cadPackage
|
cadPackage
|
||||||
mainImage
|
mainImage
|
||||||
|
childForks {
|
||||||
|
id
|
||||||
|
}
|
||||||
createdAt
|
createdAt
|
||||||
updatedAt
|
updatedAt
|
||||||
user {
|
user {
|
||||||
|
|||||||
@@ -9,6 +9,9 @@ export const QUERY = gql`
|
|||||||
title
|
title
|
||||||
mainImage
|
mainImage
|
||||||
cadPackage
|
cadPackage
|
||||||
|
childForks {
|
||||||
|
id
|
||||||
|
}
|
||||||
createdAt
|
createdAt
|
||||||
updatedAt
|
updatedAt
|
||||||
user {
|
user {
|
||||||
|
|||||||
@@ -52,6 +52,7 @@
|
|||||||
.markdown-overrides div {
|
.markdown-overrides div {
|
||||||
@apply text-ch-gray-300 bg-transparent;
|
@apply text-ch-gray-300 bg-transparent;
|
||||||
}
|
}
|
||||||
|
.pink-link,
|
||||||
.markdown-overrides a,
|
.markdown-overrides a,
|
||||||
.markdown-overrides div a {
|
.markdown-overrides div a {
|
||||||
@apply text-ch-pink-500 underline bg-transparent;
|
@apply text-ch-pink-500 underline bg-transparent;
|
||||||
|
|||||||
Reference in New Issue
Block a user