packages/react-search-ui-views/src/BooleanFacet.tsx (44 lines of code) (raw):
import React from "react";
import { FacetViewProps } from "./types";
import { helpers } from "@elastic/search-ui";
import { appendClassName } from "./view-helpers";
function BooleanFacet({
className,
label,
options,
onChange,
onRemove
}: FacetViewProps) {
const trueOption = options.find((option) =>
helpers.getFilterBooleanValue(option.value)
);
if (!trueOption) return null;
const isSelected = trueOption.selected;
const apply = () => onChange("true");
const remove = () => onRemove("true");
const toggle = () => {
isSelected ? remove() : apply();
};
return (
<fieldset className={appendClassName("sui-facet", className)}>
<legend className="sui-facet__title">{label}</legend>
<div className="sui-boolean-facet">
<div className={"sui-boolean-facet__option-input-wrapper"}>
<label className="sui-boolean-facet__option-label">
<div className="sui-boolean-facet__option-input-wrapper">
<input
data-transaction-name={`facet - ${label}`}
className="sui-boolean-facet__checkbox"
type="checkbox"
onChange={toggle}
checked={isSelected}
/>
<span className="sui-boolean-facet__input-text">{label}</span>
</div>
<span className="sui-boolean-facet__option-count">
{trueOption.count}
</span>
</label>
</div>
</div>
</fieldset>
);
}
export default BooleanFacet;