openreplay/frontend/app/components/Client/Integrations/JiraForm/ProjectDropdown.js
2021-05-01 15:12:01 +05:30

67 lines
No EOL
1.6 KiB
JavaScript

import { connect } from 'react-redux';
import { edit } from 'Duck/integrations/actions';
import { Dropdown } from 'UI';
import { withRequest } from 'HOCs';
@connect(state => ({
config: state.getIn([ 'issues', 'list' ])
}), { edit })
@withRequest({
dataName: "values",
initialData: [],
resetBeforeRequest: true,
requestName: "fetchProjects",
endpoint: '/integrations/issues/list_projects',
method: 'GET',
})
export default class ProductDropdown extends React.PureComponent {
constructor(props) {
super(props);
this.fetchProjects()
}
fetchProjects() {
const { config } = this.props;
if (!config.validateFetchProjects()) return;
this.props.fetchProjects().then(() => {
const { value, values, name } = this.props;
if (values && !values.includes(value) && values.length > 0) {
this.props.edit("jira", {
[ name ]: values[0].id,
});
}
});
}
componentDidUpdate(prevProps) {
const { config } = this.props;
if ((prevProps.config.url !== config.url || prevProps.config.apiToken !== config.apiToken) && config.validateFetchProjects()) {
this.fetchProjects();
}
}
onChange = (e, target) => {
if (typeof this.props.onChange === 'function') {
this.props.onChange({ target });
}
}
render() {
const {
values,
name,
value,
placeholder,
loading,
} = this.props;
const options = values ? values.map(g => ({ text: g.name, value: g.id })) : []
return (
<Dropdown
selection
options={ options }
name={ name }
value={ value }
placeholder={ placeholder }
onChange={ this.onChange }
loading={ loading }
/>
);
}
}