Advertisement
Guest User

Untitled

a guest
May 11th, 2021
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.40 KB | None | 0 0
  1.  
  2. export default function WorkflowUnits() {
  3.  
  4. let temp_filters = [
  5. {
  6. title: 'Room area',
  7. field: 'area'
  8. }, {
  9. title: 'Room group',
  10. field: 'group'
  11. }, {
  12. title: 'Room availability',
  13. field: 'availability'
  14. }, {
  15. title: 'Room occupancy',
  16. field: 'occupancy'
  17. }
  18. ]
  19. const [response, setResponse] = useState(false);
  20. const [items, setItems] = useState([]);
  21. const [filters, setFilters] = useState(temp_filters);
  22. const [hidden, setHidden] = useState([]);
  23.  
  24. let api = process.env.REACT_APP_APP_API + '/api/v1/elastic?index=unit';
  25.  
  26. useEffect(() => {
  27.  
  28. if (!response) {
  29. axios.get(api)
  30. .then(res => {
  31. let axios_items = res.data.hits.hits;
  32. setItems(axios_items);
  33. if (axios_items.length > 0) {
  34. let _filters = filters;
  35. _filters.map((filter, i) => {
  36. filter['values'] = [];
  37. const unique = [...new Set(axios_items.map(item => item._source[filter.field]))];
  38. unique.map((filterValue, j) => {
  39. filter['values'].push({
  40. title: filterValue,
  41. count: axios_items.filter(countItem => countItem._source[filter.field] === filterValue).length,
  42. checked: false
  43. });
  44. });
  45. });
  46. setResponse(true);
  47. setFilters(_filters);
  48. }
  49. });
  50. }
  51. });
  52.  
  53. let handleFilterChange = (filterIndex, valueIndex, checked) => {
  54.  
  55. let _filters = filters;
  56. let _hidden = [];
  57. let data = items;
  58. _filters[filterIndex].values[valueIndex].checked = checked;
  59.  
  60. _filters.map((filter, i) => {
  61. if (filter.values !== undefined) {
  62. let checkedGroup = filter.values.filter(flItem => flItem.checked === true);
  63. data.map((item, index) => {
  64. if (checkedGroup.length > 0) {
  65. if (checkedGroup.filter(e => e.title === item._source[filter.field]).length === 0) {
  66. _hidden.push(item._id);
  67. }
  68. }
  69. });
  70. }
  71. });
  72.  
  73. _filters.map((filter, i) => {
  74. filter.values.map((filterValue, k) => {
  75. filterValue.count = data.filter(countItem => (!_hidden.includes(countItem._id) && countItem._source[filter.field] === filterValue.title)).length
  76. });
  77. });
  78.  
  79. setFilters(_filters)
  80. setHidden(_hidden)
  81. }
  82.  
  83. let renderItems = () => {
  84. let grouped = []
  85.  
  86. if (items.length > 0) {
  87. let group_by = 'occupancy';
  88. items.forEach(function (item, index) {
  89.  
  90. let i = item._source[group_by]
  91. if (!grouped[i]) {
  92. grouped[i] = [];
  93. }
  94.  
  95. var obj = item._source
  96.  
  97. grouped[i].push(obj);
  98. });
  99.  
  100. return (
  101. Object.keys(grouped).map((group_title, k) => {
  102. return (
  103. <div key={k}>
  104. <h6>{group_title}</h6>
  105. <FlexboxGrid>
  106. {
  107. items.map((item, index) => {
  108. if (!hidden.includes(item._id)) {
  109. return (
  110. <FlexboxGrid.Item
  111. colspan={6}>
  112. <Checkbox>{item._source.title}</Checkbox>
  113. </FlexboxGrid.Item>
  114. )
  115. }
  116. }
  117. )
  118. }
  119. </FlexboxGrid>
  120. </div>
  121. )
  122. }
  123. )
  124. )
  125. }
  126. }
  127.  
  128. let renderFilterItems = (filter, filterIndex) => {
  129. if (filter.values !== undefined) {
  130. if (filter.values.length > 0) {
  131. return (
  132. filter.values.map((filterItem, index) => {
  133. return (
  134. <Checkbox
  135. key={index}
  136. onChange={(value, checked) => {
  137. handleFilterChange(filterIndex, index, checked)
  138. }}
  139. >
  140. {filterItem.title}
  141. <span className="facet__counter">
  142. {filterItem.count}
  143. </span>
  144. </Checkbox>
  145. )
  146. }
  147. )
  148. )
  149. }
  150. }
  151.  
  152. }
  153.  
  154. let renderFilter = () => {
  155. if (filters.length > 0) {
  156. return (
  157. filters.map((filter, index) => (
  158. <CheckboxGroup className={'facet__block'}>
  159. <p>{filter.title}</p>
  160. {renderFilterItems(filter, index)}
  161. </CheckboxGroup>
  162. ))
  163. )
  164. }
  165. }
  166.  
  167. return (
  168. <>
  169. <div className="page" style={{
  170. display: 'flex',
  171. padding: '20px',
  172. borderRight: '1px solid #000'
  173. }}>
  174. <div style={{width: '80%'}}>
  175. {
  176. renderItems()
  177. }
  178. </div>
  179. <div style={{
  180. width: '20%',
  181. borderLeft: '1px solid #000',
  182. paddingLeft: '20px',
  183. paddingRight: '20px'
  184. }}>
  185. {
  186. renderFilter()
  187. }
  188. </div>
  189. </div>
  190. </>
  191. )
  192. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement