diff --git a/packages/react/src/components/CardEditor/CardEditForm/CardEditFormItems/DataSeriesFormItems/DataSeriesFormContent.jsx b/packages/react/src/components/CardEditor/CardEditForm/CardEditFormItems/DataSeriesFormItems/DataSeriesFormContent.jsx
index ae70eea26f..f6a77960a3 100644
--- a/packages/react/src/components/CardEditor/CardEditForm/CardEditFormItems/DataSeriesFormItems/DataSeriesFormContent.jsx
+++ b/packages/react/src/components/CardEditor/CardEditForm/CardEditFormItems/DataSeriesFormItems/DataSeriesFormContent.jsx
@@ -20,6 +20,9 @@ import { Dropdown } from '../../../../Dropdown';
import DataSeriesFormItemModal from '../DataSeriesFormItemModal';
import { CARD_TYPES, BAR_CHART_TYPES } from '../../../../../constants/LayoutConstants';
import ContentFormItemTitle from '../ContentFormItemTitle';
+import HierarchyDataFormItems, {
+ isHierarchyDataItem,
+} from '../HierarchyDataFormItems/HierarchyDataFormItems';
import BarChartDataSeriesContent from './BarChartDataSeriesContent';
@@ -328,6 +331,32 @@ const DataSeriesFormItem = ({
[cardConfig, dataSection, onChange, setSelectedDataItems, validDataItems]
);
+ const handleHierarchyDataItemChange = useCallback(
+ (items) => {
+ const updatedItems = items.map((item) => ({
+ ...item,
+ // create a unique dataSourceId if it's going into attributes
+ // if it's going into the groupBy section then just use the dataItem ID
+ dataSourceId: `${item.dataItemId}_${uuidv4()}`,
+ }));
+
+ const selectedItems = canMultiSelectDataItems
+ ? [...dataSection, ...updatedItems]
+ : [updatedItems[0]];
+
+ const newCard = handleDataSeriesChange(
+ selectedItems,
+ cardConfig,
+ setEditDataSeries,
+ undefined,
+ removedItemsCountRef
+ );
+ setSelectedDataItems(selectedItems.map(({ dataSourceId }) => dataSourceId));
+ onChange(newCard);
+ },
+ [canMultiSelectDataItems, cardConfig, dataSection, onChange, setSelectedDataItems]
+ );
+
const handleEditButton = useCallback(
async (dataItem, i) => {
const dataItemWithMetaData = validDataItems?.find(
@@ -387,62 +416,67 @@ const DataSeriesFormItem = ({
[cardConfig, dataSection, onChange, removedDataItems, setSelectedDataItems]
);
+ const generateListItems = useCallback(
+ (data, isHierarchy = false) =>
+ data
+ ?.filter((dataItem) => isHierarchyDataItem(dataItem) === isHierarchy)
+ .map((dataItem, i) => {
+ const colorIndex = (i + removedItemsCountRef.current) % DATAITEM_COLORS_OPTIONS.length;
+ const iconColorOption = dataItem.color || DATAITEM_COLORS_OPTIONS[colorIndex];
+ return {
+ id: dataItem.dataSourceId,
+ content: {
+ value: dataItem.label || dataItem.dataItemId,
+ icon:
+ cardConfig.type === CARD_TYPES.TIMESERIES || cardConfig.type === CARD_TYPES.BAR ? (
+
+ ) : null,
+ rowActions: () => [
+