Advertisement
Guest User

Untitled

a guest
Jan 23rd, 2017
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.53 KB | None | 0 0
  1. import _ from 'lodash';
  2. import React, {Component, PropTypes} from 'react';
  3. import Radium from 'radium';
  4. import pureRender from 'pure-render-decorator';
  5. import {Globalize} from '../../../globalize';
  6. import TableCheckBox from './TableCheckBox.jsx';
  7. import styles from './styles';
  8.  
  9. function getDescendantByDotNotation(obj, is, value) {
  10. if (typeof is == 'string')
  11. return getDescendantByDotNotation(obj, is.split('.'), value);
  12. else if (is.length==1 && value!==undefined)
  13. return obj[is[0]] = value;
  14. else if (is.length==0)
  15. return obj;
  16. else
  17. return getDescendantByDotNotation(obj[is[0]],is.slice(1), value);
  18. }
  19.  
  20. @Radium @pureRender
  21. class TableTd extends Component {
  22. render() {
  23. const {
  24. item,
  25. data,
  26. tableName,
  27. tableInfo,
  28. selectedItems,
  29. dataStyle
  30. } = this.props;
  31. let event = {};
  32. let value = getDescendantByDotNotation(data, item.key);
  33. let title;
  34.  
  35. if(item.event) {
  36. event = _.mapValue(item.event, callback => callback(value, data));
  37. }
  38.  
  39. if(item.dom) {
  40. const Dom = item.dom;
  41. value = (
  42. <Dom
  43. item={data}
  44. tableName={tableName}
  45. tableInfo={tableInfo}
  46. selectedItems={selectedItems}
  47. />
  48. );
  49. }
  50. else {
  51. if(item.key) {
  52. try {
  53. if(item.transformFunction) {
  54. value = item.transformFunction(data);
  55. }
  56. else {
  57. value = getDescendantByDotNotation(data, item.key);
  58. switch(item.globalize) {
  59. case 'msg':
  60. value = Globalize.formatMessage(value);
  61. break;
  62. case 'date':
  63. value = Globalize.formatDate(new Date(value), {datetime: 'short'});
  64. break;
  65. default:
  66. }
  67. }
  68. }
  69. catch(err) {
  70. }
  71. title = value;
  72. if(typeof value !== 'string' || value === '') {
  73. value = '--';
  74. }
  75. }
  76. else if(item.image) {
  77. value = (
  78. <img
  79. src={getDescendantByDotNotation(data, item.image)}
  80. style={styles.image}
  81. />
  82. );
  83. }
  84. if(item.link) {
  85. const href = getDescendantByDotNotation(data, item.link);
  86. if(href) {
  87. value = (
  88. <a
  89. href={href}
  90. target="_blank"
  91. >
  92. {value}
  93. </a>
  94. );
  95. }
  96. }
  97. if(item.dataInnerClassName || item.dataInnerStyle) {
  98. value = (
  99. <div
  100. title={title}
  101. className={item.dataInnerClassName}
  102. style={item.dataInnerStyle}
  103. >
  104. {value}
  105. </div>
  106. );
  107. }
  108. }
  109.  
  110. return (
  111. <td
  112. className={item.dataClassName}
  113. style={[
  114. styles.thtd,
  115. dataStyle,
  116. item.dataStyle
  117. ]}
  118. {...event}
  119. >
  120. {value}
  121. </td>
  122. );
  123. }
  124. }
  125.  
  126. @pureRender
  127. class TableRow extends Component {
  128. render() {
  129. const {
  130. hasCheckbox,
  131. data,
  132. tableName,
  133. tableInfo,
  134. selectedItems,
  135. toggleSelect,
  136. dataStyle,
  137. columns
  138. } = this.props;
  139. return (
  140. <tr>
  141. {hasCheckbox &&
  142. <TableCheckBox
  143. item={data}
  144. tableName={tableName}
  145. tableInfo={tableInfo}
  146. selectedItems={selectedItems}
  147. toggleSelect={toggleSelect}
  148. style={dataStyle}
  149. key="table-checkbox"
  150. />
  151. }
  152. {columns.map((item, index) => (
  153. <TableTd
  154. item={item}
  155. data={data}
  156. tableName={tableName}
  157. tableInfo={tableInfo}
  158. selectedItems={selectedItems}
  159. dataStyle={dataStyle}
  160. key={index}
  161. />
  162. ))}
  163. </tr>
  164. );
  165. }
  166. }
  167.  
  168. class TableBody extends Component {
  169. static propTypes = {
  170. tableInfo: PropTypes.object.isRequired,
  171. columns: PropTypes.array.isRequired,
  172. }
  173.  
  174. render() {
  175. const {
  176. tableInfo,
  177. tableName,
  178. columns,
  179. hasCheckbox,
  180. selectedItems,
  181. toggleSelect,
  182. dataStyle
  183. } = this.props;
  184. return (
  185. <tbody>
  186. {tableInfo.data.map((item, index) => (
  187. <TableRow
  188. data={item}
  189. tableName={tableName}
  190. tableInfo={tableInfo}
  191. columns={columns}
  192. hasCheckbox={hasCheckbox}
  193. selectedItems={selectedItems}
  194. toggleSelect={toggleSelect}
  195. dataStyle={dataStyle}
  196. key={item.id}
  197. />
  198. ), this)}
  199. </tbody>
  200. );
  201. }
  202. }
  203.  
  204. export default TableBody;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement