@@ -119,7 +119,7 @@ function FiltersSection({filters, form, bodyshop}) {
|
||||
const type = filters.find(f => f.name === name)?.type;
|
||||
const reflector = filters.find(f => f.name === name)?.reflector;
|
||||
const operator = form.getFieldValue(['filters', field.name, "operator"]);
|
||||
const operatorType = getWhereOperatorsByType(type).find((o) => o.value === operator)?.type;
|
||||
const operatorType = operator ? getWhereOperatorsByType(type).find((o) => o.value === operator)?.type : null;
|
||||
|
||||
return <Form.Item
|
||||
key={`${index}value`}
|
||||
@@ -160,6 +160,7 @@ function FiltersSection({filters, form, bodyshop}) {
|
||||
if (operatorType === "array") {
|
||||
return (
|
||||
<Select
|
||||
disabled={!operator}
|
||||
mode="multiple"
|
||||
options={reflections}
|
||||
getPopupContainer={trigger => trigger.parentNode}
|
||||
@@ -184,7 +185,8 @@ function FiltersSection({filters, form, bodyshop}) {
|
||||
if (type === "number") {
|
||||
return (
|
||||
<InputNumber
|
||||
onChange={(value) => form.setFieldValue(fieldPath, value)}/>
|
||||
disabled={!operator}
|
||||
onChange={(value) => form.setFieldValue(fieldPath, value)}/>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -192,6 +194,7 @@ function FiltersSection({filters, form, bodyshop}) {
|
||||
if (type === "date") {
|
||||
return (
|
||||
<FormDatePicker
|
||||
disabled={!operator}
|
||||
onChange={(date) => form.setFieldValue(fieldPath, date)}
|
||||
/>
|
||||
);
|
||||
@@ -201,14 +204,15 @@ function FiltersSection({filters, form, bodyshop}) {
|
||||
if (type === "boolean" || type === "bool") {
|
||||
return (
|
||||
<Select
|
||||
disabled={!operator}
|
||||
getPopupContainer={trigger => trigger.parentNode}
|
||||
options={[
|
||||
{
|
||||
label: "True",
|
||||
label: t('reportcenter.labels.advanced_filters_true'),
|
||||
value: true
|
||||
},
|
||||
{
|
||||
label: "False",
|
||||
label: t('reportcenter.labels.advanced_filters_false'),
|
||||
value: false
|
||||
}
|
||||
]}
|
||||
@@ -218,7 +222,8 @@ function FiltersSection({filters, form, bodyshop}) {
|
||||
}
|
||||
return (
|
||||
<Input
|
||||
onChange={(e) => form.setFieldValue(fieldPath, e.target.value)}/>
|
||||
disabled={!operator}
|
||||
onChange={(e) => form.setFieldValue(fieldPath, e.target.value)}/>
|
||||
);
|
||||
})()
|
||||
}
|
||||
|
||||
@@ -38,6 +38,14 @@ const generateOptionsFromObject = (bodyshop, path, labelPath, valuePath) => {
|
||||
})), 'value');
|
||||
}
|
||||
|
||||
const generateOptionsFromArray = (bodyshop, path) => {
|
||||
const options = getValueFromPath(bodyshop, path);
|
||||
return uniqBy(options.map((value) => ({
|
||||
label: value,
|
||||
value: value,
|
||||
})), 'value');
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate special reflections
|
||||
* @param bodyshop
|
||||
@@ -46,15 +54,15 @@ const generateOptionsFromObject = (bodyshop, path, labelPath, valuePath) => {
|
||||
*/
|
||||
const generateSpecialReflections = (bodyshop, finalPath) => {
|
||||
switch (finalPath) {
|
||||
// Special case because Referral Sources is an Array, not an Object.
|
||||
case 'referral_source':
|
||||
return generateOptionsFromArray(bodyshop, 'md_referral_sources');
|
||||
case 'class':
|
||||
return generateOptionsFromArray(bodyshop, 'md_classes');
|
||||
case 'cost_centers':
|
||||
return generateOptionsFromObject(bodyshop, 'md_responsibility_centers.costs', 'name', 'name');
|
||||
// Special case because Categories is an Array, not an Object.
|
||||
case 'categories':
|
||||
const catOptions = getValueFromPath(bodyshop, 'md_categories');
|
||||
return uniqBy(catOptions.map((value) => ({
|
||||
label: value,
|
||||
value: value,
|
||||
})), 'value');
|
||||
return generateOptionsFromArray(bodyshop, 'md_categories');
|
||||
case 'insurance_companies':
|
||||
return generateOptionsFromObject(bodyshop, 'md_ins_cos', 'name', 'name');
|
||||
case 'employee_teams':
|
||||
@@ -118,4 +126,4 @@ const generateInternalReflections = ({bodyshop, upperPath, finalPath}) => {
|
||||
}
|
||||
};
|
||||
|
||||
export {generateInternalReflections,}
|
||||
export {generateInternalReflections,}
|
||||
|
||||
@@ -2708,7 +2708,9 @@
|
||||
"advanced_filters_filters": "Filters",
|
||||
"advanced_filters_hide": "Hide",
|
||||
"advanced_filters_show": "Show",
|
||||
"advanced_filters_sorter_direction": "Direction",
|
||||
"advanced_filters_true": "True",
|
||||
"advanced_filters_false": "False",
|
||||
"advanced_filters_sorter_direction": "Direction",
|
||||
"advanced_filters_sorter_field": "Field",
|
||||
"advanced_filters_sorters": "Sorters",
|
||||
"dates": "Dates",
|
||||
|
||||
@@ -2708,6 +2708,8 @@
|
||||
"advanced_filters_filters": "",
|
||||
"advanced_filters_hide": "",
|
||||
"advanced_filters_show": "",
|
||||
"advanced_filters_true": "",
|
||||
"advanced_filters_false": "",
|
||||
"advanced_filters_sorter_direction": "",
|
||||
"advanced_filters_sorter_field": "",
|
||||
"advanced_filters_sorters": "",
|
||||
|
||||
@@ -2708,6 +2708,8 @@
|
||||
"advanced_filters_filters": "",
|
||||
"advanced_filters_hide": "",
|
||||
"advanced_filters_show": "",
|
||||
"advanced_filters_true": "",
|
||||
"advanced_filters_false": "",
|
||||
"advanced_filters_sorter_direction": "",
|
||||
"advanced_filters_sorter_field": "",
|
||||
"advanced_filters_sorters": "",
|
||||
|
||||
@@ -19,6 +19,30 @@ const STRING_OPERATORS = [
|
||||
{value: "_nin", label: "not in", type: "array"}
|
||||
];
|
||||
|
||||
/**
|
||||
* The available operators for filtering (dates)
|
||||
* @type {[{label: string, value: string},{label: string, value: string},{label: string, value: string},{label: string, value: string},{label: string, value: string},null,null,null]}
|
||||
*/
|
||||
const DATE_OPERATORS = [
|
||||
{value: "_eq", label: "equals"},
|
||||
{value: "_neq", label: "does not equal"},
|
||||
{value: "_gt", label: "greater than"},
|
||||
{value: "_lt", label: "less than"},
|
||||
{value: "_gte", label: "greater than or equal"},
|
||||
{value: "_lte", label: "less than or equal"},
|
||||
{value: "_in", label: "in", type: "array"},
|
||||
{value: "_nin", label: "not in", type: "array"}
|
||||
];
|
||||
|
||||
/**
|
||||
* The available operators for filtering (booleans)
|
||||
* @type {[{label: string, value: string},{label: string, value: string}]}
|
||||
*/
|
||||
const BOOLEAN_OPERATORS = [
|
||||
{value: "_eq", label: "equals"},
|
||||
{value: "_neq", label: "does not equal"},
|
||||
];
|
||||
|
||||
/**
|
||||
* The available operators for filtering (numbers)
|
||||
* @type {[{label: string, value: string},{label: string, value: string},{label: string, value: string},{label: string, value: string},{label: string, value: string},null,null,null]}
|
||||
@@ -58,8 +82,11 @@ export function getOrderOperatorsByType() {
|
||||
*/
|
||||
export function getWhereOperatorsByType(type = 'string') {
|
||||
const operators = {
|
||||
string: STRING_OPERATORS,
|
||||
number: NUMBER_OPERATORS
|
||||
string: STRING_OPERATORS,
|
||||
number: NUMBER_OPERATORS,
|
||||
boolean: BOOLEAN_OPERATORS,
|
||||
bool: BOOLEAN_OPERATORS,
|
||||
date: DATE_OPERATORS
|
||||
};
|
||||
return operators[type];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user