diff --git a/packages/app-builder/src/components/Analytics/RuleVsDecisionOutcomes.tsx b/packages/app-builder/src/components/Analytics/RuleVsDecisionOutcomes.tsx
index 6eeaf32aab..ce393bb371 100644
--- a/packages/app-builder/src/components/Analytics/RuleVsDecisionOutcomes.tsx
+++ b/packages/app-builder/src/components/Analytics/RuleVsDecisionOutcomes.tsx
@@ -94,7 +94,7 @@ export function RuleVsDecisionOutcomes({
{isLoading ? (
diff --git a/packages/app-builder/src/models/analytics/decisions-outcomes-perday.ts b/packages/app-builder/src/models/analytics/decisions-outcomes-perday.ts
index 70e836c22f..63b8d1f4ac 100644
--- a/packages/app-builder/src/models/analytics/decisions-outcomes-perday.ts
+++ b/packages/app-builder/src/models/analytics/decisions-outcomes-perday.ts
@@ -76,6 +76,7 @@ export const triggerFilter = z.object({
name: z.string(),
op: z.enum(['=', '!=', '>', '>=', '<', '<=', 'in']),
value: z.array(z.union([z.string(), z.number(), z.boolean()])),
+ unavailable: z.boolean(),
});
export const mergeDateRanges = (dateRanges: DecisionOutcomesPerDayResponseDto[][]): DecisionOutcomesPerDayEntity[] =>
diff --git a/packages/app-builder/src/models/analytics/index.ts b/packages/app-builder/src/models/analytics/index.ts
index a5e550d48a..1262f5d6c4 100644
--- a/packages/app-builder/src/models/analytics/index.ts
+++ b/packages/app-builder/src/models/analytics/index.ts
@@ -85,12 +85,14 @@ export const analyticsQuery = analyticsFiltersQuery.extend({
});
export const transformTriggersFiltersToFieldsFilters = (filters: AnalyticsFiltersQuery['trigger']): FieldFilterDto[] =>
- filters?.map((f) => ({
- source: 'trigger_object',
- field: f.name,
- op: f.op,
- values: f.value,
- })) ?? [];
+ filters
+ ?.filter((f) => !f.unavailable)
+ .map((f) => ({
+ source: 'trigger_object',
+ field: f.name,
+ op: f.op,
+ values: f.value,
+ })) ?? [];
// export const TransformAnalyticsQueryRequest = analyticsQuery.transform((val): AnalyticsQueryDto[] => {
diff --git a/packages/app-builder/src/routes/_builder+/_analytics+/analytics.$scenarioId.tsx b/packages/app-builder/src/routes/_builder+/_analytics+/analytics.$scenarioId.tsx
index a98c1b1db4..6b202e0d6c 100644
--- a/packages/app-builder/src/routes/_builder+/_analytics+/analytics.$scenarioId.tsx
+++ b/packages/app-builder/src/routes/_builder+/_analytics+/analytics.$scenarioId.tsx
@@ -251,7 +251,7 @@ export default function Analytics() {
const values = Array.isArray(textFilter.value)
? (textFilter.value as string[]).filter((v) => v != null && String(v).length > 0)
: [];
- return values.length ? [{ name, op: textFilter.op, value: values }] : [];
+ return values.length ? [{ name, op: textFilter.op, value: values, unavailable: descriptor.unavailable }] : [];
}
case 'number': {
@@ -265,13 +265,15 @@ export default function Analytics() {
const cleaned = (values as Array).filter(
(v) => v !== null && v !== undefined && (typeof v !== 'string' || v.length > 0),
);
- return cleaned.length ? [{ name, op: numFilter.op, value: cleaned }] : [];
+ return cleaned.length
+ ? [{ name, op: numFilter.op, value: cleaned, unavailable: descriptor.unavailable }]
+ : [];
}
case 'boolean': {
// Boolean filter: boolean value
if (typeof val !== 'boolean') return [] as any[];
- return [{ name, op: '=', value: [val] }];
+ return [{ name, op: '=', value: [val], unavailable: descriptor.unavailable }];
}
default:
diff --git a/packages/ui-design-system/src/FiltersBar/FiltersBar.tsx b/packages/ui-design-system/src/FiltersBar/FiltersBar.tsx
index a8626fc00a..c11bf554f8 100644
--- a/packages/ui-design-system/src/FiltersBar/FiltersBar.tsx
+++ b/packages/ui-design-system/src/FiltersBar/FiltersBar.tsx
@@ -272,7 +272,9 @@ export function FiltersBar({ descriptors = [], dynamicDescriptors = [], value, o
key={filter.name}
buttonState={buttonState({
state:
- textFilter.selectedValue?.value && textFilter.selectedValue.value.length > 0
+ !textFilter.unavailable &&
+ textFilter.selectedValue?.value &&
+ textFilter.selectedValue.value.length > 0
? 'enabled'
: 'disabled',
})}
diff --git a/packages/ui-design-system/src/FiltersBar/internals/NumberValueFilter.tsx b/packages/ui-design-system/src/FiltersBar/internals/NumberValueFilter.tsx
index d8f3483083..7284e0c8bf 100644
--- a/packages/ui-design-system/src/FiltersBar/internals/NumberValueFilter.tsx
+++ b/packages/ui-design-system/src/FiltersBar/internals/NumberValueFilter.tsx
@@ -71,9 +71,9 @@ export function NumberValueFilter({ filter, buttonState }: { filter: NumberFilte
const raw = (filter.selectedValue as any)?.value ?? localValue.value;
const val = Array.isArray(raw) ? Number((raw as number[])[0]) : Number(raw as number);
return (
- <>
+
{op} {val}
- >
+
);
})()}
{filter.unavailable ? (
diff --git a/packages/ui-design-system/src/FiltersBar/internals/TextMatchFilter.tsx b/packages/ui-design-system/src/FiltersBar/internals/TextMatchFilter.tsx
index 60e6685534..3da6bf91ec 100644
--- a/packages/ui-design-system/src/FiltersBar/internals/TextMatchFilter.tsx
+++ b/packages/ui-design-system/src/FiltersBar/internals/TextMatchFilter.tsx
@@ -4,6 +4,7 @@ import { ButtonV2 } from '../../Button/Button';
import { useI18n } from '../../contexts/I18nContext';
import { Input } from '../../Input/Input';
import { Tooltip } from '../../Tooltip/Tooltip';
+import { cn } from '../../utils';
import { type TextFilter } from '../types';
import { FilterItem, FilterPopover } from './FilterPopover';
import { useFiltersBarContext } from './FiltersBarContext';
@@ -39,7 +40,7 @@ export function TextMatchFilter({ filter, buttonState }: { filter: TextFilter; b
{filter.name}
{filter.selectedValue?.value && filter.selectedValue.value.length > 0 ? (
-
+
{t('filters:ds.text_match_filter.selected_values', {
values: filter.selectedValue.value.join(', '),
})}