diff --git a/src/components/Views/PublishSettings/PublishSettings.tsx b/src/components/Views/PublishSettings/PublishSettings.tsx index 7bc52d56..78dcdfbe 100644 --- a/src/components/Views/PublishSettings/PublishSettings.tsx +++ b/src/components/Views/PublishSettings/PublishSettings.tsx @@ -70,10 +70,10 @@ export const PublishSettings = (props: Props) => { return { coverImageUrl: props.form?.coverImageUrl, mainTopic: props.form?.mainTopic || EMPTY_TOPIC, - slug: props.form?.slug, - title: props.form?.title, - subtitle: props.form?.subtitle, - description: composeDescription(), + slug: props.form?.slug || '', + title: props.form?.title || '', + subtitle: props.form?.subtitle || '', + description: composeDescription() || '', selectedTopics: [], } }) diff --git a/src/context/editor.tsx b/src/context/editor.tsx index d2f1b82b..da11f919 100644 --- a/src/context/editor.tsx +++ b/src/context/editor.tsx @@ -161,7 +161,11 @@ export const EditorProvider = (props: { children: JSX.Element }) => { } try { - const shout = await updateShout(formToSave, { publish: false }) + const { shout, error } = await updateShout(formToSave, { publish: false }) + if (error) { + snackbar?.showSnackbar({ type: 'error', body: localize?.t(error) || '' }) + return + } removeDraftFromLocalStorage(formToSave.shoutId) if (shout?.published_at) { @@ -176,24 +180,33 @@ export const EditorProvider = (props: { children: JSX.Element }) => { } const saveDraft = async (draftForm: ShoutForm) => { - await updateShout(draftForm, { publish: false }) + const { error } = await updateShout(draftForm, { publish: false }) + if (error) { + snackbar?.showSnackbar({ type: 'error', body: localize?.t(error) || '' }) + return + } } const publishShout = async (formToPublish: ShoutForm) => { - if (isEditorPanelVisible()) { + const editorPanelVisible = isEditorPanelVisible() + const pageRoute = page()?.route + + if (editorPanelVisible) { toggleEditorPanel() } - if (page()?.route === 'edit') { + if (pageRoute === 'edit') { if (!validate()) { return } - await updateShout(formToPublish, { publish: false }) - const slug = slugify(form.title) setForm('slug', slug) openPage(router, 'editSettings', { shoutId: form.shoutId.toString() }) + const { error } = await updateShout(formToPublish, { publish: false }) + if (error) { + snackbar?.showSnackbar({ type: 'error', body: localize?.t(error) || '' }) + } return } @@ -202,7 +215,11 @@ export const EditorProvider = (props: { children: JSX.Element }) => { } try { - await updateShout(formToPublish, { publish: true }) + const { error } = await updateShout(formToPublish, { publish: true }) + if (error) { + snackbar?.showSnackbar({ type: 'error', body: localize?.t(error) || '' }) + return + } openPage(router, 'feed') } catch (error) { console.error('[publishShout]', error) diff --git a/src/graphql/client/core.ts b/src/graphql/client/core.ts index c80fe931..edf40567 100644 --- a/src/graphql/client/core.ts +++ b/src/graphql/client/core.ts @@ -157,12 +157,12 @@ export const apiClient = { shout_id: number shout_input?: ShoutInput publish: boolean - }): Promise => { + }): Promise => { const response = await apiClient.private .mutation(updateArticle, { shout_id, shout_input, publish }) .toPromise() console.debug('[graphql.client.core] updateArticle:', response.data) - return response.data.update_shout.shout + return response.data.update_shout }, deleteShout: async (params: MutationDelete_ShoutArgs): Promise => { const response = await apiClient.private.mutation(deleteShout, params).toPromise()