diff --git a/react/RedirectList.tsx b/react/RedirectList.tsx index 3c1b45646..922811a1d 100644 --- a/react/RedirectList.tsx +++ b/react/RedirectList.tsx @@ -24,6 +24,7 @@ import { withTargetPath, } from './components/admin/TargetPathContext' import Redirects from './queries/Redirects.graphql' +import RedirectWithoutBinding from './queries/RedirectWithoutBinding.graphql' interface CustomProps { hasMultipleBindings: boolean @@ -243,12 +244,35 @@ const RedirectList: React.FC = ({ const innerNext = innerData?.redirect?.listRedirects.next const next = innerNext ?? data?.redirect?.listRedirects.next - if (!filteredRedirects.length && next) { - const { data } = await refetch({ limit: REDIRECTS_LIMIT, next }) - handleInputSearchChange(e, data) - } else { - setRedirectList(filteredRedirects) - } + const listRedirectsPromise = (async () => { + if (!filteredRedirects.length && next) { + const { data } = await refetch({ limit: REDIRECTS_LIMIT, next }) + return data.redirect.listRedirects.routes + } else { + return filteredRedirects + } + })() + + const fullTextSearchPromise = (async () => { + if (term.length) { + const { data: fullTextData } = await client.query({ + query: RedirectWithoutBinding, + variables: { + path: term, + }, + }) + if (fullTextData?.redirect?.get) { + return [fullTextData.redirect.get] + } + } + return [] + })() + + const result = await Promise.race([ + listRedirectsPromise, + fullTextSearchPromise, + ]) + setRedirectList(result) if (term.length) { setFiltered(true) diff --git a/react/queries/RedirectWithoutBinding.graphql b/react/queries/RedirectWithoutBinding.graphql new file mode 100644 index 000000000..9268aa3d2 --- /dev/null +++ b/react/queries/RedirectWithoutBinding.graphql @@ -0,0 +1,11 @@ +query RedirectWithoutBinding($path: String!) { + redirect @context(provider: "vtex.rewriter") { + get(path: $path) { + binding + endDate + from + to + type + } + } +}