Skip to content

Commit

Permalink
feat: column width support
Browse files Browse the repository at this point in the history
JIRA: F1-148
  • Loading branch information
hackerstanislav committed Apr 2, 2024
1 parent cf2abde commit a2836cf
Show file tree
Hide file tree
Showing 10 changed files with 817 additions and 20 deletions.
92 changes: 90 additions & 2 deletions libs/sdk-ui-charts/api/sdk-ui-charts.api.md
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@ export function constructRepeaterDimensions(buckets: IBucket[]): IDimension[];
export const CoreHeadline: React_2.ComponentClass<ICoreChartProps & ICoreHeadlineExtendedProps, any>;

// @internal (undocumented)
export const CoreRepeater: React_2.FC<ICoreRepeterChartProps>;
export const CoreRepeater: React_2.FC<ICoreRepeaterChartProps>;

// @internal
export const CoreXirr: React_2.ComponentClass<ICoreChartProps, any>;
Expand Down Expand Up @@ -430,7 +430,8 @@ export interface ICoreHeadlineExtendedProps {
}

// @internal (undocumented)
export interface ICoreRepeterChartProps extends ICoreChartProps, WrappedComponentProps {
export interface ICoreRepeaterChartProps extends ICoreChartProps, WrappedComponentProps {
onColumnResized?: RepeaterColumnResizedCallback;
// (undocumented)
theme?: ITheme;
}
Expand Down Expand Up @@ -668,6 +669,46 @@ export interface IPyramidChartBucketProps {
export interface IPyramidChartProps extends IBucketChartProps, IPyramidChartBucketProps {
}

// @public (undocumented)
export interface IRepeaterAbsoluteColumnWidth {
// (undocumented)
allowGrowToFit?: boolean;
// (undocumented)
value: number;
}

// @public
export interface IRepeaterAttributeColumnLocator {
// (undocumented)
attributeLocatorItem: IRepeaterAttributeColumnLocatorBody;
}

// @public
export interface IRepeaterAttributeColumnLocatorBody {
attributeIdentifier: Identifier;
element?: string | null;
}

// @public (undocumented)
export interface IRepeaterAttributeColumnWidthItem {
// (undocumented)
attributeColumnWidthItem: IRepeaterAttributeColumnWidthItemBody;
}

// @public
export interface IRepeaterAttributeColumnWidthItemBody {
// (undocumented)
attributeIdentifier: Identifier;
// (undocumented)
width: IRepeaterAbsoluteColumnWidth;
}

// @public (undocumented)
export interface IRepeaterAutoColumnWidth {
// (undocumented)
value: "auto";
}

// @beta (undocumented)
export interface IRepeaterBucketProps {
attribute: AttributeOrPlaceholder;
Expand All @@ -677,6 +718,38 @@ export interface IRepeaterBucketProps {
sliceVisualizationBy?: AttributeOrPlaceholder;
}

// @public (undocumented)
export interface IRepeaterColumnSizing {
columnWidths?: RepeaterColumnWidthItem[];
defaultWidth?: RepeaterDefaultColumnWidth;
growToFit?: boolean;
}

// @public
export interface IRepeaterMeasureColumnLocator {
// (undocumented)
measureLocatorItem: IRepeaterMeasureColumnLocatorBody;
}

// @public
export interface IRepeaterMeasureColumnLocatorBody {
measureIdentifier: Identifier;
}

// @public (undocumented)
export interface IRepeaterMeasureColumnWidthItem {
// (undocumented)
measureColumnWidthItem: IRepeaterMeasureColumnWidthItemBody;
}

// @public
export interface IRepeaterMeasureColumnWidthItemBody {
// (undocumented)
locators: RepeaterColumnLocator[];
// (undocumented)
width: RepeaterColumnWidth;
}

// @beta (undocumented)
export interface IRepeaterProps extends IBucketChartProps, IRepeaterBucketProps {
}
Expand Down Expand Up @@ -837,6 +910,21 @@ export const PyramidChart: (props: IPyramidChartProps) => React_2.JSX.Element;
// @beta (undocumented)
export const Repeater: (props: IRepeaterProps) => JSX.Element;

// @public (undocumented)
export type RepeaterColumnLocator = IRepeaterAttributeColumnLocator | IRepeaterMeasureColumnLocator;

// @public (undocumented)
export type RepeaterColumnResizedCallback = (columnWidths: RepeaterColumnWidthItem[]) => void;

// @public (undocumented)
export type RepeaterColumnWidth = IRepeaterAbsoluteColumnWidth | IRepeaterAutoColumnWidth;

// @public (undocumented)
export type RepeaterColumnWidthItem = IRepeaterAttributeColumnWidthItem | IRepeaterMeasureColumnWidthItem;

// @public (undocumented)
export type RepeaterDefaultColumnWidth = "unset" | "autoresizeAll" | "viewport";

// @public
export const SankeyChart: (props: ISankeyChartProps) => React_2.JSX.Element;

Expand Down
21 changes: 20 additions & 1 deletion libs/sdk-ui-charts/src/charts/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,25 @@ export {
constructRepeaterDimensions,
} from "./repeater/internal/repeaterExecution.js";
export { Repeater, IRepeaterProps, IRepeaterBucketProps } from "./repeater/Repeater.js";
export { CoreRepeater, ICoreRepeterChartProps } from "./repeater/CoreRepeater.js";
export {
CoreRepeater,
ICoreRepeaterChartProps,
RepeaterColumnResizedCallback,
RepeaterColumnWidthItem,
RepeaterColumnWidth,
RepeaterDefaultColumnWidth,
RepeaterColumnLocator,
IRepeaterColumnSizing,
IRepeaterAbsoluteColumnWidth,
IRepeaterAutoColumnWidth,
IRepeaterAttributeColumnWidthItem,
IRepeaterMeasureColumnWidthItem,
IRepeaterAttributeColumnWidthItemBody,
IRepeaterMeasureColumnWidthItemBody,
IRepeaterAttributeColumnLocator,
IRepeaterAttributeColumnLocatorBody,
IRepeaterMeasureColumnLocator,
IRepeaterMeasureColumnLocatorBody,
} from "./repeater/CoreRepeater.js";

export { withJsxExport } from "./withJsxExport.js";
27 changes: 23 additions & 4 deletions libs/sdk-ui-charts/src/charts/repeater/CoreRepeater.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,22 +15,34 @@ import { ITheme } from "@gooddata/sdk-model";
import { ThemeContextProvider, withTheme } from "@gooddata/sdk-ui-theme-provider";
import { ICoreChartProps } from "../../interfaces/index.js";
import { RepeaterChart } from "./internal/RepeaterChart.js";
import { RepeaterColumnResizedCallback } from "./publicTypes.js";

export * from "./publicTypes.js";
export * from "./columnWidths.js";

/**
* @internal
*/
export interface ICoreRepeterChartProps extends ICoreChartProps, WrappedComponentProps {
export interface ICoreRepeaterChartProps extends ICoreChartProps, WrappedComponentProps {
theme?: ITheme;

/**
* Specify function to call when user manually resizes a table column.
*
* @param columnWidths - new widths for columns
*/
onColumnResized?: RepeaterColumnResizedCallback;
}

export const CoreRepeaterImpl: React.FC<ICoreRepeterChartProps> = (props) => {
export const CoreRepeaterImpl: React.FC<ICoreRepeaterChartProps> = (props) => {
const {
execution,
ErrorComponent = SDKErrorComponent,
LoadingComponent = SDKLoadingComponent,
onLoadingChanged,
pushData,
onError,
onColumnResized,
config,
} = props;

Expand Down Expand Up @@ -78,15 +90,22 @@ export const CoreRepeaterImpl: React.FC<ICoreRepeterChartProps> = (props) => {
return <LoadingComponent />;
}

return <RepeaterChart dataView={result} config={config} onError={onError} />;
return (
<RepeaterChart
dataView={result}
config={config}
onError={onError}
onColumnResized={onColumnResized}
/>
);
};

const CoreRepeaterWithIntl = injectIntl(withTheme(CoreRepeaterImpl));

/**
* @internal
*/
export const CoreRepeater: React.FC<ICoreRepeterChartProps> = (props) => (
export const CoreRepeater: React.FC<ICoreRepeaterChartProps> = (props) => (
<ThemeContextProvider theme={props.theme || {}} themeIsLoading={false}>
<IntlWrapper locale={props.locale}>
<CoreRepeaterWithIntl {...props} />
Expand Down
138 changes: 138 additions & 0 deletions libs/sdk-ui-charts/src/charts/repeater/columnWidths.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
// (C) 2007-2024 GoodData Corporation
import { Identifier } from "@gooddata/sdk-model";

//
// types used in implementation internals
//

/**
* @internal
*/
export enum ColumnEventSourceType {
AUTOSIZE_COLUMNS = "autosizeColumns",
UI_DRAGGED = "uiColumnDragged",
FIT_GROW = "growToFit",
}

/**
* @internal
*/
export enum UIClick {
CLICK = 1,
DOUBLE_CLICK = 2,
}

//
//
//

/**
* @public
*/
export interface IRepeaterAbsoluteColumnWidth {
value: number;
allowGrowToFit?: boolean;
}

/**
* @public
*/
export interface IRepeaterAutoColumnWidth {
value: "auto";
}

/**
* @public
*/
export type RepeaterColumnWidth = IRepeaterAbsoluteColumnWidth | IRepeaterAutoColumnWidth;

/**
* Object defining the {@link IRepeaterAttributeColumnWidthItem} object body.
*
* @public
*/
export interface IRepeaterAttributeColumnWidthItemBody {
width: IRepeaterAbsoluteColumnWidth;
attributeIdentifier: Identifier;
}

/**
* @public
*/
export interface IRepeaterAttributeColumnWidthItem {
attributeColumnWidthItem: IRepeaterAttributeColumnWidthItemBody;
}

/**
* Object defining the {@link IRepeaterMeasureColumnWidthItem} object body.
*
* @public
*/
export interface IRepeaterMeasureColumnWidthItemBody {
width: RepeaterColumnWidth;
locators: RepeaterColumnLocator[];
}

/**
* @public
*/
export interface IRepeaterMeasureColumnWidthItem {
measureColumnWidthItem: IRepeaterMeasureColumnWidthItemBody;
}

/**
* @public
*/
export type RepeaterColumnWidthItem = IRepeaterAttributeColumnWidthItem | IRepeaterMeasureColumnWidthItem;

/**
* @public
*/
export type RepeaterColumnLocator = IRepeaterAttributeColumnLocator | IRepeaterMeasureColumnLocator;

/**
* Object defining the {@link IRepeaterMeasureColumnLocator} object body.
*
* @public
*/
export interface IRepeaterMeasureColumnLocatorBody {
/**
* Local identifier of the measure.
*/
measureIdentifier: Identifier;
}

/**
* Locates table column by column measure's localId.
*
* @public
*/
export interface IRepeaterMeasureColumnLocator {
measureLocatorItem: IRepeaterMeasureColumnLocatorBody;
}

/**
* Object defining the {@link IRepeaterAttributeColumnLocator} object body.
*
* @public
*/
export interface IRepeaterAttributeColumnLocatorBody {
/**
* Local identifier of the attribute
*/
attributeIdentifier: Identifier;

/**
* Attribute element URI / primary key.
*/
element?: string | null;
}

/**
* Locates all columns for an attribute or columns for particular attribute element.
*
* @public
*/
export interface IRepeaterAttributeColumnLocator {
attributeLocatorItem: IRepeaterAttributeColumnLocatorBody;
}
Loading

0 comments on commit a2836cf

Please sign in to comment.