├── .nvmrc ├── .watchmanconfig ├── src ├── store │ ├── auth │ │ ├── authSaga.js │ │ └── authReducer.js │ ├── persistConfig.js │ ├── rootReducer.js │ ├── theme │ │ └── index.js │ ├── app │ │ └── appReducer.js │ └── index.js ├── components │ ├── CustomFirework │ │ └── CustomFirework.styles.js │ ├── index.js │ ├── Brand │ │ ├── Brand.test.js │ │ └── Brand.js │ ├── RadioButton.js │ ├── IconComponent.js │ ├── TextView.js │ ├── TouchableDebounce.js │ ├── Notification │ │ └── Notification.js │ ├── TextInput.js │ ├── Toast.js │ ├── SliderComp.js │ ├── CheckBox.js │ └── ButtonIcon.js ├── hooks │ └── index.js ├── translations │ ├── resources │ │ ├── en │ │ │ ├── example.json │ │ │ ├── common.json │ │ │ ├── _index.js │ │ │ └── welcome.json │ │ ├── fr │ │ │ ├── example.json │ │ │ ├── common.json │ │ │ ├── _index.js │ │ │ └── welcome.json │ │ └── index.js │ └── index.js ├── assets │ ├── demo │ │ ├── Task.png │ │ ├── view1.png │ │ ├── view2.png │ │ ├── view3.png │ │ ├── HomePage.png │ │ ├── New-task.png │ │ ├── Setting.png │ │ ├── Upgrade.png │ │ ├── Statistics.png │ │ ├── Notification.png │ │ ├── backendConfig.png │ │ ├── LoginWithAccount.png │ │ └── SignInWithSocial.png │ ├── images │ │ ├── avatar.png │ │ ├── bell.png │ │ ├── clock.png │ │ ├── hand.png │ │ ├── logo.jpeg │ │ ├── logo.png │ │ ├── more.png │ │ ├── search.png │ │ ├── calendar.png │ │ ├── dropdown.png │ │ ├── profile │ │ │ ├── sun.png │ │ │ ├── help.png │ │ │ ├── moon.png │ │ │ ├── next.png │ │ │ ├── star.png │ │ │ ├── logout.png │ │ │ ├── profile.png │ │ │ └── protect.png │ │ ├── task │ │ │ ├── laptop.png │ │ │ ├── music.png │ │ │ ├── next.png │ │ │ ├── read.png │ │ │ ├── category.png │ │ │ ├── dumbbel.png │ │ │ ├── previous.png │ │ │ ├── running.png │ │ │ ├── working.png │ │ │ ├── writing.png │ │ │ ├── emptyTask.png │ │ │ ├── meditation.png │ │ │ └── learning-code.png │ │ ├── toast │ │ │ ├── wrong.png │ │ │ └── success.png │ │ ├── login │ │ │ ├── ic_back.png │ │ │ ├── ic_edit.png │ │ │ ├── ic_avatar.png │ │ │ ├── ic_email.png │ │ │ ├── ic_eye_hide.png │ │ │ ├── ic_eye_show.png │ │ │ └── ic_password.png │ │ ├── timer │ │ │ ├── cancel.png │ │ │ └── three-dots.png │ │ ├── bottomTab │ │ │ ├── goal.png │ │ │ ├── home.png │ │ │ ├── task.png │ │ │ ├── newScope.png │ │ │ ├── profile.png │ │ │ ├── goal_active.png │ │ │ ├── home_active.png │ │ │ ├── statistics.png │ │ │ ├── task_active.png │ │ │ ├── profile_active.png │ │ │ └── statistics_active.png │ │ ├── goal │ │ │ └── arrow-right.png │ │ ├── upgradeApp │ │ │ ├── star_01.png │ │ │ ├── star_02.png │ │ │ ├── star_03.png │ │ │ └── trophy.png │ │ ├── StartScreen │ │ │ ├── success.png │ │ │ ├── management.png │ │ │ └── productivity.png │ │ ├── completedTask │ │ │ └── trash.png │ │ ├── forgotPass │ │ │ ├── forgotPass.png │ │ │ └── ic_message.png │ │ └── notification │ │ │ ├── cancel.png │ │ │ ├── service.png │ │ │ ├── success.png │ │ │ └── vertification.png │ ├── fonts │ │ ├── OpenSans-Bold.ttf │ │ ├── OpenSans-Light.ttf │ │ ├── Montserrat-Bold.otf │ │ ├── Montserrat-Medium.otf │ │ ├── OpenSans-Italic.ttf │ │ ├── OpenSans-Medium.ttf │ │ ├── OpenSans-Regular.ttf │ │ ├── OpenSans-Semibold.ttf │ │ ├── Montserrat-Regular.otf │ │ ├── Montserrat-SemiBold.otf │ │ ├── OpenSans-BoldItalic.ttf │ │ ├── OpenSans-ExtraBold.ttf │ │ ├── Montserrat-ExtraBold.otf │ │ ├── OpenSans-LightItalic.ttf │ │ ├── OpenSans-MediumItalic.ttf │ │ ├── OpenSans-ExtraBoldItalic.ttf │ │ └── OpenSans-SemiBoldItalic.ttf │ └── icons │ │ ├── IconsSVG.js │ │ └── login │ │ ├── ic_tick.svg │ │ ├── ic_facebook.svg │ │ ├── profile │ │ └── ic_avatar_default.svg │ │ ├── ic_apple.svg │ │ └── ic_google.svg ├── theme │ ├── assets │ │ └── images │ │ │ ├── send.png │ │ │ ├── tom_dark.png │ │ │ ├── tom_light.png │ │ │ ├── translate.png │ │ │ ├── colorswatch.png │ │ │ ├── sparkles-top.png │ │ │ ├── sparkles-bottom.png │ │ │ ├── sparkles-right.png │ │ │ ├── sparkles-top-left.png │ │ │ ├── sparkles-bottom-left.png │ │ │ ├── sparkles-top-right.png │ │ │ └── sparkles-bottom-right.png │ ├── themes │ │ ├── index.js │ │ └── default_dark │ │ │ ├── index.js │ │ │ ├── Images.js │ │ │ └── Variables.js │ ├── index.js │ ├── Images.js │ ├── Common.js │ ├── components │ │ └── Buttons.js │ ├── Variables.js │ ├── Fonts.js │ └── Gutters.js ├── utils │ ├── fun.js │ ├── hookApi.js │ ├── supabase.js │ └── appwrite │ │ └── AppwriteContext.js ├── screens │ ├── Timer │ │ ├── CurrentTask.js │ │ └── Timer.styles.js │ ├── TodayTask │ │ ├── TodayTask.styles.js │ │ └── TodayTask.js │ ├── Notification │ │ ├── Notification.styles.js │ │ ├── mockData.js │ │ └── Notification.js │ ├── ReminderRingTone │ │ ├── ReminderRingTone.styles.js │ │ └── ReminderRingTone.js │ ├── Goal │ │ ├── ModalDetailGoal.js │ │ ├── Goal.styles.js │ │ └── GoalItem.js │ ├── Category │ │ ├── CategoryItem.js │ │ ├── mockData.js │ │ └── Category.styles.js │ ├── EditProfile │ │ └── EditProfile.styles.js │ ├── Task │ │ ├── CustomCalendar.js │ │ ├── constant.js │ │ ├── CalendarEvent.js │ │ └── Task.styles.js │ ├── AppSetting │ │ ├── AppSetting.styles.js │ │ └── AppSetting.js │ ├── AllCompletedTask │ │ ├── AllCompletedTask.styles.js │ │ └── ModalDeleteTask.js │ ├── FillProfile │ │ ├── FillProfile.styles.js │ │ ├── FillProfile.js │ │ └── ProfileAvatar.js │ ├── NotificationSetting │ │ ├── NotificationSetting.styles.js │ │ └── NotificationSetting.js │ ├── Startup │ │ └── Startup.js │ ├── NewTask │ │ └── NewTask.styles.js │ ├── Security │ │ ├── Security.styles.js │ │ └── Security.js │ ├── Profile │ │ ├── Profile.styles.js │ │ ├── ScreenItem.js │ │ └── ModalLogout.js │ ├── Home │ │ ├── Home.styles.js │ │ └── mockData.js │ ├── CompletedTimer │ │ ├── CompletedTimer.js │ │ └── CompletedTimer.styles.js │ ├── index.js │ ├── ForgotPass │ │ └── ForgotPass.style.js │ ├── Statistics │ │ └── Statistics.styles.js │ ├── UpgradeApp │ │ └── UpgradeApp.styles.js │ └── SignUp │ │ └── SignUp.styles.js ├── services │ ├── modules │ │ └── users │ │ │ └── index.js │ └── api.js ├── App.test.js ├── App.js └── navigators │ ├── constants.js │ ├── RouteName.js │ ├── NavigationServices.js │ ├── ApplicationStack.js │ └── stack │ ├── AppBottomTab.js │ └── AuthNavigator.js ├── app.json ├── .bundle └── config ├── banner.png ├── android ├── app │ ├── debug.keystore │ ├── src │ │ ├── main │ │ │ ├── res │ │ │ │ ├── values │ │ │ │ │ ├── strings.xml │ │ │ │ │ ├── colors.xml │ │ │ │ │ ├── ic_launcher_background.xml │ │ │ │ │ └── styles.xml │ │ │ │ ├── playstore-icon.png │ │ │ │ ├── ic_launcher-web.png │ │ │ │ ├── drawable │ │ │ │ │ ├── splash_icon.png │ │ │ │ │ ├── splash_screen.xml │ │ │ │ │ └── rn_edit_text_material.xml │ │ │ │ ├── mipmap-hdpi │ │ │ │ │ ├── ic_launcher.png │ │ │ │ │ ├── ic_launcher_round.png │ │ │ │ │ └── ic_launcher_foreground.png │ │ │ │ ├── mipmap-ldpi │ │ │ │ │ └── ic_launcher.png │ │ │ │ ├── mipmap-mdpi │ │ │ │ │ ├── ic_launcher.png │ │ │ │ │ ├── ic_launcher_round.png │ │ │ │ │ └── ic_launcher_foreground.png │ │ │ │ ├── mipmap-xhdpi │ │ │ │ │ ├── ic_launcher.png │ │ │ │ │ ├── ic_launcher_round.png │ │ │ │ │ └── ic_launcher_foreground.png │ │ │ │ ├── mipmap-xxhdpi │ │ │ │ │ ├── ic_launcher.png │ │ │ │ │ ├── ic_launcher_round.png │ │ │ │ │ └── ic_launcher_foreground.png │ │ │ │ ├── mipmap-xxxhdpi │ │ │ │ │ ├── ic_launcher.png │ │ │ │ │ ├── ic_launcher_round.png │ │ │ │ │ └── ic_launcher_foreground.png │ │ │ │ ├── mipmap-anydpi-v26 │ │ │ │ │ ├── ic_launcher.xml │ │ │ │ │ └── ic_launcher_round.xml │ │ │ │ └── layout │ │ │ │ │ └── launch_screen.xml │ │ │ ├── AndroidManifest.xml │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── myapp │ │ │ │ ├── MainActivity.java │ │ │ │ └── MainApplication.java │ │ ├── debug │ │ │ └── AndroidManifest.xml │ │ └── release │ │ │ └── java │ │ │ └── com │ │ │ └── myapp │ │ │ └── ReactNativeFlipper.java │ └── proguard-rules.pro ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── settings.gradle ├── build.gradle ├── gradle.properties └── gradlew.bat ├── .env.example ├── ios ├── MyApp │ ├── Images.xcassets │ │ ├── Contents.json │ │ ├── AppIcon.appiconset │ │ │ ├── 100.png │ │ │ ├── 102.png │ │ │ ├── 1024.png │ │ │ ├── 114.png │ │ │ ├── 120.png │ │ │ ├── 128.png │ │ │ ├── 144.png │ │ │ ├── 152.png │ │ │ ├── 16.png │ │ │ ├── 167.png │ │ │ ├── 172.png │ │ │ ├── 180.png │ │ │ ├── 196.png │ │ │ ├── 20.png │ │ │ ├── 216.png │ │ │ ├── 256.png │ │ │ ├── 29.png │ │ │ ├── 32.png │ │ │ ├── 40.png │ │ │ ├── 48.png │ │ │ ├── 50.png │ │ │ ├── 512.png │ │ │ ├── 55.png │ │ │ ├── 57.png │ │ │ ├── 58.png │ │ │ ├── 60.png │ │ │ ├── 64.png │ │ │ ├── 66.png │ │ │ ├── 72.png │ │ │ ├── 76.png │ │ │ ├── 80.png │ │ │ ├── 87.png │ │ │ ├── 88.png │ │ │ └── 92.png │ │ └── SplashIcon.imageset │ │ │ ├── Splash_icon@1x.png │ │ │ ├── Splash_icon@2x.png │ │ │ ├── Splash_icon@3x.png │ │ │ └── Contents.json │ ├── AppDelegate.h │ ├── main.m │ ├── AppDelegate.mm │ └── Info.plist ├── MyApp.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist ├── MyApp.xcodeproj │ └── project.xcworkspace │ │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist ├── .xcode.env ├── MyAppTests │ ├── Info.plist │ └── MyAppTests.m └── Podfile ├── .prettierrc.js ├── Gemfile ├── index.js ├── .babelrc ├── jsconfig.json ├── .vscode └── settings.json ├── babel.config.js ├── .eslintrc.js ├── jest.config.js ├── metro.config.js ├── jest.setup.js ├── .gitignore └── Gemfile.lock /.nvmrc: -------------------------------------------------------------------------------- 1 | v18 2 | -------------------------------------------------------------------------------- /.watchmanconfig: -------------------------------------------------------------------------------- 1 | {} -------------------------------------------------------------------------------- /src/store/auth/authSaga.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/components/CustomFirework/CustomFirework.styles.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "MyApp", 3 | "displayName": "Goal" 4 | } 5 | -------------------------------------------------------------------------------- /src/hooks/index.js: -------------------------------------------------------------------------------- 1 | export { default as useTheme } from './useTheme'; 2 | -------------------------------------------------------------------------------- /src/components/index.js: -------------------------------------------------------------------------------- 1 | export { default as Brand } from './Brand/Brand'; 2 | -------------------------------------------------------------------------------- /.bundle/config: -------------------------------------------------------------------------------- 1 | BUNDLE_PATH: "vendor/bundle" 2 | BUNDLE_FORCE_RUBY_PLATFORM: 1 3 | -------------------------------------------------------------------------------- /banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/banner.png -------------------------------------------------------------------------------- /src/translations/resources/en/example.json: -------------------------------------------------------------------------------- 1 | { 2 | "helloUser": "Hi, my name is {{name}}" 3 | } 4 | -------------------------------------------------------------------------------- /src/translations/resources/fr/example.json: -------------------------------------------------------------------------------- 1 | { 2 | "helloUser": "Salut, je m'appelle {{name}}" 3 | } 4 | -------------------------------------------------------------------------------- /src/assets/demo/Task.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/demo/Task.png -------------------------------------------------------------------------------- /src/assets/demo/view1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/demo/view1.png -------------------------------------------------------------------------------- /src/assets/demo/view2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/demo/view2.png -------------------------------------------------------------------------------- /src/assets/demo/view3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/demo/view3.png -------------------------------------------------------------------------------- /android/app/debug.keystore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/android/app/debug.keystore -------------------------------------------------------------------------------- /src/assets/demo/HomePage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/demo/HomePage.png -------------------------------------------------------------------------------- /src/assets/demo/New-task.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/demo/New-task.png -------------------------------------------------------------------------------- /src/assets/demo/Setting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/demo/Setting.png -------------------------------------------------------------------------------- /src/assets/demo/Upgrade.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/demo/Upgrade.png -------------------------------------------------------------------------------- /src/assets/images/avatar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/avatar.png -------------------------------------------------------------------------------- /src/assets/images/bell.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/bell.png -------------------------------------------------------------------------------- /src/assets/images/clock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/clock.png -------------------------------------------------------------------------------- /src/assets/images/hand.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/hand.png -------------------------------------------------------------------------------- /src/assets/images/logo.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/logo.jpeg -------------------------------------------------------------------------------- /src/assets/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/logo.png -------------------------------------------------------------------------------- /src/assets/images/more.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/more.png -------------------------------------------------------------------------------- /src/assets/images/search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/search.png -------------------------------------------------------------------------------- /.env.example: -------------------------------------------------------------------------------- 1 | APPWRITE_URL= 2 | APPWRITE_PROJECT_ID= 3 | DATABASE_ID= 4 | CATEGORY_COLLECTION_ID= 5 | TASK_COLLECTION_ID= -------------------------------------------------------------------------------- /android/app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | MyApp 3 | 4 | -------------------------------------------------------------------------------- /src/assets/demo/Statistics.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/demo/Statistics.png -------------------------------------------------------------------------------- /src/assets/images/calendar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/calendar.png -------------------------------------------------------------------------------- /src/assets/images/dropdown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/dropdown.png -------------------------------------------------------------------------------- /ios/MyApp/Images.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /src/assets/demo/Notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/demo/Notification.png -------------------------------------------------------------------------------- /src/assets/demo/backendConfig.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/demo/backendConfig.png -------------------------------------------------------------------------------- /src/assets/images/profile/sun.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/profile/sun.png -------------------------------------------------------------------------------- /src/assets/images/task/laptop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/task/laptop.png -------------------------------------------------------------------------------- /src/assets/images/task/music.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/task/music.png -------------------------------------------------------------------------------- /src/assets/images/task/next.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/task/next.png -------------------------------------------------------------------------------- /src/assets/images/task/read.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/task/read.png -------------------------------------------------------------------------------- /src/assets/images/toast/wrong.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/toast/wrong.png -------------------------------------------------------------------------------- /src/theme/assets/images/send.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/theme/assets/images/send.png -------------------------------------------------------------------------------- /src/theme/themes/index.js: -------------------------------------------------------------------------------- 1 | import * as default_dark from './default_dark'; 2 | export default { 3 | default_dark, 4 | }; 5 | -------------------------------------------------------------------------------- /src/assets/fonts/OpenSans-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/fonts/OpenSans-Bold.ttf -------------------------------------------------------------------------------- /src/assets/fonts/OpenSans-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/fonts/OpenSans-Light.ttf -------------------------------------------------------------------------------- /src/assets/images/login/ic_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/login/ic_back.png -------------------------------------------------------------------------------- /src/assets/images/login/ic_edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/login/ic_edit.png -------------------------------------------------------------------------------- /src/assets/images/profile/help.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/profile/help.png -------------------------------------------------------------------------------- /src/assets/images/profile/moon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/profile/moon.png -------------------------------------------------------------------------------- /src/assets/images/profile/next.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/profile/next.png -------------------------------------------------------------------------------- /src/assets/images/profile/star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/profile/star.png -------------------------------------------------------------------------------- /src/assets/images/task/category.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/task/category.png -------------------------------------------------------------------------------- /src/assets/images/task/dumbbel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/task/dumbbel.png -------------------------------------------------------------------------------- /src/assets/images/task/previous.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/task/previous.png -------------------------------------------------------------------------------- /src/assets/images/task/running.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/task/running.png -------------------------------------------------------------------------------- /src/assets/images/task/working.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/task/working.png -------------------------------------------------------------------------------- /src/assets/images/task/writing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/task/writing.png -------------------------------------------------------------------------------- /src/assets/images/timer/cancel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/timer/cancel.png -------------------------------------------------------------------------------- /src/assets/images/toast/success.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/toast/success.png -------------------------------------------------------------------------------- /src/translations/resources/index.js: -------------------------------------------------------------------------------- 1 | export { default as en } from './en/_index'; 2 | export { default as fr } from './fr/_index'; 3 | -------------------------------------------------------------------------------- /src/assets/demo/LoginWithAccount.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/demo/LoginWithAccount.png -------------------------------------------------------------------------------- /src/assets/demo/SignInWithSocial.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/demo/SignInWithSocial.png -------------------------------------------------------------------------------- /src/assets/fonts/Montserrat-Bold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/fonts/Montserrat-Bold.otf -------------------------------------------------------------------------------- /src/assets/fonts/Montserrat-Medium.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/fonts/Montserrat-Medium.otf -------------------------------------------------------------------------------- /src/assets/fonts/OpenSans-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/fonts/OpenSans-Italic.ttf -------------------------------------------------------------------------------- /src/assets/fonts/OpenSans-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/fonts/OpenSans-Medium.ttf -------------------------------------------------------------------------------- /src/assets/fonts/OpenSans-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/fonts/OpenSans-Regular.ttf -------------------------------------------------------------------------------- /src/assets/fonts/OpenSans-Semibold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/fonts/OpenSans-Semibold.ttf -------------------------------------------------------------------------------- /src/assets/icons/IconsSVG.js: -------------------------------------------------------------------------------- 1 | import ic_facebook from './login/ic_facebook.svg'; 2 | 3 | export default { 4 | ic_facebook, 5 | }; 6 | -------------------------------------------------------------------------------- /src/assets/images/bottomTab/goal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/bottomTab/goal.png -------------------------------------------------------------------------------- /src/assets/images/bottomTab/home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/bottomTab/home.png -------------------------------------------------------------------------------- /src/assets/images/bottomTab/task.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/bottomTab/task.png -------------------------------------------------------------------------------- /src/assets/images/goal/arrow-right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/goal/arrow-right.png -------------------------------------------------------------------------------- /src/assets/images/login/ic_avatar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/login/ic_avatar.png -------------------------------------------------------------------------------- /src/assets/images/login/ic_email.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/login/ic_email.png -------------------------------------------------------------------------------- /src/assets/images/profile/logout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/profile/logout.png -------------------------------------------------------------------------------- /src/assets/images/profile/profile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/profile/profile.png -------------------------------------------------------------------------------- /src/assets/images/profile/protect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/profile/protect.png -------------------------------------------------------------------------------- /src/assets/images/task/emptyTask.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/task/emptyTask.png -------------------------------------------------------------------------------- /src/assets/images/task/meditation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/task/meditation.png -------------------------------------------------------------------------------- /src/assets/images/timer/three-dots.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/timer/three-dots.png -------------------------------------------------------------------------------- /src/theme/assets/images/tom_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/theme/assets/images/tom_dark.png -------------------------------------------------------------------------------- /src/theme/assets/images/tom_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/theme/assets/images/tom_light.png -------------------------------------------------------------------------------- /src/theme/assets/images/translate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/theme/assets/images/translate.png -------------------------------------------------------------------------------- /src/assets/fonts/Montserrat-Regular.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/fonts/Montserrat-Regular.otf -------------------------------------------------------------------------------- /src/assets/fonts/Montserrat-SemiBold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/fonts/Montserrat-SemiBold.otf -------------------------------------------------------------------------------- /src/assets/fonts/OpenSans-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/fonts/OpenSans-BoldItalic.ttf -------------------------------------------------------------------------------- /src/assets/fonts/OpenSans-ExtraBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/fonts/OpenSans-ExtraBold.ttf -------------------------------------------------------------------------------- /src/assets/images/bottomTab/newScope.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/bottomTab/newScope.png -------------------------------------------------------------------------------- /src/assets/images/bottomTab/profile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/bottomTab/profile.png -------------------------------------------------------------------------------- /src/assets/images/login/ic_eye_hide.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/login/ic_eye_hide.png -------------------------------------------------------------------------------- /src/assets/images/login/ic_eye_show.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/login/ic_eye_show.png -------------------------------------------------------------------------------- /src/assets/images/login/ic_password.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/login/ic_password.png -------------------------------------------------------------------------------- /src/assets/images/task/learning-code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/task/learning-code.png -------------------------------------------------------------------------------- /src/assets/images/upgradeApp/star_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/upgradeApp/star_01.png -------------------------------------------------------------------------------- /src/assets/images/upgradeApp/star_02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/upgradeApp/star_02.png -------------------------------------------------------------------------------- /src/assets/images/upgradeApp/star_03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/upgradeApp/star_03.png -------------------------------------------------------------------------------- /src/assets/images/upgradeApp/trophy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/upgradeApp/trophy.png -------------------------------------------------------------------------------- /src/theme/assets/images/colorswatch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/theme/assets/images/colorswatch.png -------------------------------------------------------------------------------- /src/theme/assets/images/sparkles-top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/theme/assets/images/sparkles-top.png -------------------------------------------------------------------------------- /android/app/src/main/res/playstore-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/android/app/src/main/res/playstore-icon.png -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/android/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /ios/MyApp/AppDelegate.h: -------------------------------------------------------------------------------- 1 | #import 2 | #import 3 | 4 | @interface AppDelegate : RCTAppDelegate 5 | 6 | @end 7 | -------------------------------------------------------------------------------- /src/assets/fonts/Montserrat-ExtraBold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/fonts/Montserrat-ExtraBold.otf -------------------------------------------------------------------------------- /src/assets/fonts/OpenSans-LightItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/fonts/OpenSans-LightItalic.ttf -------------------------------------------------------------------------------- /src/assets/fonts/OpenSans-MediumItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/fonts/OpenSans-MediumItalic.ttf -------------------------------------------------------------------------------- /src/assets/images/StartScreen/success.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/StartScreen/success.png -------------------------------------------------------------------------------- /src/assets/images/bottomTab/goal_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/bottomTab/goal_active.png -------------------------------------------------------------------------------- /src/assets/images/bottomTab/home_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/bottomTab/home_active.png -------------------------------------------------------------------------------- /src/assets/images/bottomTab/statistics.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/bottomTab/statistics.png -------------------------------------------------------------------------------- /src/assets/images/bottomTab/task_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/bottomTab/task_active.png -------------------------------------------------------------------------------- /src/assets/images/completedTask/trash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/completedTask/trash.png -------------------------------------------------------------------------------- /src/assets/images/forgotPass/forgotPass.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/forgotPass/forgotPass.png -------------------------------------------------------------------------------- /src/assets/images/forgotPass/ic_message.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/forgotPass/ic_message.png -------------------------------------------------------------------------------- /src/assets/images/notification/cancel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/notification/cancel.png -------------------------------------------------------------------------------- /src/assets/images/notification/service.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/notification/service.png -------------------------------------------------------------------------------- /src/assets/images/notification/success.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/notification/success.png -------------------------------------------------------------------------------- /src/theme/assets/images/sparkles-bottom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/theme/assets/images/sparkles-bottom.png -------------------------------------------------------------------------------- /src/theme/assets/images/sparkles-right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/theme/assets/images/sparkles-right.png -------------------------------------------------------------------------------- /src/theme/themes/default_dark/index.js: -------------------------------------------------------------------------------- 1 | export { default as Variables } from './Variables'; 2 | export { default as Images } from './Images'; 3 | -------------------------------------------------------------------------------- /android/app/src/main/res/ic_launcher-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/android/app/src/main/res/ic_launcher-web.png -------------------------------------------------------------------------------- /src/assets/fonts/OpenSans-ExtraBoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/fonts/OpenSans-ExtraBoldItalic.ttf -------------------------------------------------------------------------------- /src/assets/fonts/OpenSans-SemiBoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/fonts/OpenSans-SemiBoldItalic.ttf -------------------------------------------------------------------------------- /src/assets/images/StartScreen/management.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/StartScreen/management.png -------------------------------------------------------------------------------- /src/theme/assets/images/sparkles-top-left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/theme/assets/images/sparkles-top-left.png -------------------------------------------------------------------------------- /.prettierrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | arrowParens: 'avoid', 3 | bracketSameLine: false, 4 | singleQuote: true, 5 | trailingComma: 'all', 6 | }; 7 | -------------------------------------------------------------------------------- /src/assets/images/StartScreen/productivity.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/StartScreen/productivity.png -------------------------------------------------------------------------------- /src/assets/images/bottomTab/profile_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/bottomTab/profile_active.png -------------------------------------------------------------------------------- /src/assets/images/notification/vertification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/notification/vertification.png -------------------------------------------------------------------------------- /src/theme/assets/images/sparkles-bottom-left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/theme/assets/images/sparkles-bottom-left.png -------------------------------------------------------------------------------- /src/theme/assets/images/sparkles-top-right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/theme/assets/images/sparkles-top-right.png -------------------------------------------------------------------------------- /src/translations/resources/en/common.json: -------------------------------------------------------------------------------- 1 | { 2 | "appName": { 3 | "full": "React Native MyApp", 4 | "initials": "RNB" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /src/translations/resources/fr/common.json: -------------------------------------------------------------------------------- 1 | { 2 | "appName": { 3 | "full": "MyApp React Native", 4 | "initials": "RNB" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/splash_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/android/app/src/main/res/drawable/splash_icon.png -------------------------------------------------------------------------------- /src/assets/images/bottomTab/statistics_active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/assets/images/bottomTab/statistics_active.png -------------------------------------------------------------------------------- /src/theme/assets/images/sparkles-bottom-right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/src/theme/assets/images/sparkles-bottom-right.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-ldpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/android/app/src/main/res/mipmap-ldpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /ios/MyApp/Images.xcassets/AppIcon.appiconset/100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/ios/MyApp/Images.xcassets/AppIcon.appiconset/100.png -------------------------------------------------------------------------------- /ios/MyApp/Images.xcassets/AppIcon.appiconset/102.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/ios/MyApp/Images.xcassets/AppIcon.appiconset/102.png -------------------------------------------------------------------------------- /ios/MyApp/Images.xcassets/AppIcon.appiconset/1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/ios/MyApp/Images.xcassets/AppIcon.appiconset/1024.png -------------------------------------------------------------------------------- /ios/MyApp/Images.xcassets/AppIcon.appiconset/114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/ios/MyApp/Images.xcassets/AppIcon.appiconset/114.png -------------------------------------------------------------------------------- /ios/MyApp/Images.xcassets/AppIcon.appiconset/120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/ios/MyApp/Images.xcassets/AppIcon.appiconset/120.png -------------------------------------------------------------------------------- /ios/MyApp/Images.xcassets/AppIcon.appiconset/128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/ios/MyApp/Images.xcassets/AppIcon.appiconset/128.png -------------------------------------------------------------------------------- /ios/MyApp/Images.xcassets/AppIcon.appiconset/144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/ios/MyApp/Images.xcassets/AppIcon.appiconset/144.png -------------------------------------------------------------------------------- /ios/MyApp/Images.xcassets/AppIcon.appiconset/152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/ios/MyApp/Images.xcassets/AppIcon.appiconset/152.png -------------------------------------------------------------------------------- /ios/MyApp/Images.xcassets/AppIcon.appiconset/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/ios/MyApp/Images.xcassets/AppIcon.appiconset/16.png -------------------------------------------------------------------------------- /ios/MyApp/Images.xcassets/AppIcon.appiconset/167.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/ios/MyApp/Images.xcassets/AppIcon.appiconset/167.png -------------------------------------------------------------------------------- /ios/MyApp/Images.xcassets/AppIcon.appiconset/172.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/ios/MyApp/Images.xcassets/AppIcon.appiconset/172.png -------------------------------------------------------------------------------- /ios/MyApp/Images.xcassets/AppIcon.appiconset/180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/ios/MyApp/Images.xcassets/AppIcon.appiconset/180.png -------------------------------------------------------------------------------- /ios/MyApp/Images.xcassets/AppIcon.appiconset/196.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/ios/MyApp/Images.xcassets/AppIcon.appiconset/196.png -------------------------------------------------------------------------------- /ios/MyApp/Images.xcassets/AppIcon.appiconset/20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/ios/MyApp/Images.xcassets/AppIcon.appiconset/20.png -------------------------------------------------------------------------------- /ios/MyApp/Images.xcassets/AppIcon.appiconset/216.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/ios/MyApp/Images.xcassets/AppIcon.appiconset/216.png -------------------------------------------------------------------------------- /ios/MyApp/Images.xcassets/AppIcon.appiconset/256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/ios/MyApp/Images.xcassets/AppIcon.appiconset/256.png -------------------------------------------------------------------------------- /ios/MyApp/Images.xcassets/AppIcon.appiconset/29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/ios/MyApp/Images.xcassets/AppIcon.appiconset/29.png -------------------------------------------------------------------------------- /ios/MyApp/Images.xcassets/AppIcon.appiconset/32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/ios/MyApp/Images.xcassets/AppIcon.appiconset/32.png -------------------------------------------------------------------------------- /ios/MyApp/Images.xcassets/AppIcon.appiconset/40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/ios/MyApp/Images.xcassets/AppIcon.appiconset/40.png -------------------------------------------------------------------------------- /ios/MyApp/Images.xcassets/AppIcon.appiconset/48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/ios/MyApp/Images.xcassets/AppIcon.appiconset/48.png -------------------------------------------------------------------------------- /ios/MyApp/Images.xcassets/AppIcon.appiconset/50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/ios/MyApp/Images.xcassets/AppIcon.appiconset/50.png -------------------------------------------------------------------------------- /ios/MyApp/Images.xcassets/AppIcon.appiconset/512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/ios/MyApp/Images.xcassets/AppIcon.appiconset/512.png -------------------------------------------------------------------------------- /ios/MyApp/Images.xcassets/AppIcon.appiconset/55.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/ios/MyApp/Images.xcassets/AppIcon.appiconset/55.png -------------------------------------------------------------------------------- /ios/MyApp/Images.xcassets/AppIcon.appiconset/57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/ios/MyApp/Images.xcassets/AppIcon.appiconset/57.png -------------------------------------------------------------------------------- /ios/MyApp/Images.xcassets/AppIcon.appiconset/58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/ios/MyApp/Images.xcassets/AppIcon.appiconset/58.png -------------------------------------------------------------------------------- /ios/MyApp/Images.xcassets/AppIcon.appiconset/60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/ios/MyApp/Images.xcassets/AppIcon.appiconset/60.png -------------------------------------------------------------------------------- /ios/MyApp/Images.xcassets/AppIcon.appiconset/64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/ios/MyApp/Images.xcassets/AppIcon.appiconset/64.png -------------------------------------------------------------------------------- /ios/MyApp/Images.xcassets/AppIcon.appiconset/66.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/ios/MyApp/Images.xcassets/AppIcon.appiconset/66.png -------------------------------------------------------------------------------- /ios/MyApp/Images.xcassets/AppIcon.appiconset/72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/ios/MyApp/Images.xcassets/AppIcon.appiconset/72.png -------------------------------------------------------------------------------- /ios/MyApp/Images.xcassets/AppIcon.appiconset/76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/ios/MyApp/Images.xcassets/AppIcon.appiconset/76.png -------------------------------------------------------------------------------- /ios/MyApp/Images.xcassets/AppIcon.appiconset/80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/ios/MyApp/Images.xcassets/AppIcon.appiconset/80.png -------------------------------------------------------------------------------- /ios/MyApp/Images.xcassets/AppIcon.appiconset/87.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/ios/MyApp/Images.xcassets/AppIcon.appiconset/87.png -------------------------------------------------------------------------------- /ios/MyApp/Images.xcassets/AppIcon.appiconset/88.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/ios/MyApp/Images.xcassets/AppIcon.appiconset/88.png -------------------------------------------------------------------------------- /ios/MyApp/Images.xcassets/AppIcon.appiconset/92.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/ios/MyApp/Images.xcassets/AppIcon.appiconset/92.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #000000 4 | 5 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | # You may use http://rbenv.org/ or https://rvm.io/ to install and use this version 4 | ruby ">= 2.6.10" 5 | 6 | gem 'cocoapods', '~> 1.12' 7 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /ios/MyApp/Images.xcassets/SplashIcon.imageset/Splash_icon@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/ios/MyApp/Images.xcassets/SplashIcon.imageset/Splash_icon@1x.png -------------------------------------------------------------------------------- /ios/MyApp/Images.xcassets/SplashIcon.imageset/Splash_icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/ios/MyApp/Images.xcassets/SplashIcon.imageset/Splash_icon@2x.png -------------------------------------------------------------------------------- /ios/MyApp/Images.xcassets/SplashIcon.imageset/Splash_icon@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/ios/MyApp/Images.xcassets/SplashIcon.imageset/Splash_icon@3x.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/QuocVietHa08/pomodoro-goal/HEAD/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/values/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #302f46 4 | 5 | -------------------------------------------------------------------------------- /src/utils/fun.js: -------------------------------------------------------------------------------- 1 | export const delay = value => { 2 | return new Promise(resolve => { 3 | const t = setTimeout(() => { 4 | clearTimeout(t); 5 | resolve(); 6 | }, value); 7 | }); 8 | }; 9 | -------------------------------------------------------------------------------- /src/translations/resources/en/_index.js: -------------------------------------------------------------------------------- 1 | import common from './common.json'; 2 | import example from './example.json'; 3 | import welcome from './welcome.json'; 4 | export default { 5 | common, 6 | example, 7 | welcome, 8 | }; 9 | -------------------------------------------------------------------------------- /src/translations/resources/fr/_index.js: -------------------------------------------------------------------------------- 1 | import common from './common.json'; 2 | import example from './example.json'; 3 | import welcome from './welcome.json'; 4 | export default { 5 | common, 6 | example, 7 | welcome, 8 | }; 9 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @format 3 | */ 4 | 5 | import { AppRegistry } from 'react-native'; 6 | import App from './src/App'; 7 | import { name as appName } from './app.json'; 8 | 9 | AppRegistry.registerComponent(appName, () => App); 10 | -------------------------------------------------------------------------------- /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "plugins": [ 3 | [ 4 | "module-resolver", 5 | { 6 | "root": [ 7 | "./" 8 | ], 9 | "alias": { 10 | "src": "./src" 11 | } 12 | } 13 | ] 14 | ] 15 | } -------------------------------------------------------------------------------- /ios/MyApp/main.m: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | #import "AppDelegate.h" 4 | 5 | int main(int argc, char *argv[]) 6 | { 7 | @autoreleasepool { 8 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/assets/icons/login/ic_tick.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/theme/themes/default_dark/Images.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Images should be stored in the `App/Images` directory and referenced using variables defined here. 3 | */ 4 | export default function () { 5 | return { 6 | logo: require('../../assets/images/tom_dark.png'), 7 | }; 8 | } 9 | -------------------------------------------------------------------------------- /android/settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'MyApp' 2 | apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings) 3 | include ':app' 4 | includeBuild('../node_modules/@react-native/gradle-plugin') 5 | -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.1-all.zip 4 | networkTimeout=10000 5 | zipStoreBase=GRADLE_USER_HOME 6 | zipStorePath=wrapper/dists 7 | -------------------------------------------------------------------------------- /src/screens/Timer/CurrentTask.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Text, View } from 'react-native'; 3 | 4 | const CurrentTask = ({ item }) => { 5 | return ( 6 | 7 | CurrentTask 8 | 9 | ); 10 | }; 11 | 12 | export default CurrentTask; 13 | -------------------------------------------------------------------------------- /jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "experimentalDecorators": true, 4 | "allowSyntheticDefaultImports": true, 5 | "baseUrl": ".", 6 | "paths": { 7 | "src/*": [ 8 | "./src/*" 9 | ] 10 | }, 11 | }, 12 | "exclude": [ 13 | "node_modules" 14 | ] 15 | } -------------------------------------------------------------------------------- /src/screens/TodayTask/TodayTask.styles.js: -------------------------------------------------------------------------------- 1 | import { StyleSheet } from 'react-native'; 2 | const styles = StyleSheet.create({ 3 | container: { 4 | flex: 1, 5 | paddingTop: 60, 6 | paddingHorizontal: 15, 7 | backgroundColor: '#fcfcfc', 8 | }, 9 | }); 10 | 11 | export default styles; 12 | -------------------------------------------------------------------------------- /src/store/persistConfig.js: -------------------------------------------------------------------------------- 1 | import AsyncStorage from '@react-native-async-storage/async-storage'; 2 | 3 | const persistConfig = ({ key, whitelist = [] }) => ({ 4 | key, 5 | version: 1, 6 | storage: AsyncStorage, 7 | timeout: 0, 8 | whitelist, 9 | }); 10 | 11 | export default persistConfig; 12 | -------------------------------------------------------------------------------- /ios/MyApp.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/screens/Notification/Notification.styles.js: -------------------------------------------------------------------------------- 1 | import { StyleSheet } from 'react-native'; 2 | 3 | const styles = StyleSheet.create({ 4 | container: { 5 | flex: 1, 6 | paddingTop: 60, 7 | paddingHorizontal: 15, 8 | backgroundColor: '#fcfcfc', 9 | }, 10 | }); 11 | 12 | export default styles; 13 | -------------------------------------------------------------------------------- /src/screens/ReminderRingTone/ReminderRingTone.styles.js: -------------------------------------------------------------------------------- 1 | import { StyleSheet } from 'react-native'; 2 | 3 | const styles = StyleSheet.create({ 4 | container: { 5 | flex: 1, 6 | paddingTop: 60, 7 | paddingHorizontal: 15, 8 | backgroundColor: '#fcfcfc', 9 | }, 10 | }) 11 | 12 | export default styles; -------------------------------------------------------------------------------- /ios/MyApp.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.formatOnSave": true, 3 | "[javascript]": { 4 | "editor.formatOnSave": false 5 | }, 6 | "editor.defaultFormatter": "esbenp.prettier-vscode", 7 | "editor.codeActionsOnSave": { 8 | "source.fixAll.eslint": "explicit" 9 | }, 10 | "prettier.requireConfig": true 11 | } 12 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /ios/MyApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/services/modules/users/index.js: -------------------------------------------------------------------------------- 1 | import { api } from '../../api'; 2 | export const userApi = api.injectEndpoints({ 3 | endpoints: build => ({ 4 | fetchOne: build.query({ 5 | query: id => `/users/${id}`, 6 | }), 7 | }), 8 | overrideExisting: false, 9 | }); 10 | export const { useLazyFetchOneQuery } = userApi; 11 | -------------------------------------------------------------------------------- /android/app/src/main/res/layout/launch_screen.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | -------------------------------------------------------------------------------- /src/theme/index.js: -------------------------------------------------------------------------------- 1 | export { default as themes } from './themes'; 2 | export { default as Common } from './Common'; 3 | export { default as Fonts } from './Fonts'; 4 | export { default as Gutters } from './Gutters'; 5 | export { default as Images } from './Images'; 6 | export { default as Layout } from './Layout'; 7 | export { default as DefaultVariables } from './Variables'; 8 | -------------------------------------------------------------------------------- /src/translations/resources/fr/welcome.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": "Bienvenue sur", 3 | "subtitle": "Le $t(common:appName.full)", 4 | "description": "Vous voulez découvrir des fonctionnalités ? Cliquez sur l'un des trois boutons en bas de l'écran. Le premier vous permet d'appeler une API REST. Le deuxième de changer la couleur du thème. Et le troisième de changer la langue" 5 | } 6 | -------------------------------------------------------------------------------- /src/translations/resources/en/welcome.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": "Welcome on", 3 | "subtitle": "The $t(common:appName.full)", 4 | "description": "Do you want to discover some features? Just click on one of the three buttons at the bottom of the screen. The first allows you to call a REST API. The second lets you change the theme color. And the third allows you to change the language." 5 | } 6 | -------------------------------------------------------------------------------- /src/utils/hookApi.js: -------------------------------------------------------------------------------- 1 | // eslint-disable-next-line no-unused-vars 2 | import React, { useEffect, useRef } from 'react'; 3 | 4 | export const usePrevious = value => { 5 | const ref = useRef(); 6 | useEffect(() => { 7 | ref.current = value; 8 | }); 9 | if (typeof value == 'object' && Array.isArray(value) && !ref.current) 10 | return []; 11 | return ref.current; 12 | }; 13 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/splash_screen.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/store/rootReducer.js: -------------------------------------------------------------------------------- 1 | import { combineReducers } from '@reduxjs/toolkit'; 2 | import authReducer from './auth/authReducer'; 3 | import theme from './theme'; 4 | import appReducer from './app/appReducer'; 5 | import { api } from 'src/services/api'; 6 | const rootReducer = combineReducers({ 7 | authReducer, 8 | appReducer, 9 | theme, 10 | [api.reducer]: api.reducer, 11 | }); 12 | 13 | export default rootReducer; 14 | -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: ['module:metro-react-native-babel-preset'], 3 | plugins: [ 4 | // [ 5 | // 'module-resolver', 6 | // { 7 | // root: ['./'], 8 | // extensions: ['.js', '.json'], 9 | // alias: { 10 | // src: './src', 11 | // }, 12 | // }, 13 | // ], 14 | 'inline-dotenv', 15 | 'react-native-reanimated/plugin', 16 | ], 17 | }; 18 | -------------------------------------------------------------------------------- /src/screens/ReminderRingTone/ReminderRingTone.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import styles from './ReminderRingTone.styles'; 3 | import { View } from 'react-native'; 4 | import HeaderWrap from 'src/components/HeaderWrap'; 5 | 6 | const ReminderRingTone = () => { 7 | return ( 8 | 9 | 10 | 11 | ) 12 | } 13 | 14 | export default ReminderRingTone -------------------------------------------------------------------------------- /src/theme/themes/default_dark/Variables.js: -------------------------------------------------------------------------------- 1 | export const Colors = { 2 | primary: '#7454a5', 3 | textGray800: '#E0E0E0', 4 | textGray400: '#969696', 5 | textGray200: '#BABABA', 6 | inputBackground: '#3a3a3a', 7 | circleButtonBackground: '#252732', 8 | }; 9 | export const NavigationColors = { 10 | primary: Colors.primary, 11 | background: '#1B1A23', 12 | card: '#1B1A23', 13 | }; 14 | export default { 15 | Colors, 16 | NavigationColors, 17 | }; 18 | -------------------------------------------------------------------------------- /src/assets/icons/login/ic_facebook.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /android/app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | -------------------------------------------------------------------------------- /android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/services/api.js: -------------------------------------------------------------------------------- 1 | import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'; 2 | const baseQuery = fetchBaseQuery({ 3 | baseUrl: process.env.API_URL, 4 | }); 5 | const baseQueryWithInterceptor = async (args, api, extraOptions) => { 6 | let result = await baseQuery(args, api, extraOptions); 7 | if (result.error && result.error.status === 401) { 8 | } 9 | return result; 10 | }; 11 | export const api = createApi({ 12 | baseQuery: baseQueryWithInterceptor, 13 | endpoints: () => ({}), 14 | }); 15 | -------------------------------------------------------------------------------- /ios/.xcode.env: -------------------------------------------------------------------------------- 1 | # This `.xcode.env` file is versioned and is used to source the environment 2 | # used when running script phases inside Xcode. 3 | # To customize your local environment, you can create an `.xcode.env.local` 4 | # file that is not versioned. 5 | 6 | # NODE_BINARY variable contains the PATH to the node executable. 7 | # 8 | # Customize the NODE_BINARY variable here. 9 | # For example, to use nvm with brew, add the following line 10 | # . "$(brew --prefix nvm)/nvm.sh" --no-use 11 | export NODE_BINARY=$(command -v node) 12 | -------------------------------------------------------------------------------- /ios/MyApp/Images.xcassets/SplashIcon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "Webp.net-resizeimage (2).png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "Webp.net-resizeimage (1).png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "Webp.net-resizeimage.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | env: { 3 | 'jest/globals': true, 4 | }, 5 | root: true, 6 | extends: '@react-native', 7 | rules: { 8 | 'react-hooks/exhaustive-deps': 'off', 9 | quotes: ['error', 'single'], 10 | 'object-curly-spacing': ['error', 'always'], 11 | 'array-bracket-spacing': ['error', 'never'], 12 | 'react/require-default-props': ['error'], 13 | 'react/default-props-match-prop-types': ['error'], 14 | 'react/sort-prop-types': ['error'], 15 | }, 16 | settings: { 17 | 'import/resolver': { 18 | 'babel-module': {}, 19 | }, 20 | }, 21 | }; 22 | -------------------------------------------------------------------------------- /src/App.test.js: -------------------------------------------------------------------------------- 1 | import 'react-native'; 2 | import React from 'react'; 3 | import App from './App'; 4 | // Note: import explicitly to use the types shiped with jest. 5 | import { it } from '@jest/globals'; 6 | // Note: test renderer must be required after react-native. 7 | import { Provider } from 'react-redux'; 8 | import { store } from './store'; 9 | import { render } from '@testing-library/react-native'; 10 | it('App renders correctly', () => { 11 | const component = ( 12 | 13 | 14 | 15 | ); 16 | render(component); 17 | expect(component).toBeDefined(); 18 | }); 19 | -------------------------------------------------------------------------------- /src/screens/Goal/ModalDetailGoal.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Text, View } from 'react-native'; 3 | import ReactNativeModal from 'react-native-modal'; 4 | import styles from './Goal.styles'; 5 | const ModalDetailGoal = ({ isVisible, item, onClose }) => { 6 | return ( 7 | 8 | 9 | {item?.title} 10 | {item?.content} 11 | 12 | 13 | ); 14 | }; 15 | 16 | export default ModalDetailGoal; 17 | -------------------------------------------------------------------------------- /src/utils/supabase.js: -------------------------------------------------------------------------------- 1 | import 'react-native-url-polyfill/auto'; 2 | import AsyncStorage from '@react-native-async-storage/async-storage'; 3 | import { createClient } from '@supabase/supabase-js'; 4 | 5 | const supabaseUrl = 'https://vutqurcekhtqnsaqoemh.supabase.co'; 6 | const supabaseAnonKey = 7 | 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiYW5vbiIsImlhdCI6MTYyMDExODE5MywiZXhwIjoxOTM1Njk0MTkzfQ.KnGyf0L285j1IOGqN08dNmRlHFMIqMtIkjOmASHU_R4'; 8 | 9 | export const supabase = createClient(supabaseUrl, supabaseAnonKey, { 10 | auth: { 11 | storage: AsyncStorage, 12 | autoRefreshToken: true, 13 | persistSession: true, 14 | detectSessionInUrl: false, 15 | }, 16 | }); 17 | -------------------------------------------------------------------------------- /src/components/Brand/Brand.test.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { render, screen } from '@testing-library/react-native'; 3 | import Brand from './Brand'; 4 | import { Provider } from 'react-redux'; 5 | import { store } from '../../store'; 6 | test('render correctly', () => { 7 | const component = ( 8 | 9 | 10 | 11 | ); 12 | render(component); 13 | const wrapper = screen.getByTestId('brand-img-wrapper'); 14 | const img = screen.getByTestId('brand-img'); 15 | expect(wrapper.props.style.height).toBe(200); 16 | expect(wrapper.props.style.width).toBe(200); 17 | expect(img.props.resizeMode).toBe('contain'); 18 | }); 19 | -------------------------------------------------------------------------------- /android/build.gradle: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | 3 | buildscript { 4 | ext { 5 | buildToolsVersion = "33.0.0" 6 | minSdkVersion = 21 7 | compileSdkVersion = 33 8 | targetSdkVersion = 33 9 | 10 | // We use NDK 23 which has both M1 support and is the side-by-side NDK version from AGP. 11 | ndkVersion = "23.1.7779620" 12 | } 13 | repositories { 14 | google() 15 | mavenCentral() 16 | } 17 | dependencies { 18 | classpath("com.android.tools.build:gradle") 19 | classpath("com.facebook.react:react-native-gradle-plugin") 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/screens/Category/CategoryItem.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import styles from './Category.styles'; 3 | import { View } from 'react-native'; 4 | import TextView from 'src/components/TextView'; 5 | import TouchableDebounce from 'src/components/TouchableDebounce'; 6 | 7 | const CategoryItem = ({ item, onChoose }) => { 8 | return ( 9 | onChoose(item)}> 10 | 11 | 12 | {item?.name} 13 | 14 | 15 | ); 16 | }; 17 | 18 | export default CategoryItem; 19 | -------------------------------------------------------------------------------- /src/translations/index.js: -------------------------------------------------------------------------------- 1 | import i18n from 'i18next'; 2 | import { initReactI18next } from 'react-i18next'; 3 | import * as resources from './resources'; 4 | const ns = Object.keys(Object.values(resources)[0]); 5 | export const defaultNS = ns[0]; 6 | i18n.use(initReactI18next).init({ 7 | ns, 8 | defaultNS, 9 | resources: { 10 | ...Object.entries(resources).reduce( 11 | (acc, [key, value]) => ({ 12 | ...acc, 13 | [key]: value, 14 | }), 15 | {}, 16 | ), 17 | }, 18 | lng: 'en', 19 | fallbackLng: 'en', 20 | interpolation: { 21 | escapeValue: false, // not needed for react as it escapes by default 22 | }, 23 | compatibilityJSON: 'v3', 24 | }); 25 | export default i18n; 26 | -------------------------------------------------------------------------------- /src/assets/icons/login/profile/ic_avatar_default.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/utils/appwrite/AppwriteContext.js: -------------------------------------------------------------------------------- 1 | import React, { createContext } from 'react'; 2 | 3 | import Appwrite from './service'; 4 | import { useState } from 'react'; 5 | 6 | export const AppwriteContext = createContext({ 7 | appwrite: new Appwrite(), 8 | isLoggedIn: false, 9 | setIsLoggedIn: () => {}, 10 | }); 11 | 12 | export const AppwriteProvider = ({ children }) => { 13 | const [isLoggedIn, setIsLoggedIn] = useState(false); 14 | const defaultValue = { 15 | appwrite: new Appwrite(), 16 | isLoggedIn, 17 | setIsLoggedIn, 18 | }; 19 | return ( 20 | 21 | {children} 22 | 23 | ); 24 | }; 25 | 26 | export default AppwriteContext; 27 | -------------------------------------------------------------------------------- /jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | preset: 'react-native', 3 | moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json'], 4 | setupFilesAfterEnv: [ 5 | './node_modules/react-native-gesture-handler/jestSetup.js', 6 | '/jest.setup.js', 7 | ], 8 | transformIgnorePatterns: [ 9 | 'node_modules/(?!(jest-)?react-native|@react-native|@react-native-community|@react-navigation)', 10 | ], 11 | collectCoverageFrom: [ 12 | '/src/Components/**/*.jsx', 13 | '/src/App.jsx', 14 | '/src/Components/**/*.tsx', 15 | '/src/App.tsx', 16 | ], 17 | coverageReporters: ['html', 'text', 'text-summary', 'cobertura'], 18 | testMatch: ['**/*.test.ts?(x)', '**/*.test.js?(x)'], 19 | }; 20 | -------------------------------------------------------------------------------- /src/assets/icons/login/ic_apple.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/screens/Category/mockData.js: -------------------------------------------------------------------------------- 1 | export const categories = [ 2 | { 3 | id: 1, 4 | label: 'Study', 5 | value: 'study', 6 | name: 'Study', 7 | color: '#ff555d', 8 | }, 9 | { 10 | id: 2, 11 | label: 'Work', 12 | value: 'work', 13 | name: 'Work', 14 | color: '#22c065', 15 | }, 16 | { 17 | id: 3, 18 | label: 'Workout', 19 | value: 'workout', 20 | name: 'Workout', 21 | color: '#714dff', 22 | }, 23 | ]; 24 | 25 | export const LIST_COLOR = [ 26 | '#F9ED69', 27 | '#F08A5D', 28 | '#B83B5E', 29 | '#6A2C70', 30 | '#08D9D6', 31 | '#252A34', 32 | '#FF2E63', 33 | '#EAEAEA', 34 | '#FFF5E4', 35 | '#FFE3E1', 36 | '#FFD1D1', 37 | '#A6B1E1', 38 | '#424874', 39 | '#AD8B73', 40 | '#CEAB93', 41 | '#E3CAA5', 42 | ]; 43 | -------------------------------------------------------------------------------- /src/screens/EditProfile/EditProfile.styles.js: -------------------------------------------------------------------------------- 1 | const { StyleSheet } = require("react-native"); 2 | 3 | const styles = StyleSheet.create({ 4 | container: { 5 | flex: 1, 6 | paddingTop: 60, 7 | paddingHorizontal: 15, 8 | backgroundColor: '#fcfcfc', 9 | }, 10 | formWrap: { 11 | flex: 1, 12 | position: 'relative', 13 | }, 14 | input: { 15 | marginVertical: 10, 16 | }, 17 | buttonTextStyle: { 18 | color: 'white', 19 | }, 20 | buttonNext: { 21 | marginTop: 50, 22 | width: '100%', 23 | height: 50, 24 | backgroundColor: '#ff585d', 25 | borderRadius: 50, 26 | display: 'flex', 27 | alignItems: 'center', 28 | justifyContent: 'center', 29 | position: 'absolute', 30 | bottom: 50, 31 | }, 32 | }) 33 | 34 | export default styles; -------------------------------------------------------------------------------- /src/screens/Task/CustomCalendar.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { View } from 'react-native'; 3 | import TextView from 'src/components/TextView'; 4 | import styles from './Task.styles'; 5 | import { HOURS } from './constant'; 6 | import CalendarEvent from './CalendarEvent'; 7 | 8 | const CustomCalendar = ({ events }) => { 9 | return ( 10 | 11 | {HOURS.map(hour => { 12 | const event = events?.find(e => e.time === hour); 13 | 14 | return ( 15 | 16 | {hour} 17 | 18 | 19 | ); 20 | })} 21 | 22 | ); 23 | }; 24 | 25 | export default CustomCalendar; 26 | -------------------------------------------------------------------------------- /android/app/src/release/java/com/myapp/ReactNativeFlipper.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Meta Platforms, Inc. and affiliates. 3 | * 4 | *

