Guest User

Untitled

a guest
Mar 19th, 2018
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.26 KB | None | 0 0
  1. import React, { Component } from "react";
  2.  
  3. import Row from 'react-bootstrap/lib/Row';
  4. import Col from 'react-bootstrap/lib/Col';
  5.  
  6. import PropsTypes from 'prop-types';
  7.  
  8. class JsonView extends Component{
  9.  
  10. constructor(props){
  11. super(props);
  12. this.state = {};
  13. }
  14.  
  15. componentWillMount(){
  16. this.setState({data:this.props.data,fieldsMetaInfo:this.props.fieldsMetaInfo})
  17. }
  18.  
  19. componentWillReceiveProps(nextProps){
  20. this.setState({data:nextProps.data})
  21. }
  22.  
  23. render(){
  24. var data = this.state.data;
  25.  
  26. var dataKeys = Object.keys(data);
  27. return (
  28. <Row id="json-view" >
  29. {
  30. dataKeys.map((key,i) => {
  31. return (
  32. <div key={i}>
  33. {this.renderField(dataKeys[key],key)}
  34. {this.renderValue(data[key],key)}
  35. </div>
  36. )
  37. })
  38. }
  39. </Row>
  40. )
  41. }
  42.  
  43. renderField = (field,key) => {
  44. var fieldsMetaInfo = this.state.fieldsMetaInfo;
  45. if(fieldsMetaInfo){
  46. if (!fieldsMetaInfo.fieldsToExclude.includes(key)){
  47. var fieldToShow = fieldsMetaInfo[key].label;
  48. return (
  49. <Col xs={12} sm={12} md={12} className="field">{fieldToShow}</Col>
  50. )
  51. }
  52. }else{
  53. return <Col xs={12} sm={12} md={12} className="field">{key}</Col>
  54. }
  55.  
  56. }
  57.  
  58. renderValue = (value,key) => {
  59. var fieldsMetaInfo = this.state.fieldsMetaInfo;
  60.  
  61. if (fieldsMetaInfo){
  62. if (!fieldsMetaInfo.fieldsToExclude.includes(key)){
  63. var type = fieldsMetaInfo[key].type;
  64. if (type === 'link'){
  65. return (
  66. <Col xs={12} sm={12} md={12} className="value">
  67. <a href={value} target="_blank">{value}</a>
  68. </Col>
  69. )
  70. }else if (type === 'image'){
  71. return (
  72. <Col xs={12} sm={12} md={12} className="value">
  73. <img src={value} alt="" />
  74. </Col>
  75. )
  76. }else if (type === 'html'){
  77. return (
  78. <Col dangerouslySetInnerHTML={{__html:value}} xs={12} sm={12} md={12} className="value" />
  79. )
  80. }else if (type === 'array'){
  81. return (
  82. <Col>
  83. {
  84. value.map((item,i) =>
  85. <Col key={i} xs={12} sm={12} md={12} className="value">
  86. {i+1}) {item}
  87. </Col>
  88. )
  89. }
  90. </Col>
  91. )
  92. }
  93. else if (type === 'date'){
  94. return (
  95. <Col xs={12} sm={12} md={12} className="value">this is date</Col>
  96. )
  97. }
  98. else {
  99. return (
  100. <Col xs={12} sm={12} md={12} className="value">{value && value.toString()}</Col>
  101. )
  102. }
  103. }
  104. }else {
  105. return <Col xs={12} sm={12} md={12} className="value">{value && value.toString()}</Col>
  106. }
  107.  
  108. }
  109. }
  110.  
  111. JsonView.propTypes = {
  112. data:PropsTypes.object,
  113. fieldsMetaInfo:PropsTypes.object
  114. }
  115. export default JsonView
  116.  
  117. /*
  118. -------------USAGE-----------------
  119.  
  120. var users = [{
  121. name:"abc xyz",
  122. age:"12",
  123. education:["abc","xyz","foo bar"]
  124. },{
  125. name:"123 789",
  126. age:"14",
  127. education:["abc","xyz","foo bar"]
  128. }]
  129.  
  130. var userMetaInfo = {
  131. name:{
  132. label:"Name",
  133. type:"String"
  134. },
  135. age:{
  136. label:"Age",
  137. type:"String"
  138. },
  139. education:{
  140. label:"Education",
  141. type:"Array"
  142. }
  143. }
  144.  
  145. const renderUser = () => {
  146. return <JsonView
  147. data={users}
  148. fieldsMetaInfo={userMetaInfo}
  149. />
  150. }
  151.  
  152. */
Add Comment
Please, Sign In to add comment