diff --git a/App.tsx b/App.tsx index 212b79c..425ebca 100644 --- a/App.tsx +++ b/App.tsx @@ -19,7 +19,6 @@ import { emitter } from "./emitter"; import { TOAST } from "./toast"; import { ThemeContext } from "./use-theme"; import AppStack from "./AppStack"; -import useTimer from "./use-timer"; import { TickEvent } from "./TimerPage"; export const CombinedDefaultTheme = { diff --git a/EditExercise.tsx b/EditExercise.tsx index 7e8da18..1496e61 100644 --- a/EditExercise.tsx +++ b/EditExercise.tsx @@ -81,7 +81,6 @@ export default function EditExercise() { steps, created: now, }); - emitter.emit(GYM_SET_CREATED); navigate("Exercises", { reset: new Date().getTime() }); }; diff --git a/EditExercises.tsx b/EditExercises.tsx index c4412c2..1b93aa9 100644 --- a/EditExercises.tsx +++ b/EditExercises.tsx @@ -77,7 +77,6 @@ export default function EditExercises() { image: removeImage ? "" : uri, } ); - emitter.emit(GYM_SET_CREATED); for (const oldName of params.names) { await planRepo .createQueryBuilder() diff --git a/EditSet.tsx b/EditSet.tsx index 54464ec..d6ad4df 100644 --- a/EditSet.tsx +++ b/EditSet.tsx @@ -92,7 +92,6 @@ export default function EditSet() { const added = async (value: GymSet) => { console.log(`${EditSet.name}.added:`, value); - emitter.emit(GYM_SET_CREATED); startTimer(value.name); }; @@ -124,7 +123,6 @@ export default function EditSet() { const saved = await setRepo.save(newSet); notify(newSet); if (typeof set.id !== "number") added(saved); - else emitter.emit(GYM_SET_UPDATED, saved); navigate("Home"); }; @@ -161,7 +159,6 @@ export default function EditSet() { const remove = async () => { await setRepo.delete(set.id); - emitter.emit(GYM_SET_DELETED); navigate("Home"); }; diff --git a/EditSets.tsx b/EditSets.tsx index c451b95..e09bf57 100644 --- a/EditSets.tsx +++ b/EditSets.tsx @@ -63,7 +63,6 @@ export default function EditSets() { if (unit) update.unit = unit; if (newImage) update.image = newImage; if (Object.keys(update).length > 0) await setRepo.update(ids, update); - emitter.emit(GYM_SET_CREATED); navigate("Home"); }; diff --git a/ExerciseList.tsx b/ExerciseList.tsx index 08bb01d..3c3dbc2 100644 --- a/ExerciseList.tsx +++ b/ExerciseList.tsx @@ -1,25 +1,22 @@ import { NavigationProp, - RouteProp, + useFocusEffect, useNavigation, - useRoute, } from "@react-navigation/native"; -import { useCallback, useEffect, useState } from "react"; +import { useCallback, useState } from "react"; import { FlatList } from "react-native"; import { List } from "react-native-paper"; import { In } from "typeorm"; -import { LIMIT } from "./constants"; -import { setRepo, settingsRepo } from "./db"; +import { StackParams } from "./AppStack"; import DrawerHeader from "./DrawerHeader"; -import { emitter } from "./emitter"; -import GymSet, { GYM_SET_DELETED } from "./gym-set"; +import ExerciseItem from "./ExerciseItem"; import ListMenu from "./ListMenu"; import Page from "./Page"; import SetList from "./SetList"; -import Settings, { SETTINGS } from "./settings"; -import ExerciseItem from "./ExerciseItem"; -import { DrawerParams } from "./drawer-param-list"; -import { StackParams } from "./AppStack"; +import { LIMIT } from "./constants"; +import { setRepo, settingsRepo } from "./db"; +import GymSet from "./gym-set"; +import Settings from "./settings"; export default function ExerciseList() { const [exercises, setExercises] = useState(); @@ -30,16 +27,6 @@ export default function ExerciseList() { const [names, setNames] = useState([]); const [refreshing, setRefreshing] = useState(false); const navigation = useNavigation>(); - const { params } = useRoute>(); - - const update = (newExercise: GymSet) => { - console.log(`${ExerciseList.name}.update:`, newExercise); - if (!exercises) return; - const newExercises = exercises.map((exercise) => - exercise.name === newExercise.name ? newExercise : exercise - ); - setExercises(newExercises); - }; const reset = async (value: string) => { console.log(`${ExerciseList.name}.reset`, value); @@ -57,23 +44,12 @@ export default function ExerciseList() { setExercises(newExercises); }; - useEffect(() => { - settingsRepo.findOne({ where: {} }).then(setSettings); - const description = emitter.addListener(SETTINGS, () => { + useFocusEffect( + useCallback(() => { + reset(term); settingsRepo.findOne({ where: {} }).then(setSettings); - }); - return description.remove; - }, []); - - useEffect(() => { - console.log(`${ExerciseList.name}.useEffect`, params); - if (!params) reset(""); - if (params?.search) search(params.search); - else if (params?.update) update(params.update); - else if (params?.reset) reset(term); - else if (params?.clearNames) setNames([]); - /* eslint-disable react-hooks/exhaustive-deps */ - }, [params]); + }, [term]) + ); const renderItem = useCallback( ({ item }: { item: GymSet }) => ( @@ -132,7 +108,6 @@ export default function ExerciseList() { const remove = async () => { setNames([]); if (names.length > 0) await setRepo.delete({ name: In(names) }); - emitter.emit(GYM_SET_DELETED); await reset(term); }; diff --git a/GraphsList.tsx b/GraphsList.tsx index 657462b..1d747ab 100644 --- a/GraphsList.tsx +++ b/GraphsList.tsx @@ -1,16 +1,19 @@ -import { NavigationProp, useNavigation } from "@react-navigation/native"; -import { useCallback, useEffect, useState } from "react"; +import { + NavigationProp, + useFocusEffect, + useNavigation, +} from "@react-navigation/native"; +import { useCallback, useState } from "react"; import { FlatList, Image } from "react-native"; import { List } from "react-native-paper"; +import DrawerHeader from "./DrawerHeader"; +import { GraphsPageParams } from "./GraphsPage"; +import Page from "./Page"; import { getBestSets } from "./best.service"; import { LIMIT } from "./constants"; import { settingsRepo } from "./db"; -import DrawerHeader from "./DrawerHeader"; -import { emitter } from "./emitter"; -import { GraphsPageParams } from "./GraphsPage"; import GymSet from "./gym-set"; -import Page from "./Page"; -import Settings, { SETTINGS } from "./settings"; +import Settings from "./settings"; export default function GraphsList() { const [bests, setBests] = useState(); @@ -21,16 +24,6 @@ export default function GraphsList() { const [settings, setSettings] = useState(); const [refreshing, setRefreshing] = useState(false); - useEffect(() => { - refresh(""); - settingsRepo.findOne({ where: {} }).then(setSettings); - const description = emitter.addListener(SETTINGS, () => { - settingsRepo.findOne({ where: {} }).then(setSettings); - }); - return description.remove; - /* eslint-disable react-hooks/exhaustive-deps */ - }, []); - const refresh = useCallback( async (value: string) => { if (refreshing) return; @@ -41,6 +34,13 @@ export default function GraphsList() { [refreshing] ); + useFocusEffect( + useCallback(() => { + refresh(term); + settingsRepo.findOne({ where: {} }).then(setSettings); + }, [refresh, term]) + ); + const next = useCallback(async () => { if (end) return; const newOffset = offset + LIMIT; diff --git a/SetList.tsx b/SetList.tsx index ce69260..f72dfae 100644 --- a/SetList.tsx +++ b/SetList.tsx @@ -1,5 +1,9 @@ -import { NavigationProp, useNavigation } from "@react-navigation/native"; -import { useCallback, useEffect, useState } from "react"; +import { + NavigationProp, + useFocusEffect, + useNavigation, +} from "@react-navigation/native"; +import { useCallback, useState } from "react"; import { FlatList } from "react-native"; import { List } from "react-native-paper"; import { Like } from "typeorm"; @@ -10,14 +14,8 @@ import Page from "./Page"; import SetItem from "./SetItem"; import { LIMIT } from "./constants"; import { getNow, setRepo, settingsRepo } from "./db"; -import { emitter } from "./emitter"; -import GymSet, { - GYM_SET_CREATED, - GYM_SET_DELETED, - GYM_SET_UPDATED, - defaultSet, -} from "./gym-set"; -import Settings, { SETTINGS } from "./settings"; +import GymSet, { defaultSet } from "./gym-set"; +import Settings from "./settings"; export default function SetList() { const [refreshing, setRefreshing] = useState(false); @@ -44,34 +42,12 @@ export default function SetList() { [offset] ); - useEffect(() => { - settingsRepo.findOne({ where: {} }).then(setSettings); - reset(""); - /* eslint-disable react-hooks/exhaustive-deps */ - }, []); - - useEffect(() => { - const updated = (gymSet: GymSet) => { - if (!sets) console.log({ sets }); - console.log(`${SetList.name}.updated:`, { gymSet, length: sets.length }); - const newSets = sets.map((set) => { - if (set.id !== gymSet.id) return set; - if (gymSet.created === undefined) gymSet.created = set.created; - return gymSet; - }); - setSets(newSets); - }; - - const descriptions = [ - emitter.addListener(SETTINGS, () => { - settingsRepo.findOne({ where: {} }).then(setSettings); - }), - emitter.addListener(GYM_SET_UPDATED, updated), - emitter.addListener(GYM_SET_CREATED, () => reset("")), - emitter.addListener(GYM_SET_DELETED, () => reset("")), - ]; - return () => descriptions.forEach((description) => description.remove()); - }, [sets]); + useFocusEffect( + useCallback(() => { + settingsRepo.findOne({ where: {} }).then(setSettings); + reset(term); + }, [reset, term]) + ); const search = (value: string) => { console.log(`${SetList.name}.search:`, value); diff --git a/SettingsPage.tsx b/SettingsPage.tsx index db1bcbf..ff466d2 100644 --- a/SettingsPage.tsx +++ b/SettingsPage.tsx @@ -5,7 +5,9 @@ import { useForm } from "react-hook-form"; import { NativeModules, ScrollView } from "react-native"; import DocumentPicker from "react-native-document-picker"; import { Dirs, FileSystem } from "react-native-file-access"; -import { Button, TextInput } from "react-native-paper"; +import { Button } from "react-native-paper"; +import { PERMISSIONS, RESULTS, check, request } from "react-native-permissions"; +import AppInput from "./AppInput"; import ConfirmDialog from "./ConfirmDialog"; import DrawerHeader from "./DrawerHeader"; import Page from "./Page"; @@ -17,11 +19,9 @@ import { setRepo, settingsRepo } from "./db"; import { DrawerParams } from "./drawer-param-list"; import Input from "./input"; import { darkOptions, lightOptions, themeOptions } from "./options"; -import Settings, { settingsUpdated } from "./settings"; +import Settings from "./settings"; import { toast } from "./toast"; import { useTheme } from "./use-theme"; -import { check, PERMISSIONS, RESULTS, request } from "react-native-permissions"; -import AppInput from "./AppInput"; const twelveHours = [ "dd/LL/yyyy", @@ -80,7 +80,6 @@ export default function SettingsPage() { .set({ [key]: value }) .printSql() .execute(); - settingsUpdated(); }, []); const soundString = useMemo(() => { diff --git a/StartPlan.tsx b/StartPlan.tsx index 3a3dedb..e5e2a82 100644 --- a/StartPlan.tsx +++ b/StartPlan.tsx @@ -103,8 +103,7 @@ export default function StartPlan() { created: now, hidden: false, }; - const saved = await setRepo.save(newSet); - emitter.emit(GYM_SET_CREATED, saved); + await setRepo.save(newSet); await refresh(); if ( settings.notify && diff --git a/StartPlanItem.tsx b/StartPlanItem.tsx index 610fa84..63205cb 100644 --- a/StartPlanItem.tsx +++ b/StartPlanItem.tsx @@ -24,8 +24,6 @@ export default function StartPlanItem(props: Props) { const [showMenu, setShowMenu] = useState(false); const { navigate: stackNavigate } = useNavigation>(); - const { navigate: drawerNavigate } = - useNavigation>(); const undo = useCallback(async () => { const now = await getNow(); @@ -41,7 +39,6 @@ export default function StartPlanItem(props: Props) { setShowMenu(false); if (!first) return toast("Nothing to undo."); await setRepo.delete(first.id); - emitter.emit(GYM_SET_DELETED, first); onUndo(); }, [setShowMenu, onUndo, item.name]); diff --git a/android/app/build.gradle b/android/app/build.gradle index 6145c22..c18f00a 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -85,8 +85,8 @@ android { applicationId "com.massive" minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 36202 - versionName "1.176" + versionCode 36203 + versionName "1.177" } signingConfigs { release { diff --git a/drawer-param-list.ts b/drawer-param-list.ts index d676637..cdb104d 100644 --- a/drawer-param-list.ts +++ b/drawer-param-list.ts @@ -1,16 +1,9 @@ -import GymSet from "./gym-set"; - export type DrawerParams = { Home: {}; Settings: {}; Graphs: {}; Plans: {}; - Exercises: { - clearNames?: boolean; - search?: string; - update?: GymSet; - reset?: number; - }; + Exercises: {}; Timer: {}; Weight: {}; Insights: {}; diff --git a/package.json b/package.json index 5896e4b..5be535b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "massive", - "version": "1.176", + "version": "1.177", "private": true, "license": "GPL-3.0-only", "scripts": { diff --git a/settings.ts b/settings.ts index 7b83dd0..71a20c5 100644 --- a/settings.ts +++ b/settings.ts @@ -1,5 +1,4 @@ import { Column, Entity, PrimaryColumn } from "typeorm"; -import { emitter } from "./emitter"; @Entity() export default class Settings { @@ -51,9 +50,3 @@ export default class Settings { @Column("int") duration: number; } - -export const SETTINGS = "settings"; - -export const settingsUpdated = () => { - emitter.emit(SETTINGS); -};