import QtQuick 2.15 import QtQuick.Controls 2.15 import QtQuick.Controls.Basic Rectangle { SystemPalette { id: activeColors; colorGroup: SystemPalette.Active } SystemPalette { id: inactiveColors; colorGroup: SystemPalette.Inactive } SystemPalette { id: disabledColors; colorGroup: SystemPalette.Disabled } function getColors() { return root.active ? activeColors : inactiveColors; } visible: true signal loginSuccess(string token) color: getColors().window Text { id: loginL anchors{ verticalCenter: parent.verticalCenter verticalCenterOffset: -70 horizontalCenter: parent.horizontalCenter } text: qsTr("Login") font.pointSize: 20 font.bold: true color: getColors().text } TextField { id: nameT anchors{ horizontalCenter: parent.horizontalCenter topMargin: 5 top: loginL.bottom } placeholderText: qsTr("Name") Keys.onReturnPressed: passwordT.focus = true } TextField { id: passwordT anchors{ horizontalCenter: parent.horizontalCenter topMargin: 5 top: nameT.bottom } placeholderText: qsTr("Password") Keys.onReturnPressed: login() echoMode: TextInput.Password } Button { id: submitB anchors{ right: passwordT.right topMargin: 5 top: passwordT.bottom } text: qsTr("Submit") onClicked: login() Keys.onReturnPressed: login() } function login() { var xhr = new XMLHttpRequest(); xhr.open("POST", "https://api.clan-war.net/api/v1/auth/login"); xhr.setRequestHeader("Content-Type", "application/json"); xhr.onreadystatechange = function() { if (xhr.readyState === XMLHttpRequest.DONE) { if (xhr.status === 200) { var token = xhr.responseText.trim(); // Trim to remove any leading/trailing whitespace loginSuccess(token); } else { console.log("Login failed: " + xhr.status); } } } var data = JSON.stringify({ email: nameT.text, password: passwordT.text }); xhr.send(data); } Button { id: loginScreenB anchors { bottom: parent.bottom left: parent.left } text: qsTr("Test") onClicked: { var component = Qt.createComponent("Test.qml") var window = component.createObject(root) window.show() } } }