1 | import React from 'react';
|
2 |
|
3 | import { ImageCell } from './ImageCell';
|
4 | import { UrlCell } from './UrlCell';
|
5 | import { TextCell } from './TextCell';
|
6 | import * as Constants from './constants';
|
7 | import { CellExpander } from './CellExpander';
|
8 |
|
9 | export function handleArrayOfData({columnDataType, cellData, width, height, key, columnKey,rowIndex, mixedContentImage, cellCustomRenderer, disableClickEvents}) {
|
10 | const childrenCellData = generateChildCellData(cellData);
|
11 |
|
12 | const properties = {
|
13 | disableClickEvents,
|
14 | columnDataType,
|
15 | cellData: childrenCellData[0],
|
16 | width,
|
17 | key,
|
18 | columnKey,
|
19 | mixedContentImage,
|
20 | height,
|
21 | rowIndex,
|
22 | };
|
23 |
|
24 | if (childrenCellData.length === 1) {
|
25 | return cellCustomRenderer(properties);
|
26 | } else {
|
27 | return (
|
28 | <CellExpander firstElement={cellCustomRenderer(properties)} totalRows={properties.height} rowIndex={properties.rowIndex}>
|
29 | {childrenCellData.map((cellData, key) => cellCustomRenderer({...properties, cellData, key}))}
|
30 | </CellExpander>
|
31 | );
|
32 | }
|
33 | }
|
34 |
|
35 | export function getComponentDataType ({
|
36 | columnDataType,
|
37 | cellData,
|
38 | width, height, key, columnKey,
|
39 | mixedContentImage,
|
40 | cellCustomRenderer = getComponentContent,
|
41 | cellStyles,
|
42 | disableClickEvents,
|
43 | rowIndex}) {
|
44 | if (!columnDataType) {
|
45 | return null;
|
46 | }
|
47 |
|
48 | const props = {cellStyles, columnDataType, cellData, key, columnKey, mixedContentImage, width, height,rowIndex, disableClickEvents };
|
49 |
|
50 | if (Array.isArray(cellData.main)) {
|
51 | return handleArrayOfData({...props, cellCustomRenderer});
|
52 | } else {
|
53 | return cellCustomRenderer(props);
|
54 | }
|
55 | }
|
56 |
|
57 | export function getComponentContent({columnDataType, cellData, width, key, columnKey, mixedContentImage, disableClickEvents = false }) {
|
58 | switch(columnDataType) {
|
59 | case Constants.ColumnTypes.URL:
|
60 | return <UrlCell cellData={cellData} width={width} key={key} columnKey={columnKey} disabled={disableClickEvents} />;
|
61 |
|
62 | case Constants.ColumnTypes.IMAGE:
|
63 | return <ImageCell cellData={cellData} width={width} key={key} disabled={disableClickEvents} columnKey={columnKey} mixedContentImage={mixedContentImage} />;
|
64 |
|
65 | case Constants.ColumnTypes.AUTO:
|
66 | if (cellData.main && cellData.main.src) {
|
67 | return <ImageCell cellData={cellData} width={width} key={key} disabled={disableClickEvents} columnKey={columnKey} mixedContentImage={mixedContentImage} />;
|
68 | } else {
|
69 | return <TextCell cellData={cellData} width={width} key={key} columnKey={columnKey} />;
|
70 | }
|
71 |
|
72 | default:
|
73 | return <TextCell cellData={cellData} width={width} key={key} columnKey={columnKey} disabled={disableClickEvents} />;
|
74 | }
|
75 | }
|
76 |
|
77 | export function generateChildCellData (cellData) {
|
78 | if (!cellData || !cellData.main) {
|
79 | return null;
|
80 | }
|
81 |
|
82 | const results = [];
|
83 |
|
84 | cellData.main.forEach((value, i) => {
|
85 | const obj = {};
|
86 |
|
87 | Object
|
88 | .keys(cellData)
|
89 | .forEach((property) => {
|
90 |
|
91 | if (Array.isArray(cellData[property])) {
|
92 | obj[property] = cellData[property][i];
|
93 | } else {
|
94 | obj[property] = cellData[property];
|
95 | }
|
96 | });
|
97 |
|
98 | results.push(obj);
|
99 | });
|
100 |
|
101 | return results;
|
102 | }
|