From cde041a0471b61c7e7533faf12a96e39db6858fb Mon Sep 17 00:00:00 2001 From: Untone Date: Tue, 19 Dec 2023 16:06:54 +0300 Subject: [PATCH] search-modal-fix --- .../Nav/SearchModal/SearchModal.tsx | 29 +++++++++++-------- src/components/Views/Search.tsx | 6 ++-- src/context/inbox.tsx | 3 +- .../query/core/articles-load-search.ts | 28 ++---------------- src/pages/search.page.server.ts | 3 +- src/pages/types.ts | 4 +-- 6 files changed, 27 insertions(+), 46 deletions(-) diff --git a/src/components/Nav/SearchModal/SearchModal.tsx b/src/components/Nav/SearchModal/SearchModal.tsx index 1e9d05a5..6b87942e 100644 --- a/src/components/Nav/SearchModal/SearchModal.tsx +++ b/src/components/Nav/SearchModal/SearchModal.tsx @@ -4,28 +4,33 @@ import { useLocalize } from '../../../context/localize' import { Icon } from '../../_shared/Icon' import styles from './SearchModal.module.scss' +import { apiClient } from '../../../graphql/client/core' +import { createEffect, createSignal } from 'solid-js' +import { SearchResult } from '../../../graphql/schema/core.gen' export const SearchModal = () => { const { t } = useLocalize() + const [searchResults, setSearchResults] = createSignal>([]) - const action = '/search' - const method = 'get' let msgElement: HTMLTextAreaElement | undefined let contactElement: HTMLInputElement | undefined + const submit = async () => { - await fetch(action, { - method, - headers: { - accept: 'application/json', - 'content-type': 'application/json; charset=utf-8', - }, - body: JSON.stringify({ contact: contactElement?.value, message: msgElement?.textContent }), - }) - // hideModal() + const results = await apiClient.getShoutsSearch({ text: msgElement.value }) + + if (results) setSearchResults(results) } + createEffect(() => { + if (searchResults()) { + // TODO: some showing logics + } + }) + + // TODO: useLocalize() + return ( -
+ { const { t } = useLocalize() - const { sortedArticles } = useArticlesStore({ shouts: props.results }) + const { articleEntities, sortedArticles } = useArticlesStore() const [isLoadMoreButtonVisible, setIsLoadMoreButtonVisible] = createSignal(false) const [query, setQuery] = createSignal(props.query) const [offset, setOffset] = createSignal(0) diff --git a/src/context/inbox.tsx b/src/context/inbox.tsx index 7bd2a087..9872aea4 100644 --- a/src/context/inbox.tsx +++ b/src/context/inbox.tsx @@ -1,14 +1,13 @@ import type { Chat, Message, MessagesBy, MutationCreate_MessageArgs } from '../graphql/schema/chat.gen' import type { Accessor, JSX } from 'solid-js' -import { createContext, createEffect, createSignal, useContext } from 'solid-js' +import { createContext, createSignal, useContext } from 'solid-js' import { inboxClient } from '../graphql/client/chat' import { Author } from '../graphql/schema/core.gen' import { useAuthorsStore } from '../stores/zine/authors' import { SSEMessage, useConnect } from './connect' -import { useSession } from './session' type InboxContextType = { chats: Accessor diff --git a/src/graphql/query/core/articles-load-search.ts b/src/graphql/query/core/articles-load-search.ts index e38ba025..b99a59dd 100644 --- a/src/graphql/query/core/articles-load-search.ts +++ b/src/graphql/query/core/articles-load-search.ts @@ -1,35 +1,11 @@ import { gql } from '@urql/core' export default gql` - query MyFeedQuery($options: LoadShoutsOptions) { + query LoadSearchQuery($options: LoadShoutsOptions) { load_shouts_search(options: $options) { - id + score title - subtitle slug - layout - cover - main_topic - topics { - id - title - body - slug - } - authors { - id - name - slug - pic - created_at - } - created_at - published_at - stat { - viewed - reacted - rating - } } } ` diff --git a/src/pages/search.page.server.ts b/src/pages/search.page.server.ts index d1f4c85e..95163568 100644 --- a/src/pages/search.page.server.ts +++ b/src/pages/search.page.server.ts @@ -2,10 +2,11 @@ import type { PageProps } from './types' import type { PageContext } from '../renderer/types' import { apiClient } from '../graphql/client/core' +import { SearchResult } from '../graphql/schema/core.gen' export const onBeforeRender = async (pageContext: PageContext) => { const { q: text } = pageContext.routeParams - const searchResults = await apiClient.getShoutsSearch({ text, limit: 50 }) + const searchResults: Array = await apiClient.getShoutsSearch({ text, limit: 50 }) const pageProps: PageProps = { searchResults, seo: { title: '' } } return { diff --git a/src/pages/types.ts b/src/pages/types.ts index baa78f02..627b5bda 100644 --- a/src/pages/types.ts +++ b/src/pages/types.ts @@ -1,6 +1,6 @@ // in a separate file to avoid circular dependencies import type { Chat } from '../graphql/schema/chat.gen' -import type { Author, Shout, Topic } from '../graphql/schema/core.gen' +import type { Author, SearchResult, Shout, Topic } from '../graphql/schema/core.gen' // all the things (she said) that could be passed from the server export type PageProps = { article?: Shout @@ -15,7 +15,7 @@ export type PageProps = { searchQuery?: string layouts?: LayoutType[] // other types? - searchResults?: Shout[] + searchResults?: SearchResult[] chats?: Chat[] seo: { title: string