Warning, /pim/vakzination/src/qml/VaccinationDetailsSheet.qml is written in an unsupported language. File is not indexed.
0001 /*
0002 SPDX-License-Identifier: GPL-2.0-or-later
0003 SPDX-FileCopyrightText: 2021 Nicolas Fella <nicolas.fella@gmx.de>
0004 */
0005
0006 import QtQuick 2.15
0007 import QtQuick.Controls 2.15 as QQC2
0008 import QtQuick.Layouts 1.2
0009 import org.kde.kirigami 2.15 as Kirigami
0010 import org.kde.khealthcertificate 1.0 as KHC
0011 import org.kde.i18n.localeData 1.0
0012
0013 ColumnLayout {
0014
0015 required property var certificate
0016
0017 function daysTo(d1, d2) {
0018 return (d2.getTime() - d1.getTime()) / (1000 * 60 * 60 * 24);
0019 }
0020
0021 Kirigami.FormLayout {
0022
0023 Kirigami.Separator {
0024 Kirigami.FormData.isSection: true
0025 Kirigami.FormData.label: i18n("Person")
0026 }
0027
0028 QQC2.Label {
0029 text: certificate.name
0030 Kirigami.FormData.label: i18n("Name:")
0031 }
0032 QQC2.Label {
0033 text: certificate.dateOfBirth.toLocaleDateString(Qt.locale(), Locale.ShortFormat)
0034 visible: !isNaN(certificate.dateOfBirth.getTime())
0035 Kirigami.FormData.label: i18n("Date of birth:")
0036 }
0037
0038 Kirigami.Separator {
0039 Kirigami.FormData.isSection: true
0040 Kirigami.FormData.label: i18n("Vaccination")
0041 }
0042
0043 QQC2.Label {
0044 readonly property int days: daysTo(certificate.date, new Date())
0045 text: {
0046 const formattedDate = certificate.date.toLocaleDateString(Qt.locale(), Locale.ShortFormat);
0047 if (days > 0) {
0048 return i18np("%2 (%1 day ago)", "%2 (%1 days ago)", days, formattedDate);
0049 }
0050 return formattedDate;
0051 }
0052 Kirigami.FormData.label: i18n("Date:")
0053 color: certificate.vaccinationState != KHC.VaccinationCertificate.VaccinationTooRecent ? Kirigami.Theme.positiveTextColor : Kirigami.Theme.neutralTextColor
0054 font.bold: true
0055 visible: !isNaN(certificate.date.getTime())
0056 }
0057 QQC2.Label {
0058 text: certificate.disease
0059 Kirigami.FormData.label: i18n("Disease:")
0060 visible: certificate.disease
0061 }
0062 QQC2.Label {
0063 text: certificate.vaccineType
0064 Kirigami.FormData.label: i18n("Type:")
0065 visible: certificate.vaccineType
0066 }
0067 QQC2.Label {
0068 text: certificate.vaccineUrl != "" ? '<a href="' + certificate.vaccineUrl + '">' + certificate.vaccine + '</a>' : certificate.vaccine
0069 Kirigami.FormData.label: i18n("Vaccine:")
0070 onLinkActivated: Qt.openUrlExternally(link)
0071 visible: text !== ""
0072 }
0073 QQC2.Label {
0074 text: certificate.manufacturer
0075 Kirigami.FormData.label: i18n("Manufacturer:")
0076 visible: text !== ""
0077 }
0078 QQC2.Label {
0079 text: certificate.totalDoses > 0 ? i18n("%1/%2", certificate.dose, certificate.totalDoses) : certificate.dose
0080 Kirigami.FormData.label: i18n("Dose:")
0081 color: certificate.dose < certificate.totalDoses ? Kirigami.Theme.neutralTextColor : Kirigami.Theme.positiveTextColor
0082 font.bold: true
0083 visible: certificate.dose > 0
0084 }
0085 QQC2.Label {
0086 text: i18nc("%1 a flag emoji, %2 is a country name", "%1 %2", Country.fromAlpha2(certificate.country).emojiFlag, Country.fromAlpha2(certificate.country).name)
0087 Kirigami.FormData.label: i18n("Country:")
0088 visible: certificate.country
0089 }
0090
0091 Kirigami.Separator {
0092 Kirigami.FormData.isSection: true
0093 Kirigami.FormData.label: i18n("Certificate")
0094 }
0095
0096 QQC2.Label {
0097 text: certificate.certificateIssuer
0098 Kirigami.FormData.label: i18n("Issuer:")
0099 visible: text !== ""
0100 }
0101 QQC2.Label {
0102 text: certificate.certificateId
0103 Kirigami.FormData.label: i18n("Identifier:")
0104 wrapMode: Text.Wrap
0105 visible: certificate.certificateId
0106 }
0107 QQC2.Label {
0108 text: certificate.certificateIssueDate.toLocaleString(Qt.locale(), Locale.ShortFormat)
0109 Kirigami.FormData.label: i18n("Issued:")
0110 visible: !isNaN(certificate.certificateIssueDate.getTime())
0111 }
0112 QQC2.Label {
0113 text: certificate.certificateExpiryDate.toLocaleString(Qt.locale(), Locale.ShortFormat)
0114 Kirigami.FormData.label: i18n("Expires:")
0115 visible: !isNaN(certificate.certificateExpiryDate.getTime())
0116 color: certificate.certificateExpiryDate.getTime() < Date.now() ? Kirigami.Theme.negativeTextColor : Kirigami.Theme.textColor
0117 }
0118 Kirigami.Icon {
0119 source: {
0120 switch(certificate.signatureState) {
0121 case KHC.HealthCertificate.ValidSignature: return "dialog-ok";
0122 case KHC.HealthCertificate.UnknownSignature: return "question";
0123 case KHC.HealthCertificate.InvalidSignature:
0124 default:
0125 return "dialog-error-symbolic";
0126 }
0127 }
0128 height: Kirigami.Units.gridUnit
0129 Kirigami.FormData.label: i18n("Signature:")
0130 color: {
0131 switch(certificate.signatureState) {
0132 case KHC.HealthCertificate.ValidSignature: return Kirigami.Theme.positiveTextColor;
0133 case KHC.HealthCertificate.UnknownSignature: return Kirigami.Theme.neutralTextColor;
0134 case KHC.HealthCertificate.InvalidSignature:
0135 default:
0136 return Kirigami.Theme.negativeTextColor;
0137 }
0138 }
0139 visible: certificate.signatureState != KHC.HealthCertificate.UncheckedSignature
0140 }
0141 }
0142 }
0143