항해99할때 견본 프로젝트로 있던 중국어 사전 앱을 보고 시도해 본 프로젝트이다.
리덕스 모듈에 있는 dictionary.js에 초기 상태값으로 설정해 놓은 부분만 표출된다.
// 날리고 다시 시작해 볼 것
import { firestore } from "../../firebase";
const LOAD = "dictionary/LOAD";
const CREATE = "dictionary/CREATE";
const DELETE = "dictionary/DELETE";
const UPDATE = "dictionary/UPDATE";
const initailState = {
list: [
{
id: "0",
dict: "サンプル",
furigana: "さんぷる",
dictKo: "견본(샘플)",
example: "サンプルです。",
exampleKo: "견본입니다.",
},
],
};
const dictionary_db = firestore.collection("dictionary");
export const loadDictionary = (dictionary) => {
return {
type: LOAD,
dictionary,
};
};
export const createDictionary = (dictionary) => {
return {
type: CREATE,
dictionary,
};
};
export const deleteDictionary = (id) => {
return {
type: DELETE,
id,
};
};
export const updateDictionary = (id) => {
return {
type: UPDATE,
id,
};
};
export const loadDictionaryFB = () => {
return function (dispatch) {
dictionary_db.get().then((docs) => {
let dictionary_data = [];
docs.forEach((doc) => {
if (doc.exists) {
dictionary_data = [...dictionary_data, { id: doc.id, ...doc.data() }];
}
});
dispatch(loadDictionary(dictionary_data));
});
};
};
export const createDictionaryFB = (dictionary) => {
return function (dispatch) {
let dictionary_data = dictionary;
dictionary_db
.add(dictionary_data)
.then((docRef) => {
dictionary_data = { ...dictionary_data, id: docRef.id };
// dispatch(createDictionary(dictionary_data));
})
.catch((err) => {
alert("create err");
});
};
};
export const deleteBucketFB = (id) => {
return function (dispatch) {
dictionary_db
.doc(id)
.delete()
.then((res) => {
dispatch(deleteDictionary(id));
});
};
};
export const updateBucketFB = (id, dictionary) => {
return function (dispatch) {
dictionary_db.doc(id).update(dictionary);
};
};
const reducer = (state = initailState, action) => {
switch (action.type) {
case LOAD: {
if (action.dictionary.length > 0) {
return { list: action.dictionary };
}
return state;
}
case CREATE: {
const new_list = [...state.list, action.dictionary];
return { list: new_list };
}
case DELETE: {
const new_list = state.list.filter(({ id }) => {
return id !== action.id;
});
return {
list: new_list,
};
}
case UPDATE: {
// const dictionary_list = state.list.map((props,idx) => {
// if (idx === action.id) {
// return
// }
// })
return console.log("update실행!");
}
default:
return state;
}
};
export default reducer;
해당 initial.js 파일.
파이어베이스 데이터와 연결해 CRUD 기능을 구현하고자 했지만 이 부분을 제대로 실행하지 못했다.
차후에는 파이어베이스가 아닌 Node.JS 기반으로 이 부분을 다시 구현해 보면 어떨까?
'기록 > 프로젝트' 카테고리의 다른 글
Campermoa 프로젝트 추가기능 구현(이미지 업로드) (0) | 2022.08.30 |
---|---|
Campermoa 프로젝트 일기(5-完) (0) | 2022.08.19 |
Campermoa 프로젝트 일기(4) (0) | 2022.08.18 |
Campermoa 프로젝트 일기(3) (0) | 2022.08.17 |
Campermoa 프로젝트 일기(2) (0) | 2022.08.16 |