import { mdiDotsVertical } from '@mdi/js' import Icon from '@mdi/react' import { isAfter } from 'date-fns' import parseHtml from 'react-html-parser' import type { DeleteProjectMutation, DeleteProjectMutationVariables, FindProjects, } from 'types/graphql' import { Link, routes } from '@redwoodjs/router' import { useMutation } from '@redwoodjs/web' import type { TypedDocumentNode } from '@redwoodjs/web' import { toast } from '@redwoodjs/web/toast' import { QUERY } from 'src/components/Project/ProjectsCell' import { calculateLuminance } from 'src/lib/color' import { timeTag, truncate } from 'src/lib/formatters' import { batchDelete } from 'src/lib/tus' const DELETE_PROJECT_MUTATION: TypedDocumentNode< DeleteProjectMutation, DeleteProjectMutationVariables > = gql` mutation DeleteProjectMutation($id: Int!) { deleteProject(id: $id) { id } } ` const ProjectsList = ({ projects }: FindProjects) => { const [deleteProject] = useMutation(DELETE_PROJECT_MUTATION, { onCompleted: () => toast.success('Project deleted'), onError: (error) => toast.error(error.message), refetchQueries: [{ query: QUERY }], awaitRefetchQueries: true, }) const onDeleteClick = (id: DeleteProjectMutationVariables['id']) => { if (confirm('Are you sure you want to delete project ' + id + '?')) { batchDelete(projects.find((project) => project.id === id).images) deleteProject({ variables: { id } }) } } return (
Title | Description | Date | Images | Tags | Links | |
---|---|---|---|---|---|---|
{truncate(project.title)} |
|
{timeTag(project.date)} | {`${project.images.length} ${project.images.length === 1 ? 'image' : 'images'}`} |
{project.tags.map((tag, i) => (
0.5
? 'black'
: 'white',
}}
>
{tag.tag}
))}
|
{project.links.map((link, i) => (
{link}
))}
|
|