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:
committed by
Facebook GitHub Bot
parent
e031032b93
commit
f3bff735cc
@@ -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>;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user