import { __ } from '@wordpress/i18n' import React from 'react' import { Spinner } from '@wordpress/components' import { TablePagination } from '../../common/ListTable/TablePagination' import { SearchResult } from './SearchResult' import { useCloudSearch } from './WithCloudSearchContext' import { SearchFilters } from './SearchFilters' import type { TablePaginationProps } from '../../common/ListTable/TablePagination' import type { FormEventHandler } from 'react' const SearchBox = () => { const { searchParams, updateSearchParams, isSearching, doSearch } = useCloudSearch() const handleSubmit: FormEventHandler = event => { event.preventDefault() doSearch() } return (
updateSearchParams({ query: event.target.value })} placeholder={__('e.g. Remove unused JavaScript…', 'code-snippets')} /> {isSearching && {__('Searching…', 'code-snippets')}}
) } const SearchResultsTable = () => { const { searchResults, isSearching, doSearch } = useCloudSearch() if (!searchResults) { return null } const { totalItems, totalPages, page } = searchResults const paginationProps: Omit = { totalItems, totalPages, disabled: isSearching, currentPage: page, setCurrentPage: newPage => doSearch({ page: newPage }) } return ( <>
) } const SearchResults = () => { const { searchResults, searchParams, isErrored } = useCloudSearch() if (isErrored) { return (

{__('An error occurred while fetching search results. Please try again.', 'code-snippets')}

) } if (!searchResults) { return null } if (0 < searchResults.page && 0 === searchResults.snippets.length) { return (

{'codevault' === searchParams.method ? __('Could not find a codevault with that name. Please try again.', 'code-snippets') : __('No snippets could be found with that search term. Please try again.', 'code-snippets') }

) } return searchResults.snippets.length ? <> {searchResults.isFeatured ?

{__('Featured Snippets', 'code-snippets')}

:

{__('Search Results', 'code-snippets')}

} : null } export const CloudSearch = () =>