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 (
{projects .slice() .sort((a, b) => isAfter(new Date(b.date), new Date(a.date)) ? 1 : -1 ) .map((project) => { const actionButtons = ( <> Show Edit ) return ( ) })}
Title Description Date Images Tags Links  
{truncate(project.title)}
{parseHtml(project.description)}
{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} ))}
) } export default ProjectsList