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}