diff --git a/searchlib/components/SearchApp/LandingPageApp.jsx b/searchlib/components/SearchApp/LandingPageApp.jsx
index 5e19669d6..853a65a1a 100644
--- a/searchlib/components/SearchApp/LandingPageApp.jsx
+++ b/searchlib/components/SearchApp/LandingPageApp.jsx
@@ -1,12 +1,33 @@
+import React from 'react';
import BasicSearchApp from './BasicSearchApp';
+import { useSearchDriver } from '@eeacms/search/lib/hocs';
+import { stateToQueryString } from '@eeacms/search';
function BoostrapLandingPageView(props) {
- const { appConfig, registry } = props;
+ const { appConfig, registry, onSubmitSearch } = props;
const InitialViewComponent =
appConfig.initialView?.factory &&
registry.resolve[appConfig.initialView.factory].component;
+ const driver = useSearchDriver();
+ const timerRef = React.useRef();
+
+ React.useEffect(() => {
+ function handler(state) {
+ timerRef.current && clearTimeout(timerRef.current);
+ timerRef.current = setTimeout(() => {
+ onSubmitSearch(stateToQueryString(state));
+ }, 200);
+ }
+
+ if (driver && onSubmitSearch) {
+ driver.subscriptions.push(handler);
+ }
+
+ return () => timerRef.current && clearTimeout(timerRef.current);
+ }, [driver, onSubmitSearch]);
+
return ;
}
diff --git a/searchlib/components/SearchApp/useSearchApp.js b/searchlib/components/SearchApp/useSearchApp.js
index e8bc6fcb3..fdee34e5c 100644
--- a/searchlib/components/SearchApp/useSearchApp.js
+++ b/searchlib/components/SearchApp/useSearchApp.js
@@ -85,6 +85,10 @@ export default function useSearchApp({
: {}),
...(initialState || {}),
},
+ // we don't want to track the URL if our search app is configured as
+ // a simple separate app (for ex. search input or landing page that
+ // trampolines to another instance)
+ trackUrlState: appConfig.url ? false : appConfig.trackUrlState,
}),
[appConfig, onAutocomplete, onSearch, locationSearchTerm, initialState],
);
diff --git a/searchlib/index.js b/searchlib/index.js
index 419e368b2..b604020f6 100644
--- a/searchlib/index.js
+++ b/searchlib/index.js
@@ -7,6 +7,7 @@ export * from './lib/utils';
export * from './lib/hocs';
export * from './lib/search';
export * from './lib/models';
+export * from './lib/serialize';
export * from './state';
export * from './constants';
diff --git a/src/SearchBlock/templates/LandingPageView.jsx b/src/SearchBlock/templates/LandingPageView.jsx
index f02f32276..9ef3ecdf4 100644
--- a/src/SearchBlock/templates/LandingPageView.jsx
+++ b/src/SearchBlock/templates/LandingPageView.jsx
@@ -1,10 +1,26 @@
import React from 'react';
import { LandingPageApp } from '@eeacms/search';
+import { useHistory } from 'react-router-dom';
+import { flattenToAppURL } from '@plone/volto/helpers';
function LandingPageView(props) {
+ const history = useHistory();
+ const { registry, appName } = props;
+ const appConfig = registry.searchui[appName];
+ const url = flattenToAppURL(appConfig.url || '');
+
return (
<>
-
+ {
+ history.push(`${url}?${qs}`);
+ }
+ : null
+ }
+ />
{props.children}
>
);
@@ -15,6 +31,7 @@ LandingPageView.schemaEnhancer = ({ schema }) => {
schema.properties.url = {
title: 'Results page',
widget: 'url',
+ configPath: 'url',
};
return schema;