/** * * SelectMany * */ import React from 'react'; import Select from 'react-select'; import PropTypes from 'prop-types'; import 'react-select/dist/react-select.css'; import { isArray, isNull, isUndefined, get, findIndex } from 'lodash'; import request from 'utils/request'; import templateObject from 'utils/templateObject'; import styles from './styles.scss'; class SelectMany extends React.Component { // eslint-disable-line react/prefer-stateless-function constructor(props) { super(props); this.state = { isLoading: true, }; } getOptions = query => { const params = { _limit: 20, source: this.props.relation.plugin || 'content-manager', }; // Set `query` parameter if necessary if (query) { params[`${this.props.relation.displayedAttribute}_contains`] = query; } // Request URL const requestUrlSuffix = query && get(this.props.record, [this.props.relation.alias]) ? get(this.props.record, [this.props.relation.alias]) : ''; const requestUrl = `/content-manager/explorer/${this.props.relation.model || this.props.relation.collection}/${requestUrlSuffix}`; // Call our request helper (see 'utils/request') return request(requestUrl, { method: 'GET', params, }) .then(response => { const options = isArray(response) ? response.map(item => ({ value: item, label: templateObject({ mainField: this.props.relation.displayedAttribute }, item) .mainField, })) : [ { value: response, label: response[this.props.relation.displayedAttribute], }, ]; return { options }; }) .catch(() => { strapi.notification.error('content-manager.notification.error.relationship.fetch'); }); }; handleChange = value => { const filteredValue = value.filter( (data, index) => findIndex(value, o => o.value.id === data.value.id) === index, ); const target = { name: `record.${this.props.relation.alias}`, type: 'select', value: filteredValue, }; this.props.setRecordAttribute({ target }); }; render() { const description = this.props.relation.description ? (
{this.props.relation.description}
) : ( '' ); const value = get(this.props.record, this.props.relation.alias); /* eslint-disable jsx-a11y/label-has-for */ return (