Simplify search term renderer matching

Summary: Each search term renderer handles its "editing" state internally now. As a result, we can simplify switch-case

Reviewed By: antonk52

Differential Revision: D49454252

fbshipit-source-id: 297ce73f53772b0112ed338c6aac0583f3807ec8
This commit is contained in:
Andrey Goncharov
2023-09-20 04:36:57 -07:00
committed by Facebook GitHub Bot
parent e031032b93
commit f3bff735cc

View File

@@ -9,14 +9,9 @@
import {CloseOutlined} from '@ant-design/icons'; import {CloseOutlined} from '@ant-design/icons';
import {Button, Space} from 'antd'; import {Button, Space} from 'antd';
import dayjs from 'dayjs';
import * as React from 'react'; import * as React from 'react';
import { import {PowerSearchAbsoluteDateTerm} from './PowerSearchAbsoluteDateTerm';
DATE_ONLY_FORMAT, import {OperatorConfig} from './PowerSearchConfig';
DATE_TIME_FORMAT,
PowerSearchAbsoluteDateTerm,
} from './PowerSearchAbsoluteDateTerm';
import {FieldConfig, OperatorConfig} from './PowerSearchConfig';
import {PowerSearchEnumSetTerm} from './PowerSearchEnumSetTerm'; import {PowerSearchEnumSetTerm} from './PowerSearchEnumSetTerm';
import {PowerSearchEnumTerm} from './PowerSearchEnumTerm'; import {PowerSearchEnumTerm} from './PowerSearchEnumTerm';
import {PowerSearchFloatTerm} from './PowerSearchFloatTerm'; import {PowerSearchFloatTerm} from './PowerSearchFloatTerm';
@@ -42,250 +37,131 @@ export const PowerSearchTerm: React.FC<PowerSearchTermProps> = ({
onCancel, onCancel,
onFinalize, onFinalize,
}) => { }) => {
const hasValue = searchTerm.searchValue != null;
let searchValueComponent: React.ReactNode = null; let searchValueComponent: React.ReactNode = null;
if (!hasValue) { switch (searchTerm.operator.valueType) {
switch (searchTerm.operator.valueType) { case 'STRING': {
case 'STRING': { searchValueComponent = (
searchValueComponent = ( <PowerSearchStringTerm
<PowerSearchStringTerm onCancel={onCancel}
onCancel={onCancel} onChange={(newValue) => {
onChange={(newValue) => { onFinalize({
onFinalize({ ...searchTerm,
...searchTerm, searchValue: newValue,
searchValue: newValue, });
}); }}
}} defaultValue={searchTerm.searchValue}
defaultValue={searchTerm.searchValue} />
/> );
); break;
break;
}
case 'STRING_SET': {
searchValueComponent = (
<PowerSearchStringSetTerm
onCancel={onCancel}
onChange={(newValue) => {
onFinalize({
...searchTerm,
searchValue: newValue,
});
}}
/>
);
break;
}
case 'INTEGER': {
searchValueComponent = (
<PowerSearchIntegerTerm
onCancel={onCancel}
onChange={(newValue) => {
onFinalize({
...searchTerm,
searchValue: newValue,
});
}}
defaultValue={searchTerm.searchValue}
/>
);
break;
}
case 'FLOAT': {
searchValueComponent = (
<PowerSearchFloatTerm
onCancel={onCancel}
onChange={(newValue) => {
onFinalize({
...searchTerm,
searchValue: newValue,
});
}}
defaultValue={searchTerm.searchValue}
/>
);
break;
}
case 'NO_VALUE': {
// Nothing needs to be done. It should never be the case.
searchValueComponent = null;
break;
}
case 'ENUM': {
searchValueComponent = (
<PowerSearchEnumTerm
onCancel={onCancel}
onChange={(newValue) => {
onFinalize({
...searchTerm,
searchValue: newValue,
});
}}
enumLabels={searchTerm.operator.enumLabels}
defaultValue={searchTerm.searchValue}
/>
);
break;
}
case 'ENUM_SET': {
searchValueComponent = (
<PowerSearchEnumSetTerm
onCancel={onCancel}
onChange={(newValue) => {
onFinalize({
...searchTerm,
searchValue: newValue,
});
}}
enumLabels={searchTerm.operator.enumLabels}
/>
);
break;
}
case 'ABSOLUTE_DATE': {
searchValueComponent = (
<PowerSearchAbsoluteDateTerm
onCancel={onCancel}
onChange={(newValue) => {
onFinalize({
...searchTerm,
searchValue: newValue,
});
}}
minValue={searchTerm.operator.minValue}
maxValue={searchTerm.operator.maxValue}
dateOnly={searchTerm.operator.dateOnly}
defaultValue={searchTerm.searchValue}
/>
);
break;
}
default: {
console.error(
'PowerSearchTerm -> unknown operator.valueType',
searchTerm,
);
}
} }
} else { case 'STRING_SET': {
switch (searchTerm.operator.valueType) { searchValueComponent = (
case 'STRING': { <PowerSearchStringSetTerm
searchValueComponent = ( onCancel={onCancel}
<PowerSearchStringTerm onChange={(newValue) => {
onCancel={onCancel} onFinalize({
onChange={(newValue) => { ...searchTerm,
onFinalize({ searchValue: newValue,
...searchTerm, });
searchValue: newValue, }}
}); defaultValue={searchTerm.searchValue}
}} />
defaultValue={searchTerm.searchValue} );
/> break;
); }
break; case 'INTEGER': {
} searchValueComponent = (
case 'INTEGER': { <PowerSearchIntegerTerm
searchValueComponent = ( onCancel={onCancel}
<PowerSearchIntegerTerm onChange={(newValue) => {
onCancel={onCancel} onFinalize({
onChange={(newValue) => { ...searchTerm,
onFinalize({ searchValue: newValue,
...searchTerm, });
searchValue: newValue, }}
}); defaultValue={searchTerm.searchValue}
}} />
defaultValue={searchTerm.searchValue} );
/> break;
); }
break; case 'FLOAT': {
} searchValueComponent = (
case 'FLOAT': { <PowerSearchFloatTerm
searchValueComponent = ( onCancel={onCancel}
<PowerSearchFloatTerm onChange={(newValue) => {
onCancel={onCancel} onFinalize({
onChange={(newValue) => { ...searchTerm,
onFinalize({ searchValue: newValue,
...searchTerm, });
searchValue: newValue, }}
}); defaultValue={searchTerm.searchValue}
}} />
defaultValue={searchTerm.searchValue} );
/> break;
); }
break; case 'NO_VALUE': {
} // Nothing needs to be done. It should never be the case.
case 'ENUM': { searchValueComponent = null;
searchValueComponent = ( break;
<PowerSearchEnumTerm }
onCancel={onCancel} case 'ENUM': {
onChange={(newValue) => { searchValueComponent = (
onFinalize({ <PowerSearchEnumTerm
...searchTerm, onCancel={onCancel}
searchValue: newValue, onChange={(newValue) => {
}); onFinalize({
}} ...searchTerm,
enumLabels={searchTerm.operator.enumLabels} searchValue: newValue,
defaultValue={searchTerm.searchValue} });
/> }}
); enumLabels={searchTerm.operator.enumLabels}
break; defaultValue={searchTerm.searchValue}
} />
case 'ENUM_SET': { );
searchValueComponent = ( break;
<PowerSearchEnumSetTerm }
onCancel={onCancel} case 'ENUM_SET': {
onChange={(newValue) => { searchValueComponent = (
onFinalize({ <PowerSearchEnumSetTerm
...searchTerm, onCancel={onCancel}
searchValue: newValue, onChange={(newValue) => {
}); onFinalize({
}} ...searchTerm,
enumLabels={searchTerm.operator.enumLabels} searchValue: newValue,
defaultValue={searchTerm.searchValue} });
/> }}
); enumLabels={searchTerm.operator.enumLabels}
break; defaultValue={searchTerm.searchValue}
} />
case 'STRING_SET': { );
searchValueComponent = ( break;
<PowerSearchStringSetTerm }
onCancel={onCancel} case 'ABSOLUTE_DATE': {
onChange={(newValue) => { searchValueComponent = (
onFinalize({ <PowerSearchAbsoluteDateTerm
...searchTerm, onCancel={onCancel}
searchValue: newValue, onChange={(newValue) => {
}); onFinalize({
}} ...searchTerm,
defaultValue={searchTerm.searchValue} searchValue: newValue,
/> });
); }}
break; minValue={searchTerm.operator.minValue}
} maxValue={searchTerm.operator.maxValue}
case 'ABSOLUTE_DATE': { dateOnly={searchTerm.operator.dateOnly}
searchValueComponent = ( defaultValue={searchTerm.searchValue}
<PowerSearchAbsoluteDateTerm />
onCancel={onCancel} );
onChange={(newValue) => { break;
onFinalize({ }
...searchTerm, default: {
searchValue: newValue, // Compilation is going to fail if switch-case is not exhaustive (i.e. we did not cover all possible cases)
}); const exhaustiveCheck: never = searchTerm.operator;
}} console.error(
minValue={searchTerm.operator.minValue} 'PowerSearchTerm -> unknown operator.valueType',
maxValue={searchTerm.operator.maxValue} searchTerm,
dateOnly={searchTerm.operator.dateOnly} exhaustiveCheck,
defaultValue={searchTerm.searchValue} );
/>
);
break;
}
case 'NO_VALUE': {
searchValueComponent = null;
break;
}
default: {
searchValueComponent = <Button>{searchTerm.searchValue}</Button>;
}
} }
} }