diff --git a/packages/terra-data-grid/tests/jest/__snapshots__/DataGrid.test.jsx.snap b/packages/terra-data-grid/tests/jest/__snapshots__/DataGrid.test.jsx.snap index 734f1e7ba4a..b17abaa793f 100644 --- a/packages/terra-data-grid/tests/jest/__snapshots__/DataGrid.test.jsx.snap +++ b/packages/terra-data-grid/tests/jest/__snapshots__/DataGrid.test.jsx.snap @@ -590,7 +590,6 @@ exports[`DataGrid verifies onCellSelect callback is triggered when space is pres Object { "height": "2.5rem", "left": 0, - "width": "200px", } } title=" Vitals" @@ -780,7 +779,6 @@ exports[`DataGrid verifies onCellSelect callback is triggered when space is pres Object { "height": "2.5rem", "left": 200, - "width": "200px", } } title="March 16" @@ -978,7 +976,6 @@ exports[`DataGrid verifies onCellSelect callback is triggered when space is pres Object { "height": "2.5rem", "left": null, - "width": "200px", } } tabIndex={-1} @@ -3238,7 +3235,6 @@ exports[`DataGrid verifies onCellSelect callback is triggered when space is pres Object { "height": "2.5rem", "left": 0, - "width": "200px", } } title=" Vitals" @@ -3428,7 +3424,6 @@ exports[`DataGrid verifies onCellSelect callback is triggered when space is pres Object { "height": "2.5rem", "left": 200, - "width": "200px", } } title="March 16" @@ -3626,7 +3621,6 @@ exports[`DataGrid verifies onCellSelect callback is triggered when space is pres Object { "height": "2.5rem", "left": null, - "width": "200px", } } tabIndex={-1} @@ -5898,7 +5892,6 @@ exports[`DataGrid verifies row selection column header selection 1`] = ` Object { "height": "2.5rem", "left": 0, - "width": "40px", } } title="Terra.table.row-selection-header-display" @@ -6007,7 +6000,6 @@ exports[`DataGrid verifies row selection column header selection 1`] = ` Object { "height": "2.5rem", "left": 40, - "width": "200px", } } title=" Vitals" @@ -6197,7 +6189,6 @@ exports[`DataGrid verifies row selection column header selection 1`] = ` Object { "height": "2.5rem", "left": 240, - "width": "200px", } } title="March 16" @@ -6395,7 +6386,6 @@ exports[`DataGrid verifies row selection column header selection 1`] = ` Object { "height": "2.5rem", "left": null, - "width": "200px", } } tabIndex={-1} @@ -9281,7 +9271,6 @@ exports[`DataGrid verifies that the grid created is consistent with the rows and Object { "height": "2.5rem", "left": 0, - "width": "200px", } } title=" Vitals" @@ -9471,7 +9460,6 @@ exports[`DataGrid verifies that the grid created is consistent with the rows and Object { "height": "2.5rem", "left": 200, - "width": "200px", } } title="March 16" @@ -9669,7 +9657,6 @@ exports[`DataGrid verifies that the grid created is consistent with the rows and Object { "height": "2.5rem", "left": null, - "width": "200px", } } tabIndex={-1} @@ -11897,7 +11884,6 @@ exports[`DataGrid verifies the rows are created with the right props 1`] = ` Object { "height": "2.5rem", "left": null, - "width": "200px", } } title=" Vitals" @@ -12087,7 +12073,6 @@ exports[`DataGrid verifies the rows are created with the right props 1`] = ` Object { "height": "2.5rem", "left": null, - "width": "200px", } } title="March 16" @@ -12276,7 +12261,6 @@ exports[`DataGrid verifies the rows are created with the right props 1`] = ` Object { "height": "2.5rem", "left": null, - "width": "200px", } } tabIndex={-1} diff --git a/packages/terra-data-grid/tests/jest/__snapshots__/WorklistDataGrid.test.jsx.snap b/packages/terra-data-grid/tests/jest/__snapshots__/WorklistDataGrid.test.jsx.snap index 4e22c4bb5fd..13f32cd9064 100644 --- a/packages/terra-data-grid/tests/jest/__snapshots__/WorklistDataGrid.test.jsx.snap +++ b/packages/terra-data-grid/tests/jest/__snapshots__/WorklistDataGrid.test.jsx.snap @@ -698,7 +698,6 @@ exports[`Row selection verifies Shift+Click enables row selection when row selec Object { "height": "2.5rem", "left": 0, - "width": "200px", } } title=" Vitals" @@ -888,7 +887,6 @@ exports[`Row selection verifies Shift+Click enables row selection when row selec Object { "height": "2.5rem", "left": 200, - "width": "200px", } } title="March 16" @@ -1086,7 +1084,6 @@ exports[`Row selection verifies Shift+Click enables row selection when row selec Object { "height": "2.5rem", "left": null, - "width": "200px", } } tabIndex={-1} @@ -3487,7 +3484,6 @@ exports[`Row selection verifies Shift+Click establishes anchor and selects row w Object { "height": "2.5rem", "left": 0, - "width": "40px", } } title="Terra.table.row-selection-header-display" @@ -3596,7 +3592,6 @@ exports[`Row selection verifies Shift+Click establishes anchor and selects row w Object { "height": "2.5rem", "left": 40, - "width": "200px", } } title=" Vitals" @@ -3786,7 +3781,6 @@ exports[`Row selection verifies Shift+Click establishes anchor and selects row w Object { "height": "2.5rem", "left": 240, - "width": "200px", } } title="March 16" @@ -3984,7 +3978,6 @@ exports[`Row selection verifies Shift+Click establishes anchor and selects row w Object { "height": "2.5rem", "left": null, - "width": "200px", } } tabIndex={-1} @@ -7034,7 +7027,6 @@ exports[`Row selection verifies Shift+Click honors the anchor established by row Object { "height": "2.5rem", "left": 0, - "width": "40px", } } title="Terra.table.row-selection-header-display" @@ -7143,7 +7135,6 @@ exports[`Row selection verifies Shift+Click honors the anchor established by row Object { "height": "2.5rem", "left": 40, - "width": "200px", } } title=" Vitals" @@ -7333,7 +7324,6 @@ exports[`Row selection verifies Shift+Click honors the anchor established by row Object { "height": "2.5rem", "left": 240, - "width": "200px", } } title="March 16" @@ -7531,7 +7521,6 @@ exports[`Row selection verifies Shift+Click honors the anchor established by row Object { "height": "2.5rem", "left": null, - "width": "200px", } } tabIndex={-1} @@ -10550,7 +10539,6 @@ exports[`Row selection verifies Shift+Space enables row selection when row selec Object { "height": "2.5rem", "left": 0, - "width": "200px", } } title=" Vitals" @@ -10740,7 +10728,6 @@ exports[`Row selection verifies Shift+Space enables row selection when row selec Object { "height": "2.5rem", "left": 200, - "width": "200px", } } title="March 16" @@ -10938,7 +10925,6 @@ exports[`Row selection verifies Shift+Space enables row selection when row selec Object { "height": "2.5rem", "left": null, - "width": "200px", } } tabIndex={-1} @@ -13339,7 +13325,6 @@ exports[`Row selection verifies Shift+Space establishes anchor and selects row i Object { "height": "2.5rem", "left": 0, - "width": "40px", } } title="Terra.table.row-selection-header-display" @@ -13448,7 +13433,6 @@ exports[`Row selection verifies Shift+Space establishes anchor and selects row i Object { "height": "2.5rem", "left": 40, - "width": "200px", } } title=" Vitals" @@ -13638,7 +13622,6 @@ exports[`Row selection verifies Shift+Space establishes anchor and selects row i Object { "height": "2.5rem", "left": 240, - "width": "200px", } } title="March 16" @@ -13836,7 +13819,6 @@ exports[`Row selection verifies Shift+Space establishes anchor and selects row i Object { "height": "2.5rem", "left": null, - "width": "200px", } } tabIndex={-1} @@ -16886,7 +16868,6 @@ exports[`Row selection verifies Shift+Space honors the anchor established by row Object { "height": "2.5rem", "left": 0, - "width": "40px", } } title="Terra.table.row-selection-header-display" @@ -16995,7 +16976,6 @@ exports[`Row selection verifies Shift+Space honors the anchor established by row Object { "height": "2.5rem", "left": 40, - "width": "200px", } } title=" Vitals" @@ -17185,7 +17165,6 @@ exports[`Row selection verifies Shift+Space honors the anchor established by row Object { "height": "2.5rem", "left": 240, - "width": "200px", } } title="March 16" @@ -17383,7 +17362,6 @@ exports[`Row selection verifies Shift+Space honors the anchor established by row Object { "height": "2.5rem", "left": null, - "width": "200px", } } tabIndex={-1} @@ -20457,7 +20435,6 @@ exports[`Row selection verifies callbacks when Shift+Down contracts the range of Object { "height": "2.5rem", "left": 0, - "width": "40px", } } title="Terra.table.row-selection-header-display" @@ -20566,7 +20543,6 @@ exports[`Row selection verifies callbacks when Shift+Down contracts the range of Object { "height": "2.5rem", "left": 40, - "width": "200px", } } title=" Vitals" @@ -20756,7 +20732,6 @@ exports[`Row selection verifies callbacks when Shift+Down contracts the range of Object { "height": "2.5rem", "left": 240, - "width": "200px", } } title="March 16" @@ -20954,7 +20929,6 @@ exports[`Row selection verifies callbacks when Shift+Down contracts the range of Object { "height": "2.5rem", "left": null, - "width": "200px", } } tabIndex={-1} @@ -23988,7 +23962,6 @@ exports[`Row selection verifies callbacks when Shift+Down is used and row select Object { "height": "2.5rem", "left": 0, - "width": "40px", } } title="Terra.table.row-selection-header-display" @@ -24097,7 +24070,6 @@ exports[`Row selection verifies callbacks when Shift+Down is used and row select Object { "height": "2.5rem", "left": 40, - "width": "200px", } } title=" Vitals" @@ -24287,7 +24259,6 @@ exports[`Row selection verifies callbacks when Shift+Down is used and row select Object { "height": "2.5rem", "left": 240, - "width": "200px", } } title="March 16" @@ -24485,7 +24456,6 @@ exports[`Row selection verifies callbacks when Shift+Down is used and row select Object { "height": "2.5rem", "left": null, - "width": "200px", } } tabIndex={-1} @@ -27523,7 +27493,6 @@ exports[`Row selection verifies callbacks when Shift+Down is used and row select Object { "height": "2.5rem", "left": 0, - "width": "200px", } } title=" Vitals" @@ -27713,7 +27682,6 @@ exports[`Row selection verifies callbacks when Shift+Down is used and row select Object { "height": "2.5rem", "left": 200, - "width": "200px", } } title="March 16" @@ -27911,7 +27879,6 @@ exports[`Row selection verifies callbacks when Shift+Down is used and row select Object { "height": "2.5rem", "left": null, - "width": "200px", } } tabIndex={-1} @@ -30316,7 +30283,6 @@ exports[`Row selection verifies callbacks when Shift+Down more than one. 1`] = ` Object { "height": "2.5rem", "left": 0, - "width": "40px", } } title="Terra.table.row-selection-header-display" @@ -30425,7 +30391,6 @@ exports[`Row selection verifies callbacks when Shift+Down more than one. 1`] = ` Object { "height": "2.5rem", "left": 40, - "width": "200px", } } title=" Vitals" @@ -30615,7 +30580,6 @@ exports[`Row selection verifies callbacks when Shift+Down more than one. 1`] = ` Object { "height": "2.5rem", "left": 240, - "width": "200px", } } title="March 16" @@ -30813,7 +30777,6 @@ exports[`Row selection verifies callbacks when Shift+Down more than one. 1`] = ` Object { "height": "2.5rem", "left": null, - "width": "200px", } } tabIndex={-1} @@ -33863,7 +33826,6 @@ exports[`Row selection verifies multiple independent ranges can be created with Object { "height": "2.5rem", "left": 0, - "width": "40px", } } title="Terra.table.row-selection-header-display" @@ -33972,7 +33934,6 @@ exports[`Row selection verifies multiple independent ranges can be created with Object { "height": "2.5rem", "left": 40, - "width": "200px", } } title=" Vitals" @@ -34162,7 +34123,6 @@ exports[`Row selection verifies multiple independent ranges can be created with Object { "height": "2.5rem", "left": 240, - "width": "200px", } } title="March 16" @@ -34360,7 +34320,6 @@ exports[`Row selection verifies multiple independent ranges can be created with Object { "height": "2.5rem", "left": null, - "width": "200px", } } tabIndex={-1} @@ -37390,7 +37349,6 @@ exports[`Row selection verifies only onRowSelect is called when mouse is used to Object { "height": "2.5rem", "left": 0, - "width": "40px", } } title="Terra.table.row-selection-header-display" @@ -37499,7 +37457,6 @@ exports[`Row selection verifies only onRowSelect is called when mouse is used to Object { "height": "2.5rem", "left": 40, - "width": "200px", } } title=" Vitals" @@ -37689,7 +37646,6 @@ exports[`Row selection verifies only onRowSelect is called when mouse is used to Object { "height": "2.5rem", "left": 240, - "width": "200px", } } title="March 16" @@ -37887,7 +37843,6 @@ exports[`Row selection verifies only onRowSelect is called when mouse is used to Object { "height": "2.5rem", "left": null, - "width": "200px", } } tabIndex={-1} @@ -40917,7 +40872,6 @@ exports[`Row selection verifies only onRowSelect is called when mouse is used to Object { "height": "2.5rem", "left": 0, - "width": "40px", } } title="Terra.table.row-selection-header-display" @@ -41026,7 +40980,6 @@ exports[`Row selection verifies only onRowSelect is called when mouse is used to Object { "height": "2.5rem", "left": 40, - "width": "200px", } } title=" Vitals" @@ -41216,7 +41169,6 @@ exports[`Row selection verifies only onRowSelect is called when mouse is used to Object { "height": "2.5rem", "left": 240, - "width": "200px", } } title="March 16" @@ -41414,7 +41366,6 @@ exports[`Row selection verifies only onRowSelect is called when mouse is used to Object { "height": "2.5rem", "left": null, - "width": "200px", } } tabIndex={-1} @@ -44444,7 +44395,6 @@ exports[`Row selection verifies only onRowSelect is called when space is used to Object { "height": "2.5rem", "left": 0, - "width": "40px", } } title="Terra.table.row-selection-header-display" @@ -44553,7 +44503,6 @@ exports[`Row selection verifies only onRowSelect is called when space is used to Object { "height": "2.5rem", "left": 40, - "width": "200px", } } title=" Vitals" @@ -44743,7 +44692,6 @@ exports[`Row selection verifies only onRowSelect is called when space is used to Object { "height": "2.5rem", "left": 240, - "width": "200px", } } title="March 16" @@ -44941,7 +44889,6 @@ exports[`Row selection verifies only onRowSelect is called when space is used to Object { "height": "2.5rem", "left": null, - "width": "200px", } } tabIndex={-1} @@ -47971,7 +47918,6 @@ exports[`Row selection verifies only onRowSelect is called when space is used to Object { "height": "2.5rem", "left": 0, - "width": "40px", } } title="Terra.table.row-selection-header-display" @@ -48080,7 +48026,6 @@ exports[`Row selection verifies only onRowSelect is called when space is used to Object { "height": "2.5rem", "left": 40, - "width": "200px", } } title=" Vitals" @@ -48270,7 +48215,6 @@ exports[`Row selection verifies only onRowSelect is called when space is used to Object { "height": "2.5rem", "left": 240, - "width": "200px", } } title="March 16" @@ -48468,7 +48412,6 @@ exports[`Row selection verifies only onRowSelect is called when space is used to Object { "height": "2.5rem", "left": null, - "width": "200px", } } tabIndex={-1} @@ -51496,7 +51439,6 @@ exports[`Row selection verifies row selection when space is pressed on a masked Object { "height": "2.5rem", "left": 0, - "width": "40px", } } title="Terra.table.row-selection-header-display" @@ -51605,7 +51547,6 @@ exports[`Row selection verifies row selection when space is pressed on a masked Object { "height": "2.5rem", "left": 40, - "width": "200px", } } title=" Vitals" @@ -51795,7 +51736,6 @@ exports[`Row selection verifies row selection when space is pressed on a masked Object { "height": "2.5rem", "left": 240, - "width": "200px", } } title="March 16" @@ -51993,7 +51933,6 @@ exports[`Row selection verifies row selection when space is pressed on a masked Object { "height": "2.5rem", "left": null, - "width": "200px", } } tabIndex={-1} @@ -55021,7 +54960,6 @@ exports[`Row selection verifies row selection when space is pressed on a non-sel Object { "height": "2.5rem", "left": 0, - "width": "40px", } } title="Terra.table.row-selection-header-display" @@ -55130,7 +55068,6 @@ exports[`Row selection verifies row selection when space is pressed on a non-sel Object { "height": "2.5rem", "left": 40, - "width": "200px", } } title=" Vitals" @@ -55320,7 +55257,6 @@ exports[`Row selection verifies row selection when space is pressed on a non-sel Object { "height": "2.5rem", "left": 240, - "width": "200px", } } title="March 16" @@ -55518,7 +55454,6 @@ exports[`Row selection verifies row selection when space is pressed on a non-sel Object { "height": "2.5rem", "left": null, - "width": "200px", } } tabIndex={-1} @@ -58504,7 +58439,6 @@ exports[`WorklistDataGrid verifies onCellSelect callback is not triggered when s Object { "height": "2.5rem", "left": 0, - "width": "200px", } } title=" Vitals" @@ -58694,7 +58628,6 @@ exports[`WorklistDataGrid verifies onCellSelect callback is not triggered when s Object { "height": "2.5rem", "left": 200, - "width": "200px", } } title="March 16" @@ -58892,7 +58825,6 @@ exports[`WorklistDataGrid verifies onCellSelect callback is not triggered when s Object { "height": "2.5rem", "left": null, - "width": "200px", } } tabIndex={-1} @@ -61229,7 +61161,6 @@ exports[`WorklistDataGrid verifies onCellSelect callback is not triggered when s Object { "height": "2.5rem", "left": 0, - "width": "200px", } } title=" Vitals" @@ -61419,7 +61350,6 @@ exports[`WorklistDataGrid verifies onCellSelect callback is not triggered when s Object { "height": "2.5rem", "left": 200, - "width": "200px", } } title="March 16" @@ -61617,7 +61547,6 @@ exports[`WorklistDataGrid verifies onCellSelect callback is not triggered when s Object { "height": "2.5rem", "left": null, - "width": "200px", } } tabIndex={-1} diff --git a/packages/terra-framework-docs/CHANGELOG.md b/packages/terra-framework-docs/CHANGELOG.md index fa9a776bf7b..a316ed1ace6 100644 --- a/packages/terra-framework-docs/CHANGELOG.md +++ b/packages/terra-framework-docs/CHANGELOG.md @@ -4,6 +4,7 @@ * Added * Added examples and tests to `terra-table` for single row selection mode. + * Added examples for resizable columns in tables. ## 1.45.0 - (November 20, 2023) diff --git a/packages/terra-framework-docs/src/terra-dev-site/doc/table/Examples/ResizableColumns.1.doc.mdx b/packages/terra-framework-docs/src/terra-dev-site/doc/table/Examples/ResizableColumns.1.doc.mdx new file mode 100644 index 00000000000..72aa135f303 --- /dev/null +++ b/packages/terra-framework-docs/src/terra-dev-site/doc/table/Examples/ResizableColumns.1.doc.mdx @@ -0,0 +1,4 @@ +import { Badge } from "terra-table/package.json?dev-site-package"; +import ResizableColumnsTable from "./ResizableColumnsTable?dev-site-example"; + + diff --git a/packages/terra-framework-docs/src/terra-dev-site/doc/table/Examples/ResizableColumnsTable.jsx b/packages/terra-framework-docs/src/terra-dev-site/doc/table/Examples/ResizableColumnsTable.jsx new file mode 100644 index 00000000000..4c62eb6c94d --- /dev/null +++ b/packages/terra-framework-docs/src/terra-dev-site/doc/table/Examples/ResizableColumnsTable.jsx @@ -0,0 +1,64 @@ +import React from 'react'; +import Table from 'terra-table'; + +const tableData = { + cols: [ + { id: 'Column-0', displayName: 'Patient', isResizable: true }, + { id: 'Column-1', displayName: 'Location', isResizable: true }, + { + id: 'Column-2', displayName: 'Illness Severity', isResizable: true, isSelectable: true, + }, + { + id: 'Column-3', displayName: 'Visit', isResizable: true, isSelectable: true, + }, + { id: 'Column-4', displayName: 'Allergy' }, + { id: 'Column-5', displayName: 'Primary Contact' }, + { id: 'Column-6', displayName: 'Generic Order Counts' }, + { id: 'Column-7', displayName: 'Patient Age' }, + { id: 'Column-8', displayName: 'Medication History' }, + { id: 'Column-9', displayName: 'My Relationship' }, + ], + rows: [ + { + id: '1', + cells: [ + { content: 'Fleck, Arthur' }, + { content: '1007-MTN' }, + { content: 'Unstable' }, + { content: 'Inpatient, 2 months' }, + { content: '' }, + { content: 'Quinzell, Harleen' }, + { content: '' }, + { isMasked: true, maskedLabel: 'Age Hidden' }, + { isMasked: true }, + { content: 'Admitting Physician' }, + ], + }, + { + id: '2', + cells: [ + { content: 'Wayne, Bruce' }, + { content: '1007-MTN-DR' }, + { content: 'Stable' }, + { content: 'Outpatient, 2 days' }, + { content: 'Phytochemicals' }, + { content: 'Grayson, Richard' }, + { content: '' }, + { content: '' }, + { isMasked: true }, + { content: 'Admitting Physician' }, + ], + }, + ], +}; + +const ResizableColumnsTable = () => ( + +); + +export default ResizableColumnsTable; diff --git a/packages/terra-framework-docs/src/terra-dev-site/test/table/ResizableColumnsTable.test.jsx b/packages/terra-framework-docs/src/terra-dev-site/test/table/ResizableColumnsTable.test.jsx new file mode 100644 index 00000000000..45e526f3c73 --- /dev/null +++ b/packages/terra-framework-docs/src/terra-dev-site/test/table/ResizableColumnsTable.test.jsx @@ -0,0 +1,20 @@ +import React from 'react'; +import Table from 'terra-table'; +import tableData from './mockResizableColumnsTableData.json'; + +const ResizableTable = () => { + const { cols, rows } = tableData; + + return ( +
+ ); +}; + +export default ResizableTable; diff --git a/packages/terra-framework-docs/src/terra-dev-site/test/table/mockResizableColumnsTableData.json b/packages/terra-framework-docs/src/terra-dev-site/test/table/mockResizableColumnsTableData.json new file mode 100644 index 00000000000..827659840c1 --- /dev/null +++ b/packages/terra-framework-docs/src/terra-dev-site/test/table/mockResizableColumnsTableData.json @@ -0,0 +1,56 @@ +{ + "cols": [ + { "id": "Column-0", "displayName": "Vitals", "isResizable": true, "isSelectable": true }, + { "id": "Column-1", "displayName": "March 16", "isResizable": true, "isSelectable": true }, + { "id": "Column-2", "displayName": "March 17", "isSelectable": true }, + { "id": "Column-3", "displayName": "March 18", "isResizable": true, "isSelectable": true } + ], + "rows": [ + { + "id": "1", + "cells": [ + { "content": "Heart Rate Monitored (bpm)" }, + { "content": "68" }, + { "content": "66" }, + { "content": "67" } + ] + }, + { + "height": "150px", + "id": "2", + "cells": [ + { "content": "Temperature Oral (degC)" }, + { "content": "36.7", "isMasked": true }, + { "content": "36.9", "isMasked": true }, + { "content": "37", "isMasked": true } + ] + }, + { + "id": "3", + "cells": [ + { "content": "Cardiac Index (L/min/m2)" }, + { "content": "2.25" }, + { "content": "2.28" }, + { "content": "2.8" } + ] + }, + { + "id": "4", + "cells": [ + { "content": "ICP (mmHg)", "isMasked": true }, + { "content": "11" }, + { "content": "11" }, + { "content": "12" } + ] + }, + { + "id": "5", + "cells": [ + { "content": "CPP (mmHg)" }, + { "content": "63" }, + { "content": "47" }, + { "content": "48" } + ] + } + ] +} diff --git a/packages/terra-table/CHANGELOG.md b/packages/terra-table/CHANGELOG.md index ee70efeb679..b70510a3a42 100644 --- a/packages/terra-table/CHANGELOG.md +++ b/packages/terra-table/CHANGELOG.md @@ -4,6 +4,7 @@ * Fixed * Fixed the AT messages for the row selection functionality. + * Fixed resize handle not communicating aria values when focused in non-grid contexts. ## 5.1.1-alpha.2 - (November 20, 2023) diff --git a/packages/terra-table/src/subcomponents/ColumnHeaderCell.jsx b/packages/terra-table/src/subcomponents/ColumnHeaderCell.jsx index de4c01db79f..aae3da1d369 100644 --- a/packages/terra-table/src/subcomponents/ColumnHeaderCell.jsx +++ b/packages/terra-table/src/subcomponents/ColumnHeaderCell.jsx @@ -303,7 +303,7 @@ const ColumnHeaderCell = (props) => { title={displayName} onMouseDown={isSelectable && onColumnSelect ? handleMouseDown : undefined} onKeyDown={(isSelectable || isResizable) ? handleKeyDown : undefined} - style={{ width: `${width}px`, height: headerHeight, left: cellLeftEdge }} // eslint-disable-line react/forbid-dom-props + style={{ height: headerHeight, left: cellLeftEdge }} // eslint-disable-line react/forbid-dom-props >
{ // Ref variable for native resize handle element const resizeHandleRef = useRef(); + // Ref variable to prevent active state on mouse drag + const handleFocus = useRef(true); const [isNavigationEnabled, setNavigationEnabled] = useState(true); @@ -118,6 +120,8 @@ const ColumnResizeHandle = (props) => { }, [isActive]); const onMouseDown = (event) => { + // Prevent onFocus from being fired when triggered via onMouseDown + handleFocus.current = false; // Set focus to resize handle DOM element resizeHandleRef.current.focus(); @@ -138,6 +142,13 @@ const ColumnResizeHandle = (props) => { resizeHandleRef.current.style.height = `${height}px`; }; + const onFocus = () => { + fitToTable(); + if (handleFocus.current) { + setIsActive(true); + } + }; + const onMouseLeave = () => { if (document.activeElement !== resizeHandleRef.current) { resizeHandleRef.current.style.height = '100%'; @@ -194,6 +205,7 @@ const ColumnResizeHandle = (props) => { const onBlur = () => { setNavigationEnabled(true); setIsActive(false); + handleFocus.current = true; }; return ( @@ -216,7 +228,7 @@ const ColumnResizeHandle = (props) => { onMouseLeave={onMouseLeave} onKeyDown={onKeyDown} onClick={onClick} - onFocus={fitToTable} + onFocus={onFocus} onBlur={onBlur} className={cx('resize-handle', theme.className, { 'resize-handle-selected': !isNavigationEnabled })} /> diff --git a/packages/terra-table/tests/jest/ColumnHeaderCell.test.jsx b/packages/terra-table/tests/jest/ColumnHeaderCell.test.jsx index 2364f54521c..b3fbac73fda 100644 --- a/packages/terra-table/tests/jest/ColumnHeaderCell.test.jsx +++ b/packages/terra-table/tests/jest/ColumnHeaderCell.test.jsx @@ -45,7 +45,6 @@ describe('ColumnHeaderCell', () => { expect(columnHeader.props().role).toBe('columnheader'); expect(columnHeader.props().scope).toBe('col'); expect(columnHeader.props().tabIndex).toEqual(undefined); - expect(columnHeader.props().style.width).toBe('100px'); expect(columnHeader.props().style.height).toBe('150px'); expect(columnHeader.props().title).toBe('Vitals'); @@ -81,7 +80,6 @@ describe('ColumnHeaderCell', () => { expect(columnHeader.props().role).toBe('columnheader'); expect(columnHeader.props().scope).toBe('col'); expect(columnHeader.props().tabIndex).toEqual(undefined); - expect(columnHeader.props().style.width).toBe('100px'); expect(columnHeader.props().style.height).toBe('150px'); expect(columnHeader.props().title).toBe('Vitals'); @@ -118,7 +116,6 @@ describe('ColumnHeaderCell', () => { expect(columnHeader.props().role).toBe('columnheader'); expect(columnHeader.props().scope).toBe('col'); expect(columnHeader.props().tabIndex).toEqual(undefined); - expect(columnHeader.props().style.width).toBe('100px'); expect(columnHeader.props().style.height).toBe('150px'); expect(columnHeader.props().title).toBe('Vitals'); @@ -155,7 +152,6 @@ describe('ColumnHeaderCell', () => { expect(columnHeader.props().role).toBe('columnheader'); expect(columnHeader.props().scope).toBe('col'); expect(columnHeader.props().tabIndex).toEqual(undefined); - expect(columnHeader.props().style.width).toBe('100px'); expect(columnHeader.props().style.height).toBe('150px'); expect(columnHeader.props().title).toBe('Vitals'); @@ -193,7 +189,6 @@ describe('ColumnHeaderCell', () => { expect(columnHeader.props().role).toBe('columnheader'); expect(columnHeader.props().scope).toBe('col'); expect(columnHeader.props().tabIndex).toEqual(undefined); - expect(columnHeader.props().style.width).toBe('100px'); expect(columnHeader.props().style.height).toBe('150px'); expect(columnHeader.props().title).toBe('Vitals'); @@ -236,7 +231,6 @@ describe('ColumnHeaderCell', () => { expect(columnHeader.props().scope).toBe('col'); expect(columnHeader.props().tabIndex).toEqual(undefined); expect(columnHeader.props().onMouseDown).toBeDefined(); - expect(columnHeader.props().style.width).toBe('100px'); expect(columnHeader.props().style.height).toBe('150px'); expect(columnHeader.props().title).toBe('Vitals'); @@ -280,7 +274,6 @@ describe('ColumnHeaderCell', () => { expect(columnHeader.props().scope).toBe('col'); expect(columnHeader.props().tabIndex).toEqual(undefined); expect(columnHeader.props().onMouseDown).toBeUndefined(); - expect(columnHeader.props().style.width).toBe('100px'); expect(columnHeader.props().style.height).toBe('150px'); expect(columnHeader.props().title).toBe('Vitals'); diff --git a/packages/terra-table/tests/jest/ColumnResizeHandle.test.jsx b/packages/terra-table/tests/jest/ColumnResizeHandle.test.jsx index c748f33b1a7..817aa9f0f95 100644 --- a/packages/terra-table/tests/jest/ColumnResizeHandle.test.jsx +++ b/packages/terra-table/tests/jest/ColumnResizeHandle.test.jsx @@ -15,6 +15,11 @@ afterAll(() => { }); describe('ColumnResizeHandle', () => { + const mockSetIsActive = jest.fn(); + beforeEach(() => { + jest.clearAllMocks(); + }); + it('renders a default column resize handle when isActive is false', () => { const mockResizeMouseDown = jest.fn(); const mockResizeMouseUp = jest.fn(); @@ -31,6 +36,7 @@ describe('ColumnResizeHandle', () => { maximumWidth={300} onResizeMouseUp={mockResizeMouseUp} onResizeMouseDown={mockResizeMouseDown} + setIsActive={mockSetIsActive} />, ); @@ -51,6 +57,7 @@ describe('ColumnResizeHandle', () => { const wrapper = mountWithIntl( , ); const resizeHandle = wrapper.find('.resize-handle'); @@ -65,6 +72,9 @@ describe('ColumnResizeHandle', () => { // Validate mock function was called from simulated onMouseDown event expect(mockResizeMouseDown).toHaveBeenCalled(); + + // Do not invoke the setActive function when triggered via mouseDown + expect(mockSetIsActive).not.toHaveBeenCalled(); }); it('executes the callback function on MouseUp', () => { @@ -72,6 +82,7 @@ describe('ColumnResizeHandle', () => { const wrapper = mountWithIntl( , ); const resizeHandle = wrapper.find('.resize-handle'); @@ -80,6 +91,9 @@ describe('ColumnResizeHandle', () => { // Validate mock function was called from simulated onMouseDown event expect(mockResizeMouseUp).toHaveBeenCalled(); + + // Do not invoke the setActive function when triggered via mouseDown + expect(mockSetIsActive).not.toHaveBeenCalled(); }); it('sets widths if isActive is set to be true', () => { @@ -105,13 +119,16 @@ describe('ColumnResizeHandle', () => { it('sets the appropriate prop values on space keydown', () => { const wrapper = mountWithIntl( - + , ); wrapper.find('.resize-handle').simulate('focus'); wrapper.find('.resize-handle').simulate('keydown', { keyCode: 32 }); // space + // Validate setIsActive is called when the element is focused from non-mouse events. + expect(mockSetIsActive).toHaveBeenCalled(); + expect(wrapper.find('.resize-handle').props()['aria-label']).toBe(null); expect(wrapper.find('.resize-handle').props()['aria-valuetext']).toBe('Terra.table.resize-handle-value-text'); expect(wrapper.find('.resize-handle').props().role).toBe('slider'); @@ -120,13 +137,16 @@ describe('ColumnResizeHandle', () => { it('sets the appropriate prop values on enter keydown', () => { const wrapper = mountWithIntl( - + , ); wrapper.find('.resize-handle').simulate('focus'); wrapper.find('.resize-handle').simulate('keydown', { keyCode: 13 }); // enter + // Validate setIsActive is called when the element is focused from non-mouse events. + expect(mockSetIsActive).toHaveBeenCalled(); + expect(wrapper.find('.resize-handle').props()['aria-label']).toBe(null); expect(wrapper.find('.resize-handle').props()['aria-valuetext']).toBe('Terra.table.resize-handle-value-text'); expect(wrapper.find('.resize-handle').props().role).toBe('slider'); @@ -154,6 +174,7 @@ describe('ColumnResizeHandle', () => { columnIndex={1} columnResizeIncrement={10} onResizeHandleChange={mockResizeHandleChange} + setIsActive={mockSetIsActive} /> , ); @@ -163,6 +184,9 @@ describe('ColumnResizeHandle', () => { wrapper.find('.resize-handle').simulate('keydown', { keyCode: 39 }); // arrow right expect(mockResizeHandleChange).toHaveBeenCalledWith(1, 10); + + // Validate setIsActive is called when the element is focused from non-mouse events. + expect(mockSetIsActive).toHaveBeenCalled(); }); it('increases column width with left arrow', () => { @@ -173,6 +197,7 @@ describe('ColumnResizeHandle', () => { columnIndex={1} columnResizeIncrement={10} onResizeHandleChange={mockResizeHandleChange} + setIsActive={mockSetIsActive} /> , ); @@ -182,5 +207,7 @@ describe('ColumnResizeHandle', () => { wrapper.find('.resize-handle').simulate('keydown', { keyCode: 37 }); // arrow left expect(mockResizeHandleChange).toHaveBeenCalledWith(1, -10); + // Validate setIsActive is called when the element is focused from non-mouse events. + expect(mockSetIsActive).toHaveBeenCalled(); }); }); diff --git a/packages/terra-table/tests/jest/__snapshots__/ColumnHeaderCell.test.jsx.snap b/packages/terra-table/tests/jest/__snapshots__/ColumnHeaderCell.test.jsx.snap index 741a98edcaf..09684934378 100644 --- a/packages/terra-table/tests/jest/__snapshots__/ColumnHeaderCell.test.jsx.snap +++ b/packages/terra-table/tests/jest/__snapshots__/ColumnHeaderCell.test.jsx.snap @@ -63,7 +63,6 @@ exports[`ColumnHeaderCell renders a pinned column header cell 1`] = ` Object { "height": "150px", "left": 0, - "width": "100px", } } title="Vitals" diff --git a/packages/terra-table/tests/jest/__snapshots__/ColumnResizeHandle.test.jsx.snap b/packages/terra-table/tests/jest/__snapshots__/ColumnResizeHandle.test.jsx.snap index 31071a3ea0f..2fc7b49e7cb 100644 --- a/packages/terra-table/tests/jest/__snapshots__/ColumnResizeHandle.test.jsx.snap +++ b/packages/terra-table/tests/jest/__snapshots__/ColumnResizeHandle.test.jsx.snap @@ -38,6 +38,7 @@ exports[`ColumnResizeHandle renders a default column resize handle when isActive minimumWidth={60} onResizeMouseDown={[MockFunction]} onResizeMouseUp={[MockFunction]} + setIsActive={[MockFunction]} >
{ Terra.validates.element('row-single-selection-cell-click', { selector: rowSelectionTableSelector }); }); }); + + describe('Resizable Table', () => { + const resizableColumnsTableSelector = '#resizable-columns-table'; + + beforeEach(() => { + browser.url('/raw/tests/cerner-terra-framework-docs/table/resizable-columns-table'); + }); + + it('focuses on the column resize handle', () => { + browser.keys(['Tab', 'Tab']); + Terra.validates.element('column-resize-handle-focused', { selector: resizableColumnsTableSelector }); + }); + + it('increases the column width with the keyboard in resize mode', () => { + // disabling the 'aria-input-field-name' rule as it is dynamically removed + // for the keyboard resize workflow and this causes an accessibility failure + const options = { + selector: resizableColumnsTableSelector, + rules: { 'aria-input-field-name': { enabled: false } }, + }; + + browser.keys(['Tab', 'Tab', 'Space', 'ArrowRight', 'ArrowRight']); + expect($('tr.column-header-row th:first-child').getCSSProperty('width').parsed.value).toBe(220); + Terra.validates.element('column-resize-increase-keyboard', options); + }); + + it('decreases the column width with the keyboard in resize mode', () => { + // disabling the 'aria-input-field-name' rule as it is dynamically removed + // for the keyboard resize workflow and this causes an accessibility failure + const options = { + selector: resizableColumnsTableSelector, + rules: { 'aria-input-field-name': { enabled: false } }, + }; + + browser.keys(['Tab', 'Tab', 'Space', 'ArrowLeft', 'ArrowLeft']); + expect($('tr.column-header-row th:first-child').getCSSProperty('width').parsed.value).toBe(180); + Terra.validates.element('column-resize-decrease-keyboard', options); + }); + + it('exits out of resize mode after hitting the escape key', () => { + browser.keys(['Tab', 'Tab', 'Space', 'ArrowLeft', 'ArrowLeft', 'Escape', 'Tab', 'Tab']); + expect($('tr.column-header-row th:first-child').getCSSProperty('width').parsed.value).toBe(180); + expect(browser.$('tr.column-header-row th:first-child div[class*=resize-handle]').isFocused()).toBe(false); + expect(browser.$('tr.column-header-row th:nth-child(2) div[class*=resize-handle]').isFocused()).toBe(true); + }); + + it('resumes column focus after tabbing out and back into the table', () => { + browser.keys([...Array(8).fill('Tab'), 'Shift', 'Tab']); // tab until out of table, and then back in. + + expect(browser.$('tr.column-header-row th:nth-child(4) div[class*=resize-handle]').isFocused()).toBe(true); + }); + + it('does not focus on column resize handle if it is disabled', () => { + browser.keys([...Array(7).fill('Tab')]); // We skip over the column that has column resize disabled. + + expect(browser.$('tr.column-header-row th:nth-child(4) div[class*=resize-handle]').isFocused()).toBe(true); + }); + }); });