From 28a928a8307965c5833603dba4a9785c1b1673b5 Mon Sep 17 00:00:00 2001 From: Mihail Paley Date: Sat, 21 Nov 2020 21:58:46 +0500 Subject: [PATCH 1/4] feat/-focus-mode-(#110) (#168) * feat: add simple way to add tasks to focus page * fix: remove unused function * refactor: leveling > Leveling * feat: add sidebar link to focus page * style: :art: Leveling * Rename leveling.ts to Leveling.ts --- src/components/ui/DevelopmentOnlyMenu.tsx | 6 +++--- src/components/ui/NavBar/NavBar.tsx | 2 +- src/components/ui/Sidebar.tsx | 13 ++++++++++--- .../ExpirienceProgressBar.tsx | 2 +- src/locales/en.js | 3 +++ src/locales/ru.js | 3 +++ src/pages/FocusModePage/FocusModePage.tsx | 16 ++++++++++++---- src/pages/ProfilePage/ProfilePage.tsx | 2 +- src/repositories/addPointsWithSideEffects.ts | 16 ++++++---------- src/services/{leveling.ts => Leveling.ts} | 4 ++-- src/services/index.ts | 16 ++++------------ 11 files changed, 46 insertions(+), 37 deletions(-) rename src/services/{leveling.ts => Leveling.ts} (98%) diff --git a/src/components/ui/DevelopmentOnlyMenu.tsx b/src/components/ui/DevelopmentOnlyMenu.tsx index 486526a2..ed8de670 100644 --- a/src/components/ui/DevelopmentOnlyMenu.tsx +++ b/src/components/ui/DevelopmentOnlyMenu.tsx @@ -12,8 +12,8 @@ import React, { memo, MouseEvent, useState } from 'react'; import { useSelector } from 'react-redux'; import { useFirestore } from 'react-redux-firebase'; import { getUniqueId } from '../../helpers/getUniqueId'; -import LevelingService from '../../services/leveling'; -import { addPointsWithSideEffects } from "../../repositories/addPointsWithSideEffects"; +import LevelingService from '../../services/Leveling'; +import { addPointsWithSideEffects } from '../../repositories/addPointsWithSideEffects'; import { addPointsToUser } from '../../repositories/addPointsToUser'; import { Profile } from '../../entities/Profile'; import { createTask } from '../../repositories/createTask'; @@ -85,8 +85,8 @@ function DevelopmentOnlyMenu() { function createAReward() { firestore.collection('rewards').add({ userId: auth.uid, - name: loremIpsum({ count: random(1, 5), units: 'words' }), points: random(0, 100), + name: loremIpsum({ count: random(1, 5), units: 'words' }), }); } diff --git a/src/components/ui/NavBar/NavBar.tsx b/src/components/ui/NavBar/NavBar.tsx index e9ab535b..2e2a2b00 100644 --- a/src/components/ui/NavBar/NavBar.tsx +++ b/src/components/ui/NavBar/NavBar.tsx @@ -20,7 +20,7 @@ import React, { memo } from 'react'; import { Else, If, Then } from 'react-if'; import { useDispatch } from 'react-redux'; import { Link } from 'react-router-dom'; -import LevelingService from '../../../services/leveling'; +import LevelingService from '../../../services/Leveling'; import { useTypedSelector } from '../../../store'; import { authSelector, diff --git a/src/components/ui/Sidebar.tsx b/src/components/ui/Sidebar.tsx index 8f34594f..20c22e1d 100644 --- a/src/components/ui/Sidebar.tsx +++ b/src/components/ui/Sidebar.tsx @@ -26,6 +26,8 @@ import { toggleSidebar, useTypedTranslate, } from '../../services/index'; +import FocusIcon from '@material-ui/icons/FilterCenterFocus'; +import { useTranslation } from 'react-i18next'; const log = debug('Sidebar'); const useStyles = makeStyles((theme: Theme) => ({ @@ -57,6 +59,7 @@ const Sidebar: React.FC<{ const cx = useStyles(); const history = useHistory(); const t = useTypedTranslate(); + const { t: sidebarTranslator } = useTranslation('sidebar'); log('isLoggedIn: ', isLoggedIn); log('isOpen: ', isOpen); @@ -71,9 +74,7 @@ const Sidebar: React.FC<{ if (!isLoggedIn) history.push('/signin'); else { localStorage.removeItem('userId'); - getFirebase() - .logout() - .catch(handleErrors); + getFirebase().logout().catch(handleErrors); } } @@ -99,6 +100,12 @@ const Sidebar: React.FC<{ classes={{ paper: cx.backgroundColor }} onClose={toggleSidebar} > + + + + + + diff --git a/src/components/users/ExpirienceProgressBar/ExpirienceProgressBar.tsx b/src/components/users/ExpirienceProgressBar/ExpirienceProgressBar.tsx index 7516f05b..bfaf6d86 100644 --- a/src/components/users/ExpirienceProgressBar/ExpirienceProgressBar.tsx +++ b/src/components/users/ExpirienceProgressBar/ExpirienceProgressBar.tsx @@ -7,7 +7,7 @@ import get from 'lodash/get'; import isUndefined from 'lodash/isUndefined'; import React, { memo } from 'react'; import { Box, Theme } from '@material-ui/core'; -import LevelingService from '../../../services/leveling'; +import LevelingService from '../../../services/Leveling'; import { Profile } from '../../../entities/Profile'; const log = debug('ExpirienceProgressBar'); diff --git a/src/locales/en.js b/src/locales/en.js index cbaa52b8..9ba6ab1b 100644 --- a/src/locales/en.js +++ b/src/locales/en.js @@ -124,4 +124,7 @@ export default { add_any_value: `Add "{{value}}"`, pick_or_create_a_task : "Pick or create a task" }, + sidebar: { + focus_mode: 'Focus Mode', + } }; diff --git a/src/locales/ru.js b/src/locales/ru.js index 3721ec73..b43d1e46 100644 --- a/src/locales/ru.js +++ b/src/locales/ru.js @@ -127,4 +127,7 @@ export default { add_any_value: `Добавить "{{value}}"`, pick_or_create_a_task : "Выберите или создайте задачу", }, + sidebar: { + focus_mode: 'Режим Фокусировки', + } }; diff --git a/src/pages/FocusModePage/FocusModePage.tsx b/src/pages/FocusModePage/FocusModePage.tsx index f6a7825b..c644ecbd 100644 --- a/src/pages/FocusModePage/FocusModePage.tsx +++ b/src/pages/FocusModePage/FocusModePage.tsx @@ -1,10 +1,12 @@ import { Box } from '@material-ui/core'; import React, { memo } from 'react'; +import { If } from 'react-if'; +import useList from 'react-use/lib/useList'; import { TasksList } from '../../components/tasks/TasksList'; +import { Autocomplete } from '../../components/unsorted/Autocomplete'; import { WhatDoYouFeelSlider } from '../../components/unsorted/WhatDoYouFeelSlider'; import { Task } from '../../entities/Task'; -import { If } from 'react-if'; -import { Autocomplete } from '../../components/unsorted/Autocomplete'; +import { getUniqueId } from '../../helpers/getUniqueId'; import { useTypedTranslate } from '../../services'; export interface FocusModePageProps { @@ -19,6 +21,7 @@ const FocusModePage = memo(function FocusModePage({ tasksForAutoComplete = [], }: FocusModePageProps) { const t = useTypedTranslate(); + const [tasks, { push }] = useList([]); const autocompleteOptions = tasksForAutoComplete.map((task) => ({ value: task, label: task.name, @@ -29,10 +32,15 @@ const FocusModePage = memo(function FocusModePage({ { + push({ + id: getUniqueId(), + name: payload.label, + } as Task); + }} /> - + diff --git a/src/pages/ProfilePage/ProfilePage.tsx b/src/pages/ProfilePage/ProfilePage.tsx index 9b75d72d..784e10b2 100644 --- a/src/pages/ProfilePage/ProfilePage.tsx +++ b/src/pages/ProfilePage/ProfilePage.tsx @@ -21,7 +21,7 @@ import DarkOrLightThemePicker from '../../components/ui/DarkOrLightThemePicker'; import ToggleEncouragingMessages from '../../components/ui/ToggleEncouragingMessages'; import { MyUserPoints } from '../../components/users/MyUserPoints'; import { handleErrors } from '../../services/index'; -import LevelingService from '../../services/leveling'; +import LevelingService from '../../services/Leveling'; import { Profile } from '../../entities/Profile'; import { upsertProfile } from '../../repositories/upsertProfile'; import { authSelector, profileSelector } from '../../store/selectors'; diff --git a/src/repositories/addPointsWithSideEffects.ts b/src/repositories/addPointsWithSideEffects.ts index af9800dc..11c6da14 100644 --- a/src/repositories/addPointsWithSideEffects.ts +++ b/src/repositories/addPointsWithSideEffects.ts @@ -1,23 +1,20 @@ import { getNewlyUnlockedReward, - - - showLevelUpAnimation + showLevelUpAnimation, } from '../services/index'; -import LevelingService from '../services/leveling'; +import LevelingService from '../services/Leveling'; import { authSelector, profilePointsSelector, - rewardsSelector + rewardsSelector, } from '../store/selectors'; import { toggleRewardModal } from '../store/uiSlice'; import { addPointsToUser } from './addPointsToUser'; import { store } from '../store/index'; - export function addPointsWithSideEffects( userId: string, - points: number + points: number, ): Promise { const state = store.getState(); const auth = authSelector(state); @@ -25,11 +22,10 @@ export function addPointsWithSideEffects( const nextReward = getNewlyUnlockedReward( profilePoints, points, - rewardsSelector(state) + rewardsSelector(state), ); // TODO refactor - if (nextReward) - store.dispatch(toggleRewardModal()); + if (nextReward) store.dispatch(toggleRewardModal()); if (LevelingService.willUserLevelUp(profilePoints, points)) { showLevelUpAnimation(); } diff --git a/src/services/leveling.ts b/src/services/Leveling.ts similarity index 98% rename from src/services/leveling.ts rename to src/services/Leveling.ts index ce122580..8a3a2a9a 100644 --- a/src/services/leveling.ts +++ b/src/services/Leveling.ts @@ -30,7 +30,7 @@ export default class LevelingService { } static calculatePointsToNextLevel(level: number) { - const baseXP = 30 + const baseXP = 30; const exponent = 1.1; return baseXP * ((level ^ exponent) | 1); } @@ -45,4 +45,4 @@ export default class LevelingService { ); return levelAfterAddingPoints > currentLevel; } -} \ No newline at end of file +} diff --git a/src/services/index.ts b/src/services/index.ts index ba2ead65..1d52ade6 100644 --- a/src/services/index.ts +++ b/src/services/index.ts @@ -112,24 +112,14 @@ export function initializeFirebase() { } else { // Use Firestore emulator for local development firebase.firestore().settings({ - // ssl: false, - // host: 'localhost:8080', + ssl: false, + host: 'localhost:8080', }); } return firebase; } -export function normalizeQueryResponse( - snapshot: firebase.firestore.QuerySnapshot, -) { - if (snapshot.empty) return []; - return snapshot.docs.map((document) => ({ - id: document.id, - ...document.data(), - })); -} - export function handleErrors( e: Error | undefined | firebase.auth.Error, ) { @@ -241,6 +231,8 @@ export function initializeI18n() { lng: 'ru', debug: false, fallbackLng: 'en', + // ns: ['translation', 'sidebar'], + // defaultNS: 'translation', interpolation: { // not needed for react as it escapes by default escapeValue: false, From c2d6d96a522dfa2f319f712e63ca36289146f279 Mon Sep 17 00:00:00 2001 From: Mihail Paley Date: Sun, 22 Nov 2020 14:16:34 +0500 Subject: [PATCH 2/4] feat: update README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b70d0997..ca0eb12d 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,3 @@ -Flow TODO is a unimportant tasks organizer. +Flow TODO is an app for procrastinators. This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). From 96661f21990db6ae9affac89dce7f779ae99e2c0 Mon Sep 17 00:00:00 2001 From: undeadlol1 Date: Sun, 22 Nov 2020 14:33:23 +0500 Subject: [PATCH 3/4] fix(Sidebar): :lipstick: list margins --- src/components/ui/Sidebar.tsx | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/components/ui/Sidebar.tsx b/src/components/ui/Sidebar.tsx index 20c22e1d..391d0703 100644 --- a/src/components/ui/Sidebar.tsx +++ b/src/components/ui/Sidebar.tsx @@ -52,10 +52,13 @@ const StyledListText = withStyles({ }, })(ListItemText); -const Sidebar: React.FC<{ +function Sidebar({ + isLoggedIn, + isOpen, +}: { isOpen: boolean; isLoggedIn: boolean; -}> = ({ isLoggedIn, isOpen }) => { +}) { const cx = useStyles(); const history = useHistory(); const t = useTypedTranslate(); @@ -100,13 +103,13 @@ const Sidebar: React.FC<{ classes={{ paper: cx.backgroundColor }} onClose={toggleSidebar} > - - - - - - + + + + + + @@ -152,6 +155,6 @@ const Sidebar: React.FC<{ ); -}; +} export default memo(Sidebar); From c4040fcd91eeb8827bc8d79ce8e8ebb381e4cfc3 Mon Sep 17 00:00:00 2001 From: undeadlol1 Date: Sun, 22 Nov 2020 14:37:29 +0500 Subject: [PATCH 4/4] fix: closes #214 --- src/components/ui/Sidebar.tsx | 12 ++++++------ src/locales/en.js | 2 +- src/locales/ru.js | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/components/ui/Sidebar.tsx b/src/components/ui/Sidebar.tsx index 391d0703..a96f2ef1 100644 --- a/src/components/ui/Sidebar.tsx +++ b/src/components/ui/Sidebar.tsx @@ -104,12 +104,6 @@ function Sidebar({ onClose={toggleSidebar} > - - - - - - @@ -144,6 +138,12 @@ function Sidebar({ + + + + + + {isLoggedIn ? : } diff --git a/src/locales/en.js b/src/locales/en.js index 9ba6ab1b..8a4ba62d 100644 --- a/src/locales/en.js +++ b/src/locales/en.js @@ -125,6 +125,6 @@ export default { pick_or_create_a_task : "Pick or create a task" }, sidebar: { - focus_mode: 'Focus Mode', + focus_mode: 'Focus Mode (WIP)', } }; diff --git a/src/locales/ru.js b/src/locales/ru.js index b43d1e46..23154407 100644 --- a/src/locales/ru.js +++ b/src/locales/ru.js @@ -128,6 +128,6 @@ export default { pick_or_create_a_task : "Выберите или создайте задачу", }, sidebar: { - focus_mode: 'Режим Фокусировки', + focus_mode: 'Режим Фокусировки (не доделано)', } };