factory.dev.js 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. import React from 'react';
  2. import Container from './Layout.js';
  3. import Title from '../src/Title/Title.jsx';
  4. import MessageBox from '../src/MsgBox/MessageBox.jsx';
  5. import { converter } from './converter.js';
  6. import URL from '../constants/url.dev.json';
  7. import 'whatwg-fetch';
  8. import tempdata from '../data/testAll.json';
  9. class Factory extends React.Component {
  10. constructor(props) {
  11. super(props);
  12. this.dev = 'local ';
  13. this.index = 0;
  14. this.state = {
  15. titleHeight: 0,
  16. error: null,
  17. firstRequestTime: new Date()
  18. };
  19. }
  20. getModelConfig(url) {
  21. let me = this;
  22. fetch(url, {
  23. method: 'POST',
  24. credentials: 'include'
  25. }).then(function (response) {
  26. return (response.json())
  27. }).then((json) => {
  28. if(!json.instance) {
  29. throw {message: json.message};
  30. }
  31. let instance = json.instance;
  32. if (!me.state.instance) {
  33. me.setState({
  34. instance: instance
  35. }, me.setRefresh);
  36. }
  37. return json.data[0];
  38. }).then(function (modelconfig) {
  39. if(!modelconfig.content) {
  40. throw {message: '该看板内容为空'}
  41. }
  42. me.setState({
  43. msg: null,
  44. model: converter(modelconfig),
  45. });
  46. }).catch(function (ex) {
  47. let message = ex.message;
  48. if(ex.name && ex.name == 'TypeError') {
  49. message = '网络连接异常';
  50. }
  51. me.setState({
  52. msg: {name: 'Error', message: message}
  53. });
  54. console.log('parsing failed', ex);
  55. });
  56. }
  57. getTitleHeight() {
  58. let titleEl = document.getElementsByClassName('rc-title');
  59. let titleHeight = titleEl.length > 0 ? titleEl[0].offsetHeight : 0;
  60. titleHeight = titleHeight || 0;
  61. return titleHeight;
  62. }
  63. setTitleHeight(height) {
  64. this.setState({
  65. titleHeight: height
  66. });
  67. }
  68. setRefresh() {
  69. let { instance } = this.state;
  70. if (!instance) { return; }
  71. let codes = instance.enabledKanbanCodes;
  72. let display = instance.display;
  73. let next = {
  74. enable: instance.switchFrequency > 0 ? true : false,
  75. interval: instance.switchFrequency
  76. };
  77. let current = {
  78. enable: instance.refreshFrequency > 0 ? true : false,
  79. interval: instance.refreshFrequency
  80. };
  81. let refresh = {
  82. current: current,
  83. next: next
  84. };
  85. if (refresh.current) {
  86. if (refresh.current.enable) {
  87. this.refreshThis = setInterval(function () {
  88. if (this.index == codes.length - 1) {
  89. this.index = 0;
  90. } else {
  91. this.index++;
  92. }
  93. let reg = /(.*){code}(.*){index}(.*){kanbanCode}(.*)/g;
  94. this.getModelConfig(URL.completelyPath.replace(reg, '$1' + this.props.code + '$2' + this.props.index + '$3' + codes[this.index]));
  95. }.bind(this), refresh.current.interval * 1000 || 10000)
  96. }
  97. }
  98. }
  99. onWindowResize() {
  100. this.setTitleHeight(this.getTitleHeight());
  101. }
  102. componentDidUpdate() {
  103. }
  104. componentWillMount() {
  105. let { code, index } = this.props;
  106. if(this.dev == 'local') {
  107. this.setState({
  108. model: converter(tempdata.data[0]),
  109. });
  110. this.refreshNext = setInterval(function () {
  111. if (this.index >= tempdata.data.length-1) {
  112. this.index = 0;
  113. } else {
  114. this.index++;
  115. }
  116. this.setState({
  117. model: converter(tempdata.data[this.index]),
  118. });
  119. }.bind(this), 7000)
  120. }else {
  121. let reg = /(.*){code}(.*){index}(.*)/g;
  122. this.getModelConfig(URL.defaultPath.replace(reg, '$1' + code + '$2' + index));
  123. }
  124. }
  125. componentDidMount() {
  126. window.addEventListener('resize', this.onWindowResize.bind(this));
  127. this.setState({
  128. titleHeight: this.getTitleHeight()
  129. });
  130. }
  131. componentWillUnmount() {
  132. window.removeEventListener('resize', this.onWindowResize);
  133. if (this.refreshThis) {
  134. if (this.refreshThis.interval > 0) {
  135. window.clearInterval(this.refreshThis);
  136. }
  137. }
  138. if (this.refreshNext) {
  139. if (this.refreshNext.interval > 0) {
  140. window.clearInterval(this.refreshNext);
  141. }
  142. }
  143. }
  144. componentWillReceiveProps(nextProps) {
  145. }
  146. render() {
  147. let { titleHeight, model, msg } = this.state;
  148. if (msg) {
  149. return <MessageBox static={this.props.static} titleHeight={titleHeight} msg={msg} />
  150. }
  151. if (!this.state.model) {
  152. return <div style={{color: 'white'}}>loading...</div>
  153. }
  154. const { title, content, fixedbox } = model;
  155. let titleConfig = title;
  156. let items = [];
  157. if (fixedbox) {
  158. items = fixedbox.items || [];
  159. }
  160. return (
  161. <div ref='body'>
  162. <Title setTitleHeight={this.setTitleHeight.bind(this)} {...titleConfig} />
  163. <Container items={content.items} rowHeight={(window.innerHeight - titleHeight) / 10} />
  164. </div>
  165. );
  166. }
  167. };
  168. module.exports = Factory;