import React from 'react'; import FormDialog from './FormDialog'; import PropTypes from 'prop-types'; import { _ } from '../classes/gettext'; import $ from 'jquery'; class MoveTaskDialog extends React.Component { static defaultProps = { title: _("Move Task"), saveLabel: _("Save Changes"), savingLabel: _("Moving..."), saveIcon: "far fa-edit", show: true }; static propTypes = { task: PropTypes.object.isRequired, saveAction: PropTypes.func.isRequired, title: PropTypes.string, saveLabel: PropTypes.string, savingLabel: PropTypes.string, saveIcon: PropTypes.string, show: PropTypes.bool }; constructor(props){ super(props); this.state = { projectId: props.task.project, projects: [], loading: true }; this.getFormData = this.getFormData.bind(this); this.onShow = this.onShow.bind(this); } getFormData(){ return {project: this.state.projectId}; } onShow(){ this.setState({loading: true, projects: []}); // Load projects from API this.serverRequest = $.getJSON(`/api/projects/?ordering=-created_at`, json => { this.setState({ projects: json.filter(p => p.permissions.indexOf("add") !== -1) }); }) .fail((jqXHR, textStatus, errorThrown) => { this.dialog.setState({ error: interpolate(_("Could not load projects list: %(error)s"), {error: textStatus}) }); }) .always(() => { this.setState({loading: false}); this.serverRequest = null; }); } show(){ this.dialog.show(); } hide(){ this.dialog.hide(); } componentWillUnmount(){ if (this.serverRquest) this.serverRquest.abort(); } handleProjectChange = e => { this.setState({projectId: e.target.value}); } render(){ return ( { this.dialog = domNode; }}>
{!this.state.loading ?
: }
); } } export default MoveTaskDialog;