master
1import React, { Component } from 'react';
2import { View } from 'react-native';
3import { Container, Header, Title, Content, Footer, FooterTab, Button, Icon, Spinner, DeckSwiper, Text, List, ListItem } from 'native-base';
4import Screen from './screen';
5import WorkoutScreen from './workout-screen';
6import * as events from '../../services/events';
7
8export default class NewWorkoutScreen extends Screen {
9 constructor(props) {
10 super(props);
11 this.state = {
12 isLoading: true,
13 eventsOfInterest: [ events.FETCHED_NEW_WORKOUT, events.CREATED_WORKOUT ]
14 };
15 }
16
17 componentDidMount() {
18 super.componentDidMount();
19 this.onLoadWorkout()
20 }
21
22 render() {
23 if (this.state.isLoading) {
24 return ( <Container> <Spinner /> </Container>);
25 } else {
26 return (
27 <Container>
28 <Header>
29 <Title>Routine {this.state.routine.name}</Title>
30 </Header>
31 <Content>
32 <Text style={{textAlign: 'center'}}>Body Weight: {this.state.body_weight.amount} {this.state.body_weight.unit}</Text>
33 <List dataArray={this.state.exercises} renderRow={this.renderExercise.bind(this)}></List>
34 <Button large block iconRight onPress={this.onBeginWorkout.bind(this)}>
35 Begin
36 <Icon name='ios-arrow-forward' />
37 </Button>
38 </Content>
39 </Container>
40 );
41 }
42 }
43
44 renderExercise(exercise) {
45 return (
46 <ListItem button onPress={() => this.onPress(exercise)}>
47 <View style={{flex: 1}}>
48 <Text>{exercise.name}</Text>
49 <List dataArray={this.setsFor(exercise)} renderRow={this.renderRow.bind(this)}></List>
50 </View>
51 </ListItem>
52 );
53 }
54
55 renderRow(set) {
56 return (
57 <ListItem button><Text>{set.target_repetitions} repetitions @ {set.target_weight.amount} {set.target_weight.unit} </Text></ListItem>
58 );
59 }
60
61 setsFor(exercise) {
62 return this.state.sets.filter((set) => set.exercise_id == exercise.id).filter((set) => set.type == 'WorkSet');
63 }
64
65 onPress(exercise) {
66 console.log(`pressed ${exercise.name}`);
67 }
68
69 onBeginWorkout() {
70 const sets = this.state.sets.map((set) => {
71 return {
72 exercise_id: set.exercise_id,
73 target_repetitions: set.target_repetitions,
74 target_weight: set.target_weight,
75 type: set.type,
76 };
77 });
78
79 this.publish({
80 body_weight: this.state.body_weight,
81 event: events.CREATE_WORKOUT,
82 routine_id: this.state.routine.id,
83 sets: sets,
84 });
85 }
86
87 onLoadWorkout() {
88 this.setState({ isLoading: true });
89 this.publish({ event: events.FETCH_NEW_WORKOUT });
90 }
91
92 notify(event) {
93 switch(event.event) {
94 case events.FETCHED_NEW_WORKOUT:
95 console.log("FETCHED_NEW WORKOUT");
96 this.setState({ isLoading: false, ...event });
97 return
98 case events.CREATED_WORKOUT:
99 console.dir("CREATED_WORKOUT");
100 this.loadScreen(WorkoutScreen, { ...event })
101 return
102 }
103 }
104}