status-desktop/ui/app/AppLayouts/Profile/views/profile/MyProfileSettingsView.qml

193 lines
5.6 KiB
QML
Raw Normal View History

2022-06-22 12:16:21 +00:00
import QtQuick 2.13
import QtQuick.Controls 2.3
import QtQuick.Layouts 1.13
import utils 1.0
import shared 1.0
import shared.panels 1.0
import shared.popups 1.0
import shared.controls.chat 1.0
import "../../popups"
import "../../stores"
import "../../controls"
import "../../../Onboarding/shared" as OnboardingComponents
import StatusQ.Core 0.1
import StatusQ.Core.Theme 0.1
import StatusQ.Components 0.1
import StatusQ.Controls 0.1
ColumnLayout {
id: root
property PrivacyStore privacyStore
property ProfileStore profileStore
property WalletStore walletStore
readonly property bool dirty: displayNameInput.text != profileStore.displayName
|| biometricsSwitch.checked != biometricsSwitch.currentStoredValue
readonly property bool valid: !!displayNameInput.text && displayNameInput.valid
function reset() {
displayNameInput.text = Qt.binding(() => { return profileStore.displayName })
biometricsSwitch.checked = Qt.binding(() => { return biometricsSwitch.currentStoredValue })
}
function save() {
profileStore.setDisplayName(displayNameInput.text)
if (biometricsSwitch.checked)
Global.openPopup(storePasswordModal)
else
localAccountSettings.storeToKeychainValue = Constants.storeToKeychainValueNever;
}
function offerToStorePassword(password, runStoreToKeyChainPopup)
{
if (Qt.platform.os !== "osx")
return;
localAccountSettings.storeToKeychainValue = Constants.storeToKeychainValueStore;
root.privacyStore.storeToKeyChain(password);
}
ProfileHeader {
Layout.fillWidth: true
Layout.leftMargin: Style.current.padding
Layout.rightMargin: Style.current.padding
displayName: profileStore.name
pubkey: profileStore.pubkey
icon: profileStore.icon
imageSize: ProfileHeader.ImageSize.Big
displayNameVisible: false
pubkeyVisible: false
emojiHashVisible: false
editImageButtonVisible: true
}
StatusInput {
id: displayNameInput
Layout.fillWidth: true
label: qsTr("Display name")
input.placeholderText: qsTr("Display Name")
charLimit: 24
input.text: root.profileStore.displayName
validators: Constants.validators.displayName
}
StatusListItem {
Layout.fillWidth: true
visible: Qt.platform.os == "osx"
title: qsTr("Biometric login and transaction authentication")
icon.name: "touch-id"
components: [ StatusSwitch {
id: biometricsSwitch
readonly property bool currentStoredValue: localAccountSettings.storeToKeychainValue === Constants.storeToKeychainValueStore
checked: currentStoredValue
} ]
sensor.onClicked: biometricsSwitch.toggle()
}
StatusTabBar {
id: showcaseTabBar
Layout.fillWidth: true
function validateCurrentIndex() {
let processedButtons = 0;
while (!itemAt(currentIndex).enabled) {
if (++processedButtons == count) {
currentIndex = -1;
break;
}
currentIndex = (currentIndex + 1) % count;
}
}
StatusTabButton {
enabled: localAccountSensitiveSettings.communitiesEnabled
width: enabled ? implicitWidth : 0
text: qsTr("Communities")
onEnabledChanged: showcaseTabBar.validateCurrentIndex()
}
StatusTabButton {
enabled: localAccountSensitiveSettings.isWalletEnabled
width: enabled ? implicitWidth : 0
text: qsTr("Accounts")
onEnabledChanged: showcaseTabBar.validateCurrentIndex()
}
}
StackLayout {
Layout.fillWidth: true
currentIndex: showcaseTabBar.currentIndex
Column {
Layout.fillWidth: true
StatusBaseText {
visible: communitiesRepeater.count == 0
width: parent.width
horizontalAlignment: Text.AlignHCenter
font.pixelSize: 15
color: Theme.palette.directColor1
text: qsTr("You haven't joined any communities yet")
}
Repeater {
id: communitiesRepeater
model: communitiesModule.model
CommunityDelegate {
width: parent.width
visible: joined
community: model
enabled: false
}
}
}
Column {
StatusBaseText {
visible: accountsRepeater.count == 0
width: parent.width
horizontalAlignment: Text.AlignHCenter
font.pixelSize: 15
color: Theme.palette.directColor1
text: qsTr("You don't have any wallet accounts yet")
}
Repeater {
id: accountsRepeater
model: root.walletStore.accounts
WalletAccountDelegate {
width: parent.width
account: model
showShevronIcon: false
enabled: false
}
}
}
}
Component {
id: storePasswordModal
OnboardingComponents.CreatePasswordModal {
privacyStore: root.privacyStore
storingPasswordModal: true
onOfferToStorePassword: {
root.offerToStorePassword(password, runStoreToKeychainPopup)
}
}
}
}