import React, { Component } from 'react';
import { createComponent } from 'react-fela';
import { Table, Input } from 'antd';
import { uniq } from 'lodash';
import { compose, withPropsOnChange, withState } from 'recompose';
import isAfter from 'date-fns/isAfter';
const StyledTable = createComponent(
() => ({
'& td': {
minWidth: 50,
maxWidth: 200
}
}),
p =>
,
p => Object.keys(p)
);
const sortValue = (item, collection) => {
console.log(item, collection);
/* if (item.name === (collection.specialFields.imageField || 'image' || 'bild'))
return 50;
if (item.name === (collection.specialFields.nameField || 'name')) return 40;
if (
item.name ===
(collection.specialFields.descriptionField ||
'description' ||
'beschreibung')
)
return 30;
if (item.name === (collection.specialFields.colorField || 'color' || 'farbe'))
return 20;
return parseInt(item.specialFields.table, 10) || 10; */
};
const getSorter = field =>
(field.innerType.name === 'String' &&
((a, b) => {
const nameA = (a[field.name] || '').toUpperCase();
const nameB = (b[field.name] || '').toUpperCase();
if (nameA < nameB) {
return -1;
}
if (nameA > nameB) {
return 1;
}
return 0;
})) ||
(field.innerType.name === 'Int' &&
((a, b) => b[field.name] - a[field.name])) ||
(field.innerType.name === 'Date' &&
((a, b) => (isAfter(a[field.name], b[field.name]) ? 1 : -1))) ||
(field.innerType.name === 'Bool' &&
((a, b) => (a[field.name] && !b[field.name] ? 1 : -1)));
const getFilters = (items, field) => {
if (field.type.kind === 'ENUM' || field.type.kind === 'LIST') {
const arr = items.map(item => item[field.name]);
return uniq(arr)
.map(x => ({
text: getPrintableValue(x, field),
value: x
}))
.filter(x => x.value);
}
return undefined;
};
const enhance = compose(
withState('activeFilter', 'setActiveFilter'),
withState('filter', 'setFilter', {}),
withPropsOnChange(['collection'], ({ collection }) => ({
columns: (collection.columns || Object.keys(collection.fields))
// .sort((a, b) => sortValue(b, collection) - sortValue(a, collection))
.map(name => ({
key: name,
title: collection.fields[name].label,
dataIndex: name,
// sorter: getSorter(field),
// filters: getFilters(items, field),
/* filterDropdown: field.innerType.name === 'String' && (
setFilter({ ...filter, [field.name]: e.target.value })
}
onPressEnter={() => setActiveFilter()}
/>
),
filterDropdownVisible: activeFilter === field.name,
onFilterDropdownVisibleChange: visible =>
setActiveFilter(visible && field.name),
onFilter: (value, item) => item[field.name] === value, */
render: value => value
}))
})),
withPropsOnChange(['items', 'filter'], ({ items, filter }) => ({
data: items
.filter(item =>
Object.keys(filter).reduce(
(acc, key) =>
acc &&
item[key].toLowerCase().indexOf(filter[key].toLowerCase()) !== -1,
true
)
)
.map((item, i) => ({
key: i,
...item
}))
}))
);
@enhance
export default class CollectionView extends Component {
render() {
const { columns, data, onClick } = this.props;
return (
onClick(item.id)}
/>
);
}
}