From f7b3a754d28faf6dc993072da7bdcb73324f18a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B3=A0=EB=B3=91=EC=B0=AC?= <70642609+byungchanKo99@users.noreply.github.com> Date: Thu, 21 Nov 2024 14:49:01 +0900 Subject: [PATCH 1/4] =?UTF-8?q?[SZ-538]feat:=20=EC=8A=A4=ED=81=AC=EB=A1=A4?= =?UTF-8?q?=20=EB=B2=84=EA=B7=B8=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app.config.js | 1 + app/(tabs)/index.jsx | 58 ++++++---- .../todayView/dailyTodos/DailyTodos.tsx | 108 +++++++++--------- 3 files changed, 88 insertions(+), 79 deletions(-) diff --git a/app.config.js b/app.config.js index a85ef0f..d9eca1a 100644 --- a/app.config.js +++ b/app.config.js @@ -77,6 +77,7 @@ const expoConfig = { }, package: 'com.safezone.onestep', versionCode: 7, + softwareKeyboardLayoutMode: 'pan', }, web: { favicon: './assets/favicon.png', diff --git a/app/(tabs)/index.jsx b/app/(tabs)/index.jsx index 71e301b..62086a2 100644 --- a/app/(tabs)/index.jsx +++ b/app/(tabs)/index.jsx @@ -13,7 +13,13 @@ import useTodosQuery from '@/hooks/api/useTodoQuery'; import { handleLogEvent, TODAYVIEW_VIEW_EVENT } from '@/utils/logEvent'; import { default as React, Suspense, useContext } from 'react'; import { useTranslation } from 'react-i18next'; -import { SafeAreaView, StyleSheet, View } from 'react-native'; +import { + KeyboardAvoidingView, + Platform, + SafeAreaView, + StyleSheet, + View, +} from 'react-native'; import { FlatList } from 'react-native-gesture-handler'; import { scale, verticalScale } from 'react-native-size-matters'; @@ -34,7 +40,7 @@ const TodayView = () => { const renderCategoriesTodo = ({ item }) => { return ( - + @@ -47,22 +53,29 @@ const TodayView = () => { - - - - - - } - > - - - - + + + + + + + } + > + item.id} + contentContainerStyle={styles.flatList} + /> + + + + @@ -72,17 +85,18 @@ const TodayView = () => { const styles = StyleSheet.create({ container: { flex: 1, + height: '100%', backgroundColor: 'white', }, - bottomContainer: { - paddingHorizontal: scale(20), - paddingTop: verticalScale(20), - }, suspenseBox: { flex: 1, justifyContent: 'center', alignItems: 'center', }, + flatList: { + paddingHorizontal: scale(20), + paddingTop: verticalScale(20), + }, }); export default TodayView; diff --git a/components/todayView/dailyTodos/DailyTodos.tsx b/components/todayView/dailyTodos/DailyTodos.tsx index 84a82e7..d33cf12 100644 --- a/components/todayView/dailyTodos/DailyTodos.tsx +++ b/components/todayView/dailyTodos/DailyTodos.tsx @@ -16,44 +16,30 @@ import { TODAYVIEW_TEXTINPUT_SUBMIT_EVENT, } from '@/utils/logEvent'; import { Icon } from '@ui-kitten/components'; -import React, { Fragment, useContext } from 'react'; +import React, { useContext } from 'react'; import { useTranslation } from 'react-i18next'; -import { - KeyboardAvoidingView, - StyleSheet, - TextInput, - View, -} from 'react-native'; +import { StyleSheet, TextInput, View } from 'react-native'; import DraggableFlatList from 'react-native-draggable-flatlist'; import { GestureHandlerRootView } from 'react-native-gesture-handler'; -import { KeyboardAccessoryView } from 'react-native-keyboard-accessory'; import DailyTodo from './dailyTodo/DailyTodo'; import { moderateScale, scale, verticalScale } from 'react-native-size-matters'; -interface DailyTodosProps { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - todosData: any; - categoryId: number; -} - -const DailyTodos: React.FC = ({ todosData, categoryId }) => { +const DailyTodos = ({ todosData, categoryId }) => { const { userId } = useContext(LoginContext); const { selectedDate } = useContext(DateContext); - // const { data: todosData } = useTodosQuery(userId); const { t } = useTranslation(); const currentTodos = useFilteredTodos(todosData, categoryId, selectedDate); - const { input, setInput, handleSubmit } = useCreateTodo( userId, categoryId, selectedDate, ); - const { isTextInputOpen, activatedCategoryId } = useContext(TextInputContext); + const { isTextInputOpen, activatedCategoryId, setTextInputOpen } = + useContext(TextInputContext); const handleDragEnd = useHandleDrag(); - const { setTextInputOpen } = useContext(TextInputContext); const handleInputSubmit = () => { handleLogEvent(TODAYVIEW_TEXTINPUT_SUBMIT_EVENT, { @@ -69,27 +55,22 @@ const DailyTodos: React.FC = ({ todosData, categoryId }) => { }; return ( - - - - item.id.toString()} - onScroll={() => handleScroll(TODAYVIEW_SCROLL_EVENT, userId)} - scrollEventThrottle={DEFAULT_SCROLL_EVENT_THROTTLE} - /> - - {isTextInputOpen && categoryId === activatedCategoryId ? ( - + + + item.id.toString()} + onScroll={() => handleScroll(TODAYVIEW_SCROLL_EVENT, userId)} + scrollEventThrottle={DEFAULT_SCROLL_EVENT_THROTTLE} + simultaneousHandlers={[]} + activationDistance={20} + containerStyle={styles.flatListContainer} + /> + + {isTextInputOpen && categoryId === activatedCategoryId && ( + = ({ todosData, categoryId }) => { autoFocus={true} /> - - ) : null} - + + )} + ); }; const styles = StyleSheet.create({ - touchableCheck: { - paddingTop: 0, - justifyContent: 'center', + container: { + flex: 1, }, - checkIcon: { - width: scale(24), - height: verticalScale(24), + 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', - justifyContent: 'center', alignItems: 'center', - paddingLeft: scale(7), + paddingHorizontal: scale(7), + paddingVertical: verticalScale(8), + }, + checkIcon: { + width: scale(24), + height: verticalScale(24), }, textInput: { - backgroundColor: colors.Gray02, flex: 1, + backgroundColor: colors.Gray02, borderRadius: moderateScale(4), marginLeft: scale(4), paddingHorizontal: scale(8), height: scale(24), fontSize: moderateScale(14), }, - keyboardInputContainer: { - borderTopWidth: 0, - justifyContent: 'center', - backgroundColor: 'white', - }, }); export default DailyTodos; From 8f8c68cdb650dfd3043e1d7a8b84defb3188c511 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B3=A0=EB=B3=91=EC=B0=AC?= <70642609+byungchanKo99@users.noreply.github.com> Date: Thu, 21 Nov 2024 14:49:25 +0900 Subject: [PATCH 2/4] =?UTF-8?q?[SZ-538]feat:=20=EB=94=94=EC=9E=90=EC=9D=B8?= =?UTF-8?q?=20=EC=9D=BC=EB=B6=80=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/(tabs)/_layout.jsx | 9 +++++++++ .../generatedSubTodoList/GeneratedSubTodoList.tsx | 13 ++++++++++--- .../dailyTodo/subTodoList/DailySubTodo.jsx | 11 +++-------- .../dailyTodo/todoListItem/TodoListItem.tsx | 6 +++--- .../todoListItem/todoMoreMenu/TodoMoreMenu.tsx | 5 +++++ 5 files changed, 30 insertions(+), 14 deletions(-) diff --git a/app/(tabs)/_layout.jsx b/app/(tabs)/_layout.jsx index 8b0564d..c9768e1 100644 --- a/app/(tabs)/_layout.jsx +++ b/app/(tabs)/_layout.jsx @@ -3,7 +3,9 @@ import '@/locales/index'; import { Tabs } from 'expo-router'; import React from 'react'; import { useTranslation } from 'react-i18next'; +import { verticalScale } from 'react-native-size-matters'; import MaterialIcons from 'react-native-vector-icons/MaterialIcons'; +import fontStyles from 'theme/fontStyles'; const todayIcon = ({ color, size }) => ( @@ -20,6 +22,13 @@ const TabLayout = () => { { @@ -29,13 +29,17 @@ const GeneratedSubTodoList = ({ generatedSubTodos, setGeneratedSubTodos }) => { ); }; + const listTitle = (evaProps, item) => ( + {item.content} + ); + const renderGeneratedTodo = ({ item, index }) => { return ( listTitle(evaProps, item)} /> ); }; @@ -58,4 +62,7 @@ const styles = StyleSheet.create({ listItem: { paddingLeft: scale(40), }, + titleStyle: { + fontSize: moderateScale(13), + }, }); diff --git a/components/todayView/dailyTodos/dailyTodo/subTodoList/DailySubTodo.jsx b/components/todayView/dailyTodos/dailyTodo/subTodoList/DailySubTodo.jsx index 9a19ee4..4d0349a 100644 --- a/components/todayView/dailyTodos/dailyTodo/subTodoList/DailySubTodo.jsx +++ b/components/todayView/dailyTodos/dailyTodo/subTodoList/DailySubTodo.jsx @@ -72,20 +72,15 @@ const DailySubTodo = ({ item }) => { const accessoryRight = () => { return ; }; - const title = () => ( + const title = evaProps => ( <> - {/* {item.dueTime && ( - - {item.dueTime.split(':').slice(0, 2).join(':')} - - )} */} ); diff --git a/components/todayView/dailyTodos/dailyTodo/todoListItem/TodoListItem.tsx b/components/todayView/dailyTodos/dailyTodo/todoListItem/TodoListItem.tsx index 02fcb2c..eaaa586 100644 --- a/components/todayView/dailyTodos/dailyTodo/todoListItem/TodoListItem.tsx +++ b/components/todayView/dailyTodos/dailyTodo/todoListItem/TodoListItem.tsx @@ -1,7 +1,7 @@ import getIconFillColor from '@/utils/getIconFillColor'; import { Icon, ListItem, Text } from '@ui-kitten/components'; import React from 'react'; -import { Pressable, StyleSheet } from 'react-native'; +import { Pressable, StyleSheet, View } from 'react-native'; import { RenderItemParams } from 'react-native-draggable-flatlist'; import { Todo } from '../../../../../types/todo'; import EditableTextField from '../../../../common/molecules/EditableTextField'; @@ -74,7 +74,7 @@ const TodoListItem: React.FC = ({ }; const title = () => ( - <> + = ({ {item.dueTime.split(':').slice(0, 2).join(':')} )} - + ); return ( diff --git a/components/todayView/dailyTodos/dailyTodo/todoListItem/todoMoreMenu/TodoMoreMenu.tsx b/components/todayView/dailyTodos/dailyTodo/todoListItem/todoMoreMenu/TodoMoreMenu.tsx index 9251c78..0b4b19b 100644 --- a/components/todayView/dailyTodos/dailyTodo/todoListItem/todoMoreMenu/TodoMoreMenu.tsx +++ b/components/todayView/dailyTodos/dailyTodo/todoListItem/todoMoreMenu/TodoMoreMenu.tsx @@ -89,6 +89,7 @@ const TodoMoreMenu = ({ title= onPress={() => { handleEditPress(); + setVisible(false); }} style={styles.topMenuItem} /> @@ -98,6 +99,7 @@ const TodoMoreMenu = ({ title= onPress={() => { handleDeletePress(); + setVisible(false); }} style={styles.middleMenuItem} /> @@ -122,6 +124,7 @@ const TodoMoreMenu = ({ /> onPress={() => { handleGenerateSubTodoPress(); + setVisible(false); }} style={styles.middleMenuItem} /> @@ -133,6 +136,7 @@ const TodoMoreMenu = ({ /> onPress={() => { handleAddSubTodoPress(); + setVisible(false); }} style={styles.middleMenuItem} /> @@ -142,6 +146,7 @@ const TodoMoreMenu = ({ title= onPress={() => { handlePutTodoToInboxPress(); + setVisible(false); }} style={styles.bottomMenuItem} /> From 8a3833ac602054aed82fe9b18587b13d05c9435d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B3=A0=EB=B3=91=EC=B0=AC?= <70642609+byungchanKo99@users.noreply.github.com> Date: Thu, 21 Nov 2024 15:09:23 +0900 Subject: [PATCH 3/4] =?UTF-8?q?[SZ-538]feat:=20ios=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EA=B0=80=EC=83=81=20=ED=82=A4=EB=B3=B4=EB=93=9C=20=EC=98=AC?= =?UTF-8?q?=EB=9D=BC=EC=98=AC=EB=95=8C=20=EC=83=9D=EA=B8=B0=EB=8A=94=20?= =?UTF-8?q?=EB=B2=84=EA=B7=B8=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/(tabs)/_layout.jsx | 4 +++- app/(tabs)/index.jsx | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/app/(tabs)/_layout.jsx b/app/(tabs)/_layout.jsx index c9768e1..bee5029 100644 --- a/app/(tabs)/_layout.jsx +++ b/app/(tabs)/_layout.jsx @@ -6,6 +6,7 @@ import { useTranslation } from 'react-i18next'; import { verticalScale } from 'react-native-size-matters'; import MaterialIcons from 'react-native-vector-icons/MaterialIcons'; import fontStyles from 'theme/fontStyles'; +import { Platform } from 'react-native'; const todayIcon = ({ color, size }) => ( @@ -24,7 +25,8 @@ const TabLayout = () => { tabBarHideOnKeyboard: true, // 키보드가 활성화될 때 탭 바 숨기기 tabBarStyle: { backgroundColor: 'white', - height: verticalScale(45), + height: + Platform.OS === 'ios' ? verticalScale(75) : verticalScale(45), }, tabBarLabelStyle: { ...fontStyles.Paragraph.P1.M_100, diff --git a/app/(tabs)/index.jsx b/app/(tabs)/index.jsx index 62086a2..502c1fc 100644 --- a/app/(tabs)/index.jsx +++ b/app/(tabs)/index.jsx @@ -56,6 +56,9 @@ const TodayView = () => { @@ -85,7 +88,6 @@ const TodayView = () => { const styles = StyleSheet.create({ container: { flex: 1, - height: '100%', backgroundColor: 'white', }, suspenseBox: { From 3a8765819705b2c932c5620d928e416a6826e6fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B3=A0=EB=B3=91=EC=B0=AC?= <70642609+byungchanKo99@users.noreply.github.com> Date: Thu, 21 Nov 2024 15:17:30 +0900 Subject: [PATCH 4/4] =?UTF-8?q?[SZ-538]feat:=20ai=EC=84=9C=EB=B8=8C?= =?UTF-8?q?=ED=88=AC=EB=91=90=20=EC=83=9D=EC=84=B1=EC=8B=9C=20=ED=95=98?= =?UTF-8?q?=EB=8B=A8=ED=8C=A8=ED=8C=85=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/(tabs)/index.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/(tabs)/index.jsx b/app/(tabs)/index.jsx index 502c1fc..822307e 100644 --- a/app/(tabs)/index.jsx +++ b/app/(tabs)/index.jsx @@ -54,10 +54,10 @@ const TodayView = () => {