Advertisement
Guest User

Untitled

a guest
Jun 28th, 2016
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.00 KB | None | 0 0
  1.  
  2. /**
  3. * @copyright 2015, Prometheus Research, LLC
  4. */
  5. 'use strict';
  6.  
  7. import React from 'react';
  8. import * as data from 'rex-widget/data';
  9. import {WithFormValue, Field} from 'rex-widget/form';
  10. import {Preloader} from 'rex-widget/ui';
  11. import {VBox} from 'rex-widget/layout';
  12. import RadioGroup from 'rex-widget/lib/form/RadioGroup';
  13. import {groupBy} from 'lodash';
  14. import {Card} from '@prometheusresearch/react-ui';
  15.  
  16. const NO_TODO = 'No ToDo items associated';
  17.  
  18. function Visit({title,
  19. status,
  20. todo,
  21. visitOptions,
  22. onChangeVisit,
  23. todoOptions,
  24. onChangeTodo}) {
  25. return (
  26. <VBox paddingBottom={5}>
  27. <Card header={title} padding={3}>
  28. <RadioGroup
  29. horizontal
  30. options={visitOptions}
  31. value={status}
  32. onChange={onChangeVisit}
  33. />
  34. {todo ? todo.map(t => <Todo {...t} />) : NO_TODO}
  35. </Card>
  36. </VBox>
  37. );
  38. }
  39.  
  40. function Todo(props) {
  41. let {title} = props;
  42. return (
  43. <VBox padding={3}>
  44. <Card header={title} padding={3}>
  45. test
  46. </Card>
  47. </VBox>
  48. );
  49. }
  50.  
  51.  
  52. @data.Fetch(({visitTodo, id}) => {
  53. let fetch = {};
  54. if (id) {
  55. fetch.visitTodo = visitTodo.params({id});
  56. }
  57. return fetch;
  58. })
  59. class TodoVisitStatusUpdate extends React.Component {
  60.  
  61. render() {
  62. let {value} = this.props.formValue;
  63. console.log('VAL', value);
  64. return (
  65. <Field {...this.props} readOnly={false}>
  66. {value === undefined ? <Preloader/> : this.renderValue(value)}
  67. </Field>
  68. );
  69. }
  70.  
  71. renderValue(value) {
  72. let todo = groupBy(value.todo, 'visit_id');
  73. let {options: visitOptions} = this.props.visitFields[0];
  74. let {options: todoOptions} = this.props.todoFields[0];
  75. let toOption = (o) => ({id: o.value, title: o.label});
  76. return (
  77. <div>
  78. {value.visit.map(v =>
  79. <Visit
  80. key={v.id}
  81. id={v.id}
  82. title={v.title}
  83. status={v.status}
  84. todo={todo[v.id]}
  85. visitOptions={visitOptions.map(toOption)}
  86. onChangeVisit={this.onChange.bind(this, 'visit', v.id)}
  87. todoOptions={todoOptions.map(toOption)}
  88. />
  89. )}
  90. </div>
  91. );
  92. }
  93.  
  94. onChange(what, id, status) {
  95. console.log(what, id, status);
  96. let {formValue} = this.props;
  97. let {value} = formValue;
  98. let newValue = {...value, [what]: value[what].map(
  99. (v) => (v.id == id ? {...v, status} : v)
  100. )};
  101. console.log(newValue);
  102. formValue.update(newValue);
  103. }
  104.  
  105. componentWillReceiveProps(nextProps) {
  106. let {formValue} = nextProps;
  107. let {visitTodo} = nextProps.fetched;
  108. if (formValue.value === undefined && visitTodo.data) {
  109. formValue.update(visitTodo.data);
  110. }
  111. }
  112.  
  113. componentDidMount() {
  114. let {setDataParams, formValue} = this.props;
  115. let studyEnrollment = formValue.root.value.study_enrollment
  116. || [{id: null}];
  117. let {id} = studyEnrollment[0];
  118. setDataParams({id});
  119. }
  120. }
  121.  
  122. export default WithFormValue(TodoVisitStatusUpdate);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement