diff --git a/packages/desktop-client/e2e/accounts.test.js-snapshots/Accounts-closes-an-account-1-chromium-linux.png b/packages/desktop-client/e2e/accounts.test.js-snapshots/Accounts-closes-an-account-1-chromium-linux.png index b14f414c3dd3387311b8ec9610d9467504e960af..f80ae8f280fdedd74ae1fa4a1e53fce1ef231f60 100644 Binary files a/packages/desktop-client/e2e/accounts.test.js-snapshots/Accounts-closes-an-account-1-chromium-linux.png and b/packages/desktop-client/e2e/accounts.test.js-snapshots/Accounts-closes-an-account-1-chromium-linux.png differ diff --git a/packages/desktop-client/e2e/accounts.test.js-snapshots/Accounts-closes-an-account-2-chromium-linux.png b/packages/desktop-client/e2e/accounts.test.js-snapshots/Accounts-closes-an-account-2-chromium-linux.png index 3f6f471d4b4eace237c96c6e97748d53e9adb7c6..a4ea1871f8eef12c9b3eebfbcf92384e29668ee8 100644 Binary files a/packages/desktop-client/e2e/accounts.test.js-snapshots/Accounts-closes-an-account-2-chromium-linux.png and b/packages/desktop-client/e2e/accounts.test.js-snapshots/Accounts-closes-an-account-2-chromium-linux.png differ diff --git a/packages/desktop-client/e2e/accounts.test.js-snapshots/Accounts-closes-an-account-3-chromium-linux.png b/packages/desktop-client/e2e/accounts.test.js-snapshots/Accounts-closes-an-account-3-chromium-linux.png index e50c6e5873207f989829c83b77883cf3d15d75b1..dfe9e61345989c134d1a478589883b78c73a5262 100644 Binary files a/packages/desktop-client/e2e/accounts.test.js-snapshots/Accounts-closes-an-account-3-chromium-linux.png and b/packages/desktop-client/e2e/accounts.test.js-snapshots/Accounts-closes-an-account-3-chromium-linux.png differ diff --git a/packages/desktop-client/e2e/accounts.test.js-snapshots/Accounts-closes-an-account-4-chromium-linux.png b/packages/desktop-client/e2e/accounts.test.js-snapshots/Accounts-closes-an-account-4-chromium-linux.png index 1c74772fe73b4aead6b1939fc9c9a6f20ab72d1e..e1e4e1722650133ec7b933540710941d6234377c 100644 Binary files a/packages/desktop-client/e2e/accounts.test.js-snapshots/Accounts-closes-an-account-4-chromium-linux.png and b/packages/desktop-client/e2e/accounts.test.js-snapshots/Accounts-closes-an-account-4-chromium-linux.png differ diff --git a/packages/desktop-client/e2e/accounts.test.js-snapshots/Accounts-creates-a-new-account-and-views-the-initial-balance-transaction-1-chromium-linux.png b/packages/desktop-client/e2e/accounts.test.js-snapshots/Accounts-creates-a-new-account-and-views-the-initial-balance-transaction-1-chromium-linux.png index c43e9ef2b8aef50bbf272020a6f7ba2565f724d6..8b33b6d9307109b548d25ef8b8eec3ef955808a1 100644 Binary files a/packages/desktop-client/e2e/accounts.test.js-snapshots/Accounts-creates-a-new-account-and-views-the-initial-balance-transaction-1-chromium-linux.png and b/packages/desktop-client/e2e/accounts.test.js-snapshots/Accounts-creates-a-new-account-and-views-the-initial-balance-transaction-1-chromium-linux.png differ diff --git a/packages/desktop-client/e2e/accounts.test.js-snapshots/Accounts-creates-a-new-account-and-views-the-initial-balance-transaction-2-chromium-linux.png b/packages/desktop-client/e2e/accounts.test.js-snapshots/Accounts-creates-a-new-account-and-views-the-initial-balance-transaction-2-chromium-linux.png index 756c2af3e3ccc030e5d1be2e8fdfcd18886730bd..0b1cc7296d3966cff681e6bad238ac8b1b91ced6 100644 Binary files a/packages/desktop-client/e2e/accounts.test.js-snapshots/Accounts-creates-a-new-account-and-views-the-initial-balance-transaction-2-chromium-linux.png and b/packages/desktop-client/e2e/accounts.test.js-snapshots/Accounts-creates-a-new-account-and-views-the-initial-balance-transaction-2-chromium-linux.png differ diff --git a/packages/desktop-client/e2e/rules.test.js-snapshots/Rules-creates-a-rule-and-makes-sure-it-is-applied-when-creating-a-transaction-3-chromium-linux.png b/packages/desktop-client/e2e/rules.test.js-snapshots/Rules-creates-a-rule-and-makes-sure-it-is-applied-when-creating-a-transaction-3-chromium-linux.png index 7e96d9aeb3d20f819239499d2513bc8e513f0141..0260f564a98d4a478b1febbd6559e2b0c31b1db0 100644 Binary files a/packages/desktop-client/e2e/rules.test.js-snapshots/Rules-creates-a-rule-and-makes-sure-it-is-applied-when-creating-a-transaction-3-chromium-linux.png and b/packages/desktop-client/e2e/rules.test.js-snapshots/Rules-creates-a-rule-and-makes-sure-it-is-applied-when-creating-a-transaction-3-chromium-linux.png differ diff --git a/packages/desktop-client/e2e/rules.test.js-snapshots/Rules-creates-a-rule-and-makes-sure-it-is-applied-when-creating-a-transaction-4-chromium-linux.png b/packages/desktop-client/e2e/rules.test.js-snapshots/Rules-creates-a-rule-and-makes-sure-it-is-applied-when-creating-a-transaction-4-chromium-linux.png index ed751ec7c343db52cc8485102abb62fc706889d7..ac4910e8d9c2d9226272fe8db12af1eadf2ed679 100644 Binary files a/packages/desktop-client/e2e/rules.test.js-snapshots/Rules-creates-a-rule-and-makes-sure-it-is-applied-when-creating-a-transaction-4-chromium-linux.png and b/packages/desktop-client/e2e/rules.test.js-snapshots/Rules-creates-a-rule-and-makes-sure-it-is-applied-when-creating-a-transaction-4-chromium-linux.png differ diff --git a/packages/desktop-client/e2e/transactions.test.js-snapshots/Transactions-checks-the-page-visuals-1-chromium-linux.png b/packages/desktop-client/e2e/transactions.test.js-snapshots/Transactions-checks-the-page-visuals-1-chromium-linux.png index e9937af9be3cf39a64a06657cc01f335e10f740b..7f2acfdc77b4a84ccacce700dc53ebbbbd3f686f 100644 Binary files a/packages/desktop-client/e2e/transactions.test.js-snapshots/Transactions-checks-the-page-visuals-1-chromium-linux.png and b/packages/desktop-client/e2e/transactions.test.js-snapshots/Transactions-checks-the-page-visuals-1-chromium-linux.png differ diff --git a/packages/desktop-client/e2e/transactions.test.js-snapshots/Transactions-checks-the-page-visuals-2-chromium-linux.png b/packages/desktop-client/e2e/transactions.test.js-snapshots/Transactions-checks-the-page-visuals-2-chromium-linux.png index 6cbbc44bb6a96826fb53d6c167759172ac2076d8..b38712549339aa3db6fe03589a0f8b17e1931310 100644 Binary files a/packages/desktop-client/e2e/transactions.test.js-snapshots/Transactions-checks-the-page-visuals-2-chromium-linux.png and b/packages/desktop-client/e2e/transactions.test.js-snapshots/Transactions-checks-the-page-visuals-2-chromium-linux.png differ diff --git a/packages/desktop-client/e2e/transactions.test.js-snapshots/Transactions-creates-a-split-test-transaction-1-chromium-linux.png b/packages/desktop-client/e2e/transactions.test.js-snapshots/Transactions-creates-a-split-test-transaction-1-chromium-linux.png index f485ee8b8fd82f0dffb1515faa0edd8f274115c2..b218023a6d6b32204086034ef64e59847ea42402 100644 Binary files a/packages/desktop-client/e2e/transactions.test.js-snapshots/Transactions-creates-a-split-test-transaction-1-chromium-linux.png and b/packages/desktop-client/e2e/transactions.test.js-snapshots/Transactions-creates-a-split-test-transaction-1-chromium-linux.png differ diff --git a/packages/desktop-client/e2e/transactions.test.js-snapshots/Transactions-creates-a-split-test-transaction-2-chromium-linux.png b/packages/desktop-client/e2e/transactions.test.js-snapshots/Transactions-creates-a-split-test-transaction-2-chromium-linux.png index 0ad95ebab436cfeda8e6f9b12057efb625df4d95..c161ae84b5047675426244fe66ebc067fd76f12f 100644 Binary files a/packages/desktop-client/e2e/transactions.test.js-snapshots/Transactions-creates-a-split-test-transaction-2-chromium-linux.png and b/packages/desktop-client/e2e/transactions.test.js-snapshots/Transactions-creates-a-split-test-transaction-2-chromium-linux.png differ diff --git a/packages/desktop-client/e2e/transactions.test.js-snapshots/Transactions-creates-a-test-transaction-1-chromium-linux.png b/packages/desktop-client/e2e/transactions.test.js-snapshots/Transactions-creates-a-test-transaction-1-chromium-linux.png index 045d0522033ef6f81c4e726ad059392cc39034ad..1cbbe2758e3156dd93b2f5679bff382b19343223 100644 Binary files a/packages/desktop-client/e2e/transactions.test.js-snapshots/Transactions-creates-a-test-transaction-1-chromium-linux.png and b/packages/desktop-client/e2e/transactions.test.js-snapshots/Transactions-creates-a-test-transaction-1-chromium-linux.png differ diff --git a/packages/desktop-client/e2e/transactions.test.js-snapshots/Transactions-creates-a-test-transaction-2-chromium-linux.png b/packages/desktop-client/e2e/transactions.test.js-snapshots/Transactions-creates-a-test-transaction-2-chromium-linux.png index aa786be5f8ba66cad7852f0c17271b7422dd6b51..a5ee1a86548f3117ab8cdf2fb13a9bb2ab83305a 100644 Binary files a/packages/desktop-client/e2e/transactions.test.js-snapshots/Transactions-creates-a-test-transaction-2-chromium-linux.png and b/packages/desktop-client/e2e/transactions.test.js-snapshots/Transactions-creates-a-test-transaction-2-chromium-linux.png differ diff --git a/packages/desktop-client/e2e/transactions.test.js-snapshots/Transactions-filters-transactions-by-category-5-chromium-linux.png b/packages/desktop-client/e2e/transactions.test.js-snapshots/Transactions-filters-transactions-by-category-5-chromium-linux.png index e4ca93c6c4ec053f521ae30030e40a4bff966b2c..68fb938cc3421be368fcb5874d4ac130e654dbe2 100644 Binary files a/packages/desktop-client/e2e/transactions.test.js-snapshots/Transactions-filters-transactions-by-category-5-chromium-linux.png and b/packages/desktop-client/e2e/transactions.test.js-snapshots/Transactions-filters-transactions-by-category-5-chromium-linux.png differ diff --git a/packages/desktop-client/e2e/transactions.test.js-snapshots/Transactions-filters-transactions-by-category-6-chromium-linux.png b/packages/desktop-client/e2e/transactions.test.js-snapshots/Transactions-filters-transactions-by-category-6-chromium-linux.png index 8f1debec758554d3d7d81a6141f969fef5435168..f0690b648bf4bc9a986ef56617e0cf3efb4c4c01 100644 Binary files a/packages/desktop-client/e2e/transactions.test.js-snapshots/Transactions-filters-transactions-by-category-6-chromium-linux.png and b/packages/desktop-client/e2e/transactions.test.js-snapshots/Transactions-filters-transactions-by-category-6-chromium-linux.png differ diff --git a/packages/desktop-client/e2e/transactions.test.js-snapshots/Transactions-filters-transactions-by-date-5-chromium-linux.png b/packages/desktop-client/e2e/transactions.test.js-snapshots/Transactions-filters-transactions-by-date-5-chromium-linux.png index 293150a32b7bfc52b3d56dade3d38f079dff4109..78c9eed056c5e5fd94947d5ab97f43edba3b453b 100644 Binary files a/packages/desktop-client/e2e/transactions.test.js-snapshots/Transactions-filters-transactions-by-date-5-chromium-linux.png and b/packages/desktop-client/e2e/transactions.test.js-snapshots/Transactions-filters-transactions-by-date-5-chromium-linux.png differ diff --git a/packages/desktop-client/e2e/transactions.test.js-snapshots/Transactions-filters-transactions-by-date-6-chromium-linux.png b/packages/desktop-client/e2e/transactions.test.js-snapshots/Transactions-filters-transactions-by-date-6-chromium-linux.png index 56800cdbd7acee9508dee8cca2adebc3156e448a..50938e22971f5495ad703d0cb9bfe7236160a808 100644 Binary files a/packages/desktop-client/e2e/transactions.test.js-snapshots/Transactions-filters-transactions-by-date-6-chromium-linux.png and b/packages/desktop-client/e2e/transactions.test.js-snapshots/Transactions-filters-transactions-by-date-6-chromium-linux.png differ diff --git a/packages/desktop-client/src/components/accounts/Account.jsx b/packages/desktop-client/src/components/accounts/Account.jsx index 85c5867206bcf94e4739378014947885e546205b..1fb7e32a11619d83ac1fc93446cf90731a2085d1 100644 --- a/packages/desktop-client/src/components/accounts/Account.jsx +++ b/packages/desktop-client/src/components/accounts/Account.jsx @@ -1199,6 +1199,7 @@ class AccountInternal extends PureComponent { applySort = (field, ascDesc, prevField, prevAscDesc) => { const filters = this.state.filters; + const isFiltered = filters.length > 0; const sortField = getField(!field ? this.state.sort.field : field); const sortAscDesc = !ascDesc ? this.state.sort.ascDesc : ascDesc; const sortPrevField = getField( @@ -1208,34 +1209,78 @@ class AccountInternal extends PureComponent { ? this.state.sort.prevAscDesc : prevAscDesc; - if (!field) { - //no sort was made (called by applyFilters) - this.currentQuery = this.currentQuery.orderBy({ + const sortCurrentQuery = function (that, sortField, sortAscDesc) { + if (sortField === 'cleared') { + that.currentQuery = that.currentQuery.orderBy({ + reconciled: sortAscDesc, + }); + } + + that.currentQuery = that.currentQuery.orderBy({ [sortField]: sortAscDesc, }); - } else { - //sort called directly - if (filters.length > 0) { - //if filters already exist then apply them - this.applyFilters([...filters]); - this.currentQuery = this.currentQuery.orderBy({ - [sortField]: sortAscDesc, + }; + + const sortRootQuery = function (that, sortField, sortAscDesc) { + if (sortField === 'cleared') { + that.currentQuery = that.rootQuery.orderBy({ + reconciled: sortAscDesc, + }); + that.currentQuery = that.currentQuery.orderBy({ + cleared: sortAscDesc, }); } else { - //no filters exist make new rootquery - this.currentQuery = this.rootQuery.orderBy({ + that.currentQuery = that.rootQuery.orderBy({ [sortField]: sortAscDesc, }); } - } - if (sortPrevField) { - //apply previos sort if it exists - this.currentQuery = this.currentQuery.orderBy({ + }; + + // sort by previously used sort field, if any + const maybeSortByPreviousField = function ( + that, + sortPrevField, + sortPrevAscDesc, + ) { + if (!sortPrevField) { + return; + } + + if (sortPrevField === 'cleared') { + that.currentQuery = that.currentQuery.orderBy({ + reconciled: sortPrevAscDesc, + }); + } + + that.currentQuery = that.currentQuery.orderBy({ [sortPrevField]: sortPrevAscDesc, }); + }; + + switch (true) { + // called by applyFilters to sort an already filtered result + case !field: + sortCurrentQuery(this, sortField, sortAscDesc); + break; + + // called directly from UI by sorting a column. + // active filters need to be applied before sorting + case isFiltered: + this.applyFilters([...filters]); + sortCurrentQuery(this, sortField, sortAscDesc); + break; + + // called directly from UI by sorting a column. + // no active filters, start a new root query. + case !isFiltered: + sortRootQuery(this, sortField, sortAscDesc); + break; + + default: } - this.updateQuery(this.currentQuery, this.state.filters.length > 0); + maybeSortByPreviousField(this, sortPrevField, sortPrevAscDesc); + this.updateQuery(this.currentQuery, isFiltered); }; onSort = (headerClicked, ascDesc) => { diff --git a/packages/desktop-client/src/components/transactions/TransactionsTable.jsx b/packages/desktop-client/src/components/transactions/TransactionsTable.jsx index 69e53337c4ca43c013897a050fdcb2ad1c5d3a2e..0472fa482479a16c93ebe5248daea3685c8d77f7 100644 --- a/packages/desktop-client/src/components/transactions/TransactionsTable.jsx +++ b/packages/desktop-client/src/components/transactions/TransactionsTable.jsx @@ -368,7 +368,23 @@ const TransactionHeader = memo( } /> {showBalance && <Cell value="Balance" width={88} textAlign="right" />} - {showCleared && <Field width={23} truncate={false} />} + + {showCleared && ( + <HeaderCell + value="✓" + width={23} + alignItems="center" + id="cleared" + icon={field === 'cleared' ? ascDesc : 'clickable'} + onClick={() => { + onSort( + 'cleared', + selectAscDesc(field, ascDesc, 'cleared', 'asc'), + ); + }} + /> + )} + <Cell value="" width={5 + (scrollWidth ?? 0)} /> </Row> ); diff --git a/upcoming-release-notes/1994.md b/upcoming-release-notes/1994.md new file mode 100644 index 0000000000000000000000000000000000000000..79bb0c3c62e295ef64b63ba5e9994d6f83b40a0e --- /dev/null +++ b/upcoming-release-notes/1994.md @@ -0,0 +1,6 @@ +--- +category: Enhancements +authors: [jaarasys-henria] +--- + +Make transaction list sortable by cleared status