Skip to content

Commit

Permalink
Merge pull request #6029 from gooddata/SHA_master
Browse files Browse the repository at this point in the history
feat: mode=export add filter type
  • Loading branch information
hackerstanislav authored Mar 7, 2025
2 parents ae01072 + 424aec6 commit 8176fe1
Show file tree
Hide file tree
Showing 7 changed files with 97 additions and 16 deletions.
15 changes: 14 additions & 1 deletion libs/sdk-ui-dashboard/api/sdk-ui-dashboard.api.md
Original file line number Diff line number Diff line change
Expand Up @@ -2866,6 +2866,17 @@ export interface DashboardQueryStartedPayload {
// @beta (undocumented)
export type DashboardQueryType = "GDC.DASH/QUERY.INSIGHT.DATE.DATASETS" | "GDC.DASH/QUERY.INSIGHT.ATTRIBUTE.META" | "GDC.DASH/QUERY.MEASURE.DATE.DATASETS" | "GDC.DASH/QUERY.WIDGET.FILTERS" | "GDC.DASH/QUERY.WIDGET.BROKEN_ALERTS" | "GDC.DASH/QUERY.WIDGET.ALERT_COUNT" | "GDC.DASH/QUERY.CONNECTING.ATTRIBUTES" | "GDC.DASH/QUERY.DISPLAY.FORM.ATTRIBUTE" | "GDC.DASH/QUERY.DATA.SET.ATTRIBUTE" | "GDC.DASH/QUERY.ELEMENTS.ATTRIBUTE" | "GDC.DASH/QUERY.CONNECTED.ATTRIBUTES" | "GDC.DASH/QUERY.METRICS_AND_FACTS" | "GDC.DASH/QUERY.AVAILABLE.DATA.SETS.FOR.ITEMS";

// @alpha (undocumented)
export type DashboardRelatedFilter = {
type: "attributeFilter" | "dateFilter";
all: boolean;
id: string;
title: string;
subtitle: string;
common?: true;
mode: DashboardDateFilterConfigMode | DashboardAttributeFilterConfigMode;
};

// @beta
export interface DashboardRenamed extends IDashboardEvent {
// (undocumented)
Expand Down Expand Up @@ -6416,14 +6427,16 @@ export type MetaExportData = {
filter: {
name: MetaExportDataAttributes;
value: MetaExportDataAttributes;
filterData: (data: DashboardRelatedFilter) => MetaExportDataAttributes;
};
};
};

// @alpha
export type MetaExportDataAttributes = {
"data-export-meta-type": ExportMetaType;
"data-export-meta-type"?: ExportMetaType;
"data-export-meta-filter-type"?: "date" | "attribute";
"data-export-meta-filter-mode"?: "readonly" | "hidden" | "active";
};

// @alpha (undocumented)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import {
isAllTimeDashboardDateFilter,
isAllValuesDashboardAttributeFilter,
isDashboardAttributeFilter,
isDashboardCommonDateFilter,
isDashboardDateFilterWithDimension,
serializeObjRef,
} from "@gooddata/sdk-model";
Expand All @@ -31,7 +32,16 @@ import {
import { useCommonDateFilterTitle } from "./useCommonDateFilterTitle.js";
import { useDateFiltersTitles } from "./useDateFiltersTitles.js";

export function useFiltersNamings(filtersToDisplay: FilterContextItem[]) {
export type FilterNaming = {
type: "attributeFilter" | "dateFilter";
all: boolean;
id: string;
title: string;
subtitle: string;
common?: true;
};

export function useFiltersNamings(filtersToDisplay: FilterContextItem[]): (FilterNaming | undefined)[] {
const intl = useIntl();
const locale = useDashboardSelector(selectLocale);
const settings = useDashboardSelector(selectSettings);
Expand Down Expand Up @@ -95,24 +105,31 @@ export function useFiltersNamings(filtersToDisplay: FilterContextItem[]) {
);
const subtitle = DateFilterHelpers.getDateFilterTitle(dateFilterOption, locale, dateFormat);

if (isDashboardDateFilterWithDimension(filter)) {
const key = serializeObjRef(filter.dateFilter.dataSet!);
const a = filter;
if (isDashboardDateFilterWithDimension(a)) {
const key = serializeObjRef(a.dateFilter.dataSet!);
return {
type: "dateFilter",
all: isAllTimeDashboardDateFilter(filter),
id: uuidv4(), // used just for React keys
all: isAllTimeDashboardDateFilter(a),
id: a.dateFilter.localIdentifier ?? uuidv4(),
title: allDateFiltersTitlesObj[key],
subtitle,
};
} else {
}

const b = filter;
if (isDashboardCommonDateFilter(b)) {
return {
type: "dateFilter",
all: isAllTimeDashboardDateFilter(filter),
id: uuidv4(), // used just for React keys
common: true,
all: isAllTimeDashboardDateFilter(b),
id: b.dateFilter.localIdentifier ?? uuidv4(),
title: commonDateFilterTitle || intl.formatMessage({ id: "dateFilterDropdown.title" }),
subtitle,
};
}

return undefined;
}
});
}
Original file line number Diff line number Diff line change
Expand Up @@ -46,13 +46,21 @@ export function DefaultDashboardExportVariables({ renderMode }: DefaultDashboard
{dateFilters.length > 0 || attributeFilters.length > 0 ? (
<div {...exportData?.filters?.root}>
{dateFilters.map((filter, i: number) => (
<div key={i} {...exportData?.filters?.dateFilter}>
<div
key={i}
{...exportData?.filters?.dateFilter}
{...exportData?.filters?.filter.filterData(filter)}
>
<span {...exportData?.filters?.filter.name}>{filter?.title}</span> -{" "}
<span {...exportData?.filters?.filter.value}>{filter?.subtitle}</span>
</div>
))}
{attributeFilters.map((filter, i: number) => (
<div key={i} {...exportData?.filters?.attributeFilter}>
<div
key={i}
{...exportData?.filters?.attributeFilter}
{...exportData?.filters?.filter.filterData(filter)}
>
<span {...exportData?.filters?.filter.name}>{filter?.title}</span> -{" "}
<span {...exportData?.filters?.filter.value}>{filter?.subtitle}</span>
</div>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,47 @@
// (C) 2022-2025 GoodData Corporation
import { selectFilterContextFilters, useDashboardSelector } from "../../../model/index.js";
import { useFiltersNamings } from "../../../_staging/sharedHooks/useFiltersNamings.js";
import {
selectAttributeFilterConfigsOverrides,
selectDateFilterConfigOverrides,
selectFilterContextFilters,
useDashboardSelector,
} from "../../../model/index.js";
import { FilterNaming, useFiltersNamings } from "../../../_staging/sharedHooks/useFiltersNamings.js";
import { DashboardAttributeFilterConfigMode, DashboardDateFilterConfigMode } from "@gooddata/sdk-model";

export function useDashboardRelatedFilters() {
/**
* @alpha
*/
export type DashboardRelatedFilter = {
type: "attributeFilter" | "dateFilter";
all: boolean;
id: string;
title: string;
subtitle: string;
common?: true;
mode: DashboardDateFilterConfigMode | DashboardAttributeFilterConfigMode;
};

export function useDashboardRelatedFilters(): {
dateFilters: DashboardRelatedFilter[];
attributeFilters: DashboardRelatedFilter[];
} {
const dashboardFilters = useDashboardSelector(selectFilterContextFilters);
const dateFiltersConfig = useDashboardSelector(selectDateFilterConfigOverrides);
const attributeFiltersConfig = useDashboardSelector(selectAttributeFilterConfigsOverrides);
const filters = useFiltersNamings(dashboardFilters);

const all = filters.filter((f) => !f?.all);
const all = (filters.filter((f) => f && !f.all) as FilterNaming[]).map((f) => {
return {
...f,
...(f?.type === "dateFilter" && f?.common
? {
mode: dateFiltersConfig?.mode,
}
: {
mode: attributeFiltersConfig.find((c) => c.localIdentifier === f?.id)?.mode,
}),
};
}) as DashboardRelatedFilter[];

return {
dateFilters: all.filter((f) => f?.type === "dateFilter"),
Expand Down
1 change: 1 addition & 0 deletions libs/sdk-ui-dashboard/src/presentation/export/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,4 @@
export * from "./types.js";
export * from "./useExportData.js";
export * from "./DefaultDashboardExportVariables.js";
export type { DashboardRelatedFilter } from "./hooks/useDashboardRelatedFilters.js";
6 changes: 5 additions & 1 deletion libs/sdk-ui-dashboard/src/presentation/export/types.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
// (C) 2025 GoodData Corporation

import { DashboardRelatedFilter } from "./hooks/useDashboardRelatedFilters.js";

/**
* Export element type.
*
Expand Down Expand Up @@ -48,8 +50,9 @@ export type CommonExportDataAttributes = {
* @alpha
*/
export type MetaExportDataAttributes = {
"data-export-meta-type": ExportMetaType;
"data-export-meta-type"?: ExportMetaType;
"data-export-meta-filter-type"?: "date" | "attribute";
"data-export-meta-filter-mode"?: "readonly" | "hidden" | "active";
};

/**
Expand All @@ -73,6 +76,7 @@ export type MetaExportData = {
filter: {
name: MetaExportDataAttributes;
value: MetaExportDataAttributes;
filterData: (data: DashboardRelatedFilter) => MetaExportDataAttributes;
};
};
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,9 @@ export const useMetaExportData = (): MetaExportData | undefined => {
value: {
"data-export-meta-type": "dashboard-filter-value",
},
filterData: (data) => ({
"data-export-meta-filter-mode": data.mode,
}),
},
},
};
Expand Down

0 comments on commit 8176fe1

Please sign in to comment.