diff --git a/EditPlan.tsx b/EditPlan.tsx
index c857a85..4e69281 100644
--- a/EditPlan.tsx
+++ b/EditPlan.tsx
@@ -79,8 +79,7 @@ export default function EditPlan() {
{DAYS.map(day => (
toggleDay(value, day)}
- onPress={() => toggleDay(!days.includes(day), day)}
+ onChange={value => toggleDay(value, day)}
value={days.includes(day)}>
{day}
@@ -94,9 +93,8 @@ export default function EditPlan() {
names.map(name => (
toggleWorkout(value, name)}
- value={workouts.includes(name)}
- onPress={() => toggleWorkout(!workouts.includes(name), name)}>
+ onChange={value => toggleWorkout(value, name)}
+ value={workouts.includes(name)}>
{name}
))
diff --git a/ListMenu.tsx b/ListMenu.tsx
new file mode 100644
index 0000000..f4d1100
--- /dev/null
+++ b/ListMenu.tsx
@@ -0,0 +1,101 @@
+import {useState} from 'react'
+import {Divider, IconButton, Menu} from 'react-native-paper'
+import ConfirmDialog from './ConfirmDialog'
+import useDark from './use-dark'
+
+export default function ListMenu({
+ onEdit,
+ onCopy,
+ onClear,
+ onDelete,
+ onSelect,
+ ids,
+}: {
+ onEdit: () => void
+ onCopy: () => void
+ onClear: () => void
+ onDelete: () => void
+ onSelect: () => void
+ ids?: number[]
+}) {
+ const [showMenu, setShowMenu] = useState(false)
+ const [showRemove, setShowRemove] = useState(false)
+ const dark = useDark()
+
+ const edit = () => {
+ setShowMenu(false)
+ onEdit()
+ }
+
+ const copy = () => {
+ setShowMenu(false)
+ onCopy()
+ }
+
+ const clear = () => {
+ setShowMenu(false)
+ onClear()
+ }
+
+ const remove = () => {
+ setShowMenu(false)
+ setShowRemove(false)
+ onDelete()
+ }
+
+ const select = () => {
+ setShowMenu(false)
+ onSelect()
+ }
+
+ return (
+
+ )
+}
diff --git a/PlanList.tsx b/PlanList.tsx
index 0b4ec35..f7e9192 100644
--- a/PlanList.tsx
+++ b/PlanList.tsx
@@ -5,24 +5,20 @@ import {
} from '@react-navigation/native'
import {useCallback, useState} from 'react'
import {FlatList} from 'react-native'
-import {Divider, IconButton, List, Menu} from 'react-native-paper'
+import {List} from 'react-native-paper'
import {Like} from 'typeorm'
-import ConfirmDialog from './ConfirmDialog'
import {planRepo} from './db'
import DrawerHeader from './DrawerHeader'
+import ListMenu from './ListMenu'
import Page from './Page'
import {Plan} from './plan'
import {PlanPageParams} from './plan-page-params'
import PlanItem from './PlanItem'
-import useDark from './use-dark'
export default function PlanList() {
const [term, setTerm] = useState('')
const [plans, setPlans] = useState()
const [ids, setIds] = useState([])
- const [showMenu, setShowMenu] = useState(false)
- const [showRemove, setShowRemove] = useState(false)
- const dark = useDark()
const navigation = useNavigation>()
const refresh = useCallback(async (value: string) => {
@@ -58,14 +54,12 @@ export default function PlanList() {
navigation.navigate('EditPlan', {plan: {days: '', workouts: ''}})
const edit = useCallback(async () => {
- setShowMenu(false)
const plan = await planRepo.findOne({where: {id: ids.pop()}})
navigation.navigate('EditPlan', {plan})
setIds([])
}, [ids, navigation])
const copy = useCallback(async () => {
- setShowMenu(false)
const plan = await planRepo.findOne({
where: {id: ids.pop()},
})
@@ -75,77 +69,30 @@ export default function PlanList() {
}, [ids, navigation])
const clear = useCallback(() => {
- setShowMenu(false)
setIds([])
}, [])
const remove = useCallback(async () => {
- setShowMenu(false)
- setShowRemove(false)
await planRepo.delete(ids.length > 0 ? ids : {})
await refresh(term)
setIds([])
}, [ids, refresh, term])
- const menuItems = (
- <>
-
-
-
-
- setShowRemove(true)}
- title="Delete"
- />
- >
- )
+ const select = useCallback(() => {
+ setIds(plans.map(plan => plan.id))
+ }, [plans])
return (
<>
-
+
{plans?.length === 0 ? (
diff --git a/SetList.tsx b/SetList.tsx
index a08b212..9378c70 100644
--- a/SetList.tsx
+++ b/SetList.tsx
@@ -5,17 +5,16 @@ import {
} from '@react-navigation/native'
import {useCallback, useState} from 'react'
import {FlatList} from 'react-native'
-import {Divider, IconButton, List, Menu} from 'react-native-paper'
+import {List} from 'react-native-paper'
import {Like} from 'typeorm'
-import ConfirmDialog from './ConfirmDialog'
import {getNow, setRepo, settingsRepo} from './db'
import DrawerHeader from './DrawerHeader'
import GymSet, {defaultSet} from './gym-set'
import {HomePageParams} from './home-page-params'
+import ListMenu from './ListMenu'
import Page from './Page'
import SetItem from './SetItem'
import Settings from './settings'
-import useDark from './use-dark'
const limit = 15
@@ -26,9 +25,6 @@ export default function SetList() {
const [end, setEnd] = useState(false)
const [settings, setSettings] = useState()
const [ids, setIds] = useState([])
- const [showMenu, setShowMenu] = useState(false)
- const [showRemove, setShowRemove] = useState(false)
- const dark = useDark()
const navigation = useNavigation>()
const refresh = useCallback(async (value: string) => {
@@ -104,13 +100,11 @@ export default function SetList() {
)
const edit = useCallback(() => {
- setShowMenu(false)
navigation.navigate('EditSets', {ids})
setIds([])
}, [ids, navigation])
const copy = useCallback(async () => {
- setShowMenu(false)
const set = await setRepo.findOne({
where: {id: ids.pop()},
})
@@ -121,77 +115,30 @@ export default function SetList() {
}, [ids, navigation])
const clear = useCallback(() => {
- setShowMenu(false)
setIds([])
}, [])
const remove = useCallback(async () => {
setIds([])
- setShowMenu(false)
- setShowRemove(false)
await setRepo.delete(ids.length > 0 ? ids : {})
await refresh(term)
}, [ids, refresh, term])
- const menuItems = (
- <>
-
-
-
-
- setShowRemove(true)}
- title="Delete"
- />
- >
- )
+ const select = useCallback(() => {
+ setIds(sets.map(set => set.id))
+ }, [sets])
return (
<>
-
+
diff --git a/SettingsPage.tsx b/SettingsPage.tsx
index b3b40b2..5987c80 100644
--- a/SettingsPage.tsx
+++ b/SettingsPage.tsx
@@ -5,13 +5,7 @@ import {
} from '@react-navigation/native'
import {format} from 'date-fns'
import {useCallback, useMemo, useState} from 'react'
-import {
- DeviceEventEmitter,
- FlatList,
- NativeModules,
- Platform,
- View,
-} from 'react-native'
+import {DeviceEventEmitter, NativeModules, Platform, View} from 'react-native'
import DocumentPicker from 'react-native-document-picker'
import {Dirs, FileSystem} from 'react-native-file-access'
import {Button, Subheading} from 'react-native-paper'
@@ -54,7 +48,6 @@ export default function SettingsPage() {
useFocusEffect(
useCallback(() => {
settingsRepo.findOne({where: {}}).then(settings => {
- console.log(`${SettingsPage.name}.focus:`, settings)
setAlarm(settings.alarm)
setVibrate(settings.vibrate)
setSound(settings.sound)
@@ -198,12 +191,8 @@ export default function SettingsPage() {
)
const renderSwitch = useCallback(
- ({item}: {item: Input}) => (
- item.onChange(!item.value)}
- key={item.name}
- value={item.value}
- onValueChange={item.onChange}>
+ (item: Input) => (
+
{item.name}
),
@@ -236,8 +225,9 @@ export default function SettingsPage() {
].filter(({name}) => name.toLowerCase().includes(term.toLowerCase()))
const renderSelect = useCallback(
- ({item}: {item: Input}) => (
+ (item: Input) => (