huridocs/uwazi

View on GitHub
app/react/Forms/components/Nested.js

Summary

Maintainability
A
0 mins
Test Coverage
A
96%
Definition for rule 'node/no-restricted-import' was not found.
import PropTypes from 'prop-types';
import React, { Component } from 'react';
import { MarkDown } from './MarkDown';
 
Export statements should appear at the end of the file
Prefer named exports.
export default class Nested extends Component {
constructor(props) {
super(props);
this.state = { value: this.parseValue(this.props.value) };
}
 
Expected 'this' to be used by class method 'parseValue'.
parseValue should be placed after onChange
parseValue(rows = []) {
if (!rows[0]) {
return '';
}
 
const keys = Object.keys(rows[0]).sort();
let result = `| ${keys.join(' | ')} |\n`;
result += `| ${keys.map(() => '-').join(' | ')} |\n`;
result += `${rows
.map(row => `| ${keys.map(key => (row[key] || []).join(',')).join(' | ')}`)
.join(' |\n')} |`;
 
return result;
}
 
onChange(e) {
const value = e.target.value || '';
let formatedValues = [];
this.setState({ value });
if (value) {
const rows = value.split('\n').filter(row => row);
const keys = rows[0]
.split('|')
.map(key => key.trim())
.filter(key => key);
const entries = rows.splice(2);
formatedValues = entries.map(row =>
row
.split('|')
.splice(1)
.reduce((result, val, index) => {
if (!keys[index]) {
return result;
}
const values = val
.split(',')
.map(v => v.trim())
.filter(v => v);
Assignment to property of function parameter 'result'.
result[keys[index]] = values;
return result;
}, {})
);
}
 
this.props.onChange(formatedValues);
}
 
render() {
JSX props should not use .bind()
return <MarkDown onChange={this.onChange.bind(this)} value={this.state.value} />;
}
}
 
Nested.propTypes = {
propType "onChange" is not required, but has no corresponding defaultProps declaration.
onChange: PropTypes.func,
Prop type "array" is forbidden
propType "value" is not required, but has no corresponding defaultProps declaration.
value: PropTypes.array,
};