From 7d0f33f31d52e939aab48b8ea133162c4e6daed2 Mon Sep 17 00:00:00 2001 From: Andy Lee Date: Tue, 21 Apr 2026 17:55:30 +0800 Subject: [PATCH] feat: show generic error message for API response 40x error (#816) * feat: add generic error for API response 40X Signed-off-by: Andy Lee * refactor: fallback error msg Signed-off-by: Andy Lee * refactor: update error msg Signed-off-by: Andy Lee * refactor: based on comment Signed-off-by: Andy Lee --------- Signed-off-by: Andy Lee --- .../edit/harvesterhci.io.keypair.vue | 12 +++++++++-- .../VirtualMachineSSHKey.vue | 5 ++++- pkg/harvester/l10n/en-us.yaml | 1 + pkg/harvester/utils/error.js | 21 +++++++++++++++++++ 4 files changed, 36 insertions(+), 3 deletions(-) create mode 100644 pkg/harvester/utils/error.js diff --git a/pkg/harvester/edit/harvesterhci.io.keypair.vue b/pkg/harvester/edit/harvesterhci.io.keypair.vue index c55920db..ba29fb7d 100644 --- a/pkg/harvester/edit/harvesterhci.io.keypair.vue +++ b/pkg/harvester/edit/harvesterhci.io.keypair.vue @@ -8,6 +8,7 @@ import FileSelector, { createOnSelected } from '@shell/components/form/FileSelec import { randomStr } from '@shell/utils/string'; import CreateEditView from '@shell/mixins/create-edit-view'; +import { getLoginAwareErrors } from '../utils/error'; export default { name: 'HarvesterEditKeypair', @@ -63,6 +64,14 @@ export default { } }, + computed: { + normalizedErrors() { + const message = this.t('harvester.virtualMachine.genericLoginError'); + + return getLoginAwareErrors(this.errors, message); + } + }, + methods: { onKeySelected: createOnSelected('publicKey') }, }; @@ -72,10 +81,9 @@ export default { :done-route="doneRoute" :resource="value" :mode="mode" - :errors="errors" + :errors="normalizedErrors" :apply-hooks="applyHooks" @finish="save" - @error="e=>errors=e" >
AUTH_ERROR_CODES.includes(e?._status || e?.response?.status))) { + return [generic]; + } + + const msgs = errors + .map((e) => (typeof e === 'string' ? e : (e?.message || e?._statusText || ''))) + .filter(Boolean); + + return msgs.length ? msgs : [generic]; +}