diff --git a/src/components/Views/Edit.module.scss b/src/components/Views/Edit.module.scss index f65a9d8a..8fd0dc46 100644 --- a/src/components/Views/Edit.module.scss +++ b/src/components/Views/Edit.module.scss @@ -97,3 +97,14 @@ } } } + +.inputContainer { + position: relative; + + .validationError { + position: absolute; + top: 100%; + font-size: small; + color: #f00; + } +} diff --git a/src/components/Views/Edit.tsx b/src/components/Views/Edit.tsx index 962e9e26..8568045e 100644 --- a/src/components/Views/Edit.tsx +++ b/src/components/Views/Edit.tsx @@ -6,9 +6,7 @@ import { Title } from '@solidjs/meta' import type { Shout, Topic } from '../../graphql/types.gen' import { apiClient } from '../../utils/apiClient' import { TopicSelect } from '../Editor/TopicSelect/TopicSelect' -import { router, useRouter } from '../../stores/router' -import { openPage } from '@nanostores/router' -import { translit } from '../../utils/ru2en' +import { useRouter } from '../../stores/router' import { Editor } from '../Editor/Editor' import { Panel } from '../Editor/Panel' import { useEditorContext } from '../../context/editor' @@ -32,6 +30,7 @@ export const EditView = (props: EditViewProps) => { const [isSlugChanged, setIsSlugChanged] = createSignal(false) setForm({ + shoutId: props.shout.id, slug: props.shout.slug, title: props.shout.title, subtitle: props.shout.subtitle, @@ -82,17 +81,21 @@ export const EditView = (props: EditViewProps) => { [styles.visible]: page().route === 'edit' })} > - - {formErrors.title} +
+ + +
{formErrors.title}
+
+
{ try { await apiClient.updateArticle({ - slug: form.slug, - article: { + shoutId: form.shoutId, + shoutInput: { body: form.body, topics: form.selectedTopics.map((topic) => topic.slug), // authors?: InputMaybe>> diff --git a/src/graphql/mutation/article-publish.ts b/src/graphql/mutation/article-publish.ts index 582c9086..4e83fe44 100644 --- a/src/graphql/mutation/article-publish.ts +++ b/src/graphql/mutation/article-publish.ts @@ -1,7 +1,7 @@ import { gql } from '@urql/core' export default gql` - mutation UpdateShoutMutation($slug: String!) { + mutation PublishShoutMutation($slug: String!) { publishShout(slug: $slug) { error shout { diff --git a/src/graphql/mutation/article-update.ts b/src/graphql/mutation/article-update.ts index 3da0ef20..e4e701e6 100644 --- a/src/graphql/mutation/article-update.ts +++ b/src/graphql/mutation/article-update.ts @@ -1,8 +1,8 @@ import { gql } from '@urql/core' export default gql` - mutation UpdateShoutMutation($slug: String!, $shout: ShoutInput!) { - updateShout(slug: $slug, inp: $shout) { + mutation UpdateShoutMutation($shoutId: Int!, $shoutInput: ShoutInput!) { + updateShout(shoutId: $shoutId, shoutInput: $shoutInput) { error shout { id diff --git a/src/graphql/types.gen.ts b/src/graphql/types.gen.ts index 699ff3d8..d671c00c 100644 --- a/src/graphql/types.gen.ts +++ b/src/graphql/types.gen.ts @@ -228,7 +228,7 @@ export type MutationDeleteReactionArgs = { } export type MutationDeleteShoutArgs = { - slug: Scalars['String'] + shout_id: Scalars['Int'] } export type MutationDestroyTopicArgs = { @@ -246,8 +246,8 @@ export type MutationMarkAsReadArgs = { } export type MutationPublishShoutArgs = { - inp: ShoutInput - slug: Scalars['String'] + shout_id: Scalars['Int'] + shout_input?: InputMaybe } export type MutationRateUserArgs = { @@ -292,8 +292,8 @@ export type MutationUpdateReactionArgs = { } export type MutationUpdateShoutArgs = { - inp: ShoutInput - slug: Scalars['String'] + shout_id: Scalars['Int'] + shout_input: ShoutInput } export type MutationUpdateTopicArgs = { diff --git a/src/utils/apiClient.ts b/src/utils/apiClient.ts index 50eaef47..153e4d2d 100644 --- a/src/utils/apiClient.ts +++ b/src/utils/apiClient.ts @@ -248,10 +248,14 @@ export const apiClient = { console.debug('[createArticle]:', response.data) return response.data.createShout.shout }, - updateArticle: async ({ slug, article }: { slug: string; article: ShoutInput }): Promise => { - const response = await privateGraphQLClient - .mutation(updateArticle, { slug, shout: article }) - .toPromise() + updateArticle: async ({ + shoutId, + shoutInput + }: { + shoutId: number + shoutInput: ShoutInput + }): Promise => { + const response = await privateGraphQLClient.mutation(updateArticle, { shoutId, shoutInput }).toPromise() console.debug('[updateArticle]:', response.data) return response.data.updateShout.shout },