import QtQuick 2.13 import QtQuick.Controls 2.13 import QtQuick.Layouts 1.13 import utils 1.0 import shared 1.0 import shared.panels 1.0 import "stores" import "popups" import "views" import StatusQ.Layout 0.1 import StatusQ.Controls 0.1 StatusSectionLayout { id: root property ProfileSectionStore store property var globalStore property var systemPalette property var emojiPopup backButtonName: root.store.backButtonName notificationCount: activityCenterStore.unreadNotificationsCount onNotificationButtonClicked: Global.openActivityCenterPopup() onBackButtonClicked: { switch (Global.settingsSubsection) { case Constants.settingsSubsection.contacts: Global.changeAppSectionBySectionType(Constants.appSection.profile, Constants.settingsSubsection.messaging) break; case Constants.settingsSubsection.wallet: walletView.item.resetStack() break; case Constants.settingsSubsection.keycard: keycardView.item.handleBackAction() break; } } Component.onCompleted: { profileContainer.currentIndex = -1 profileContainer.currentIndex = Qt.binding(() => Global.settingsSubsection) } QtObject { id: d readonly property int bottomMargin: 56 readonly property int leftMargin: 64 readonly property int rightMargin: 64 readonly property int contentWidth: 560 } leftPanel: LeftTabView { store: root.store anchors.fill: parent onMenuItemClicked: { if (profileContainer.currentItem.dirty) { event.accepted = true; profileContainer.currentItem.notifyDirty(); } } } centerPanel: StackLayout { id: profileContainer readonly property var currentItem: (currentIndex >= 0 && currentIndex < children.length) ? children[currentIndex].item : null anchors.fill: parent anchors.bottomMargin: d.bottomMargin anchors.leftMargin: d.leftMargin anchors.rightMargin: d.rightMargin currentIndex: Global.settingsSubsection onCurrentIndexChanged: { if (!children[currentIndex].active) children[currentIndex].active = true root.store.backButtonName = "" if (currentIndex === Constants.settingsSubsection.ensUsernames) { ensContainer.item.goToStart() } else if (currentIndex === Constants.settingsSubsection.contacts) { root.store.backButtonName = root.store.getNameForSubsection(Constants.settingsSubsection.messaging) } else if (currentIndex === Constants.settingsSubsection.wallet) { walletView.item.resetStack() } else if (currentIndex === Constants.settingsSubsection.keycard) { keycardView.item.handleBackAction() } } Loader { active: false asynchronous: true sourceComponent: MyProfileView { implicitWidth: parent.width implicitHeight: parent.height walletStore: root.store.walletStore profileStore: root.store.profileStore privacyStore: root.store.privacyStore contactsStore: root.store.contactsStore sectionTitle: root.store.getNameForSubsection(Constants.settingsSubsection.profile) contentWidth: d.contentWidth } } Loader { active: false asynchronous: true sourceComponent: ContactsView { implicitWidth: parent.width implicitHeight: parent.height contactsStore: root.store.contactsStore sectionTitle: qsTr("Contacts") contentWidth: d.contentWidth } } Loader { id: ensContainer active: false asynchronous: true sourceComponent: EnsView { // TODO: we need to align structure for the entire this part using `SettingsContentBase` as root component // TODO: handle structure for this subsection to match style used in onther sections // using `SettingsContentBase` component as base. implicitWidth: parent.width implicitHeight: parent.height ensUsernamesStore: root.store.ensUsernamesStore contactsStore: root.store.contactsStore stickersStore: root.store.stickersStore profileContentWidth: d.contentWidth } } Loader { active: false asynchronous: true sourceComponent: MessagingView { implicitWidth: parent.width implicitHeight: parent.height advancedStore: root.store.advancedStore messagingStore: root.store.messagingStore sectionTitle: root.store.getNameForSubsection(Constants.settingsSubsection.messaging) contactsStore: root.store.contactsStore contentWidth: d.contentWidth } } Loader { id: walletView active: false asynchronous: true sourceComponent: WalletView { implicitWidth: parent.width implicitHeight: parent.height rootStore: root.store walletStore: root.store.walletStore emojiPopup: root.emojiPopup sectionTitle: root.store.getNameForSubsection(Constants.settingsSubsection.wallet) contentWidth: d.contentWidth } onLoaded: root.store.backButtonName = "" } Loader { active: false asynchronous: true sourceComponent: AppearanceView { implicitWidth: parent.width implicitHeight: parent.height appearanceStore: root.store.appearanceStore sectionTitle: root.store.getNameForSubsection(Constants.settingsSubsection.appearance) contentWidth: d.contentWidth systemPalette: root.systemPalette } } Loader { active: false asynchronous: true sourceComponent: LanguageView { implicitWidth: parent.width implicitHeight: parent.height languageStore: root.store.languageStore currencyStore: root.store.walletStore.currencyStore sectionTitle: root.store.getNameForSubsection(Constants.settingsSubsection.language) contentWidth: d.contentWidth } } Loader { active: false asynchronous: true sourceComponent: NotificationsView { implicitWidth: parent.width implicitHeight: parent.height notificationsStore: root.store.notificationsStore devicesStore: root.store.devicesStore sectionTitle: root.store.getNameForSubsection(Constants.settingsSubsection.notifications) contentWidth: d.contentWidth } } Loader { active: false asynchronous: true sourceComponent: DevicesView { implicitWidth: parent.width implicitHeight: parent.height devicesStore: root.store.devicesStore sectionTitle: root.store.getNameForSubsection(Constants.settingsSubsection.devicesSettings) contentWidth: d.contentWidth } } Loader { active: false asynchronous: true sourceComponent: BrowserView { implicitWidth: parent.width implicitHeight: parent.height store: root.store accountSettings: localAccountSensitiveSettings sectionTitle: root.store.getNameForSubsection(Constants.settingsSubsection.browserSettings) contentWidth: d.contentWidth } } Loader { active: false asynchronous: true sourceComponent: AdvancedView { implicitWidth: parent.width implicitHeight: parent.height advancedStore: root.store.advancedStore sectionTitle: root.store.getNameForSubsection(Constants.settingsSubsection.advanced) contentWidth: d.contentWidth } } Loader { active: false asynchronous: true sourceComponent: AboutView { implicitWidth: parent.width implicitHeight: parent.height sectionTitle: root.store.getNameForSubsection(Constants.settingsSubsection.about) contentWidth: d.contentWidth store: QtObject { function checkForUpdates() { return root.store.checkForUpdates() } function getCurrentVersion() { return root.store.getCurrentVersion() } function getReleaseNotes() { openLink("https://github.com/status-im/status-desktop/releases/%1".arg(getCurrentVersion())) } function openLink(url) { Global.openLink(url) } } } } Loader { active: false asynchronous: true sourceComponent: CommunitiesView { implicitWidth: parent.width implicitHeight: parent.height profileSectionStore: root.store rootStore: root.globalStore contactStore: root.store.contactsStore sectionTitle: root.store.getNameForSubsection(Constants.settingsSubsection.communitiesSettings) contentWidth: d.contentWidth } } Loader { id: keycardView active: false asynchronous: true sourceComponent: KeycardView { implicitWidth: parent.width implicitHeight: parent.height profileSectionStore: root.store keycardStore: root.store.keycardStore emojiPopup: root.emojiPopup sectionTitle: root.store.getNameForSubsection(Constants.settingsSubsection.keycard) mainSectionTitle: root.store.getNameForSubsection(Constants.settingsSubsection.keycard) contentWidth: d.contentWidth } } } }