/** * * ConfigPage * */ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { bindActionCreators, compose } from 'redux'; import { findIndex, get, isEmpty } from 'lodash'; // You can find these components in either // ./node_modules/strapi-helper-plugin/lib/src // or strapi/packages/strapi-helper-plugin/lib/src import ContainerFluid from 'components/ContainerFluid'; import HeaderNav from 'components/HeaderNav'; import PluginHeader from 'components/PluginHeader'; // Plugin's components import EditForm from 'components/EditForm'; // You can find these utils in either // ./node_modules/strapi-helper-plugin/lib/src // or strapi/packages/strapi-helper-plugin/lib/src import injectReducer from 'utils/injectReducer'; import injectSaga from 'utils/injectSaga'; import { getSettings, onCancel, onChange, setErrors, submit, } from './actions'; import reducer from './reducer'; import saga from './saga'; import selectConfigPage from './selectors'; class ConfigPage extends React.Component { componentDidMount() { this.getSettings(this.props); } componentWillReceiveProps(nextProps) { // Get new settings on navigation change if (nextProps.match.params.env !== this.props.match.params.env) { this.getSettings(nextProps); } } getSelectedProviderIndex = () => findIndex(this.props.settings.providers, ['provider', get(this.props.modifiedData, 'provider')]); /** * Get Settings depending on the props * @param {Object} props * @return {Func} calls the saga that gets the current settings */ getSettings = (props) => { const { match: { params: { env} } } = props; this.props.getSettings(env); } generateLinks = () => { const headerNavLinks = this.context.appEnvironments.reduce((acc, current) => { const link = Object.assign(current, { to: `/plugins/upload/configurations/${current.name}` }); acc.push(link); return acc; }, []).sort(link => link.name === 'production'); return headerNavLinks; } handleSubmit = (e) => { e.preventDefault(); const formErrors = Object.keys(get(this.props.settings, ['providers', this.getSelectedProviderIndex(), 'auth'], {})).reduce((acc, current) => { if (isEmpty(get(this.props.modifiedData, current, ''))) { acc.push({ name: current, errors: [{ id: 'components.Input.error.validation.required' }], }); } return acc; }, []); if (!isEmpty(formErrors)) { return this.props.setErrors(formErrors); } return this.props.submit(); } pluginHeaderActions = [ { kind: 'secondary', label: 'app.components.Button.cancel', onClick: this.props.onCancel, type: 'button', }, { kind: 'primary', label: 'app.components.Button.save', onClick: this.handleSubmit, type: 'submit', }, ]; render() { return (