Skip to content
This repository was archived by the owner on Oct 17, 2023. It is now read-only.

Commit 6015639

Browse files
committed
Split edit modal
1 parent dfc0f8e commit 6015639

File tree

1 file changed

+95
-0
lines changed

1 file changed

+95
-0
lines changed

fltb/src/components/editModal.vue

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
<script setup>
2+
import { NSpace, NButton, NAlert, NModal, NRadio, NRadioGroup, NForm, NFormItem, NInput, NInputNumber } from 'naive-ui';
3+
import { inject } from 'vue';
4+
5+
const { data, editModelData, showModal, errorMessage, modalMode } = inject("datas");
6+
7+
function handleValidateClick() {
8+
for (const [key, value] of Object.entries(editModelData.value)) {
9+
if (!value && key != "key" && key != "id") {
10+
errorMessage.value = `Please fill the ${key}`;
11+
return false;
12+
}
13+
}
14+
return true;
15+
}
16+
17+
function submitCallback() {
18+
if (!handleValidateClick()) {
19+
return;
20+
}
21+
if (modalMode.value == "edit") {
22+
data.value[editModelData.value.key] = { ...editModelData.value };
23+
fetch(`https://dummyjson.com/users/${editModelData.value.id}`, {
24+
method: 'PUT',
25+
headers: { 'Content-Type': 'application/json' },
26+
body: JSON.stringify(editModelData.value)
27+
})
28+
.then(res => res.json())
29+
.then(console.log)
30+
} else if (modalMode.value == "add") {
31+
editModelData.value.key = data.value.length;
32+
data.value.push({ ...editModelData.value });
33+
fetch('https://dummyjson.com/users/add', {
34+
method: 'POST',
35+
headers: { 'Content-Type': 'application/json' },
36+
body: JSON.stringify(editModelData.value)
37+
})
38+
.then(res => res.json())
39+
.then(console.log)
40+
}
41+
showModal.value = false;
42+
}
43+
44+
function cancelCallback() {
45+
showModal.value = false;
46+
}
47+
48+
</script>
49+
50+
<template>
51+
<n-modal v-model:show="showModal" preset="dialog" title="Edit">
52+
<n-form class="mt-3" ref="formRef" :model="editModelData" :rules="rules" label-placement="left" label-width="auto"
53+
require-mark-placement="right-hanging" size="medium">
54+
<n-alert v-if="errorMessage" title="Error" type="error" class="mt-3 mb-3">
55+
{{ errorMessage }}
56+
</n-alert>
57+
<n-form-item label="Username" path="inputValue">
58+
<n-input v-model:value="editModelData.username" placeholder="usern@me" :required="true" />
59+
</n-form-item>
60+
<n-form-item label="Password" path="inputValue">
61+
<n-input v-model:value="editModelData.password" placeholder="p@ssord" :required="true" />
62+
</n-form-item>
63+
<n-form-item label="Email" path="inputValue">
64+
<n-input v-model:value="editModelData.email" placeholder="em@il" :required="true" />
65+
</n-form-item>
66+
<n-form-item label="First Name" path="inputValue">
67+
<n-input v-model:value="editModelData.firstName" placeholder="first n@me" :required="true" />
68+
</n-form-item>
69+
<n-form-item label="Last Name" path="inputValue">
70+
<n-input v-model:value="editModelData.lastName" placeholder="last n@ame" :required="true" />
71+
</n-form-item>
72+
<n-form-item label="Age" path="inputValue">
73+
<n-input-number v-model:value="editModelData.age" :required="true" />
74+
</n-form-item>
75+
<n-form-item label="Gender" path="radioGroupValue">
76+
<n-radio-group v-model:value="editModelData.gender">
77+
<n-radio value="male">Male</n-radio>
78+
<n-radio value="female">Female</n-radio>
79+
</n-radio-group>
80+
</n-form-item>
81+
<n-form-item label="Height" path="inputValue">
82+
<n-input-number v-model:value="editModelData.height" :required="true" />
83+
</n-form-item>
84+
<n-form-item label="Weight" path="inputValue">
85+
<n-input-number v-model:value="editModelData.weight" :required="true" />
86+
</n-form-item>
87+
</n-form>
88+
<template #action>
89+
<n-space>
90+
<n-button @click="cancelCallback">Cancel</n-button>
91+
<n-button type="primary" @click="submitCallback">Submit</n-button>
92+
</n-space>
93+
</template>
94+
</n-modal>
95+
</template>

0 commit comments

Comments
 (0)