Prevent empty plans from being created
This commit is contained in:
parent
910cfddfc5
commit
0cee774136
22
EditPlan.tsx
22
EditPlan.tsx
|
@ -18,23 +18,27 @@ import {DAYS} from './time';
|
||||||
|
|
||||||
export default function EditPlan() {
|
export default function EditPlan() {
|
||||||
const {params} = useRoute<RouteProp<PlanPageParams, 'EditPlan'>>();
|
const {params} = useRoute<RouteProp<PlanPageParams, 'EditPlan'>>();
|
||||||
const [days, setDays] = useState<string[]>(params.plan.days.split(','));
|
const {plan} = params;
|
||||||
|
const [days, setDays] = useState<string[]>(
|
||||||
|
plan.days ? plan.days.split(',') : [],
|
||||||
|
);
|
||||||
const [workouts, setWorkouts] = useState<string[]>(
|
const [workouts, setWorkouts] = useState<string[]>(
|
||||||
params.plan.workouts.split(','),
|
plan.workouts ? plan.workouts.split(',') : [],
|
||||||
);
|
);
|
||||||
const [names, setNames] = useState<string[]>([]);
|
const [names, setNames] = useState<string[]>([]);
|
||||||
const navigation = useNavigation<NavigationProp<DrawerParamList>>();
|
const navigation = useNavigation<NavigationProp<DrawerParamList>>();
|
||||||
|
|
||||||
useFocusEffect(
|
useFocusEffect(
|
||||||
useCallback(() => {
|
useCallback(() => {
|
||||||
|
console.log(`${EditPlan.name}.focus:`, {plan});
|
||||||
navigation.getParent()?.setOptions({
|
navigation.getParent()?.setOptions({
|
||||||
headerLeft: () => (
|
headerLeft: () => (
|
||||||
<IconButton icon="arrow-back" onPress={() => navigation.goBack()} />
|
<IconButton icon="arrow-back" onPress={() => navigation.goBack()} />
|
||||||
),
|
),
|
||||||
headerRight: () => null,
|
headerRight: () => null,
|
||||||
title: params.plan.id ? 'Edit plan' : 'Create plan',
|
title: plan.id ? 'Edit plan' : 'Create plan',
|
||||||
});
|
});
|
||||||
}, [navigation, params.plan.id]),
|
}, [navigation, plan]),
|
||||||
);
|
);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
@ -45,19 +49,19 @@ export default function EditPlan() {
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const save = useCallback(async () => {
|
const save = useCallback(async () => {
|
||||||
console.log(`${EditPlan.name}.save`, {days, workouts, params});
|
console.log(`${EditPlan.name}.save`, {days, workouts, plan});
|
||||||
if (!days || !workouts) return;
|
if (!days || !workouts) return;
|
||||||
const newWorkouts = workouts.filter(workout => workout).join(',');
|
const newWorkouts = workouts.filter(workout => workout).join(',');
|
||||||
const newDays = days.filter(day => day).join(',');
|
const newDays = days.filter(day => day).join(',');
|
||||||
if (!params.plan.id) await addPlan({days: newDays, workouts: newWorkouts});
|
if (!plan.id) await addPlan({days: newDays, workouts: newWorkouts});
|
||||||
else
|
else
|
||||||
await updatePlan({
|
await updatePlan({
|
||||||
days: newDays,
|
days: newDays,
|
||||||
workouts: newWorkouts,
|
workouts: newWorkouts,
|
||||||
id: params.plan.id,
|
id: plan.id,
|
||||||
});
|
});
|
||||||
navigation.goBack();
|
navigation.goBack();
|
||||||
}, [days, workouts, params, navigation]);
|
}, [days, workouts, plan, navigation]);
|
||||||
|
|
||||||
const toggleWorkout = useCallback(
|
const toggleWorkout = useCallback(
|
||||||
(on: boolean, name: string) => {
|
(on: boolean, name: string) => {
|
||||||
|
@ -116,6 +120,7 @@ export default function EditPlan() {
|
||||||
</ScrollView>
|
</ScrollView>
|
||||||
{names.length === 0 ? (
|
{names.length === 0 ? (
|
||||||
<Button
|
<Button
|
||||||
|
disabled={workouts.length === 0 && days.length === 0}
|
||||||
mode="contained"
|
mode="contained"
|
||||||
onPress={() => {
|
onPress={() => {
|
||||||
navigation.goBack();
|
navigation.goBack();
|
||||||
|
@ -128,6 +133,7 @@ export default function EditPlan() {
|
||||||
</Button>
|
</Button>
|
||||||
) : (
|
) : (
|
||||||
<Button
|
<Button
|
||||||
|
disabled={workouts.length === 0 && days.length === 0}
|
||||||
style={{marginTop: MARGIN}}
|
style={{marginTop: MARGIN}}
|
||||||
mode="contained"
|
mode="contained"
|
||||||
icon="save"
|
icon="save"
|
||||||
|
|
|
@ -35,8 +35,12 @@ export default function PlanItem({
|
||||||
<>
|
<>
|
||||||
<List.Item
|
<List.Item
|
||||||
onPress={() => navigation.navigate('EditPlan', {plan: item})}
|
onPress={() => navigation.navigate('EditPlan', {plan: item})}
|
||||||
title={item.days.replace(/,/g, ', ')}
|
title={
|
||||||
description={item.workouts.replace(/,/g, ', ')}
|
item.days
|
||||||
|
? item.days.replace(/,/g, ', ')
|
||||||
|
: item.workouts.replace(/,/g, ', ')
|
||||||
|
}
|
||||||
|
description={item.days ? item.workouts.replace(/,/g, ', ') : null}
|
||||||
onLongPress={longPress}
|
onLongPress={longPress}
|
||||||
right={() => (
|
right={() => (
|
||||||
<Menu anchor={anchor} visible={show} onDismiss={() => setShow(false)}>
|
<Menu anchor={anchor} visible={show} onDismiss={() => setShow(false)}>
|
||||||
|
|
Loading…
Reference in New Issue
Block a user