diff --git a/src/MobileApp.vue b/src/MobileApp.vue index 79253bb4..d8b9757c 100644 --- a/src/MobileApp.vue +++ b/src/MobileApp.vue @@ -324,15 +324,36 @@ i.icon.la, i.icon.las, i.icon.lab { font-weight: bold; } -.list.list-dividers li.list-group-title:first-child { +.list.list-dividers li.has-child-list-item .item-inner:after { + content: ''; + position: absolute; + background-color: var(--f7-list-item-border-color); + display: block !important; + z-index: 15; + top: auto; + right: auto; + bottom: 0; + left: 0; + height: 1px; + width: 100%; + transform-origin: 50% 100%; + transform: scaleY(calc(1 / var(--f7-device-pixel-ratio))); +} + +.list.list-dividers li.list-group-title:first-child, +.list.list-dividers li.list-group-title.actual-first-child { border-radius: var(--f7-list-inset-border-radius) var(--f7-list-inset-border-radius) 0 0; } -.list.list-dividers li.list-group-title:first-child:before { +.list.list-dividers li.list-group-title:first-child:before, +.list.list-dividers li.list-group-title.actual-first-child:before { background-color: transparent; } -.list.list-dividers li:last-child > .swipeout-content > .item-link > .item-content > .item-inner:after { +.list.list-dividers li:last-child > .swipeout-content > .item-content > .item-inner:after, +.list.list-dividers li:last-child > .swipeout-content > .item-link > .item-content > .item-inner:after, +.list.list-dividers li.actual-last-child > .swipeout-content > .item-content > .item-inner:after, +.list.list-dividers li.actual-last-child > .swipeout-content > .item-link > .item-content > .item-inner:after { background-color: transparent; } @@ -340,6 +361,45 @@ i.icon.la, i.icon.las, i.icon.lab { border-radius: var(--f7-button-border-radius); } +.list.inset li.swipeout.actual-first-child, +.list.inset li.actual-first-child > a { + border-radius: var(--f7-list-inset-border-radius) var(--f7-list-inset-border-radius) 0 0; +} + +.list.inset li.swipeout.actual-last-child, +.list.inset li.actual-last-child > a { + border-radius: 0 0 var(--f7-list-inset-border-radius) var(--f7-list-inset-border-radius); +} + +.list.inset li.swipeout.actual-first-child.actual-last-child, +.list.inset li.actual-first-child.actual-last-child > a { + border-radius: var(--f7-list-inset-border-radius); +} + +.list.inset.list-has-group-title li.swipeout.actual-first-child, +.list.inset.list-has-group-title li.actual-first-child > a { + border-radius: 0; +} + +.list.inset.list-has-group-title li.swipeout:first-child:last-child, +.list.inset.list-has-group-title li:first-child:last-child > a, +.list.inset.list-has-group-title li.swipeout.actual-first-child.actual-last-child, +.list.inset.list-has-group-title li.actual-first-child.actual-last-child > a { + border-radius: 0 0 var(--f7-list-inset-border-radius) var(--f7-list-inset-border-radius); +} + +.accordion-item .block-title+.accordion-item-content .list.inset li.swipeout:first-child:not(:last-child), +.accordion-item .block-title+.accordion-item-content .list.inset li:first-child:not(:last-child) > a { + border-radius: 0; +} + +.accordion-item .block-title+.accordion-item-content .list.inset li.swipeout:first-child:last-child, +.accordion-item .block-title+.accordion-item-content .list.inset li:first-child:last-child > a, +.accordion-item .block-title+.accordion-item-content .list.inset li.swipeout.actual-last-child:first-child, +.accordion-item .block-title+.accordion-item-content .list.inset li.actual-last-child:first-child > a { + border-radius: 0 0 var(--f7-list-inset-border-radius) var(--f7-list-inset-border-radius); +} + .list .item-content .list-item-checked-icon { font-size: 20px; color: var(--f7-radio-active-color, var(--f7-theme-color)); @@ -490,8 +550,10 @@ i.icon.la, i.icon.las, i.icon.lab { width: 100%; } -.nested-list-item .item-inner { - padding-right: 0; +.nested-list-item.has-child-list-item > .swipeout-content > .item-content > .item-inner, +.nested-list-item.has-child-list-item > .swipeout-content > .item-link > .item-content > .item-inner { + padding-top: 0; + padding-bottom: 0; } .nested-list-item.has-child-list-item .nested-list-item-child .item-inner { @@ -524,13 +586,43 @@ i.icon.la, i.icon.las, i.icon.lab { .nested-list-item .nested-list-item-title { align-self: center; - margin-left: var(--f7-list-item-media-margin); margin-right: var(--f7-list-item-media-margin); overflow: hidden; text-overflow: ellipsis; } -.nested-list-item:last-child > .swipeout-content > .item-link > .item-content > .item-inner:after { +.nested-list-item.has-child-list-item .nested-list-item-title { + margin-left: var(--f7-list-item-media-margin); +} + +.nested-list-item.has-child-list-item > .swipeout-content > .item-content > .item-inner:after, +.nested-list-item.has-child-list-item > .swipeout-content > .item-link > .item-content > .item-inner:after { + background-color: transparent; +} + +.list.inset li.nested-list-item.has-child-list-item .item-inner li.nested-list-item-child, +.list.inset li.nested-list-item.has-child-list-item .item-inner li.nested-list-item-child > a { + border-radius: 0; +} + +.list.list-dividers li.nested-list-item.has-child-list-item .item-inner .nested-list-item-child .item-inner:after { + content: ''; + position: absolute; + background-color: var(--f7-list-item-border-color); + display: block !important; + z-index: 15; + top: auto; + right: auto; + bottom: 0; + left: 0; + height: 1px; + width: 100%; + transform-origin: 50% 100%; + transform: scaleY(calc(1 / var(--f7-device-pixel-ratio))); +} + +.list.list-dividers li.nested-list-item.has-child-list-item:last-child .item-inner .nested-list-item-child:last-child .item-inner:after, +.list.list-dividers li.nested-list-item.has-child-list-item.actual-last-child .item-inner .nested-list-item-child.actual-last-child .item-inner:after { background-color: transparent; } diff --git a/src/lib/utils.js b/src/lib/utils.js index 893b7112..787e89f6 100644 --- a/src/lib/utils.js +++ b/src/lib/utils.js @@ -778,6 +778,60 @@ function categroyTypeToTransactionType(categoryType) { } } +function allVisibleTransactionCategories(allTransactionCategories) { + const ret = {}; + + for (let key in transactionConstants.allTransactionTypes) { + if (!Object.prototype.hasOwnProperty.call(transactionConstants.allTransactionTypes, key)) { + continue; + } + + const transactionType = transactionConstants.allTransactionTypes[key]; + + if (!allTransactionCategories[transactionType]) { + continue; + } + + const allCategories = allTransactionCategories[transactionType]; + const visibleCategories = []; + const allVisibleSubCategories = {}; + + for (let j = 0; j < allCategories.length; j++) { + const category = allCategories[j]; + + if (category.hidden) { + continue; + } + + visibleCategories.push(category); + + if (category.subCategories) { + const visibleSubCategories = []; + + for (let k = 0; k < category.subCategories.length; k++) { + const subCategory = category.subCategories[k]; + + if (!subCategory.hidden) { + visibleSubCategories.push(subCategory); + } + } + + if (visibleSubCategories.length > 0) { + allVisibleSubCategories[category.id] = visibleSubCategories; + } + } + } + + ret[transactionType.toString()] = { + type: transactionType.toString(), + visibleCategories: visibleCategories, + visibleSubCategories: allVisibleSubCategories + }; + } + + return ret; +} + function getCategoryInfo(categoryId) { for (let i = 0; i < accountConstants.allCategories.length; i++) { if (accountConstants.allCategories[i].id === categoryId) { @@ -816,6 +870,60 @@ function getCategorizedAccounts(allAccounts) { return ret; } +function getVisibleCategorizedAccounts(categorizedAccounts) { + const ret = {}; + + for (let i = 0; i < accountConstants.allCategories.length; i++) { + const accountCategory = accountConstants.allCategories[i]; + + if (!categorizedAccounts[accountCategory.id] || !categorizedAccounts[accountCategory.id].accounts) { + continue; + } + + const allAccounts = categorizedAccounts[accountCategory.id].accounts; + const visibleAccounts = []; + const allVisibleSubAccounts = {}; + + for (let j = 0; j < allAccounts.length; j++) { + const account = allAccounts[j]; + + if (account.hidden) { + continue; + } + + visibleAccounts.push(account); + + if (account.type === accountConstants.allAccountTypes.MultiSubAccounts && account.subAccounts) { + const visibleSubAccounts = []; + + for (let k = 0; k < account.subAccounts.length; k++) { + const subAccount = account.subAccounts[k]; + + if (!subAccount.hidden) { + visibleSubAccounts.push(subAccount); + } + } + + if (visibleSubAccounts.length > 0) { + allVisibleSubAccounts[account.id] = visibleSubAccounts; + } + } + } + + if (visibleAccounts.length > 0) { + ret[accountCategory.id] = { + category: accountCategory.id, + name: accountCategory.name, + icon: accountCategory.defaultAccountIconId, + visibleAccounts: visibleAccounts, + visibleSubAccounts: allVisibleSubAccounts + }; + } + } + + return ret; +} + function getAllFilteredAccountsBalance(categorizedAccounts, accountFilter) { const allAccountCategories = accountConstants.allCategories; const ret = []; @@ -961,8 +1069,10 @@ export default { parseDeviceInfo, transactionTypeToCategroyType, categroyTypeToTransactionType, + allVisibleTransactionCategories, getCategoryInfo, getCategorizedAccounts, + getVisibleCategorizedAccounts, getAllFilteredAccountsBalance, makeButtonCopyToClipboard, changeClipboardObjectText, diff --git a/src/views/mobile/accounts/ListPage.vue b/src/views/mobile/accounts/ListPage.vue index 6f1618cf..bd3b9728 100644 --- a/src/views/mobile/accounts/ListPage.vue +++ b/src/views/mobile/accounts/ListPage.vue @@ -61,7 +61,7 @@
- @@ -72,8 +72,9 @@ + +