I have quick filter and i wanna set dynamically filters for each quick filter (related Filter).
Do you have solutions for my case? try to bind the value but not worked.
{
"operation": "insert",
"name": "QuickFilter_kp8pw59",
"values": {
"layoutConfig": {
"column": 9,
"colSpan": 2,
"rowSpan": 1,
"row": 1
},
"type": "crt.QuickFilter",
"config": {
"caption": "#ResourceString(QuickFilter_kp8pw59_config_caption)#",
"hint": "",
"icon": "filter-column-icon",
"iconPosition": "left-icon",
"defaultValue": [],
"entitySchemaName": "BsiArea",
"recordsFilter": {
"filterType": 6,
"items": {
"byRegion": {
"filterType": 1,
"comparisonType": 3,
"isEnabled": true,
"leftExpression": {
"expressionType": 0,
"columnPath": "BsiRegion"
},
"rightExpression": {
"expressionType": 2,
"parameter": {
"dataValueType": 10,
"value": "SelectedRegionId" // bind ke attribute
}
}
}
}
}
},
Updated :
handlers: /**SCHEMA_HANDLERS*/[
{
request: "crt.HandleViewModelAttributeChangeRequest",
handler: async (request, next) => {
const regionQFAttrName = "QuickFilter_Region_Value"; // Region
const areaQFAttrName = "QuickFilter_Area_Value"; // Area
const outletQFAttrName = "QuickFilter_Cabang_Value"; // Outlet
if (request.attributeName !== regionQFAttrName && request.attributeName !== areaQFAttrName) {
return next?.handle(request);
}
const areaQFFilterAttrName = "QuickFilter_Area_ComboBox_List_Filter";
const outletQFFilterAttrName = "QuickFilter_Cabang_ComboBox_List_Filter";
const areaRegionColumnName = "BsiRegion";
const outletRegionColumnName = "BsiRegion";
const outletAreaColumnName = "BsiArea";
const areaFilter = new sdk.FilterGroup();
areaFilter.logicalOperation = sdk.LogicalOperatorType.Or;
const outletFilter = new sdk.FilterGroup();
outletFilter.logicalOperation = sdk.LogicalOperatorType.And;
const outletFilterByRegion = new sdk.FilterGroup();
outletFilterByRegion.logicalOperation = sdk.LogicalOperatorType.Or;
const outletFilterByArea = new sdk.FilterGroup();
outletFilterByArea.logicalOperation = sdk.LogicalOperatorType.Or;
if (request.attributeName === regionQFAttrName) {
let currentAreaValue = await request.$context[areaQFAttrName];
const needAdditionalConfigurateoutletFilter = Array.isArray(currentAreaValue) && currentAreaValue.length > 0;
if (Array.isArray(request.oldValue) && Array.isArray(request.value) && request.value.length > request.oldValue.length) {
currentAreaValue = [];
request.$context[areaQFAttrName] = [];
request.$context[outletQFAttrName] = [];
}
if (Array.isArray(request.value) && request.value.length > 0) {
for (var i = 0; i < request.value.length; i++) {
await areaFilter.addSchemaColumnFilterWithParameter(sdk.ComparisonType.Equal, areaRegionColumnName, request.value[i].value);
await outletFilterByRegion.addSchemaColumnFilterWithParameter(sdk.ComparisonType.Equal, outletRegionColumnName, request.value[i].value);
}
outletFilter.add(outletFilterByRegion);
}
request.$context[areaQFFilterAttrName] = areaFilter;
if (needAdditionalConfigurateoutletFilter) {
for (var i = 0; i < currentAreaValue.length; i++) {
await outletFilterByArea.addSchemaColumnFilterWithParameter(sdk.ComparisonType.Equal, outletAreaColumnName, currentAreaValue[i].value);
}
outletFilter.add(outletFilterByArea);
}
request.$context[outletQFFilterAttrName] = outletFilter;
}
if (request.attributeName === areaQFAttrName) {
const currentRegionValue = await request.$context[regionQFAttrName];
const needAdditionalConfigurateoutletFilter = Array.isArray(currentRegionValue) && currentRegionValue.length > 0;
if (Array.isArray(request.value) && request.value.length > 0) {
for (var i = 0; i < request.value.length; i++) {
await outletFilterByArea.addSchemaColumnFilterWithParameter(sdk.ComparisonType.Equal, outletAreaColumnName, request.value[i].value);
}
outletFilter.add(outletFilterByArea);
}
if (needAdditionalConfigurateoutletFilter) {
for (var i = 0; i < currentRegionValue.length; i++) {
await outletFilterByRegion.addSchemaColumnFilterWithParameter(sdk.ComparisonType.Equal, outletRegionColumnName, currentRegionValue[i].value);
}
outletFilter.add(outletFilterByRegion);
}
request.$context[outletQFFilterAttrName] = outletFilter;
}
return next?.handle(request);
}
},
{
request: "crt.HandleViewModelInitRequest",
handler: async (request, next) => {
const regionQFAttrName = "QuickFilter_Region_Value";
const areaQFAttrName = "QuickFilter_Area_Value";
const currentRegionValue = await request.$context[regionQFAttrName];
const currentAreaValue = await request.$context[areaQFAttrName];
const hasRegionValue = Array.isArray(currentRegionValue) && currentRegionValue.length > 0;
const hasAreaValue = Array.isArray(currentAreaValue) && currentAreaValue.length > 0;
if (!hasRegionValue && !hasAreaValue) {
return next?.handle(request);
}
const areaQFFilterAttrName = "QuickFilter_Area_ComboBox_List_Filter";
const outletQFFilterAttrName = "QuickFilter_Cabang_ComboBox_List_Filter";
const areaModelColumnName = "BsiRegion";
const outletRegionColumnName = "BsiRegion";
const outletAreaColumnName = "BsiArea";
const areaFilter = new sdk.FilterGroup();
areaFilter.logicalOperation = sdk.LogicalOperatorType.Or;
const outletFilter = new sdk.FilterGroup();
outletFilter.logicalOperation = sdk.LogicalOperatorType.And;
const outletFilterByRegion = new sdk.FilterGroup();
outletFilterByRegion.logicalOperation = sdk.LogicalOperatorType.Or;
const outletFilterByArea = new sdk.FilterGroup();
outletFilterByArea.logicalOperation = sdk.LogicalOperatorType.Or;
if (hasRegionValue) {
for (var i = 0; i < currentRegionValue.length; i++) {
await areaFilter.addSchemaColumnFilterWithParameter(sdk.ComparisonType.Equal, areaModelColumnName, currentRegionValue[i].value);
await outletFilterByRegion.addSchemaColumnFilterWithParameter(sdk.ComparisonType.Equal, outletRegionColumnName, currentRegionValue[i].value);
}
outletFilter.add(outletFilterByRegion);
request.$context[areaQFFilterAttrName] = areaFilter;
}
if (hasAreaValue) {
for (var i = 0; i < currentAreaValue.length; i++) {
await outletFilterByArea.addSchemaColumnFilterWithParameter(sdk.ComparisonType.Equal, outletAreaColumnName, currentAreaValue[i].value);
}
outletFilter.add(outletFilterByArea);
}
request.$context[outletQFFilterAttrName] = outletFilter;
return next?.handle(request);
}
}
]/**SCHEMA_HANDLERS*/,