This is an automated email from the ASF dual-hosted git repository.
rusackas pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/superset.git
The following commit(s) were added to refs/heads/master by this push:
new 7e504ff680 feat: truncate long values in table viz, a per-column
setting (#19383)
7e504ff680 is described below
commit 7e504ff680698106cf9008b4c2814b01fcac90bb
Author: stevetracvc <[email protected]>
AuthorDate: Wed Jul 6 22:16:48 2022 -0600
feat: truncate long values in table viz, a per-column setting (#19383)
* feat: truncate long values, a per-column setting
* fix: lint
* fix: removed width for column control
* fix: removed truncate option for time, bool, and numeric columns
* prevent extra div if not truncating
---
.../components/ColumnConfigControl/constants.tsx | 11 ++++++++
.../plugins/plugin-chart-table/src/Styles.tsx | 11 ++++++++
.../plugins/plugin-chart-table/src/TableChart.tsx | 29 +++++++++++++++++++++-
3 files changed, 50 insertions(+), 1 deletion(-)
diff --git
a/superset-frontend/packages/superset-ui-chart-controls/src/shared-controls/components/ColumnConfigControl/constants.tsx
b/superset-frontend/packages/superset-ui-chart-controls/src/shared-controls/components/ColumnConfigControl/constants.tsx
index 150f1e91f0..a749e5a7cc 100644
---
a/superset-frontend/packages/superset-ui-chart-controls/src/shared-controls/components/ColumnConfigControl/constants.tsx
+++
b/superset-frontend/packages/superset-ui-chart-controls/src/shared-controls/components/ColumnConfigControl/constants.tsx
@@ -40,6 +40,7 @@ export type SharedColumnConfigProp =
| 'd3SmallNumberFormat'
| 'd3TimeFormat'
| 'horizontalAlign'
+ | 'truncateLongCells'
| 'showCellBars';
const emitTarget: ControlFormItemSpec<'Input'> = {
@@ -142,6 +143,14 @@ const colorPositiveNegative:
ControlFormItemSpec<'Checkbox'> = {
debounceDelay: 200,
};
+const truncateLongCells: ControlFormItemSpec<'Checkbox'> = {
+ controlType: 'Checkbox',
+ label: t('Truncate Cells'),
+ description: t('Truncate long cells to the "min width" set above'),
+ defaultValue: false,
+ debounceDelay: 400,
+};
+
/**
* All configurable column formatting properties.
*/
@@ -159,6 +168,7 @@ export const SHARED_COLUMN_CONFIG_PROPS = {
d3TimeFormat,
fractionDigits,
columnWidth,
+ truncateLongCells,
horizontalAlign,
showCellBars,
alignPositiveNegative,
@@ -175,6 +185,7 @@ export const DEFAULT_CONFIG_FORM_LAYOUT:
ColumnConfigFormLayout = {
'columnWidth',
{ name: 'horizontalAlign', override: { defaultValue: 'left' } },
],
+ ['truncateLongCells'],
],
[GenericDataType.NUMERIC]: [
[
diff --git a/superset-frontend/plugins/plugin-chart-table/src/Styles.tsx
b/superset-frontend/plugins/plugin-chart-table/src/Styles.tsx
index 59a40b20bb..9219b6f003 100644
--- a/superset-frontend/plugins/plugin-chart-table/src/Styles.tsx
+++ b/superset-frontend/plugins/plugin-chart-table/src/Styles.tsx
@@ -82,6 +82,17 @@ export default styled.div`
float: right;
}
+ .dt-truncate-cell {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ }
+ .dt-truncate-cell:hover {
+ overflow: visible;
+ white-space: normal;
+ height: auto;
+ }
+
.dt-pagination {
text-align: right;
/* use padding instead of margin so clientHeight can capture it */
diff --git a/superset-frontend/plugins/plugin-chart-table/src/TableChart.tsx
b/superset-frontend/plugins/plugin-chart-table/src/TableChart.tsx
index 73a639df01..f56381bb96 100644
--- a/superset-frontend/plugins/plugin-chart-table/src/TableChart.tsx
+++ b/superset-frontend/plugins/plugin-chart-table/src/TableChart.tsx
@@ -341,6 +341,8 @@ export default function TableChart<D extends DataRecord =
DataRecord>(
? defaultColorPN
: config.colorPositiveNegative;
+ const { truncateLongCells } = config;
+
const hasColumnColorFormatters =
isNumeric &&
Array.isArray(columnColorFormatters) &&
@@ -411,12 +413,37 @@ export default function TableChart<D extends DataRecord =
DataRecord>(
].join(' '),
};
if (html) {
+ if (truncateLongCells) {
+ // eslint-disable-next-line react/no-danger
+ return (
+ <StyledCell {...cellProps}>
+ <div
+ className="dt-truncate-cell"
+ style={columnWidth ? { width: columnWidth } : undefined}
+ dangerouslySetInnerHTML={html}
+ />
+ </StyledCell>
+ );
+ }
// eslint-disable-next-line react/no-danger
return <StyledCell {...cellProps} dangerouslySetInnerHTML={html}
/>;
}
// If cellProps renderes textContent already, then we don't have to
// render `Cell`. This saves some time for large tables.
- return <StyledCell {...cellProps}>{text}</StyledCell>;
+ return (
+ <StyledCell {...cellProps}>
+ {truncateLongCells ? (
+ <div
+ className="dt-truncate-cell"
+ style={columnWidth ? { width: columnWidth } : undefined}
+ >
+ {text}
+ </div>
+ ) : (
+ text
+ )}
+ </StyledCell>
+ );
},
Header: ({ column: col, onClick, style, onDragStart, onDrop }) => (
<th