import '../css/NewTaskPanel.scss'; import React from 'react'; import EditTaskForm from './EditTaskForm'; import PropTypes from 'prop-types'; import Storage from '../classes/Storage'; import ResizeModes from '../classes/ResizeModes'; import update from 'immutability-helper'; import PluginsAPI from '../classes/plugins/API'; class NewTaskPanel extends React.Component { static defaultProps = { filesCount: 0, showResize: false }; static propTypes = { onSave: PropTypes.func.isRequired, onCancel: PropTypes.func, filesCount: PropTypes.number, showResize: PropTypes.bool, getFiles: PropTypes.func, suggestedTaskName: PropTypes.oneOfType([PropTypes.string, PropTypes.func]) }; constructor(props){ super(props); this.state = { editTaskFormLoaded: false, resizeMode: Storage.getItem('resize_mode') === null ? ResizeModes.YES : ResizeModes.fromString(Storage.getItem('resize_mode')), resizeSize: parseInt(Storage.getItem('resize_size')) || 2048, items: [], // Coming from plugins, taskInfo: {}, inReview: false, loading: false, }; this.save = this.save.bind(this); this.handleFormTaskLoaded = this.handleFormTaskLoaded.bind(this); this.getTaskInfo = this.getTaskInfo.bind(this); this.setResizeMode = this.setResizeMode.bind(this); this.handleResizeSizeChange = this.handleResizeSizeChange.bind(this); this.handleFormChanged = this.handleFormChanged.bind(this); } componentDidMount(){ PluginsAPI.Dashboard.triggerAddNewTaskPanelItem({}, (item) => { if (!item) return; this.setState(update(this.state, { items: {$push: [item]} })); }); } save(e){ if (!this.state.inReview){ this.setState({inReview: true}); }else{ this.setState({inReview: false, loading: true}); e.preventDefault(); this.taskForm.saveLastPresetToStorage(); Storage.setItem('resize_size', this.state.resizeSize); Storage.setItem('resize_mode', this.state.resizeMode); const taskInfo = this.getTaskInfo(); if (taskInfo.selectedNode.key != "auto"){ Storage.setItem('last_processing_node', taskInfo.selectedNode.id); }else{ Storage.setItem('last_processing_node', ''); } if (this.props.onSave) this.props.onSave(taskInfo); } } cancel = (e) => { if (this.state.inReview){ this.setState({inReview: false}); }else{ if (this.props.onCancel){ if (window.confirm("Are you sure you want to cancel?")){ this.props.onCancel(); } } } } getTaskInfo(){ return Object.assign(this.taskForm.getTaskInfo(), { resizeSize: this.state.resizeSize, resizeMode: this.state.resizeMode }); } setResizeMode(v){ return e => { this.setState({resizeMode: v}); setTimeout(() => { this.handleFormChanged(); }, 0); } } handleResizeSizeChange(e){ // Remove all non-digit characters let n = parseInt(e.target.value.replace(/[^\d]*/g, "")); if (isNaN(n)) n = ""; this.setState({resizeSize: n}); setTimeout(() => { this.handleFormChanged(); }, 0); } handleFormTaskLoaded(){ this.setState({editTaskFormLoaded: true}); } handleFormChanged(){ this.setState({taskInfo: this.getTaskInfo()}); } render() { return (

{this.props.filesCount} files selected. Please check these additional options:

{ if (domNode) this.taskForm = domNode; }} /> {this.state.editTaskFormLoaded && this.props.showResize ?
px
{this.state.items.map((Item, i) =>
)}
: ""}
{this.state.editTaskFormLoaded ?
{this.props.onCancel !== undefined && } {this.state.loading ? : }
: ""}
); } } export default NewTaskPanel;