From 1545da8f9f1e5337e78e022060ffd7e38111eb1b Mon Sep 17 00:00:00 2001 From: Eric Liu Date: Sun, 5 Jun 2022 09:50:27 -0700 Subject: [PATCH 1/3] refactor(data-table): remove unneeded third argument from resolvePath call --- src/DataTable/DataTable.svelte | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/DataTable/DataTable.svelte b/src/DataTable/DataTable.svelte index f9289e9b95..6272949d4e 100644 --- a/src/DataTable/DataTable.svelte +++ b/src/DataTable/DataTable.svelte @@ -213,11 +213,11 @@ } else { sortedRows = [...$tableRows].sort((a, b) => { const itemA = ascending - ? resolvePath(a, sortKey, "") - : resolvePath(b, sortKey, ""); + ? resolvePath(a, sortKey) + : resolvePath(b, sortKey); const itemB = ascending - ? resolvePath(b, sortKey, "") - : resolvePath(a, sortKey, ""); + ? resolvePath(b, sortKey) + : resolvePath(a, sortKey); if ($sortHeader.sort) return $sortHeader.sort(itemA, itemB); From 0a6b8fc11290a62b116082e120c3628b42b3cff8 Mon Sep 17 00:00:00 2001 From: Eric Liu Date: Sun, 5 Jun 2022 10:48:35 -0700 Subject: [PATCH 2/3] refactor(data-table): do not overwrite `cells` property #667 --- src/DataTable/DataTable.svelte | 22 +++++++++++++--------- src/DataTable/ToolbarSearch.svelte | 2 +- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/DataTable/DataTable.svelte b/src/DataTable/DataTable.svelte index 6272949d4e..b30610d67c 100644 --- a/src/DataTable/DataTable.svelte +++ b/src/DataTable/DataTable.svelte @@ -195,14 +195,18 @@ $: if (radio || batchSelection) selectable = true; $: tableSortable.set(sortable); $: headerKeys = headers.map(({ key }) => key); - $: $tableRows = rows.map((row) => ({ - ...row, - cells: headerKeys.map((key, index) => ({ - key, - value: resolvePath(row, key), - display: headers[index].display, - })), - })); + $: tableCellsByRowId = rows.reduce( + (rows, row) => ({ + ...rows, + [row.id]: headerKeys.map((key, index) => ({ + key, + value: resolvePath(row, key), + display: headers[index].display, + })), + }), + {} + ); + $: $tableRows = rows; $: sortedRows = [...$tableRows]; $: ascending = $sortHeader.sortDirection === "ascending"; $: sortKey = $sortHeader.key; @@ -464,7 +468,7 @@ {/if} {/if} - {#each row.cells as cell, j (cell.key)} + {#each tableCellsByRowId[row.id] as cell, j (cell.key)} {#if headers[j].empty} { return Object.entries(row) - .filter(([key]) => !["cells", "id"].includes(key)) + .filter(([key]) => key !== "id") .some(([key, _value]) => { if (typeof _value === "string" || typeof _value === "number") { return (_value + "") From 79b662a5f983718657f6abbba22b64e2e9b16cb7 Mon Sep 17 00:00:00 2001 From: Eric Liu Date: Sun, 5 Jun 2022 10:50:54 -0700 Subject: [PATCH 3/3] perf(data-table): early return if path in object when resolving path --- src/DataTable/DataTable.svelte | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/DataTable/DataTable.svelte b/src/DataTable/DataTable.svelte index b30610d67c..bd6b79c757 100644 --- a/src/DataTable/DataTable.svelte +++ b/src/DataTable/DataTable.svelte @@ -146,11 +146,13 @@ .map(({ key }, i) => ({ key, id: key })) .reduce((a, c) => ({ ...a, [c.key]: c.id }), {}) ); - const resolvePath = (object, path) => - path + const resolvePath = (object, path) => { + if (path in object) return object[path]; + return path .split(/[\.\[\]\'\"]/) .filter((p) => p) .reduce((o, p) => (o && typeof o === "object" ? o[p] : o), object); + }; setContext("DataTable", { sortHeader,