packages/issue-dashboard-widgets/widgets/youtrack-activities-widget/app/activities-edit-form.js (96 lines of code) (raw):
import React from 'react';
import PropTypes from 'prop-types';
import LoaderInline from '@jetbrains/ring-ui/components/loader-inline/loader-inline';
import ConfigurationForm from '@jetbrains/hub-widget-ui/dist/configuration-form';
import RefreshPeriod from '@jetbrains/hub-widget-ui/dist/refresh-period';
import {observer} from 'mobx-react';
import filter from './activities-filter';
import EditFormUserSelector from './edit-form-user-selector';
import EditFormQueryToolbar from './edit-form-query-toolbar';
import EditFormCategorySelector from './edit-form-category-selector';
import EditFormYoutrackSelector from './edit-form-youtrack-selector';
import EditFormOptionalTitle from './edit-form-optional-title';
import '@jetbrains/ring-ui/components/form/form.scss';
import './style/activities-widget.css';
@observer
class ActivitiesEditForm extends React.Component {
static propTypes = {
submitConfig: PropTypes.func,
cancelConfig: PropTypes.func,
onServiceChange: PropTypes.func,
dashboardApi: PropTypes.object
};
constructor(props) {
super(props);
this.state = {
isLoading: false,
errorMessage: null
};
}
changeAuthor = author => {
filter.author = author;
};
changeRefreshPeriod = period => {
filter.refreshPeriod = period;
};
renderFilteringSettings() {
return (
<div className="ring-form__group">
<div>
<EditFormQueryToolbar
dashboardApi={this.props.dashboardApi}
/>
<EditFormUserSelector
dashboardApi={this.props.dashboardApi}
onChange={this.changeAuthor}
/>
<EditFormCategorySelector/>
</div>
</div>
);
}
renderRefreshPeriod() {
const {isLoading, errorMessage} = this.state;
if (isLoading || errorMessage) {
return '';
}
return (
<RefreshPeriod
seconds={filter.refreshPeriod}
onChange={this.changeRefreshPeriod}
/>
);
}
render() {
const {isLoading, errorMessage} = this.state;
const isInvalid = !!errorMessage || !(filter.categoriesIds || []).length;
return (
<ConfigurationForm
warning={errorMessage}
isInvalid={isInvalid}
isLoading={isLoading}
panelControls={this.renderRefreshPeriod()}
onSave={this.props.submitConfig}
onCancel={this.props.cancelConfig}
>
<div className="aw">
<EditFormOptionalTitle/>
{
<EditFormYoutrackSelector
dashboardApi={this.props.dashboardApi}
onChangeAsync={this.props.onServiceChange}
/>
}
{
// eslint-disable-next-line no-nested-ternary
errorMessage
? <span>{errorMessage}</span>
: isLoading
? <LoaderInline/>
: (this.renderFilteringSettings())
}
</div>
</ConfigurationForm>
);
}
}
export default ActivitiesEditForm;