diff --git a/app/(tabs)/inboxView.jsx b/app/(tabs)/inboxView.jsx
index 1877007..41dcadf 100644
--- a/app/(tabs)/inboxView.jsx
+++ b/app/(tabs)/inboxView.jsx
@@ -35,7 +35,7 @@ const InboxView = () => {
const renderCategoriesTodo = ({ item }) => {
return (
-
+
);
@@ -61,6 +61,7 @@ const InboxView = () => {
item.id}
/>
diff --git a/app/(tabs)/index.jsx b/app/(tabs)/index.jsx
index 5784ead..5fd1f90 100644
--- a/app/(tabs)/index.jsx
+++ b/app/(tabs)/index.jsx
@@ -43,7 +43,7 @@ const TodayView = () => {
const renderCategoriesTodo = ({ item }) => {
return (
-
+
);
diff --git a/components/InboxSubTodo.jsx b/components/InboxSubTodo.jsx
index a693fab..2a1033d 100644
--- a/components/InboxSubTodo.jsx
+++ b/components/InboxSubTodo.jsx
@@ -1,11 +1,10 @@
+import { TextInputContext } from '@/contexts/textInputContext';
import { useSubTodoUpdateMutation } from '@/hooks/api/useSubTodoMutations';
import { Icon, Input, ListItem } from '@ui-kitten/components';
-import { useContext, useState } from 'react';
+import React, { useContext, useState } from 'react';
import { Text, TouchableOpacity } from 'react-native';
import { useTheme } from 'react-native-elements';
import TodoModal from './TodoModal';
-import React from 'react';
-import { TextInputContext } from '@/contexts/textInputContext';
const InboxSubTodo = ({ item }) => {
const [isEditing, setIsEditing] = useState(false);
@@ -13,11 +12,11 @@ const InboxSubTodo = ({ item }) => {
const theme = useTheme();
const [modalVisible, setModalVisible] = useState(false);
const { mutate: updateInboxSubTodo } = useSubTodoUpdateMutation();
- const { setTextInputOpen } = useContext(TextInputContext);
+ const { setInboxTextInputOpen } = useContext(TextInputContext);
const handleEdit = () => {
setIsEditing(true);
- setTextInputOpen(false);
+ setInboxTextInputOpen(false);
setModalVisible(false);
};
@@ -66,7 +65,7 @@ const InboxSubTodo = ({ item }) => {
onSubmitEditing={() => {
handleInboxSubTodoUpdate();
setIsEditing(false);
- setTextInputOpen(true);
+ setInboxTextInputOpen(true);
}}
autoFocus={true}
/>
diff --git a/components/InboxTodo.jsx b/components/InboxTodo.jsx
deleted file mode 100644
index 69ef327..0000000
--- a/components/InboxTodo.jsx
+++ /dev/null
@@ -1,173 +0,0 @@
-import { LoginContext } from '@/contexts/LoginContext';
-import { TextInputContext } from '@/contexts/textInputContext';
-import { useSubTodoAddMutation } from '@/hooks/api/useSubTodoMutations';
-import { useTodoUpdateMutation } from '@/hooks/api/useTodoMutations';
-import '@/locales/index';
-import {
- handleLogEvent,
- INBOXTODO_LIST_CLICK_EVENT,
- INBOXTODO_MEATBALLMENU_CLICK_EVENT,
-} from '@/utils/logEvent';
-import { Icon, Input, List, ListItem, useTheme } from '@ui-kitten/components';
-import React, { useContext, useState } from 'react';
-import { useTranslation } from 'react-i18next';
-import { Pressable, StyleSheet, Text, TouchableOpacity } from 'react-native';
-import InboxSubTodo from './InboxSubTodo';
-import TodoModal from './TodoModal';
-
-// eslint-disable-next-line @typescript-eslint/no-unused-vars
-const InboxTodo = ({ item, drag, isActive }) => {
- const theme = useTheme();
- const [content, setContent] = useState(item.content);
- const [isEditing, setIsEditing] = useState(false);
- const [subTodoInput, setSubTodoInput] = useState('');
- const [modalVisible, setModalVisible] = useState(false);
- const [subTodoInputActivated, setSubTodoInputActivated] = useState(false);
- const { mutate: updateInboxTodo } = useTodoUpdateMutation();
- const { mutate: addInboxSubTodo } = useSubTodoAddMutation();
- const { userId } = useContext(LoginContext);
- const { t } = useTranslation();
- const { setTextInputOpen } = useContext(TextInputContext);
-
- const handleEdit = () => {
- setIsEditing(true);
- setTextInputOpen(false);
- setModalVisible(false);
- };
-
- const handleTodoUpdate = () => {
- const updatedData = {
- todoId: item.id,
- content: content,
- };
- updateInboxTodo(updatedData);
- };
-
- const handleSubtodoSubmit = () => {
- if (subTodoInput !== '') {
- const subTodoData = [
- {
- todoId: item.id,
- content: subTodoInput,
- },
- ];
- addInboxSubTodo({ todoData: subTodoData });
- setSubTodoInput('');
- setSubTodoInputActivated(false);
- }
- };
-
- const handleSubTodoCreate = () => {
- setModalVisible(false);
- setSubTodoInputActivated(true);
- };
-
- const renderSubTodo = ({ item: subTodoItem, index }) => {
- return ;
- };
-
- const outlineIcon = props => {
- return (
- setModalVisible(true)}>
-
-
- );
- };
-
- const settingIcon = props => {
- return (
- {
- handleLogEvent(INBOXTODO_MEATBALLMENU_CLICK_EVENT, {
- time: new Date().toISOString(),
- userId: userId,
- todoId: item.id,
- });
- setModalVisible(true);
- }}
- >
-
-
- );
- };
-
- return (
- <>
- setContent(value)}
- onSubmitEditing={() => {
- handleTodoUpdate();
- setIsEditing(false);
- setTextInputOpen(true);
- }}
- autoFocus={true}
- />
- ) : (
- {item.content}
- )
- }
- key={item.id}
- accessoryLeft={props => outlineIcon(props)}
- accessoryRight={props => settingIcon(props)}
- onPress={() => {
- handleLogEvent(INBOXTODO_LIST_CLICK_EVENT, {
- time: new Date().toISOString(),
- userId: userId,
- todoId: item.id,
- });
- setModalVisible(true);
- }}
- onLongPress={drag}
- />
- {
- setSubTodoInput(nextInput);
- }}
- autoFocus={true}
- onSubmitEditing={handleSubtodoSubmit}
- />
- ) : null
- }
- />
-
- >
- );
-};
-
-const styles = StyleSheet.create({
- input: {
- paddingLeft: 40,
- },
-});
-
-export default InboxTodo;
diff --git a/components/InboxTodos.jsx b/components/InboxTodos.jsx
deleted file mode 100644
index 8be87cf..0000000
--- a/components/InboxTodos.jsx
+++ /dev/null
@@ -1,115 +0,0 @@
-import { CategoryContext } from '@/contexts/CategoryContext';
-import { LoginContext } from '@/contexts/LoginContext';
-import useTodoStore from '@/contexts/TodoStore';
-import useInboxTodoQuery from '@/hooks/api/useInboxTodoQuery';
-import { useTodoAddMutation } from '@/hooks/api/useTodoMutations';
-import '@/locales/index';
-import {
- DEFAULT_SCROLL_EVENT_THROTTLE,
- handleScroll,
-} from '@/utils/handleScroll';
-import { INBOXVIEW_SCROLL_EVENT } from '@/utils/logEvent';
-import { Input } from '@ui-kitten/components';
-import { LexoRank } from 'lexorank';
-import { useContext, useEffect, useState } from 'react';
-import { useTranslation } from 'react-i18next';
-import { StyleSheet, Text } from 'react-native';
-import DraggableFlatList, {
- ScaleDecorator,
-} from 'react-native-draggable-flatlist';
-import { GestureHandlerRootView } from 'react-native-gesture-handler';
-import InboxTodo from './InboxTodo';
-
-const InboxTodos = () => {
- const [input, setInput] = useState('');
- const { userId } = useContext(LoginContext);
- const { selectedCategory } = useContext(CategoryContext);
- const {
- isLoading,
- error,
- data: inboxTodoData,
- isSuccess: isInboxTodoQuerySuccess,
- } = useInboxTodoQuery(userId);
- const setInboxTodos = useTodoStore(state => state.setInboxTodos);
- const inboxCurrentTodos = useTodoStore(state => state.inboxCurrentTodos);
- const setInboxCurrentTodos = useTodoStore(
- state => state.setInboxCurrentTodos,
- );
- const { mutate: addInboxTodo } = useTodoAddMutation();
- const { mutate: updateTodo } = useTodoAddMutation();
- const { t } = useTranslation();
- const renderTodo = ({ item, drag, isActive }) => {
- return (
-
-
-
- );
- };
-
- const handleDragEnd = async ({ data }) => {
- const updatedData = data.map(item => {
- return {
- todoId: item.id,
- order: LexoRank.parse(item.order).toString(),
- };
- });
- updateTodo(updatedData);
- };
- //TODO: order 순서 생각해보니까 이제 서버에서 하잖아? 일단 전체 투두에서 계속 마지막으로 붙이는 식으로 구현
- const handleSubmit = async () => {
- const newTodoData = {
- content: input,
- categoryId: selectedCategory,
- };
-
- addInboxTodo({ todoData: newTodoData });
- setInput('');
- };
-
- useEffect(() => {
- if (isInboxTodoQuerySuccess) {
- setInboxTodos(inboxTodoData);
- let filteredTodos = inboxTodoData.filter(
- todo => todo.categoryId === selectedCategory,
- );
- setInboxCurrentTodos(filteredTodos);
- }
- // eslint-disable-next-line react-hooks/exhaustive-deps
- }, [isInboxTodoQuerySuccess, inboxTodoData, selectedCategory]);
-
- if (isLoading) return Loading...;
- if (error) return Error: {error.message};
-
- return (
-
- item.id.toString()}
- onScroll={() => handleScroll(INBOXVIEW_SCROLL_EVENT, userId)}
- scrollEventThrottle={DEFAULT_SCROLL_EVENT_THROTTLE}
- />
- {
- setInput(nextInput);
- }}
- autoFocus={false}
- onSubmitEditing={handleSubmit}
- />
-
- );
-};
-
-const styles = StyleSheet.create({
- container: {
- flex: 1,
- justifyContent: 'space-between',
- backgroundColor: 'white',
- },
-});
-
-export default InboxTodos;
diff --git a/components/categoryView/CategoryBottomSheet.tsx b/components/categoryView/CategoryBottomSheet.tsx
index f46512b..d51a00d 100644
--- a/components/categoryView/CategoryBottomSheet.tsx
+++ b/components/categoryView/CategoryBottomSheet.tsx
@@ -49,7 +49,7 @@ const CategoryBottomSheet = () => {
title: categoryName,
color: 1,
};
- addCategory({ addCategoryData });
+ addCategory(addCategoryData);
};
const handleEditCategory = () => {
diff --git a/components/categoryView/CategoryMainItem.jsx b/components/categoryView/CategoryMainItem.jsx
index ecdd8c4..e26fbba 100644
--- a/components/categoryView/CategoryMainItem.jsx
+++ b/components/categoryView/CategoryMainItem.jsx
@@ -3,15 +3,24 @@ import colors from '@/theme/theme.json';
import { Icon } from '@ui-kitten/components';
import { useContext } from 'react';
import { Pressable, StyleSheet, View } from 'react-native';
-import CategoryButton from './CategoryButton';
import { scale, verticalScale } from 'react-native-size-matters';
+import CategoryButton from './CategoryButton';
-const CategoryMainItem = ({ item }) => {
- const { setTextInputOpen, setActivatedCategoryId } =
- useContext(TextInputContext);
+const CategoryMainItem = ({ item, isToday = true }) => {
+ const {
+ setTodayTextInputOpen,
+ setTodayActivatedCategoryId,
+ setInboxTextInputOpen,
+ setInboxActivatedCategoryId,
+ } = useContext(TextInputContext);
const handlePress = () => {
- setTextInputOpen(true);
- setActivatedCategoryId(item.id);
+ if (isToday) {
+ setTodayTextInputOpen(true);
+ setTodayActivatedCategoryId(item.id);
+ } else {
+ setInboxTextInputOpen(true);
+ setInboxActivatedCategoryId(item.id);
+ }
};
return (
diff --git a/components/inboxView/inboxTodos/InboxTodos.tsx b/components/inboxView/inboxTodos/InboxTodos.tsx
index 86c543f..088076e 100644
--- a/components/inboxView/inboxTodos/InboxTodos.tsx
+++ b/components/inboxView/inboxTodos/InboxTodos.tsx
@@ -1,11 +1,7 @@
-import CalendarBottomSheetProvider from '@/contexts/CalendarBottomSheetProvider';
-import { CategoryContext } from '@/contexts/CategoryContext';
import { LoginContext } from '@/contexts/LoginContext';
import { TextInputContext } from '@/contexts/textInputContext';
-import {
- useTodoAddMutation,
- useTodoUpdateMutation,
-} from '@/hooks/api/useTodoMutations';
+import { useTodoUpdateMutation } from '@/hooks/api/useTodoMutations';
+import useCreateInboxTodo from '@/hooks/todo/useCreateInboxTodo';
import useFilteredInboxTodos from '@/hooks/todo/useFilteredInboxTodo';
import '@/locales/index';
import colors from '@/theme/theme.json';
@@ -13,11 +9,14 @@ import {
DEFAULT_SCROLL_EVENT_THROTTLE,
handleScroll,
} from '@/utils/handleScroll';
-import { INBOXVIEW_SCROLL_EVENT } from '@/utils/logEvent';
-import { heightPercentage, widthPercentage } from '@/utils/responsiveSize';
+import {
+ handleLogEvent,
+ INBOXVIEW_SCROLL_EVENT,
+ TODAYVIEW_TEXTINPUT_SUBMIT_EVENT,
+} from '@/utils/logEvent';
import { Icon } from '@ui-kitten/components';
import { LexoRank } from 'lexorank';
-import React, { Fragment, useContext, useState } from 'react';
+import React, { Fragment, useContext } from 'react';
import { useTranslation } from 'react-i18next';
import {
KeyboardAvoidingView,
@@ -30,24 +29,24 @@ import DraggableFlatList, {
} from 'react-native-draggable-flatlist';
import { GestureHandlerRootView } from 'react-native-gesture-handler';
import { KeyboardAccessoryView } from 'react-native-keyboard-accessory';
+import { moderateScale, scale, verticalScale } from 'react-native-size-matters';
import InboxTodo from './inboxTodo/InboxTodo';
-interface InboxTodosProps {
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- todosData: any;
- categoryId: number;
-}
-
-const InboxTodos: React.FC = ({ todosData, categoryId }) => {
+const InboxTodos = ({ todosData, categoryId }) => {
const { t } = useTranslation();
const { userId } = useContext(LoginContext);
- const { selectedCategory, setSelectedCategory } = useContext(CategoryContext);
- setSelectedCategory(categoryId);
+
const inboxCurrentTodos = useFilteredInboxTodos(todosData, categoryId);
- const { mutate: addInboxTodo } = useTodoAddMutation();
const { mutate: updateInboxTodo } = useTodoUpdateMutation();
- const { isTextInputOpen, activatedCategoryId } = useContext(TextInputContext);
- const [input, setInput] = useState('');
+ const {
+ isInboxTextInputOpen,
+ inboxActivatedCategoryId,
+ setInboxTextInputOpen,
+ } = useContext(TextInputContext);
+ const { input, setInput, handleSubmit } = useCreateInboxTodo(
+ userId,
+ categoryId,
+ );
const renderTodo = ({ item, drag, isActive }) => {
return (
@@ -68,82 +67,103 @@ const InboxTodos: React.FC = ({ todosData, categoryId }) => {
};
//TODO: order 순서 생각해보니까 이제 서버에서 하잖아? 일단 전체 투두에서 계속 마지막으로 붙이는 식으로 구현
const handleInputSubmit = async () => {
- const newTodoData = {
- content: input,
- categoryId: selectedCategory,
- };
+ handleLogEvent(TODAYVIEW_TEXTINPUT_SUBMIT_EVENT, {
+ time: new Date().toISOString(),
+ userId: userId,
+ });
- addInboxTodo({ todoData: newTodoData });
- setInput('');
+ handleSubmit();
+ setInboxTextInputOpen(false);
};
return (
-
-
+ item.id.toString()}
+ onScroll={() => handleScroll(INBOXVIEW_SCROLL_EVENT, userId)}
+ scrollEventThrottle={DEFAULT_SCROLL_EVENT_THROTTLE}
+ />
+
+ {isInboxTextInputOpen && categoryId === inboxActivatedCategoryId ? (
+
- item.id.toString()}
- onScroll={() => handleScroll(INBOXVIEW_SCROLL_EVENT, userId)}
- scrollEventThrottle={DEFAULT_SCROLL_EVENT_THROTTLE}
- />
-
- {isTextInputOpen && categoryId === activatedCategoryId ? (
-
-
-
-
-
-
- ) : null}
-
+
+
+
+
+
+ ) : null}
);
};
const styles = StyleSheet.create({
- touchableCheck: {
- paddingTop: 0,
- justifyContent: 'center',
+ container: {
+ flex: 1,
},
- checkIcon: {
- width: widthPercentage(20),
- height: heightPercentage(20),
+ keyboardInputContainer: {
+ backgroundColor: 'white',
+ borderTopWidth: 0,
+ },
+ mainContainer: {
+ flex: 1,
+ backgroundColor: 'white',
+ },
+ flatListContainer: {
+ flex: 1,
+ },
+ keyboardAvoidingView: {
+ width: '100%',
+ position: 'absolute',
+ bottom: 0,
+ backgroundColor: 'white',
+ },
+ inputWrapper: {
+ width: '100%',
+ borderTopWidth: StyleSheet.hairlineWidth,
+ borderTopColor: colors.Gray02,
+ backgroundColor: 'white',
},
inputContainer: {
flexDirection: 'row',
+ alignItems: 'center',
+ paddingHorizontal: scale(7),
+ paddingVertical: verticalScale(8),
+ },
+ checkIcon: {
+ width: scale(24),
+ height: verticalScale(24),
},
textInput: {
- backgroundColor: colors.Gray02,
flex: 1,
- borderRadius: widthPercentage(4),
- marginLeft: widthPercentage(2),
- paddingHorizontal: widthPercentage(4),
- },
- keyboardInputContainer: {
- backgroundColor: 'white',
- borderTopWidth: 0,
+ backgroundColor: colors.Gray02,
+ borderRadius: moderateScale(4),
+ marginLeft: scale(4),
+ paddingHorizontal: scale(8),
+ height: scale(24),
+ fontSize: moderateScale(14),
},
});
diff --git a/components/inboxView/inboxTodos/inboxTodo/InboxTodo.jsx b/components/inboxView/inboxTodos/inboxTodo/InboxTodo.jsx
index 07bce6f..4082d04 100644
--- a/components/inboxView/inboxTodos/inboxTodo/InboxTodo.jsx
+++ b/components/inboxView/inboxTodos/inboxTodo/InboxTodo.jsx
@@ -22,7 +22,7 @@ const InboxTodo = ({ item, drag, isActive }) => {
setGeneratedSubTodos,
} = useInboxTodo();
- const { setTextInputOpen } = useContext(TextInputContext);
+ const { setInboxTextInputOpen } = useContext(TextInputContext);
const {
isVisible: isSubTodoGenerateModalVisible,
@@ -33,7 +33,7 @@ const InboxTodo = ({ item, drag, isActive }) => {
const handleEdit = () => {
setIsEditing(true);
- setTextInputOpen(false);
+ setInboxTextInputOpen(false);
setIsTodoModalVisible(false);
};
diff --git a/components/inboxView/inboxTodos/inboxTodo/subTodoList/InboxSubTodo.jsx b/components/inboxView/inboxTodos/inboxTodo/subTodoList/InboxSubTodo.jsx
index d0ee342..226b07c 100644
--- a/components/inboxView/inboxTodos/inboxTodo/subTodoList/InboxSubTodo.jsx
+++ b/components/inboxView/inboxTodos/inboxTodo/subTodoList/InboxSubTodo.jsx
@@ -17,11 +17,11 @@ const InboxSubTodo = ({ item }) => {
const theme = useTheme();
const { mutate: updateSubTodo } = useSubTodoUpdateMutation();
const { userId } = useContext(LoginContext);
- const { setTextInputOpen } = useContext(TextInputContext);
+ const { setInboxTextInputOpen } = useContext(TextInputContext);
const handleEdit = () => {
setIsEditing(true);
- setTextInputOpen(false);
+ setInboxTextInputOpen(false);
};
const handleSubTodoUpdate = () => {
@@ -69,7 +69,7 @@ const InboxSubTodo = ({ item }) => {
onSubmitEditing={() => {
handleSubTodoUpdate();
setIsEditing(false);
- setTextInputOpen(true);
+ setInboxTextInputOpen(true);
}}
autoFocus={true}
/>
diff --git a/components/inboxView/inboxTodos/inboxTodo/subTodoList/SubTodoList.tsx b/components/inboxView/inboxTodos/inboxTodo/subTodoList/SubTodoList.tsx
index fd4fcb2..2232de2 100644
--- a/components/inboxView/inboxTodos/inboxTodo/subTodoList/SubTodoList.tsx
+++ b/components/inboxView/inboxTodos/inboxTodo/subTodoList/SubTodoList.tsx
@@ -36,16 +36,6 @@ const SubTodoList: React.FC = ({
contentContainerStyle={{ marginLeft: 40, paddingLeft: 40 }}
ListFooterComponent={
subTodoInputActivated ? (
- // {
- // setSubtodoInput(nextInput);
- // }}
- // autoFocus={true}
- // onSubmitEditing={handleSubtodoSubmit}
- // />
onPress={() => {
handleEditPress();
+ setVisible(false);
}}
style={styles.topMenuItem}
/>
@@ -98,6 +99,7 @@ const TodoMoreMenu = ({
title=
onPress={() => {
handleDeletePress();
+ setVisible(false);
}}
style={styles.middleMenuItem}
/>
diff --git a/components/inboxView/inboxTodos/inboxTodo/todoListItem/useTodoListItem.ts b/components/inboxView/inboxTodos/inboxTodo/todoListItem/useTodoListItem.ts
index 90c835e..b454cc4 100644
--- a/components/inboxView/inboxTodos/inboxTodo/todoListItem/useTodoListItem.ts
+++ b/components/inboxView/inboxTodos/inboxTodo/todoListItem/useTodoListItem.ts
@@ -19,7 +19,7 @@ const useTodoListItem = ({
const { mutate: updateTodo } = useTodoUpdateMutation();
const { userId } = useContext(LoginContext);
const theme = useTheme();
- const { setTextInputOpen } = useContext(TextInputContext);
+ const { setInboxTextInputOpen } = useContext(TextInputContext);
const checkIconlogPressEvent = () => {
handleLogEvent(DAILYTODO_TODOCOMPLETE_CLICK_EVENT, {
@@ -59,7 +59,7 @@ const useTodoListItem = ({
const handleTodoListItemSubmitEditing = content => {
handleTodoContentUpdate(content);
setIsEditing(false);
- setTextInputOpen(true);
+ setInboxTextInputOpen(false);
};
const handleGenerateIconPress = () => {
diff --git a/components/todayView/dailyTodos/DailyTodos.tsx b/components/todayView/dailyTodos/DailyTodos.tsx
index d33cf12..c5162dd 100644
--- a/components/todayView/dailyTodos/DailyTodos.tsx
+++ b/components/todayView/dailyTodos/DailyTodos.tsx
@@ -21,8 +21,8 @@ import { useTranslation } from 'react-i18next';
import { StyleSheet, TextInput, View } from 'react-native';
import DraggableFlatList from 'react-native-draggable-flatlist';
import { GestureHandlerRootView } from 'react-native-gesture-handler';
-import DailyTodo from './dailyTodo/DailyTodo';
import { moderateScale, scale, verticalScale } from 'react-native-size-matters';
+import DailyTodo from './dailyTodo/DailyTodo';
const DailyTodos = ({ todosData, categoryId }) => {
const { userId } = useContext(LoginContext);
@@ -36,8 +36,11 @@ const DailyTodos = ({ todosData, categoryId }) => {
selectedDate,
);
- const { isTextInputOpen, activatedCategoryId, setTextInputOpen } =
- useContext(TextInputContext);
+ const {
+ isTodayTextInputOpen,
+ todayActivatedCategoryId,
+ setTodayTextInputOpen,
+ } = useContext(TextInputContext);
const handleDragEnd = useHandleDrag();
@@ -47,7 +50,7 @@ const DailyTodos = ({ todosData, categoryId }) => {
userId: userId,
});
handleSubmit();
- setTextInputOpen(false);
+ setTodayTextInputOpen(false);
};
const renderTodo = ({ item, drag, isActive }) => {
@@ -69,7 +72,7 @@ const DailyTodos = ({ todosData, categoryId }) => {
containerStyle={styles.flatListContainer}
/>
- {isTextInputOpen && categoryId === activatedCategoryId && (
+ {isTodayTextInputOpen && categoryId === todayActivatedCategoryId && (
{
setGeneratedSubTodos,
} = useDailyTodo();
- const { setTextInputOpen } = useContext(TextInputContext);
+ const { setTodayTextInputOpen } = useContext(TextInputContext);
const {
isVisible: isSubTodoGenerateModalVisible,
setIsVisible: setIsSubTodoGenerateModalVisible,
@@ -32,7 +32,7 @@ const DailyTodo = ({ item, drag, isActive }) => {
const handleEdit = () => {
setIsEditing(true);
- setTextInputOpen(false);
+ setTodayTextInputOpen(false);
setIsTodoModalVisible(false);
};
diff --git a/components/todayView/dailyTodos/dailyTodo/subTodoList/DailySubTodo.jsx b/components/todayView/dailyTodos/dailyTodo/subTodoList/DailySubTodo.jsx
index 4d0349a..ddb437e 100644
--- a/components/todayView/dailyTodos/dailyTodo/subTodoList/DailySubTodo.jsx
+++ b/components/todayView/dailyTodos/dailyTodo/subTodoList/DailySubTodo.jsx
@@ -1,3 +1,4 @@
+import EditableTextField from '@/components/common/molecules/EditableTextField';
import { LoginContext } from '@/contexts/LoginContext';
import { TextInputContext } from '@/contexts/textInputContext';
import { useSubTodoUpdateMutation } from '@/hooks/api/useSubTodoMutations';
@@ -6,24 +7,22 @@ import {
DAILYTODO_SUBTODOCOMPLETE_CLICK_EVENT,
handleLogEvent,
} from '@/utils/logEvent';
-import { Icon } from '@ui-kitten/components';
+import { Icon, ListItem } from '@ui-kitten/components';
import { useContext, useState } from 'react';
+import { Pressable, StyleSheet } from 'react-native';
import { moderateScale, scale, verticalScale } from 'react-native-size-matters';
import SubTodoMoreMenu from './subTodoMoreMenu/SubTodoMoreMenu';
-import EditableTextField from '@/components/common/molecules/EditableTextField';
-import { ListItem } from '@ui-kitten/components';
-import { Pressable, StyleSheet } from 'react-native';
const DailySubTodo = ({ item }) => {
const [completed, setCompleted] = useState(item.isCompleted);
const [isEditing, setIsEditing] = useState(false);
const { mutate: updateSubTodo } = useSubTodoUpdateMutation();
const { userId } = useContext(LoginContext);
- const { setTextInputOpen } = useContext(TextInputContext);
+ const { setTodayTextInputOpen } = useContext(TextInputContext);
const handleEdit = () => {
setIsEditing(true);
- setTextInputOpen(false);
+ setTodayTextInputOpen(false);
};
const handleCheck = () => {
diff --git a/components/todayView/dailyTodos/dailyTodo/todoListItem/todoMoreMenu/TodoMoreMenu.tsx b/components/todayView/dailyTodos/dailyTodo/todoListItem/todoMoreMenu/TodoMoreMenu.tsx
index 49fc2ce..f6c8fa6 100644
--- a/components/todayView/dailyTodos/dailyTodo/todoListItem/todoMoreMenu/TodoMoreMenu.tsx
+++ b/components/todayView/dailyTodos/dailyTodo/todoListItem/todoMoreMenu/TodoMoreMenu.tsx
@@ -1,4 +1,14 @@
+import AddIcon from '@/components/icons/AddIcon';
+import ChangeDateIcon from '@/components/icons/ChangeDateIcon';
+import DeleteIcon from '@/components/icons/DeleteIcon';
+import EditIcon from '@/components/icons/EditIcon';
+import FolderIcon from '@/components/icons/FolderIcon';
+import GenerateSubtodoIcon from '@/components/icons/GenerateSubtodoIcon';
+import { AIBottomSheetContext } from '@/contexts/AIBottomSheetProvider';
+import { CalendarBottomSheetContext } from '@/contexts/CalendarBottomSheetProvider';
+import useTodoStore from '@/contexts/TodoStore';
import '@/locales/index';
+import theme from '@/theme/theme.json';
import {
Icon,
Layout,
@@ -9,19 +19,9 @@ import {
import React, { useCallback, useContext, useState } from 'react';
import { useTranslation } from 'react-i18next';
import { StyleSheet, TouchableOpacity } from 'react-native';
+import { moderateScale, scale } from 'react-native-size-matters/extend';
import fontStyles from '../../../../../../theme/fontStyles';
-import { scale, moderateScale } from 'react-native-size-matters/extend';
-import EditIcon from '@/components/icons/EditIcon';
-import DeleteIcon from '@/components/icons/DeleteIcon';
-import ChangeDateIcon from '@/components/icons/ChangeDateIcon';
-import GenerateSubtodoIcon from '@/components/icons/GenerateSubtodoIcon';
-import AddIcon from '@/components/icons/AddIcon';
-import FolderIcon from '@/components/icons/FolderIcon';
-import theme from '@/theme/theme.json';
import useTodoMoreMenu from './useTodoMoreMenu';
-import { CalendarBottomSheetContext } from '@/contexts/CalendarBottomSheetProvider';
-import useTodoStore from '@/contexts/TodoStore';
-import { AIBottomSheetContext } from '@/contexts/AIBottomSheetProvider';
const TodoText = ({ titleText, disabled = false }) => {
return (
diff --git a/components/todayView/dailyTodos/dailyTodo/todoListItem/useTodoListItem.ts b/components/todayView/dailyTodos/dailyTodo/todoListItem/useTodoListItem.ts
index 1827bcb..cb309ca 100644
--- a/components/todayView/dailyTodos/dailyTodo/todoListItem/useTodoListItem.ts
+++ b/components/todayView/dailyTodos/dailyTodo/todoListItem/useTodoListItem.ts
@@ -1,3 +1,4 @@
+import { TextInputContext } from '@/contexts/textInputContext';
import { useTheme } from '@ui-kitten/components';
import { useContext } from 'react';
import { LoginContext } from '../../../../../contexts/LoginContext';
@@ -8,7 +9,6 @@ import {
DAILYTODO_TODOCOMPLETE_CLICK_EVENT,
handleLogEvent,
} from '../../../../../utils/logEvent';
-import { TextInputContext } from '@/contexts/textInputContext';
const useTodoListItem = ({
item,
@@ -19,7 +19,7 @@ const useTodoListItem = ({
const { mutate: updateTodo } = useTodoUpdateMutation();
const { userId } = useContext(LoginContext);
const theme = useTheme();
- const { setTextInputOpen } = useContext(TextInputContext);
+ const { setTodayTextInputOpen } = useContext(TextInputContext);
const checkIconlogPressEvent = () => {
handleLogEvent(DAILYTODO_TODOCOMPLETE_CLICK_EVENT, {
@@ -59,7 +59,7 @@ const useTodoListItem = ({
const handleTodoListItemSubmitEditing = content => {
handleTodoContentUpdate(content);
setIsEditing(false);
- setTextInputOpen(false);
+ setTodayTextInputOpen(false);
};
const handleGenerateIconPress = () => {
diff --git a/contexts/textInputContext.js b/contexts/textInputContext.js
index 50eab23..bfc925c 100644
--- a/contexts/textInputContext.js
+++ b/contexts/textInputContext.js
@@ -3,16 +3,24 @@ import { createContext, useState } from 'react';
export const TextInputContext = createContext();
const TextInputProvider = ({ children }) => {
- const [isTextInputOpen, setTextInputOpen] = useState(false);
- const [activatedCategoryId, setActivatedCategoryId] = useState(null);
+ const [isTodayTextInputOpen, setTodayTextInputOpen] = useState(false);
+ const [todayActivatedCategoryId, setTodayActivatedCategoryId] =
+ useState(null);
+ const [isInboxTextInputOpen, setInboxTextInputOpen] = useState(false);
+ const [inboxActivatedCategoryId, setInboxActivatedCategoryId] =
+ useState(null);
return (
{children}
diff --git a/hooks/api/useCategoryMutation.js b/hooks/api/useCategoryMutation.js
index 3e350e6..f237142 100644
--- a/hooks/api/useCategoryMutation.js
+++ b/hooks/api/useCategoryMutation.js
@@ -2,7 +2,7 @@ import { api as Api } from '@/utils/api';
import { useMutation, useQueryClient } from '@tanstack/react-query';
import { QUERY_KEY } from './useCategoriesQuery';
-const addCategoryFetcher = async ({ addCategoryData }) => {
+const addCategoryFetcher = async addCategoryData => {
const data = await Api.addCategory(addCategoryData);
return data;
};
diff --git a/hooks/api/useInboxTodoQuery.js b/hooks/api/useInboxTodoQuery.js
index 1930e72..faa94a6 100644
--- a/hooks/api/useInboxTodoQuery.js
+++ b/hooks/api/useInboxTodoQuery.js
@@ -13,8 +13,7 @@ const useInboxTodoQuery = userId => {
return useQuery({
queryKey: [INBOX_QUERY_KEY],
queryFn: () => fetcher(userId),
- // refetchInterval: 30000,
- // refetchIntervalInBackground: true,
+ suspense: true,
});
};
diff --git a/hooks/api/useSubTodoMutations.js b/hooks/api/useSubTodoMutations.js
index 4068057..041bf7a 100644
--- a/hooks/api/useSubTodoMutations.js
+++ b/hooks/api/useSubTodoMutations.js
@@ -1,5 +1,6 @@
import { api as Api } from '@/utils/api';
import { useMutation, useQueryClient } from '@tanstack/react-query';
+import { INBOX_QUERY_KEY } from './useInboxTodoQuery';
import { TODO_QUERY_KEY } from './useTodoQuery';
const addSubTodoFetcher = async ({ todoData }) => {
@@ -11,10 +12,14 @@ export const useSubTodoAddMutation = () => {
const queryClient = useQueryClient();
return useMutation({
mutationFn: addSubTodoFetcher,
- onSuccess: () =>
+ onSuccess: () => {
queryClient.invalidateQueries({
queryKey: [TODO_QUERY_KEY],
- }),
+ });
+ queryClient.invalidateQueries({
+ queryKey: [INBOX_QUERY_KEY],
+ });
+ },
});
};
@@ -27,10 +32,14 @@ export const useSubTodoUpdateMutation = () => {
const queryClient = useQueryClient();
return useMutation({
mutationFn: updateSubTodoFetcher,
- onSuccess: () =>
+ onSuccess: () => {
queryClient.invalidateQueries({
queryKey: [TODO_QUERY_KEY],
- }),
+ });
+ queryClient.invalidateQueries({
+ queryKey: [INBOX_QUERY_KEY],
+ });
+ },
});
};
@@ -43,9 +52,13 @@ export const useSubTodoDeleteMutation = () => {
const queryClient = useQueryClient();
return useMutation({
mutationFn: deleteSubTodoFetcher,
- onSuccess: () =>
+ onSuccess: () => {
queryClient.invalidateQueries({
queryKey: [TODO_QUERY_KEY],
- }),
+ });
+ queryClient.invalidateQueries({
+ queryKey: [INBOX_QUERY_KEY],
+ });
+ },
});
};
diff --git a/hooks/api/useTodoMutations.js b/hooks/api/useTodoMutations.js
index 642cc7c..3ef1b5a 100644
--- a/hooks/api/useTodoMutations.js
+++ b/hooks/api/useTodoMutations.js
@@ -1,9 +1,10 @@
import { api as Api } from '@/utils/api';
import { useMutation, useQueryClient } from '@tanstack/react-query';
+import { INBOX_QUERY_KEY } from './useInboxTodoQuery';
import { TODO_QUERY_KEY } from './useTodoQuery';
// 생성 (Add Todo)
-const addTodoFetcher = async ({ todoData }) => {
+const addTodoFetcher = async todoData => {
const data = await Api.addTodo(todoData);
return data;
};
@@ -14,6 +15,7 @@ export const useTodoAddMutation = () => {
mutationFn: addTodoFetcher,
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: [TODO_QUERY_KEY] });
+ queryClient.invalidateQueries({ queryKey: [INBOX_QUERY_KEY] });
},
});
};
@@ -30,6 +32,7 @@ export const useTodoUpdateMutation = () => {
mutationFn: updateTodoFetcher,
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: [TODO_QUERY_KEY] });
+ queryClient.invalidateQueries({ queryKey: [INBOX_QUERY_KEY] });
},
});
};
@@ -44,7 +47,9 @@ export const useTodoDeleteMutation = () => {
const queryClient = useQueryClient();
return useMutation({
mutationFn: deleteTodoFetcher,
- onSuccess: () =>
- queryClient.invalidateQueries({ queryKey: [TODO_QUERY_KEY] }),
+ onSuccess: () => {
+ queryClient.invalidateQueries({ queryKey: [TODO_QUERY_KEY] });
+ queryClient.invalidateQueries({ queryKey: [INBOX_QUERY_KEY] });
+ },
});
};
diff --git a/hooks/todo/useCreateInboxTodo.js b/hooks/todo/useCreateInboxTodo.js
new file mode 100644
index 0000000..5dcfa2a
--- /dev/null
+++ b/hooks/todo/useCreateInboxTodo.js
@@ -0,0 +1,22 @@
+import { useTodoAddMutation } from '@/hooks/api/useTodoMutations';
+import { useState } from 'react';
+
+const useCreateInboxTodo = (userId, selectedCategory) => {
+ const [input, setInput] = useState('');
+ const { mutate: addTodo } = useTodoAddMutation();
+
+ //TODO: react query와 zustand를 합쳐서 todo 상태관리를 하도록 수정해야 함
+ const handleSubmit = () => {
+ const newTodoData = {
+ content: input,
+ categoryId: selectedCategory,
+ };
+
+ addTodo(newTodoData);
+ setInput('');
+ };
+
+ return { input, setInput, handleSubmit };
+};
+
+export default useCreateInboxTodo;
diff --git a/hooks/todo/useCreateTodo.js b/hooks/todo/useCreateTodo.js
index b4ba2d3..3a2ea3b 100644
--- a/hooks/todo/useCreateTodo.js
+++ b/hooks/todo/useCreateTodo.js
@@ -12,7 +12,7 @@ const useCreateTodo = (userId, selectedCategory, selectedDate) => {
categoryId: selectedCategory,
};
- addTodo({ todoData: newTodoData });
+ addTodo(newTodoData);
setInput('');
};