From b737637a21669c95c401bd7cda5e7789eb50ea10 Mon Sep 17 00:00:00 2001 From: Ryan Wang Date: Fri, 22 Jul 2022 21:37:27 +0800 Subject: [PATCH] refactor: UserEditingModal component Signed-off-by: Ryan Wang --- .../users/components/UserEditingModal.vue | 59 ++++++++++--------- 1 file changed, 32 insertions(+), 27 deletions(-) diff --git a/src/modules/system/users/components/UserEditingModal.vue b/src/modules/system/users/components/UserEditingModal.vue index b6eef43cd..76bc1507a 100644 --- a/src/modules/system/users/components/UserEditingModal.vue +++ b/src/modules/system/users/components/UserEditingModal.vue @@ -15,6 +15,7 @@ import { v4 as uuid } from "uuid"; import { roleLabels } from "@/constants/labels"; import { rbacAnnotations } from "@/constants/annotations"; import YAML from "yaml"; +import cloneDeep from "lodash.clonedeep"; const props = defineProps({ visible: { @@ -29,15 +30,14 @@ const props = defineProps({ const emit = defineEmits(["update:visible", "close"]); -interface EditingFormState { +interface FormState { user: User; saving: boolean; rawMode: boolean; raw: string; } -const roles = ref([]); -const editingFormState = ref({ +const initialFormState: FormState = { user: { spec: { displayName: "", @@ -58,11 +58,14 @@ const editingFormState = ref({ saving: false, rawMode: false, raw: "", -}); +}; + +const roles = ref([]); +const formState = ref(cloneDeep(initialFormState)); const selectedRole = ref(""); const isUpdateMode = computed(() => { - return !!editingFormState.value.user.metadata.creationTimestamp; + return !!formState.value.user.metadata.creationTimestamp; }); const creationModalTitle = computed(() => { @@ -70,7 +73,7 @@ const creationModalTitle = computed(() => { }); const modalWidth = computed(() => { - return editingFormState.value.rawMode ? 800 : 700; + return formState.value.rawMode ? 800 : 700; }); const basicRoles = computed(() => { @@ -81,8 +84,10 @@ const basicRoles = computed(() => { watch(props, (newVal) => { if (newVal.visible && props.user) { - editingFormState.value.user = props.user; + formState.value.user = cloneDeep(props.user); + return; } + formState.value = cloneDeep(initialFormState); }); const handleFetchRoles = async () => { @@ -103,18 +108,18 @@ const handleVisibleChange = (visible: boolean) => { const handleCreateUser = async () => { try { - editingFormState.value.saving = true; + formState.value.saving = true; let user: User; if (isUpdateMode.value) { const response = await apiClient.extension.user.updatev1alpha1User( - editingFormState.value.user.metadata.name, - editingFormState.value.user + formState.value.user.metadata.name, + formState.value.user ); user = response.data; } else { const response = await apiClient.extension.user.createv1alpha1User( - editingFormState.value.user + formState.value.user ); user = response.data; } @@ -130,17 +135,17 @@ const handleCreateUser = async () => { } catch (e) { console.error(e); } finally { - editingFormState.value.saving = false; + formState.value.saving = false; } }; const handleRawModeChange = () => { - editingFormState.value.rawMode = !editingFormState.value.rawMode; + formState.value.rawMode = !formState.value.rawMode; - if (editingFormState.value.rawMode) { - editingFormState.value.raw = YAML.stringify(editingFormState.value.user); + if (formState.value.rawMode) { + formState.value.raw = YAML.stringify(formState.value.user); } else { - editingFormState.value.user = YAML.parse(editingFormState.value.raw); + formState.value.user = YAML.parse(formState.value.raw); } }; onMounted(handleFetchRoles); @@ -154,35 +159,35 @@ onMounted(handleFetchRoles); > -
+
@@ -220,7 +225,7 @@ onMounted(handleFetchRoles);