-
Notifications
You must be signed in to change notification settings - Fork 4
Custom Alert ๊ตฌํ
API ์์ฒญ ํ ๊ฒฐ๊ณผ์ ๋ํ ํ์ธ, ์ฌ์ฉ์์ UX์ ๋์์ ์ฃผ๋ ์๋ฆผ ์ฐฝ์ ๊ตฌํํ๊ธฐ ์ํด ๊ณตํต ์ปดํฌ๋ํธ๋ก Alert ์ปดํฌ๋ํธ๋ฅผ ๊ตฌํํ์ต๋๋ค. ๋ธ๋ผ์ฐ์ ์์ ์ ๊ณตํ๋ alert ๊ธฐ๋ฅ์ ํด๋ฆญ์ ํด์ผ ์ฌ๋ผ์ง๋ ๋ถํธํจ, ์๋น์ค UI์ ๋ง์ง ์๋๋ค๋ ํ๋จ์ ํ๋ฉด ์ค์ ํ๋จ์ ์์ฑ๋์๋ค๊ฐ 3์ด ๋ค์ ์๋์ผ๋ก ์ฌ๋ผ์ง๋ Custom Alert์ ๊ตฌํํ์ต๋๋ค.
vuetify์ v-alert
๋ฅผ ํ์ฉํ์ฌ ์คํ์ผ๋ง์ ์งํํ์ต๋๋ค.
type
, color
, text
์ ๊ฐ์ props๋ก ์ปค์คํ
ํ alert๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. type
์ ์๋์ ๊ฐ์ด success, info, warning, error ์ ๋ค๊ฐ์ง ์์ฑ์ ๊ฐ์ง๋๋ค. vuetify theme์ ์ปค์คํฐ๋ง์ด์งํ์ฌ ๊ฐ type
์ color๋ฅผ ๋ฐ๊ฟ์ค ์ ์์ต๋๋ค.
์ค์ ๊ตฌํํ ํ ํ๋ฆฟ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. store์์ alert์ ๋ํ ์ํ๊ฐ์ ๊ฐ์ ธ์จ ๋ค ๊ด๋ จ๋ props์ ํ ๋นํด์ค๋๋ค.
<template>
<div class="alert">
<v-alert
v-if="alert.message"
:value="!!alert.message"
:type="alert.type"
:color="alert.type === 'success' ? 'whaleGreen' : null"
dismissible
@input="CLEAR_ALERT()"
>{{ alert.message }}</v-alert
>
</div>
</template>
๋ค์ํ ํ๋ฉด๊ณผ ์ด๋ฒคํธ์์ alert๋ฅผ ๊ฐ์ด ์ฌ์ฉํ๊ธฐ ์ํด store์์ alert์ ์ํ์ action์ ๊ด๋ฆฌํ๊ธฐ๋ก ํ์ต๋๋ค. state๋ก type๊ณผ message๋ฅผ ๊ฐ์ง alert๊ฐ์ฒด๋ฅผ ์ ์ธํ๊ณ , ๊ด๋ จ๋ action์ ์ง์ ํด์ฃผ์์ต๋๋ค.
import router from "@/router";
const state = {
alert: {
message: "",
type: "",
},
};
const mutations = {
SET_ERROR_ALERT(state, { data, status }) {
if (status === 401) {
state.alert = { message: "์ธ์
์ด ๋ง๋ฃ๋์์ต๋๋ค", type: "error" };
router.replace("/login").catch(() => {});
return;
} else {
state.alert = { message: data.message, type: "error" };
}
},
CLEAR_ALERT(state) {
state.alert = { message: "", type: "" };
},
SET_SUCCESS_ALERT(state, message) {
state.alert = { message, type: "success" };
},
};
export default {
state,
mutations,
};
๋ํ ์ปดํฌ๋ํธ๊ฐ ์ ๋ฐ์ดํธ๋๊ธฐ ์ด์ ์ธ beforeUpdate() ๋ผ์ดํ์ฌ์ดํด์์ 3์ด๋ค์ state๊ฐ์ ์ด๊ธฐํํด์ฃผ๋ ๋ก์ง์ ๊ตฌํํ์ต๋๋ค.
beforeUpdate() {
if (this.alert.message) {
setTimeout(() => this.CLEAR_ALERT(), 3000);
}
}
API ํธ์ถ์ ๋ค์๊ณผ ๊ฐ์ด ์ง์ ๋์ด์๋ mutation์ commit์ผ๋ก ํธ์ถํ๋ฉด ๊ฐ๋จํ๊ฒ alert์ฐฝ์ ๋์ธ ์ ์๋ ๊ตฌ์กฐ์ ๋๋ค.
async addComment({ commit, dispatch }, comment) {
try {
await commentAPI.createComment(comment);
await dispatch("fetchComments", comment.taskId);
commit("SET_SUCCESS_ALERT", "๋๊ธ์ด ์์ฑ๋์์ต๋๋ค.");
} catch (err) {
commit("SET_ERROR_ALERT", err.response);
}
},