status-desktop/ui/imports/shared/panels/ConnectionWarnings.qml

75 lines
2.3 KiB
QML

import QtQuick 2.14
import StatusQ.Core 0.1
import StatusQ.Controls 0.1
import utils 1.0
import shared.stores 1.0
Loader {
id: root
active: false
property NetworkConnectionStore networkConnectionStore
readonly property string jointChainIdString: networkConnectionStore.getChainIdsJointString(chainIdsDown)
property string websiteDown
property int connectionState: -1
property var chainIdsDown: []
property bool completelyDown: false
property double lastCheckedAtUnix: -1
property string lastCheckedAt
property bool withCache: false
property string tooltipMessage
property string toastText
function updateBanner() {
root.active = true
if (connectionState === Constants.ConnectionStatus.Failure)
item.show()
else
item.showFor(3000)
}
sourceComponent: ModuleWarning {
QtObject {
id: d
readonly property bool isOnline: networkConnectionStore.isOnline
onIsOnlineChanged: if(!isOnline) hide()
}
onHideFinished: root.active = false
text: root.toastText
type: connectionState === Constants.ConnectionStatus.Success ? ModuleWarning.Success : ModuleWarning.Danger
buttonText: connectionState === Constants.ConnectionStatus.Failure ? qsTr("Retry now") : ""
onClicked: networkConnectionStore.retryConnection(websiteDown)
onCloseClicked: hide()
onLinkActivated: {
toolTip.show(root.tooltipMessage, 3000)
}
StatusToolTip {
id: toolTip
orientation: StatusToolTip.Orientation.Bottom
maxWidth: 300
}
}
Connections {
target: networkConnectionStore.networkConnectionModuleInst
function onNetworkConnectionStatusUpdate(website: string, completelyDown: bool, connectionState: int, chainIds: string, lastCheckedAtUnix: double) {
if (website === websiteDown) {
root.connectionState = connectionState
root.chainIdsDown = chainIds.split(";")
root.completelyDown = completelyDown
root.lastCheckedAtUnix = lastCheckedAtUnix
root.lastCheckedAt = LocaleUtils.formatDateTime(new Date(lastCheckedAtUnix*1000))
root.updateBanner()
}
}
}
}