Fixed layout issue with undefined column widths

Summary: This fixes an earlier reported issue with Messages plugin, if no column widths are set values can jump around per row

Reviewed By: passy

Differential Revision: D28090807

fbshipit-source-id: be124b94f507584cf177710816035cd280a5ef01
This commit is contained in:
Michel Weststrate
2021-04-29 07:30:56 -07:00
committed by Facebook GitHub Bot
parent e26a8c5ad0
commit e3cb16d870
4 changed files with 42 additions and 14 deletions

View File

@@ -442,8 +442,22 @@ function loadStateFromStorage(storageKey: string): PersistedState | undefined {
function computeInitialColumns( function computeInitialColumns(
columns: DataTableColumn<any>[], columns: DataTableColumn<any>[],
): DataTableColumn<any>[] { ): DataTableColumn<any>[] {
const visibleColumnCount = columns.filter((c) => c.visible !== false).length;
const columnsWithoutWidth = columns.filter((c) => c.width === undefined)
.length;
return columns.map((c) => ({ return columns.map((c) => ({
...c, ...c,
width:
c.width ??
// if the width is not set, and there are multiple columns with unset widths,
// there will be multiple columns ith the same flex weight (1), meaning that
// they will all resize a best fits in a specifc row.
// To address that we distribute space equally
// (this need further fine tuning in the future as with a subset of fixed columns width can become >100%)
(columnsWithoutWidth > 1
? `${Math.floor(100 / visibleColumnCount)}%`
: undefined),
filters: filters:
c.filters?.map((f) => ({ c.filters?.map((f) => ({
...f, ...f,

View File

@@ -53,12 +53,14 @@ test('update and append', async () => {
class="css-1k3kr6b-TableBodyRowContainer e1luu51r1" class="css-1k3kr6b-TableBodyRowContainer e1luu51r1"
> >
<div <div
class="css-esqhnb-TableBodyColumnContainer e1luu51r0" class="css-9bipfg-TableBodyColumnContainer e1luu51r0"
width="50%"
> >
test DataTable test DataTable
</div> </div>
<div <div
class="css-esqhnb-TableBodyColumnContainer e1luu51r0" class="css-9bipfg-TableBodyColumnContainer e1luu51r0"
width="50%"
> >
true true
</div> </div>
@@ -105,12 +107,14 @@ test('column visibility', async () => {
class="css-1k3kr6b-TableBodyRowContainer e1luu51r1" class="css-1k3kr6b-TableBodyRowContainer e1luu51r1"
> >
<div <div
class="css-esqhnb-TableBodyColumnContainer e1luu51r0" class="css-9bipfg-TableBodyColumnContainer e1luu51r0"
width="50%"
> >
test DataTable test DataTable
</div> </div>
<div <div
class="css-esqhnb-TableBodyColumnContainer e1luu51r0" class="css-9bipfg-TableBodyColumnContainer e1luu51r0"
width="50%"
> >
true true
</div> </div>
@@ -130,7 +134,8 @@ test('column visibility', async () => {
class="css-1k3kr6b-TableBodyRowContainer e1luu51r1" class="css-1k3kr6b-TableBodyRowContainer e1luu51r1"
> >
<div <div
class="css-esqhnb-TableBodyColumnContainer e1luu51r0" class="css-9bipfg-TableBodyColumnContainer e1luu51r0"
width="50%"
> >
test DataTable test DataTable
</div> </div>

View File

@@ -47,12 +47,14 @@ test('update and append', async () => {
class="css-1k3kr6b-TableBodyRowContainer e1luu51r1" class="css-1k3kr6b-TableBodyRowContainer e1luu51r1"
> >
<div <div
class="css-esqhnb-TableBodyColumnContainer e1luu51r0" class="css-9bipfg-TableBodyColumnContainer e1luu51r0"
width="50%"
> >
test DataTable test DataTable
</div> </div>
<div <div
class="css-esqhnb-TableBodyColumnContainer e1luu51r0" class="css-9bipfg-TableBodyColumnContainer e1luu51r0"
width="50%"
> >
true true
</div> </div>

View File

@@ -119,33 +119,40 @@ test('It can render rows', async () => {
class="css-1k3kr6b-TableBodyRowContainer e1luu51r1" class="css-1k3kr6b-TableBodyRowContainer e1luu51r1"
> >
<div <div
class="css-esqhnb-TableBodyColumnContainer e1luu51r0" class="css-1vr131n-TableBodyColumnContainer e1luu51r0"
width="14%"
> >
00:00:00.000 00:00:00.000
</div> </div>
<div <div
class="css-esqhnb-TableBodyColumnContainer e1luu51r0" class="css-1vr131n-TableBodyColumnContainer e1luu51r0"
width="14%"
> >
Android Phone Android Phone
</div> </div>
<div <div
class="css-esqhnb-TableBodyColumnContainer e1luu51r0" class="css-1vr131n-TableBodyColumnContainer e1luu51r0"
width="14%"
> >
FB4A FB4A
</div> </div>
<div <div
class="css-esqhnb-TableBodyColumnContainer e1luu51r0" class="css-1vr131n-TableBodyColumnContainer e1luu51r0"
width="14%"
> >
unique-string unique-string
</div> </div>
<div <div
class="css-esqhnb-TableBodyColumnContainer e1luu51r0" class="css-1vr131n-TableBodyColumnContainer e1luu51r0"
width="14%"
/> />
<div <div
class="css-esqhnb-TableBodyColumnContainer e1luu51r0" class="css-1vr131n-TableBodyColumnContainer e1luu51r0"
width="14%"
/> />
<div <div
class="css-esqhnb-TableBodyColumnContainer e1luu51r0" class="css-1vr131n-TableBodyColumnContainer e1luu51r0"
width="14%"
> >
toClient toClient
</div> </div>