Separate search term parts

Summary: Project doc: https://docs.google.com/document/d/1miofxds9DJgWScj0zFyBbdpRH5Rj0T9FqiCapof5-vU

Reviewed By: lblasa

Differential Revision: D48520106

fbshipit-source-id: 2a544230f182bd82023310ea88742fab44e2df9b
This commit is contained in:
Andrey Goncharov
2023-08-30 07:26:35 -07:00
committed by Facebook GitHub Bot
parent c746a11dc6
commit 795d02d00c

View File

@@ -8,8 +8,12 @@
*/ */
import * as React from 'react'; import * as React from 'react';
import {AutoComplete, Space, Tag} from 'antd'; import {AutoComplete, Button, Space} from 'antd';
import {PowerSearchConfig} from './PowerSearchTypes'; import {
PowerSearchConfig,
FieldConfig,
OperatorConfig,
} from './PowerSearchTypes';
export {PowerSearchConfig}; export {PowerSearchConfig};
@@ -26,9 +30,15 @@ type AutocompleteOptionGroup = {
const OPTION_KEY_DELIMITER = '::'; const OPTION_KEY_DELIMITER = '::';
type SearchExpressionTerm = {
field: FieldConfig;
operator: OperatorConfig;
searchValue?: string;
};
export const PowerSearch: React.FC<PowerSearchProps> = ({config}) => { export const PowerSearch: React.FC<PowerSearchProps> = ({config}) => {
const [searchExpression, setSearchExpression] = React.useState< const [searchExpression, setSearchExpression] = React.useState<
AutocompleteOption[] SearchExpressionTerm[]
>([]); >([]);
const options: AutocompleteOptionGroup[] = React.useMemo(() => { const options: AutocompleteOptionGroup[] = React.useMemo(() => {
@@ -58,8 +68,12 @@ export const PowerSearch: React.FC<PowerSearchProps> = ({config}) => {
return ( return (
<div style={{display: 'flex', flexDirection: 'row'}}> <div style={{display: 'flex', flexDirection: 'row'}}>
<Space size={[0, 8]}> <Space size={[0, 8]}>
{searchExpression.map((searchTerm) => ( {searchExpression.map((searchTerm, i) => (
<Tag key={searchTerm.value}>{searchTerm.label}</Tag> <Space key={i.toString()}>
<Button>{searchTerm.field.label}</Button>
<Button>{searchTerm.operator.label}</Button>
<Button>{searchTerm.searchValue}</Button>
</Space>
))} ))}
</Space> </Space>
<AutoComplete <AutoComplete
@@ -67,10 +81,17 @@ export const PowerSearch: React.FC<PowerSearchProps> = ({config}) => {
options={options} options={options}
bordered={false} bordered={false}
onSelect={(_: string, selectedOption: AutocompleteOption) => { onSelect={(_: string, selectedOption: AutocompleteOption) => {
console.log('selectedOption', selectedOption); const [fieldKey, operatorKey] =
selectedOption.value.split(OPTION_KEY_DELIMITER);
const fieldConfig = config.fields[fieldKey];
const operatorConfig = fieldConfig.operators[operatorKey];
setSearchExpression((prevSearchExpression) => [ setSearchExpression((prevSearchExpression) => [
...prevSearchExpression, ...prevSearchExpression,
selectedOption, {
field: fieldConfig,
operator: operatorConfig,
},
]); ]);
}} }}
value={null} value={null}