diff --git a/frontend/app/src/components/titlebar/publish-share.tsx b/frontend/app/src/components/titlebar/publish-share.tsx index be46550184..6246f8d641 100644 --- a/frontend/app/src/components/titlebar/publish-share.tsx +++ b/frontend/app/src/components/titlebar/publish-share.tsx @@ -1,25 +1,25 @@ -import {useState} from 'react' -import {useRoute} from 'wouter' -import * as PopoverPrimitive from '@radix-ui/react-popover' -import {Box} from '@components/box' -import {useSelector} from '@xstate/react' -import {Icon} from '@components/icon' import {isProduction, MINTTER_GATEWAY_URL} from '@app/constants' -import {PublicationActor} from '@app/publication-machine' +import {MainActor} from '@app/hooks/main-actor' import {useDocPublications, useSiteList} from '@app/hooks/sites' -import {Button} from '@components/button' +import {PublicationActor} from '@app/publication-machine' import {styled} from '@app/stitches.config' -import {AccessURLRow} from '@components/url' -import {usePublicationDialog} from './publication-dialog' -import {MainActor} from '@app/hooks/main-actor' -import {WebPublicationRecord} from '@mintter/shared' import {EXPERIMENTS} from '@app/utils/experimental' import {useNostr} from '@app/utils/nostr' -import * as DialogPrimitive from '@radix-ui/react-dialog' -import {toast} from 'react-hot-toast' +import {hostnameStripProtocol} from '@app/utils/site-hostname' +import {Box} from '@components/box' +import {Button} from '@components/button' import {dialogContentStyles, overlayStyles} from '@components/dialog-styles' +import {Icon} from '@components/icon' import {TextField} from '@components/text-field' -import {hostnameStripProtocol} from '@app/utils/site-hostname' +import {AccessURLRow} from '@components/url' +import {WebPublicationRecord} from '@mintter/shared' +import * as DialogPrimitive from '@radix-ui/react-dialog' +import * as PopoverPrimitive from '@radix-ui/react-popover' +import {useSelector} from '@xstate/react' +import {useEffect, useRef, useState} from 'react' +import {toast} from 'react-hot-toast' +import {useRoute} from 'wouter' +import {usePublicationDialog} from './publication-dialog' const StyledOverlay = styled(DialogPrimitive.Overlay, overlayStyles) const StyledContent = styled(DialogPrimitive.Content, dialogContentStyles) @@ -208,6 +208,27 @@ export function PublishShareButton({mainActor}: {mainActor: MainActor}) { const publicationDialog = usePublicationDialog(mainActor) const nostrPostDialog = useNostrPostDialog() const publications = useDocPublications(docId) + let isSaving = useRef(false) + useEffect(() => { + if (mainActor.type == 'publication') { + isSaving.current = false + } else { + mainActor.actor.subscribe((state) => { + if (state.matches('editing.saving')) { + console.log('subscribe change TRUE!', state.value) + isSaving.current = true + } else { + console.log('subscribe change FALSE!', state.value) + isSaving.current = false + } + }) + mainActor.actor.onTransition((state) => { + if (state.changed && state.matches('editing.saving')) { + } else { + } + }) + } + }, [mainActor]) if (!isDraft && !isPublic && !isPublicB) return null return ( @@ -224,6 +245,7 @@ export function PublishShareButton({mainActor}: {mainActor: MainActor}) { > - + }> export function useMainActor(props: MainActorOptions = {}) { @@ -57,8 +57,8 @@ export function useMainActor(props: MainActorOptions = {}) { editor, }).withConfig({ actions: { - afterPublish: (_, event) => { - console.log('draftMachine afterPublish') + afterPublish: (c, event) => { + console.log('===== PUBLISHING: AFTER PUBLISH ===', c, event) // invoke('emit_all', { // event: 'document_published', @@ -66,6 +66,8 @@ export function useMainActor(props: MainActorOptions = {}) { setLocation(`/p/${event.data.document?.id}/${event.data.version}`, { replace: true, }) + + republishDoc.mutateAsync(event.data) toast.success('Draft published Successfully!') }, }, @@ -73,12 +75,10 @@ export function useMainActor(props: MainActorOptions = {}) { // @ts-ignore publishDraft: props.publishDraft ? props.publishDraft - : async (context) => { - console.log('draftMachine publishDraft', context) + : (context) => { + console.log('===== PUBLISHING: PUBLISH SERVICE === ', context) - const pub = await publishDraft(context.documentId) - await republishDoc.mutateAsync(pub) - return pub + return publishDraft(context.documentId) }, }, }) diff --git a/frontend/app/src/styles/titlebar.scss b/frontend/app/src/styles/titlebar.scss index 4306d0585d..3d7a290543 100644 --- a/frontend/app/src/styles/titlebar.scss +++ b/frontend/app/src/styles/titlebar.scss @@ -65,6 +65,10 @@ max-height: 1em; line-height: 1; } + + &.disabled { + opacity: 0.5; + } } .button-group { diff --git a/frontend/shared/src/client/drafts.ts b/frontend/shared/src/client/drafts.ts index 25a02b9d0a..610e3bf612 100644 --- a/frontend/shared/src/client/drafts.ts +++ b/frontend/shared/src/client/drafts.ts @@ -66,7 +66,12 @@ export async function getDraft( documentId: string, rpc: Transport = transport, ): Promise { - return await createPromiseClient(Drafts, rpc).getDraft({documentId}) + try { + let draft = await createPromiseClient(Drafts, rpc).getDraft({documentId}) + return draft + } catch (error) { + throw new Error(`DetDraft ERROR: ${JSON.stringify(error)}`) + } } export type DocumentChanges = { @@ -78,5 +83,12 @@ export async function updateDraftV2( documentChanges: DocumentChanges, rpc: Transport = transport, ) { - return await createPromiseClient(Drafts, rpc).updateDraftV2(documentChanges) + try { + let result = await createPromiseClient(Drafts, rpc).updateDraftV2( + documentChanges, + ) + return result + } catch (error) { + throw new Error(`UPDATE DRAFT ERROR: ${JSON.stringify(error)}`) + } }