import { createAction } from '@reduxjs/toolkit'; import React, { useCallback, useState } from 'react' import { useFormContext } from 'react-hook-form'; import Button from 'src/Components/Button/Button'; import Card from 'src/Components/Card/Card'; import LoadingPage from 'src/Components/LoadingPage/LoadingPage'; import { isStory } from 'src/features/Posts/types'; import { Post_Type, useDeleteStoryMutation, useGetMyDraftsQuery, usePostDetailsLazyQuery } from 'src/graphql' import { openModal } from 'src/redux/features/modals.slice'; import { NotificationsService } from 'src/services'; import { getDateDifference } from 'src/utils/helperFunctions'; import { useAppDispatch } from 'src/utils/hooks'; import { useReduxEffect } from 'src/utils/hooks/useReduxEffect'; import { CreateStoryType, IStoryFormInputs } from '../../CreateStoryPage/CreateStoryPage'; interface Props { id?: string; type: Post_Type, onDraftLoad?: () => void, } const CONFIRM_DELETE_STORY = createAction<{ confirmed?: boolean, id: number }>('DELETE_STORY_CONFIRMED')({ id: -1 }) export default function DraftsContainer({ id, type, onDraftLoad }: Props) { const myDraftsQuery = useGetMyDraftsQuery({ variables: { type } }); const [fetchDraft] = usePostDetailsLazyQuery(); const [deleteStory] = useDeleteStoryMutation({ refetchQueries: ['GetMyDrafts'] }) const { setValue } = useFormContext() const dispatch = useAppDispatch(); const [loading, setLoading] = useState(false) const loadDraft = (id: number) => { if (!loading) setLoading(true); fetchDraft({ variables: { type, id } }) .then(({ data }) => { // data.data?.getPostById. if (data?.getPostById) { if (isStory(data.getPostById)) { setValue('id', data.getPostById.id); setValue('title', data.getPostById.title); setValue('tags', data.getPostById.tags); setValue('body', data.getPostById.body); setValue('cover_image', data.getPostById.cover_image ? { url: data.getPostById.cover_image, id: null, name: null } : null); setValue('is_published', data.getPostById.is_published); } } onDraftLoad?.() }) .catch(() => { NotificationsService.error("Unexpected error happened...") }) .finally(() => { setLoading(false); }) } const onConfirmDelete = useCallback(({ payload: { confirmed, id } }: typeof CONFIRM_DELETE_STORY) => { if (confirmed) deleteStory({ variables: { deleteStoryId: id } }) }, [deleteStory]) useReduxEffect(onConfirmDelete, CONFIRM_DELETE_STORY.type); const deleteDraft = (id: number) => { dispatch(openModal({ Modal: "ConfirmModal", props: { callbackAction: { type: CONFIRM_DELETE_STORY.type, payload: { id } }, actionName: "Delete", title: "Delete Draft", message: "Are you sure you want to delete this draft ??", color: "red" } })) } return (
{(!myDraftsQuery.loading && myDraftsQuery.data?.getMyDrafts && myDraftsQuery.data.getMyDrafts.length > 0) &&

Saved Drafts

    {myDraftsQuery.data.getMyDrafts.map(draft =>
  • loadDraft(draft.id)} > {draft.title}

    Last edited {getDateDifference(draft.updatedAt, { dense: true })} ago

  • )}
} {loading && }
) }