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:
committed by
Facebook GitHub Bot
parent
e26a8c5ad0
commit
e3cb16d870
@@ -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,
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user