This source code is licensed under the MIT license found in the LICENSE file in the root 5 | * directory of this source tree. 6 | */ 7 | package com.myapp; 8 | 9 | import android.content.Context; 10 | import com.facebook.react.ReactInstanceManager; 11 | 12 | /** 13 | * Class responsible of loading Flipper inside your React Native application. This is the release 14 | * flavor of it so it's empty as we don't want to load Flipper. 15 | */ 16 | public class ReactNativeFlipper { 17 | public static void initializeFlipper(Context context, ReactInstanceManager reactInstanceManager) { 18 | // Do nothing as we don't want to initialize Flipper on Release. 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/screens/AppSetting/AppSetting.styles.js: -------------------------------------------------------------------------------- 1 | import { StyleSheet } from 'react-native'; 2 | 3 | const styles = StyleSheet.create({ 4 | container: { 5 | flex: 1, 6 | paddingTop: 60, 7 | paddingHorizontal: 15, 8 | backgroundColor: '#fcfcfc', 9 | }, 10 | itemWrap: { 11 | width: '100%', 12 | display: 'flex', 13 | flexDirection: 'row', 14 | justifyContent: 'flex-start', 15 | alignItems: 'center', 16 | gap: 25, 17 | padding: 10, 18 | marginVertical: 5, 19 | position: 'relative', 20 | }, 21 | switchWrap: { 22 | position: 'absolute', 23 | right: 0, 24 | }, 25 | iconStyle: { 26 | width: 25, 27 | height: 25, 28 | }, 29 | textStyle: { 30 | fontSize: 18, 31 | fontWeight: 'semibold', 32 | }, 33 | }); 34 | 35 | export default styles; -------------------------------------------------------------------------------- /metro.config.js: -------------------------------------------------------------------------------- 1 | const { getDefaultConfig, mergeConfig } = require('@react-native/metro-config'); 2 | 3 | /** 4 | * Metro configuration 5 | * https://facebook.github.io/metro/docs/configuration 6 | * 7 | * @type {import('metro-config').MetroConfig} 8 | */ 9 | // const { 10 | // resolver: { sourceExts, assetExts }, 11 | // } = getDefaultConfig(); 12 | 13 | const defaultConfig = getDefaultConfig(__dirname); 14 | const { assetExts, sourceExts } = defaultConfig.resolver; 15 | 16 | const config = { 17 | transformer: { 18 | babelTransformerPath: require.resolve('react-native-svg-transformer'), 19 | }, 20 | resolver: { 21 | assetExts: assetExts.filter(ext => ext !== 'svg'), 22 | sourceExts: [...sourceExts, 'svg'], 23 | }, 24 | }; 25 | 26 | module.exports = mergeConfig(defaultConfig, config); 27 | -------------------------------------------------------------------------------- /src/screens/AllCompletedTask/AllCompletedTask.styles.js: -------------------------------------------------------------------------------- 1 | import { StyleSheet } from 'react-native'; 2 | const styles = StyleSheet.create({ 3 | container: { 4 | flex: 1, 5 | paddingTop: 60, 6 | paddingHorizontal: 15, 7 | backgroundColor: '#fcfcfc', 8 | }, 9 | deteleIconContainer: { 10 | display: 'flex', 11 | justifyContent: 'center', 12 | alignItems: 'center', 13 | marginLeft: 20, 14 | width: 50, 15 | height: 100, 16 | }, 17 | deleteIconWrap: { 18 | alignItems: 'center', 19 | alignContent: 'center', 20 | justifyContent: 'center', 21 | width: '100%', 22 | height: '80%', 23 | backgroundColor: '#fee8eb', 24 | borderRadius: 10, 25 | }, 26 | 27 | deleteIcon: { 28 | width: 25, 29 | height: 25, 30 | }, 31 | }); 32 | 33 | export default styles; 34 | -------------------------------------------------------------------------------- /src/screens/FillProfile/FillProfile.styles.js: -------------------------------------------------------------------------------- 1 | import { StyleSheet, Dimensions } from 'react-native'; 2 | import { AppTheme, Dimens, scaleSize } from '../../utils/appConstant'; 3 | const { width, height } = Dimensions.get('window'); 4 | 5 | export default StyleSheet.create({ 6 | container: { 7 | flex: 1, 8 | alignItems: 'center', 9 | textAlign: 'center', 10 | paddingTop: 60, 11 | paddingHorizontal: 20, 12 | backgroundColor: AppTheme.colors.white, 13 | }, 14 | titleHeader: { 15 | fontSize: AppTheme.fontSize.s30, 16 | color: AppTheme.colors.black, 17 | fontWeight: 700, 18 | textAlign: 'center', 19 | marginBottom: 10, 20 | }, 21 | subTitle: { 22 | fontSize: AppTheme.fontSize.s16, 23 | color: AppTheme.colors.black, 24 | fontWeight: 400, 25 | textAlign: 'center', 26 | }, 27 | }); 28 | -------------------------------------------------------------------------------- /ios/MyAppTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /src/theme/Images.js: -------------------------------------------------------------------------------- 1 | export default function ({}) { 2 | return { 3 | logo: require('./assets/images/tom_light.png'), 4 | sparkles: { 5 | topLeft: require('./assets/images/sparkles-top-left.png'), 6 | top: require('./assets/images/sparkles-top.png'), 7 | topRight: require('./assets/images/sparkles-top-right.png'), 8 | right: require('./assets/images/sparkles-right.png'), 9 | bottomRight: require('./assets/images/sparkles-bottom-right.png'), 10 | bottom: require('./assets/images/sparkles-bottom.png'), 11 | bottomLeft: require('./assets/images/sparkles-bottom-left.png'), 12 | }, 13 | icons: { 14 | colors: require('./assets/images/colorswatch.png'), 15 | send: require('./assets/images/send.png'), 16 | translate: require('./assets/images/translate.png'), 17 | }, 18 | }; 19 | } 20 | -------------------------------------------------------------------------------- /src/screens/NotificationSetting/NotificationSetting.styles.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { StyleSheet } from 'react-native'; 3 | 4 | const styles = StyleSheet.create({ 5 | container: { 6 | flex: 1, 7 | paddingTop: 60, 8 | paddingHorizontal: 15, 9 | backgroundColor: '#fcfcfc', 10 | }, 11 | itemWrap: { 12 | width: '100%', 13 | display: 'flex', 14 | flexDirection: 'row', 15 | justifyContent: 'flex-start', 16 | alignItems: 'center', 17 | gap: 25, 18 | padding: 10, 19 | marginVertical: 5, 20 | position: 'relative', 21 | }, 22 | switchWrap: { 23 | position: 'absolute', 24 | right: 0, 25 | }, 26 | iconStyle: { 27 | width: 25, 28 | height: 25, 29 | }, 30 | textStyle: { 31 | fontSize: 18, 32 | fontWeight: 'semibold', 33 | }, 34 | }) 35 | 36 | export default styles; -------------------------------------------------------------------------------- /src/App.js: -------------------------------------------------------------------------------- 1 | import 'react-native-gesture-handler'; 2 | import React from 'react'; 3 | import { Provider } from 'react-redux'; 4 | import { PersistGate } from 'redux-persist/lib/integration/react'; 5 | import { store, persistor } from './store'; 6 | import './translations'; 7 | import ApplicationStack from './navigators/ApplicationStack'; 8 | import { ToastProvider } from 'react-native-toast-notifications'; 9 | import CustomToast from './components/Toast'; 10 | 11 | const App = () => ( 12 | 13 | 14 | } 18 | > 19 | 20 | 21 | 22 | 23 | ); 24 | export default App; 25 | -------------------------------------------------------------------------------- /src/navigators/constants.js: -------------------------------------------------------------------------------- 1 | import { CardStyleInterpolators } from '@react-navigation/stack'; 2 | import { Platform } from 'react-native'; 3 | import RouteName from './RouteName'; 4 | 5 | const screenOptions = { 6 | headerShown: false, 7 | cardStyleInterpolator: Platform.select({ 8 | android: CardStyleInterpolators.forFadeFromBottomAndroid, 9 | ios: CardStyleInterpolators.forScaleFromCenterAndroid, 10 | }), 11 | tabBarHideOnKeyboard: true, 12 | adaptive: true, 13 | keyboardHidesTabBar: true, 14 | }; 15 | 16 | const BOTTOM_TAB_TITLE = { 17 | Home: 'Home', 18 | Task: 'Task', 19 | Statistics: 'Statistics', 20 | Goal: 'Goal', 21 | }; 22 | 23 | const routesBottomBar = [ 24 | RouteName.Home, 25 | RouteName.Task, 26 | RouteName.Statistics, 27 | RouteName.Goal, 28 | ]; 29 | 30 | export { screenOptions, BOTTOM_TAB_TITLE, routesBottomBar }; 31 | -------------------------------------------------------------------------------- /ios/MyApp/AppDelegate.mm: -------------------------------------------------------------------------------- 1 | #import "AppDelegate.h" 2 | 3 | #import 4 | 5 | @implementation AppDelegate 6 | 7 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 8 | { 9 | self.moduleName = @"MyApp"; 10 | // You can add your custom initial props in the dictionary below. 11 | // They will be passed down to the ViewController used by React Native. 12 | self.initialProps = @{}; 13 | 14 | return [super application:application didFinishLaunchingWithOptions:launchOptions]; 15 | } 16 | 17 | - (NSURL *)sourceURLForBridge:(RCTBridge *)bridge 18 | { 19 | #if DEBUG 20 | return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index"]; 21 | #else 22 | return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"]; 23 | #endif 24 | } 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /src/theme/Common.js: -------------------------------------------------------------------------------- 1 | /** 2 | * This file defines the base application styles. 3 | * 4 | * Use it to define generic component styles (e.g. the default text styles, default button styles...). 5 | */ 6 | import { StyleSheet } from 'react-native'; 7 | import buttonStyles from './components/Buttons'; 8 | export default function ({ Colors, ...args }) { 9 | return { 10 | button: buttonStyles({ Colors, ...args }), 11 | ...StyleSheet.create({ 12 | backgroundPrimary: { 13 | backgroundColor: Colors.primary, 14 | }, 15 | backgroundReset: { 16 | backgroundColor: Colors.transparent, 17 | }, 18 | textInput: { 19 | backgroundColor: Colors.inputBackground, 20 | color: Colors.textGray400, 21 | height: 45, 22 | borderRadius: 10, 23 | paddingStart: 20, 24 | }, 25 | }), 26 | }; 27 | } 28 | -------------------------------------------------------------------------------- /src/screens/FillProfile/FillProfile.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { View } from 'react-native'; 3 | import TextView from 'src/components/TextView'; 4 | import styles from './FillProfile.styles'; 5 | import ProfileAvatar from './ProfileAvatar'; 6 | import ProfileForm from './ProfileForm'; 7 | 8 | const FillProfile = () => { 9 | const handleEditAvatar = () => { 10 | console.log('hello'); 11 | }; 12 | 13 | return ( 14 | 15 | Fill you profile 16 | 17 | Don't worry, you can always change it later, or {'\n'} you can skip it 18 | for now 19 | 20 | 21 | 22 | 23 | ); 24 | }; 25 | 26 | export default FillProfile; 27 | -------------------------------------------------------------------------------- /src/components/RadioButton.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { View } from 'react-native'; 3 | import { AppTheme } from 'src/utils/appConstant'; 4 | 5 | const RadioButton = props => { 6 | return ( 7 | 21 | {props.selected ? ( 22 | 30 | ) : null} 31 | 32 | ); 33 | }; 34 | 35 | export default RadioButton; 36 | -------------------------------------------------------------------------------- /src/store/theme/index.js: -------------------------------------------------------------------------------- 1 | import { createSlice } from '@reduxjs/toolkit'; 2 | const slice = createSlice({ 3 | name: 'theme', 4 | initialState: { theme: 'default', darkMode: null }, 5 | reducers: { 6 | changeTheme: (state, { payload: { theme, darkMode } }) => { 7 | if (typeof theme !== 'undefined') { 8 | state.theme = theme; 9 | } 10 | if (typeof darkMode !== 'undefined') { 11 | state.darkMode = darkMode; 12 | } 13 | }, 14 | setDefaultTheme: (state, { payload: { theme, darkMode } }) => { 15 | if (!state.theme) { 16 | if (typeof theme !== 'undefined') { 17 | state.theme = theme; 18 | } 19 | if (typeof darkMode !== 'undefined') { 20 | state.darkMode = darkMode; 21 | } 22 | } 23 | }, 24 | }, 25 | }); 26 | export const { changeTheme, setDefaultTheme } = slice.actions; 27 | export default slice.reducer; 28 | -------------------------------------------------------------------------------- /src/screens/Notification/mockData.js: -------------------------------------------------------------------------------- 1 | export const notifications = [ 2 | { 3 | title: 'Congratulation', 4 | // eslint-disable-next-line quotes 5 | subTitle: "You've been focus for 2 hours", 6 | type: 'success', 7 | date: new Date(), 8 | }, 9 | { 10 | title: 'New Service is Available!', 11 | subTitle: 'Now you can do multi-task tracking', 12 | type: 'service', 13 | date: new Date(), 14 | }, 15 | { 16 | title: 'Subscription Cancelled', 17 | subTitle: 'You have cancelled you subscription', 18 | type: 'cancel', 19 | date: new Date(), 20 | }, 21 | { 22 | title: 'Vertification Successfull', 23 | subTitle: 'Account vertification complete', 24 | type: 'vertification', 25 | date: new Date(), 26 | }, 27 | { 28 | title: 'New Category is Available!', 29 | subTitle: 'Focus now buddy!', 30 | type: 'success', 31 | date: new Date(), 32 | }, 33 | ]; 34 | -------------------------------------------------------------------------------- /src/screens/Goal/Goal.styles.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { StyleSheet } from 'react-native'; 3 | import { AppTheme } from 'src/utils/appConstant'; 4 | 5 | const styles = StyleSheet.create({ 6 | container: { 7 | flex: 1, 8 | paddingTop: 60, 9 | paddingHorizontal: 15, 10 | backgroundColor: '#fcfcfc', 11 | }, 12 | 13 | goalItemWrap: { 14 | width: '100%', 15 | padding: 20, 16 | marginBottom: 10, 17 | borderWidth: 1, 18 | borderColor: AppTheme.colors.primary_1, 19 | color: AppTheme.colors.white, 20 | display: 'flex', 21 | flexDirection: 'row', 22 | alignItems: 'center', 23 | justifyContent: 'space-between', 24 | }, 25 | 26 | modalDetailGoal: { 27 | display: 'flex', 28 | alignItems: 'center', 29 | justifyContent: 'center', 30 | backgroundColor: '#fff', 31 | borderRadius: 5, 32 | padding: 15, 33 | }, 34 | }); 35 | 36 | export default styles; 37 | -------------------------------------------------------------------------------- /src/components/Brand/Brand.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { View, Image } from 'react-native'; 3 | import { useTheme } from '../../hooks'; 4 | import logo from '../../assets/images/logo.png'; 5 | import { StyleSheet } from 'react-native'; 6 | import FastImage from 'react-native-fast-image'; 7 | const Brand = ({ height, width, mode }) => { 8 | return ( 9 | 13 | 14 | {/* */} 15 | 16 | ); 17 | }; 18 | Brand.defaultProps = { 19 | height: 200, 20 | width: 200, 21 | mode: 'contain', 22 | }; 23 | 24 | const styles = StyleSheet.create({ 25 | brandWrapper: { 26 | backgroundColor: 'white', 27 | width: 300, 28 | height: 300, 29 | borderRadius: 50, 30 | }, 31 | }); 32 | export default Brand; 33 | -------------------------------------------------------------------------------- /src/assets/icons/login/ic_google.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/store/app/appReducer.js: -------------------------------------------------------------------------------- 1 | import { createSlice } from '@reduxjs/toolkit'; 2 | import persistReducer from 'redux-persist/es/persistReducer'; 3 | import persistConfig from '../persistConfig'; 4 | 5 | const initialState = { 6 | showBottomTabStatus: true, 7 | theme: 'light', 8 | }; 9 | const appSlice = createSlice({ 10 | name: 'appReducer', 11 | initialState: { ...initialState }, 12 | reducers: { 13 | setTheme: (state, action) => { 14 | return { 15 | ...state, 16 | theme: action.payload, 17 | }; 18 | }, 19 | setStatusBottomTab: (state, action) => { 20 | return { 21 | ...state, 22 | showBottomTabStatus: action.payload, 23 | }; 24 | }, 25 | }, 26 | }); 27 | 28 | export const { setStatusBottomTab, setTheme } = appSlice.actions; 29 | 30 | const appReducer = appSlice.reducer; 31 | export default persistReducer( 32 | persistConfig({ 33 | key: 'appReducer', 34 | whitelist: [''], 35 | }), 36 | appReducer, 37 | ); 38 | -------------------------------------------------------------------------------- /src/navigators/RouteName.js: -------------------------------------------------------------------------------- 1 | export default { 2 | StartScreen: 'StartScreen', 3 | AppBottomTab: 'AppBottomTab', 4 | Statistics: 'Statistics', 5 | Home: 'Home', 6 | Profile: 'Profile', 7 | TodayTask: 'TodayTask', 8 | Task: 'Task', 9 | StartUp: 'StartUp', 10 | SignIn: 'SignIn', 11 | SignUp: 'SignUp', 12 | Login: 'Login', 13 | LoginWithPass: 'LoginWithPass', 14 | FillProfile: 'FillProfile', 15 | ForgotPass: 'ForgotPass', 16 | Notification: 'Notification', 17 | NewTask: 'NewTask', 18 | Timer: 'Timer', 19 | CreateNewTask: 'CreateNewTask', 20 | Category: 'Category', 21 | AllCompletedTask: 'AllCompletedTask', 22 | // Profile 23 | EditProfile: 'EditProfile', 24 | AppSetting: 'AppSetting', 25 | ReminderRingTone: 'ReminderRingTone', 26 | NotificationSetting: 'NotificationSetting', 27 | Security: 'Security', 28 | UpgradeApp: 'UpgradeApp', 29 | // Timer 30 | CompletedTimer: 'CompletedTimer', 31 | // BottomTab 32 | BottomNewTask: 'BottomNewTask', 33 | Goal: 'Goal', 34 | }; 35 | -------------------------------------------------------------------------------- /src/screens/Startup/Startup.js: -------------------------------------------------------------------------------- 1 | import React, { useEffect } from 'react'; 2 | import { ActivityIndicator, StyleSheet, View } from 'react-native'; 3 | import { Brand } from '../../components'; 4 | 5 | const Startup = ({ navigation }) => { 6 | const init = async () => { 7 | await new Promise(resolve => 8 | setTimeout(() => { 9 | resolve(true); 10 | }, 2000), 11 | ); 12 | navigation.reset({ 13 | index: 0, 14 | routes: [{ name: 'StartScreen' }], 15 | }); 16 | }; 17 | useEffect(() => { 18 | init(); 19 | }, []); 20 | 21 | return ( 22 | 23 | 24 | 25 | 26 | ); 27 | }; 28 | 29 | const styles = StyleSheet.create({ 30 | startupWrapper: { 31 | flex: 1, 32 | width: '100%', 33 | height: '100%', 34 | backgroundColor: 'white', 35 | justifyContent: 'center', 36 | alignItems: 'center', 37 | gap: 100, 38 | }, 39 | }); 40 | export default Startup; 41 | -------------------------------------------------------------------------------- /src/theme/components/Buttons.js: -------------------------------------------------------------------------------- 1 | import { StyleSheet } from 'react-native'; 2 | export default function ({ Colors, Gutters, Layout }) { 3 | const base = { 4 | ...Layout.center, 5 | ...Gutters.regularHPadding, 6 | height: 40, 7 | backgroundColor: Colors.primary, 8 | }; 9 | const rounded = { 10 | ...base, 11 | borderRadius: 10, 12 | }; 13 | const circle = { 14 | ...Layout.center, 15 | height: 70, 16 | width: 70, 17 | borderRadius: 35, 18 | backgroundColor: Colors.circleButtonBackground, 19 | color: Colors.circleButtonColor, 20 | fill: Colors.circleButtonColor, 21 | }; 22 | return StyleSheet.create({ 23 | base, 24 | rounded, 25 | circle, 26 | outline: { 27 | ...base, 28 | backgroundColor: Colors.transparent, 29 | borderWidth: 2, 30 | borderColor: Colors.primary, 31 | }, 32 | outlineRounded: { 33 | ...rounded, 34 | backgroundColor: Colors.transparent, 35 | borderWidth: 2, 36 | borderColor: Colors.primary, 37 | }, 38 | }); 39 | } 40 | -------------------------------------------------------------------------------- /src/screens/NewTask/NewTask.styles.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { StyleSheet } from 'react-native'; 3 | import { AppTheme } from 'src/utils/appConstant'; 4 | 5 | const styles = StyleSheet.create({ 6 | container: { 7 | flex: 1, 8 | paddingTop: 60, 9 | paddingHorizontal: 15, 10 | backgroundColor: '#fcfcfc', 11 | position: 'relative', 12 | }, 13 | formCreateNewTask: { 14 | marginTop: 10, 15 | }, 16 | titleTextInput: { 17 | fontSize: AppTheme.fontSize.s14, 18 | fontWeight: 600, 19 | marginBottom: 5, 20 | color: AppTheme.colors.neutral_80, 21 | }, 22 | buttonNextWrap: { 23 | width: '100%', 24 | height: 50, 25 | position: 'absolute', 26 | bottom: 50, 27 | left: 20, 28 | }, 29 | buttonNext: { 30 | width: '100%', 31 | height: 50, 32 | backgroundColor: '#ff585d', 33 | borderRadius: 50, 34 | display: 'flex', 35 | alignItems: 'center', 36 | justifyContent: 'center', 37 | }, 38 | buttonTextStyle: { 39 | color: 'white', 40 | }, 41 | }); 42 | export default styles; 43 | -------------------------------------------------------------------------------- /src/screens/Timer/Timer.styles.js: -------------------------------------------------------------------------------- 1 | import { StyleSheet } from 'react-native'; 2 | import { AppTheme } from 'src/utils/appConstant'; 3 | 4 | const styles = StyleSheet.create({ 5 | container: { 6 | flex: 1, 7 | paddingTop: 60, 8 | paddingHorizontal: 15, 9 | backgroundColor: '#fcfcfc', 10 | position: 'relative', 11 | }, 12 | rightIconStyles: { 13 | width: 30, 14 | height: 30, 15 | color: 'red', 16 | }, 17 | timerCategory: { 18 | marginTop: 20, 19 | }, 20 | timerWrapper: { 21 | flex: 1, 22 | alignItems: 'center', 23 | backgroundColor: 'transparent', 24 | }, 25 | circularWrap: { 26 | marginTop: 50, 27 | }, 28 | buttonWrapper: { 29 | position: 'absolute', 30 | bottom: 50, 31 | display: 'flex', 32 | }, 33 | buttonStartStyle: {}, 34 | buttonCancelStyle: { 35 | backgroundColor: 'white', 36 | borderWidth: 1, 37 | borderColor: AppTheme.colors.primary_1, 38 | }, 39 | buttonCancelTextStyle: { 40 | color: AppTheme.colors.primary_1, 41 | }, 42 | }); 43 | export default styles; 44 | -------------------------------------------------------------------------------- /jest.setup.js: -------------------------------------------------------------------------------- 1 | import 'whatwg-fetch'; 2 | import 'react-native-gesture-handler/jestSetup'; 3 | import '@testing-library/jest-native/extend-expect'; 4 | 5 | jest.mock('react-native-reanimated', () => 6 | require('react-native-reanimated/mock'), 7 | ); 8 | 9 | jest.mock('redux-persist', () => { 10 | const real = jest.requireActual('redux-persist'); 11 | return { 12 | ...real, 13 | persistReducer: jest 14 | .fn() 15 | .mockImplementation((config, reducers) => reducers), 16 | }; 17 | }); 18 | 19 | // Silence the warning: Animated: `useNativeDriver` is not supported because the native animated module is missing 20 | jest.mock('react-native/Libraries/Animated/NativeAnimatedHelper'); 21 | 22 | jest.mock('react-i18next', () => ({ 23 | // this mock makes sure any components using the translation hook can use it without a warning being shown 24 | useTranslation: () => { 25 | return { 26 | t: str => str, 27 | i18n: { 28 | changeLanguage: () => new Promise(() => {}), 29 | }, 30 | }; 31 | }, 32 | initReactI18next: { 33 | type: '3rdParty', 34 | init: jest.fn(), 35 | }, 36 | })); 37 | -------------------------------------------------------------------------------- /android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 13 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /src/screens/Task/constant.js: -------------------------------------------------------------------------------- 1 | export const HOURS = [ 2 | '07:00 AM', 3 | '08:00 AM', 4 | '09:00 AM', 5 | '10:00 AM', 6 | '11:00 AM', 7 | '12:00 AM', 8 | '13:00 PM', 9 | '14:00 PM', 10 | '15:00 PM', 11 | '16:00 PM', 12 | '17:00 PM', 13 | '18:00 PM', 14 | '19:00 PM', 15 | '20:00 PM', 16 | '21:00 PM', 17 | ]; 18 | 19 | export const mockCalendarData = [ 20 | { 21 | time: '07:00 AM', 22 | event: 'Learn UI Design', 23 | category: 'study', 24 | duration: 1, 25 | }, 26 | { 27 | time: '08:00 AM', 28 | event: 'Learn Programming', 29 | category: 'study', 30 | duration: 1, 31 | }, 32 | { 33 | time: '13:00 PM', 34 | event: 'Edit Photos & Videos', 35 | category: 'work', 36 | duration: 1, 37 | }, 38 | { 39 | time: '14:00 PM', 40 | event: 'Reading Marketing Books', 41 | category: 'study', 42 | duration: 1, 43 | }, 44 | { 45 | time: '16:00 PM', 46 | event: 'Running exercise', 47 | category: 'workout', 48 | duration: 1, 49 | }, 50 | ]; 51 | 52 | export const CALENDAR_STYLE_BG = { 53 | study: '#ff585d', 54 | workout: '#22c065', 55 | work: '#714dff', 56 | }; 57 | -------------------------------------------------------------------------------- /src/screens/Security/Security.styles.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { StyleSheet } from 'react-native'; 3 | import { AppTheme } from 'src/utils/appConstant'; 4 | 5 | const styles = StyleSheet.create({ 6 | container: { 7 | flex: 1, 8 | alignItems: 'center', 9 | paddingTop: 60, 10 | paddingHorizontal: 15, 11 | backgroundColor: '#fcfcfc', 12 | }, 13 | itemWrap: { 14 | width: '100%', 15 | display: 'flex', 16 | flexDirection: 'row', 17 | justifyContent: 'flex-start', 18 | alignItems: 'center', 19 | gap: 25, 20 | padding: 10, 21 | marginVertical: 5, 22 | position: 'relative', 23 | }, 24 | switchWrap: { 25 | position: 'absolute', 26 | right: 0, 27 | }, 28 | iconStyle: { 29 | width: 25, 30 | height: 25, 31 | }, 32 | textStyle: { 33 | fontSize: 18, 34 | fontWeight: 'semibold', 35 | }, 36 | buttonNext: { 37 | marginTop: 50, 38 | width: '100%', 39 | height: 50, 40 | backgroundColor: '#feeeee', 41 | borderRadius: 50, 42 | display: 'flex', 43 | alignItems: 'center', 44 | justifyContent: 'center', 45 | position: 'absolute', 46 | bottom: 50, 47 | }, 48 | buttonTextStyle: { 49 | color: AppTheme.colors.primary_1, 50 | }, 51 | }) 52 | 53 | export default styles; -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # OSX 2 | # 3 | .DS_Store 4 | 5 | # Xcode 6 | # 7 | build/ 8 | *.pbxuser 9 | !default.pbxuser 10 | *.mode1v3 11 | !default.mode1v3 12 | *.mode2v3 13 | !default.mode2v3 14 | *.perspectivev3 15 | !default.perspectivev3 16 | xcuserdata 17 | *.xccheckout 18 | *.moved-aside 19 | DerivedData 20 | *.hmap 21 | *.ipa 22 | *.xcuserstate 23 | template/ios/.xcode.env.local 24 | 25 | # Android/IntelliJ 26 | # 27 | build/ 28 | ../.idea 29 | .gradle 30 | local.properties 31 | *.iml 32 | *.hprof 33 | .cxx/ 34 | *.keystore 35 | !debug.keystore 36 | 37 | # node.js 38 | # 39 | node_modules/ 40 | npm-debug.log 41 | yarn-error.log 42 | 43 | # Enviroment 44 | .env 45 | 46 | # fastlane 47 | # 48 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 49 | # screenshots whenever they are needed. 50 | # For more information about the recommended setup visit: 51 | # https://docs.fastlane.tools/best-practices/source-control/ 52 | 53 | **/fastlane/report.xml 54 | **/fastlane/Preview.html 55 | **/fastlane/screenshots 56 | **/fastlane/test_output 57 | 58 | # Bundle artifact 59 | *.jsbundle 60 | 61 | # Ruby / CocoaPods 62 | /ios/Pods/ 63 | /vendor/bundle/ 64 | 65 | # Temporary files created by Metro to check the health of the file watcher 66 | .metro-health-check* 67 | -------------------------------------------------------------------------------- /src/screens/Goal/GoalItem.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { View, Text } from 'react-native'; 3 | import styles from './Goal.styles'; 4 | import TouchableDebounce from 'src/components/TouchableDebounce'; 5 | import FastImage from 'react-native-fast-image'; 6 | import ArrowRight from 'src/assets/images/goal/arrow-right.png'; 7 | import ModalDetailGoal from './ModalDetailGoal'; 8 | 9 | const GoalItem = ({ item }) => { 10 | const [openDetailModal, setOpenDetailModal] = React.useState(false); 11 | const handleOpenModalDetail = () => { 12 | setOpenDetailModal(true); 13 | }; 14 | 15 | const handleCloseModal = () => { 16 | setOpenDetailModal(false); 17 | }; 18 | 19 | return ( 20 | <> 21 | 25 | 26 | {item?.title} 27 | {item?.content} 28 | 29 | 30 | 31 | 36 | 37 | ); 38 | }; 39 | 40 | export default GoalItem; 41 | -------------------------------------------------------------------------------- /src/screens/Notification/Notification.js: -------------------------------------------------------------------------------- 1 | import React, { useEffect } from 'react'; 2 | import { FlatList, View } from 'react-native'; 3 | import HeaderWrap from 'src/components/HeaderWrap'; 4 | import styles from './Notification.styles'; 5 | import { notifications } from './mockData'; 6 | import NotificationComp from 'src/components/Notification/Notification'; 7 | 8 | const Notification = () => { 9 | const [refreshing, setRefreshing] = React.useState(false); 10 | const [data, setData] = React.useState(notifications); 11 | 12 | useEffect(() => { 13 | if (refreshing) { 14 | setTimeout(() => { 15 | setData(prev => [...prev, ...notifications]); 16 | setRefreshing(false); 17 | }, 1000); 18 | } 19 | }, [refreshing]); 20 | 21 | const onRefresh = React.useCallback(() => { 22 | setRefreshing(true); 23 | }, []); 24 | 25 | return ( 26 | 27 | 28 | } 34 | /> 35 | 36 | ); 37 | }; 38 | 39 | export default Notification; 40 | -------------------------------------------------------------------------------- /src/theme/Variables.js: -------------------------------------------------------------------------------- 1 | /** 2 | * This file contains the application's variables. 3 | * 4 | * Define color, sizes, etc. here instead of duplicating them throughout the components. 5 | * That allows to change them more easily later on. 6 | */ 7 | /** 8 | * Colors 9 | */ 10 | export const Colors = { 11 | transparent: 'rgba(0,0,0,0)', 12 | inputBackground: '#FFFFFF', 13 | white: '#ffffff', 14 | //Typography 15 | textGray800: '#000000', 16 | textGray400: '#4D4D4D', 17 | textGray200: '#A1A1A1', 18 | primary: '#E14032', 19 | success: '#28a745', 20 | error: '#dc3545', 21 | //ComponentColors 22 | circleButtonBackground: '#E1E1EF', 23 | circleButtonColor: '#44427D', 24 | }; 25 | export const NavigationColors = { 26 | primary: Colors.primary, 27 | background: '#EFEFEF', 28 | card: '#EFEFEF', 29 | }; 30 | /** 31 | * FontSize 32 | */ 33 | export const FontSize = { 34 | tiny: 14, 35 | small: 16, 36 | regular: 20, 37 | large: 40, 38 | }; 39 | /** 40 | * Metrics Sizes 41 | */ 42 | const tiny = 10; 43 | const small = tiny * 2; // 20 44 | const regular = tiny * 3; // 30 45 | const large = regular * 2; // 60 46 | export const MetricsSizes = { 47 | tiny, 48 | small, 49 | regular, 50 | large, 51 | }; 52 | export default { 53 | Colors, 54 | NavigationColors, 55 | FontSize, 56 | MetricsSizes, 57 | }; 58 | -------------------------------------------------------------------------------- /src/screens/Profile/Profile.styles.js: -------------------------------------------------------------------------------- 1 | import { StyleSheet } from 'react-native'; 2 | import { AppTheme } from 'src/utils/appConstant'; 3 | 4 | const styles = StyleSheet.create({ 5 | container: { 6 | flex: 1, 7 | paddingTop: 60, 8 | paddingHorizontal: 15, 9 | backgroundColor: '#fcfcfc', 10 | }, 11 | contentWrap: { 12 | display: 'flex', 13 | alignItems: 'center', 14 | paddingBottom: 30 15 | }, 16 | upgradeToPremiumWrap: { 17 | marginTop: 20 , 18 | width: '100%', 19 | backgroundColor: AppTheme.colors.primary_1, 20 | borderRadius: 15, 21 | padding: 20, 22 | }, 23 | premiumFirstLine: { 24 | display: 'flex', 25 | flexDirection: 'row', 26 | justifyContent: 'space-between', 27 | alignItems: 'center', 28 | marginBottom: 10, 29 | }, 30 | proIcon: { 31 | backgroundColor: '#fed301', 32 | borderRadius: 15, 33 | paddingHorizontal: 10, 34 | paddingVertical: 5, 35 | }, 36 | nextIconWrap: { 37 | width: 25, 38 | height: 25, 39 | backgroundColor: 'white', 40 | borderRadius: 50, 41 | display: 'flex', 42 | justifyContent: 'center', 43 | alignItems: 'center', 44 | }, 45 | nextIcon: { 46 | width: 30, 47 | height: 30, 48 | borderRadius: 50, 49 | }, 50 | screenWrap: { 51 | width: '100%', 52 | marginTop: 20, 53 | } 54 | }); 55 | 56 | export default styles; 57 | -------------------------------------------------------------------------------- /android/app/src/main/java/com/myapp/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.myapp; 2 | 3 | import com.facebook.react.ReactActivity; 4 | import com.facebook.react.ReactActivityDelegate; 5 | import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint; 6 | import com.facebook.react.defaults.DefaultReactActivityDelegate; 7 | import android.os.Bundle; 8 | 9 | public class MainActivity extends ReactActivity { 10 | 11 | /** 12 | * Returns the name of the main component registered from JavaScript. This is used to schedule 13 | * rendering of the component. 14 | */ 15 | @Override 16 | protected String getMainComponentName() { 17 | return "MyApp"; 18 | } 19 | 20 | /** 21 | * Returns the instance of the {@link ReactActivityDelegate}. Here we use a util class {@link 22 | * DefaultReactActivityDelegate} which allows you to easily enable Fabric and Concurrent React 23 | * (aka React 18) with two boolean flags. 24 | */ 25 | @Override 26 | protected ReactActivityDelegate createReactActivityDelegate() { 27 | return new DefaultReactActivityDelegate( 28 | this, 29 | getMainComponentName(), 30 | // If you opted-in for the New Architecture, we enable the Fabric Renderer. 31 | DefaultNewArchitectureEntryPoint.getFabricEnabled()); 32 | } 33 | 34 | @Override 35 | protected void onCreate(Bundle savedInstance) { 36 | super.onCreate(savedInstance); 37 | setTheme(R.style.AppTheme); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/screens/Home/Home.styles.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { StyleSheet } from 'react-native'; 3 | import { AppTheme } from 'src/utils/appConstant'; 4 | 5 | const styles = StyleSheet.create({ 6 | container: { 7 | flex: 1, 8 | paddingTop: 60, 9 | paddingHorizontal: 15, 10 | backgroundColor: '#fcfcfc', 11 | }, 12 | headerIconLeft: { 13 | width: 60, 14 | height: 60, 15 | }, 16 | headerIconRight: { 17 | width: 30, 18 | height: 30, 19 | }, 20 | titleWrapper: { 21 | display: 'flex', 22 | flexDirection: 'row', 23 | alignItems: 'center', 24 | gap: 10, 25 | }, 26 | homeTitle: { 27 | marginTop: 15, 28 | marginBottom: 15, 29 | fontSize: AppTheme.fontSize.s24, 30 | fontWeight: 600, 31 | }, 32 | progressWrapper: { 33 | backgroundColor: 'white', 34 | padding: 10, 35 | paddingVertical: 15, 36 | borderRadius: 10, 37 | width: '100%', 38 | display: 'flex', 39 | flexDirection: 'row', 40 | justifyContent: 'space-evenly', 41 | alignItems: 'center', 42 | gap: 20, 43 | }, 44 | processTitle: { 45 | fontWeight: 600, 46 | fontSize: AppTheme.fontSize.s16, 47 | marginBottom: 10, 48 | }, 49 | 50 | processText: { 51 | fontSize: AppTheme.fontSize.s12, 52 | }, 53 | 54 | taskTextWrapper: { 55 | display: 'flex', 56 | flexDirection: 'row', 57 | justifyContent: 'space-between', 58 | marginTop: 20, 59 | }, 60 | }); 61 | 62 | export default styles; 63 | -------------------------------------------------------------------------------- /src/components/IconComponent.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import TouchableDebounce from './TouchableDebounce'; 3 | import { AppTheme } from '../utils/appConstant'; 4 | import { Image, View } from 'react-native'; 5 | import FastImage from 'react-native-fast-image'; 6 | import TextView from './TextView'; 7 | 8 | const IconComponent = ({ 9 | width, 10 | height, 11 | color = AppTheme.colors.black, // update 'fill' field in svg file to 'currentColor' to get effect 12 | style, 13 | source = '', 14 | size = AppTheme.iconSize.s24, 15 | onPress = () => {}, 16 | disabled = false, 17 | hitSlop, 18 | activeOpacity, 19 | children, 20 | noTouchDebounce = false, 21 | onPressIn = null, 22 | onPressOut = null, 23 | text, 24 | }) => { 25 | if (!source) { 26 | return null; 27 | } 28 | const IconView = source; 29 | return ( 30 | 31 | 41 | 46 | {children} 47 | 48 | 49 | ); 50 | }; 51 | 52 | export default IconComponent; 53 | -------------------------------------------------------------------------------- /src/screens/CompletedTimer/CompletedTimer.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { View } from 'react-native'; 3 | import TextView from 'src/components/TextView'; 4 | import styles from './CompletedTimer.styles'; 5 | import TrophyImage from 'src/assets/images/upgradeApp/trophy.png'; 6 | import FastImage from 'react-native-fast-image'; 7 | import Button from 'src/components/Button'; 8 | import { navigate } from 'src/navigators/NavigationServices'; 9 | import RouteName from 'src/navigators/RouteName'; 10 | 11 | const CompletedTimer = () => { 12 | const handeBackToHome = () => { 13 | navigate(RouteName.Home); 14 | }; 15 | 16 | return ( 17 | 18 | 19 | 20 | Congratulation 21 | 22 | You have completed the task. Keep it up! 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 |