From 060c1b463f7943f194a17f5f358e0d496b211239 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E9=AD=94=E6=85=95=E8=96=87?= Date: Sat, 25 May 2024 16:12:00 +0800 Subject: [PATCH] Owner References MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. add len params to custom copyTileValue. 2. add modal window to show ownerReferences detail. 3. add ownerReferences info to metadata section of detail page. Signed-off-by: 疯魔慕薇 --- lib/generated/intl/messages_en.dart | 6 ++ lib/generated/intl/messages_zh_CN.dart | 5 ++ lib/generated/l10n.dart | 50 ++++++++++++++++ lib/l10n/intl_en.arb | 12 +++- lib/l10n/intl_zh_CN.arb | 12 +++- lib/pages/k8s_detail/details_page.dart | 81 ++++++++++++++++++++++++++ lib/widgets/tiles.dart | 5 +- lib/widgets/widgets.dart | 6 +- 8 files changed, 170 insertions(+), 7 deletions(-) diff --git a/lib/generated/intl/messages_en.dart b/lib/generated/intl/messages_en.dart index 08b7172..56f0aea 100644 --- a/lib/generated/intl/messages_en.dart +++ b/lib/generated/intl/messages_en.dart @@ -128,6 +128,7 @@ class MessageLookup extends MessageLookupByLibrary { "age": MessageLookupByLibrary.simpleMessage("Age"), "all": MessageLookupByLibrary.simpleMessage("All"), "annotations": MessageLookupByLibrary.simpleMessage("Annotations"), + "apiVersion": MessageLookupByLibrary.simpleMessage("apiVersion"), "api_request_duration": m0, "api_timeout": MessageLookupByLibrary.simpleMessage("API Timeout"), "appName": MessageLookupByLibrary.simpleMessage("k8z"), @@ -136,6 +137,8 @@ class MessageLookup extends MessageLookupByLibrary { "apply": MessageLookupByLibrary.simpleMessage("Apply"), "args": MessageLookupByLibrary.simpleMessage("Arguments"), "arsure": MessageLookupByLibrary.simpleMessage("are your sure?"), + "blockOwnerDeletion": + MessageLookupByLibrary.simpleMessage("blockOwnerDeletion"), "cancel": MessageLookupByLibrary.simpleMessage("Cancel"), "clusters": MessageLookupByLibrary.simpleMessage("Clusters"), "command": MessageLookupByLibrary.simpleMessage("Command"), @@ -146,6 +149,7 @@ class MessageLookup extends MessageLookupByLibrary { "container_id": MessageLookupByLibrary.simpleMessage("Container ID"), "container_runtime": m2, "containers": MessageLookupByLibrary.simpleMessage("Containers"), + "controller": MessageLookupByLibrary.simpleMessage("controller"), "cpu": MessageLookupByLibrary.simpleMessage("CPU"), "crds": MessageLookupByLibrary.simpleMessage("CustomResourceDefinition"), @@ -215,6 +219,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Init Containers"), "internel_ip": m13, "items_number": m14, + "kind": MessageLookupByLibrary.simpleMessage("kind"), "labels": MessageLookupByLibrary.simpleMessage("Labels"), "last_warning_events": m15, "livenessProbe": MessageLookupByLibrary.simpleMessage("Liveness Probe"), @@ -245,6 +250,7 @@ class MessageLookup extends MessageLookupByLibrary { "A node may be a virtual or physical machine."), "ok": MessageLookupByLibrary.simpleMessage("ok"), "overview": MessageLookupByLibrary.simpleMessage("Overview"), + "owner": MessageLookupByLibrary.simpleMessage("Owner"), "pod_text": m23, "pods": MessageLookupByLibrary.simpleMessage("Pods"), "ports": MessageLookupByLibrary.simpleMessage("Ports"), diff --git a/lib/generated/intl/messages_zh_CN.dart b/lib/generated/intl/messages_zh_CN.dart index 81bfab1..cd485f7 100644 --- a/lib/generated/intl/messages_zh_CN.dart +++ b/lib/generated/intl/messages_zh_CN.dart @@ -127,6 +127,7 @@ class MessageLookup extends MessageLookupByLibrary { "age": MessageLookupByLibrary.simpleMessage("年龄"), "all": MessageLookupByLibrary.simpleMessage("全部"), "annotations": MessageLookupByLibrary.simpleMessage("注解"), + "apiVersion": MessageLookupByLibrary.simpleMessage("API版本"), "api_request_duration": m0, "api_timeout": MessageLookupByLibrary.simpleMessage("API 超时"), "appName": MessageLookupByLibrary.simpleMessage("k8z"), @@ -135,6 +136,7 @@ class MessageLookup extends MessageLookupByLibrary { "apply": MessageLookupByLibrary.simpleMessage("应用"), "args": MessageLookupByLibrary.simpleMessage("参数"), "arsure": MessageLookupByLibrary.simpleMessage("你确认吗?"), + "blockOwnerDeletion": MessageLookupByLibrary.simpleMessage("阻塞属主删除"), "cancel": MessageLookupByLibrary.simpleMessage("取消"), "clusters": MessageLookupByLibrary.simpleMessage("集群"), "command": MessageLookupByLibrary.simpleMessage("命令"), @@ -145,6 +147,7 @@ class MessageLookup extends MessageLookupByLibrary { "container_id": MessageLookupByLibrary.simpleMessage("容器 ID"), "container_runtime": m2, "containers": MessageLookupByLibrary.simpleMessage("容器"), + "controller": MessageLookupByLibrary.simpleMessage("控制器"), "cpu": MessageLookupByLibrary.simpleMessage("CPU"), "crds": MessageLookupByLibrary.simpleMessage("自定资源定义"), "crds_text": m3, @@ -204,6 +207,7 @@ class MessageLookup extends MessageLookupByLibrary { "initContainers": MessageLookupByLibrary.simpleMessage("初始容器"), "internel_ip": m13, "items_number": m14, + "kind": MessageLookupByLibrary.simpleMessage("种类"), "labels": MessageLookupByLibrary.simpleMessage("标签"), "last_warning_events": m15, "livenessProbe": MessageLookupByLibrary.simpleMessage("存活探针"), @@ -231,6 +235,7 @@ class MessageLookup extends MessageLookupByLibrary { "nodes_desc": MessageLookupByLibrary.simpleMessage("节点可以是虚拟机或物理机。"), "ok": MessageLookupByLibrary.simpleMessage("好的"), "overview": MessageLookupByLibrary.simpleMessage("概览"), + "owner": MessageLookupByLibrary.simpleMessage("属主"), "pod_text": m23, "pods": MessageLookupByLibrary.simpleMessage("Pods"), "ports": MessageLookupByLibrary.simpleMessage("端口"), diff --git a/lib/generated/l10n.dart b/lib/generated/l10n.dart index 0a96237..d31b59f 100644 --- a/lib/generated/l10n.dart +++ b/lib/generated/l10n.dart @@ -1798,6 +1798,56 @@ class S { args: [name, ns, current, ready, available], ); } + + /// `Owner` + String get owner { + return Intl.message( + 'Owner', + name: 'owner', + desc: '', + args: [], + ); + } + + /// `apiVersion` + String get apiVersion { + return Intl.message( + 'apiVersion', + name: 'apiVersion', + desc: '', + args: [], + ); + } + + /// `blockOwnerDeletion` + String get blockOwnerDeletion { + return Intl.message( + 'blockOwnerDeletion', + name: 'blockOwnerDeletion', + desc: '', + args: [], + ); + } + + /// `controller` + String get controller { + return Intl.message( + 'controller', + name: 'controller', + desc: '', + args: [], + ); + } + + /// `kind` + String get kind { + return Intl.message( + 'kind', + name: 'kind', + desc: '', + args: [], + ); + } } class AppLocalizationDelegate extends LocalizationsDelegate { diff --git a/lib/l10n/intl_en.arb b/lib/l10n/intl_en.arb index aacda11..1015717 100644 --- a/lib/l10n/intl_en.arb +++ b/lib/l10n/intl_en.arb @@ -597,5 +597,15 @@ "ready": {}, "available": {} } - } + }, + "owner": "Owner", + "@owner": {}, + "apiVersion": "apiVersion", + "@apiVersion": {}, + "blockOwnerDeletion": "blockOwnerDeletion", + "@blockOwnerDeletion": {}, + "controller": "controller", + "@controller": {}, + "kind": "kind", + "@kind": {} } \ No newline at end of file diff --git a/lib/l10n/intl_zh_CN.arb b/lib/l10n/intl_zh_CN.arb index e3c4209..34d74ba 100644 --- a/lib/l10n/intl_zh_CN.arb +++ b/lib/l10n/intl_zh_CN.arb @@ -597,5 +597,15 @@ "ready": {}, "available": {} } - } + }, + "owner": "属主", + "@owner": {}, + "apiVersion": "API版本", + "@apiVersion": {}, + "blockOwnerDeletion": "阻塞属主删除", + "@blockOwnerDeletion": {}, + "controller": "控制器", + "@controller": {}, + "kind": "种类", + "@kind": {} } \ No newline at end of file diff --git a/lib/pages/k8s_detail/details_page.dart b/lib/pages/k8s_detail/details_page.dart index 8fd94bf..956fd3f 100644 --- a/lib/pages/k8s_detail/details_page.dart +++ b/lib/pages/k8s_detail/details_page.dart @@ -4,6 +4,7 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:k8zdev/common/const.dart'; import 'package:k8zdev/common/ops.dart'; +import 'package:k8zdev/common/styles.dart'; import 'package:k8zdev/dao/kube.dart'; import 'package:k8zdev/generated/l10n.dart'; import 'package:k8zdev/models/models.dart'; @@ -18,6 +19,7 @@ import 'package:k8zdev/widgets/detail_widgets/secret.dart'; import 'package:k8zdev/widgets/get_logstream.dart'; import 'package:k8zdev/widgets/get_terminal.dart'; import 'package:k8zdev/widgets/modal.dart'; +import 'package:k8zdev/widgets/tiles.dart'; import 'package:k8zdev/widgets/widgets.dart'; import 'package:kubeconfig/kubeconfig.dart'; import 'package:numberpicker/numberpicker.dart'; @@ -400,6 +402,8 @@ class _ResourceDetailsPageState extends State { }).toList(); annotations.sort((a, b) => a.length.compareTo(b.length)); + final ownerReferences = metadata.ownerReferences; + return SettingsSection( title: Text(lang.metadata), tiles: [ @@ -421,6 +425,83 @@ class _ResourceDetailsPageState extends State { leading: leadingText(lang.namespace, langCode), title: Text(metadata.namespace ?? ""), ), + if (ownerReferences.isNotEmpty) + SettingsTile.navigation( + title: Text( + "${ownerReferences.first.kind}/${ownerReferences.first.name}"), + leading: leadingText(lang.owner, langCode), + value: Text( + "${ownerReferences.length}", + style: tileValueStyle, + ), + onPressed: (context) { + List ownerSections = []; + ownerReferences.forEach((owner) { + List ownerTiles = []; + ownerTiles.add( + copyTileValue( + lang.apiVersion, + owner.apiVersion, + langCode, + enLen: 82.0, + ), + ); + ownerTiles.add( + copyTileValue( + lang.blockOwnerDeletion, + "${owner.blockOwnerDeletion}", + langCode, + zhLen: 52.0, + enLen: 82.0, + ), + ); + ownerTiles.add( + copyTileValue( + lang.controller, + "${owner.controller}", + langCode, + zhLen: 52.0, + enLen: 82.0, + ), + ); + ownerTiles.add( + copyTileValue( + lang.kind, + owner.kind, + langCode, + ), + ); + ownerTiles.add( + copyTileValue( + lang.name, + owner.name, + langCode, + ), + ); + ownerTiles.add( + copyTileValue( + lang.uid, + owner.uid, + langCode, + ), + ); + ownerSections.add( + SettingsSection( + margin: const EdgeInsetsDirectional.fromSTEB(16, 0, 16, 10), + title: Text(owner.name), + tiles: ownerTiles, + ), + ); + }); + showModal( + context, + SettingsList( + sections: ownerSections, + contentPadding: EdgeInsets.zero, + ), + ); + }, + ), if (metadata.generation != null) SettingsTile( leading: leadingText(lang.generation, langCode), diff --git a/lib/widgets/tiles.dart b/lib/widgets/tiles.dart index bf63076..97bc015 100644 --- a/lib/widgets/tiles.dart +++ b/lib/widgets/tiles.dart @@ -26,9 +26,10 @@ SettingsTile copyTile(String name, {String? value}) { ); } -SettingsTile copyTileValue(String name, String value, String langCode) { +SettingsTile copyTileValue(String name, String value, String langCode, + {zhLen, enLen}) { return SettingsTile( - leading: leadingText(name, langCode), + leading: leadingText(name, langCode, zhLen: zhLen, enLen: enLen), title: Text( value, style: tileValueStyle, diff --git a/lib/widgets/widgets.dart b/lib/widgets/widgets.dart index 2ba5fa4..0dac576 100644 --- a/lib/widgets/widgets.dart +++ b/lib/widgets/widgets.dart @@ -56,13 +56,13 @@ const smallProgressIndicator = SizedBox( child: CircularProgressIndicator(), ); -Widget leadingText(String label, String langCode) { +Widget leadingText(String label, String langCode, {zhLen, enLen}) { late double len; switch (langCode) { case "zh": - len = 32; + len = zhLen ?? 32.0; default: - len = 52; + len = enLen ?? 52.0; } return SizedBox( width: len,