import { h, Component } from 'preact'; import linkState from 'linkstate'; import { bind, linkRef } from '../../lib/initial-util'; import { inputFieldValueAsNumber, inputFieldValue, preventDefault } from '../../lib/util'; import { ResizeOptions } from './processor-meta'; import * as style from '../../components/Options/style.scss'; import Checkbox from '../../components/checkbox'; import Expander from '../../components/expander'; import Select from '../../components/select'; interface Props { isVector: Boolean; options: ResizeOptions; aspect: number; onChange(newOptions: ResizeOptions): void; } interface State { maintainAspect: boolean; } export default class ResizerOptions extends Component { state: State = { maintainAspect: true, }; form?: HTMLFormElement; private reportOptions() { const form = this.form!; const width = form.width as HTMLInputElement; const height = form.height as HTMLInputElement; const { options } = this.props; if (!width.checkValidity() || !height.checkValidity()) return; const newOptions: ResizeOptions = { width: inputFieldValueAsNumber(width), height: inputFieldValueAsNumber(height), method: form.resizeMethod.value, // Casting, as the formfield only returns the correct values. fitMethod: inputFieldValue(form.fitMethod, options.fitMethod) as ResizeOptions['fitMethod'], }; this.props.onChange(newOptions); } @bind private onChange() { this.reportOptions(); } componentDidUpdate(prevProps: Props, prevState: State) { if (!prevState.maintainAspect && this.state.maintainAspect) { this.form!.height.value = Math.round(Number(this.form!.width.value) / this.props.aspect); this.reportOptions(); } } @bind private onWidthInput() { if (this.state.maintainAspect) { const width = inputFieldValueAsNumber(this.form!.width); this.form!.height.value = Math.round(width / this.props.aspect); } this.reportOptions(); } @bind private onHeightInput() { if (this.state.maintainAspect) { const height = inputFieldValueAsNumber(this.form!.height); this.form!.width.value = Math.round(height * this.props.aspect); } this.reportOptions(); } render({ options, isVector }: Props, { maintainAspect }: State) { return (
{maintainAspect ? null : }
); } }