vademecum.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. 'use strict';
  2. const dom = React.createElement;
  3. const CONFIG = {
  4. profA: {
  5. contactInformation: true,
  6. productFilter: products => products,
  7. prices: false,
  8. },
  9. profB: {
  10. contactInformation: false,
  11. productFilter: products => products,
  12. prices: false,
  13. },
  14. domA: {
  15. contactInformation: false,
  16. productFilter: products => products,
  17. prices: true,
  18. },
  19. domB: {
  20. contactInformation: false,
  21. productFilter: products => products,
  22. prices: false,
  23. },
  24. };
  25. console.log(process.env.mode, CONFIG[process.env.mode]);
  26. const Tag = (label, key, className) => (
  27. <span className={`tag ${className||''}`} key={key}>{label}</span>
  28. );
  29. const Section = (title, paragraph, prepend) => (
  30. <div className="section-container">
  31. <h4 className="section-name">
  32. { title }
  33. </h4>
  34. <p className="section-body">
  35. { prepend }{ paragraph }
  36. </p>
  37. </div>
  38. );
  39. const Product = (product, key) => (
  40. <div className="product-container">
  41. <h3 className="product-name">
  42. {product.name}
  43. </h3>
  44. <div className="product-body">
  45. <p className="product-short-desc">
  46. {product.shortDesc}
  47. </p>
  48. {
  49. Section('Descripción', product.fullDesc)
  50. }
  51. {
  52. product.application && Section('Aplicación', product.application)
  53. }
  54. {
  55. product.actives &&
  56. Section(
  57. 'Activos',
  58. product.actives.join(', '),
  59. product.ph && Tag(`PH ${product.ph}`, null, 'is-ph')
  60. )
  61. }
  62. </div>
  63. </div>
  64. );
  65. const Category = (category, products) => (
  66. <table className="category-container table is-fullwidth">
  67. <thead className="category" id={category[TAG]}>
  68. <tr>
  69. <th>
  70. <h2 className="category-name">{category[LABEL]}</h2>
  71. </th>
  72. </tr>
  73. </thead>
  74. <tbody>
  75. {
  76. products.map((p, i) => (
  77. <tr><td>
  78. { Product(p, i) }
  79. </td></tr>
  80. ))
  81. }
  82. </tbody>
  83. <tfoot><tr><td>
  84. <div class="footer-space" height="20px">&nbsp;</div>
  85. </td></tr></tfoot>
  86. </table>
  87. );
  88. const ToC = (categories, products) => (
  89. <table className='toc-table table is-fullwidth'>
  90. <thead>
  91. <tr><th><h2>Indice</h2></th></tr>
  92. </thead>
  93. <tbody>
  94. {
  95. categories.map((category, i) => (
  96. <tr><td>
  97. <div className='toc-section'>
  98. <div>
  99. <a href={`#${category[TAG]}`} className='toc-title'>{category[LABEL]}
  100. <img src="images/arrow.png" className="toc-goto"/>
  101. </a>
  102. </div>
  103. {
  104. products[category[LABEL]].map(product => (
  105. <div className='toc-content'>
  106. { product.name }
  107. </div>
  108. ))
  109. }
  110. </div>
  111. </td></tr>
  112. ))
  113. }
  114. </tbody>
  115. </table>
  116. )
  117. const Vademecum = (categories, products) => {
  118. return categories.map((categoryName, i) => (
  119. <div key={i}>
  120. {
  121. Category(categoryName, products[categoryName[LABEL]])
  122. }
  123. </div>
  124. ))
  125. }
  126. const domContainer = document.querySelector('#vademecum');
  127. const LABEL = 0,
  128. TAG = 1;
  129. class VademecumData extends React.Component {
  130. constructor(props) {
  131. super(props);
  132. this.state = {
  133. categories: [
  134. [ "Higiene", "higiene" ],
  135. [ "Máscaras", "mascaras" ],
  136. [ "Ácido Hialurónico", "acido-hialuronico" ],
  137. [ "Peeling", "peeling" ],
  138. [ "Corporales", "corporales" ],
  139. [ "Hombres", "hombres" ],
  140. [ "Protección Intensiva", "proteccion-intensiva" ],
  141. [ "Monodosis", "monodosis" ],
  142. [ "Activos Concentrados", "activos-concentrados" ],
  143. [ "Protección Solar", "proteccion-solar" ]
  144. ],
  145. products: null,
  146. }
  147. }
  148. componentDidMount() {
  149. fetch('data/products-by-category.json')
  150. .then(response => response.json())
  151. .then(data => {
  152. this.setState({
  153. products: data,
  154. })
  155. })
  156. }
  157. render() {
  158. const { categories, products } = this.state;
  159. if (products) {
  160. return (
  161. <div>
  162. { ToC(categories, products) }
  163. { Vademecum(categories, products) }
  164. </div>
  165. )
  166. } else {
  167. return (<div></div>);
  168. }
  169. }
  170. }
  171. ReactDOM.render(dom(VademecumData), domContainer);