@kitconcept/volto-light-theme
Version:
Volto Light Theme by kitconcept
190 lines (177 loc) • 5.15 kB
JSX
import React from 'react';
import { flushSync } from 'react-dom';
import { Grid } from 'semantic-ui-react';
import { DateRangePicker } from '../components/DateRangePicker';
import { Facets } from '@plone/volto/components/manage/Blocks/Search/components';
import { SearchInput } from '../components';
// import SearchDetails from '../../../Search/components/SearchDetails';
function getDateRangeIOV(startDate, endDate) {
if (startDate && endDate && startDate !== endDate) {
return [
{
i: 'start',
o: 'plone.app.querystring.operation.date.largerThan',
v: startDate,
},
{
i: 'end',
o: 'plone.app.querystring.operation.date.lessThan',
v: endDate,
},
];
}
if (startDate) {
return [
{
i: 'start',
o: 'plone.app.querystring.operation.date.largerThan',
v: startDate,
},
];
}
if (endDate) {
return [
{
i: 'end',
o: 'plone.app.querystring.operation.date.lessThan',
v: endDate,
},
];
}
return [];
}
const toJSDate = (calendarDate, hour = 0, minute = 0, second = 0) => {
if (!calendarDate) return '';
const date = new Date(
calendarDate.year,
calendarDate.month - 1,
calendarDate.day,
hour,
minute,
second,
);
return date.toISOString().slice(0, 19);
};
const TopSideFacets = (props) => {
const {
children,
data,
// totalItems,
facets,
setFacets,
// setSortOn,
// setSortOrder,
// sortOn,
// sortOrder,
onTriggerSearch,
searchedText, // search text for previous search
// searchText, // search text currently being entered (controlled input)
// isEditMode,
querystring = {},
handleDateRangeChange,
// searchData,
// mode = 'view',
// variation,
} = props;
const { showSearchButton } = data;
const isLive = !showSearchButton;
const [dateRange, setDateRange] = React.useState({ start: null, end: null });
const onhandleDateRangeChange = (value) => {
setDateRange(value);
const start = toJSDate(value?.start);
const end = toJSDate(value?.end);
const dateRangeQuery = getDateRangeIOV(start, end);
handleDateRangeChange(dateRangeQuery);
};
const onResetDateRange = () => {
setDateRange({ start: null, end: null });
handleDateRangeChange([]);
};
const FacetWrapper = ({ children }) => {
const colWidth = data.facets.length < 5 ? 12 / data.facets.length : 4;
return (
<Grid.Column mobile={12} tablet={colWidth} computer={colWidth}>
{children}
</Grid.Column>
);
};
return (
<div className="search-block-event searchBlock-facets">
{data.headline && <h2 className="headline">{data.headline}</h2>}
<div className="first-row">
<DateRangePicker
value={dateRange}
onChange={onhandleDateRangeChange}
onResetDateRange={onResetDateRange}
dateRange={dateRange}
/>
{/* <SearchDetails
text={searchedText}
total={totalItems}
as="h5"
data={data}
/> */}
{/* {showSortOnEvent && (
<div className="search-filters-sort">
<div className="sort-on-wrapper">
<SortOn
data={data}
querystring={querystring}
isEditMode={isEditMode}
sortOn={sortOn}
sortOrder={sortOrder}
setSortOn={(sortOn) => {
flushSync(() => {
setSortOn(sortOn);
onTriggerSearch(searchedText || '', facets, sortOn);
});
}}
setSortOrder={(sortOrder) => {
flushSync(() => {
setSortOrder(sortOrder);
onTriggerSearch(
searchedText || '',
facets,
sortOn,
sortOrder,
);
});
}}
/>
</div>
</div>
)} */}
<div className="search-wrapper">
<SearchInput {...props} isLive={isLive} />
</div>
</div>
<Grid.Row>
<Grid.Column>
{data.facets?.length > 0 && (
<div className="facets">
{data.facetsTitle && <h3>{data.facetsTitle}</h3>}
<Grid verticalAlign="bottom" columns={12}>
<Facets
data={data}
querystring={querystring}
facets={facets}
setFacets={(f) => {
flushSync(() => {
setFacets(f);
onTriggerSearch(searchedText || '', f);
});
}}
facetWrapper={FacetWrapper}
/>
</Grid>
</div>
)}
</Grid.Column>
</Grid.Row>
<Grid.Row className="template-container">
<Grid.Column>{children}</Grid.Column>
</Grid.Row>
</div>
);
};
export default TopSideFacets;