diff --git a/assets/css/src/components-form-editor/_preview.scss b/assets/css/src/components-form-editor/_preview.scss index ed465df9e7..31b2cdc393 100644 --- a/assets/css/src/components-form-editor/_preview.scss +++ b/assets/css/src/components-form-editor/_preview.scss @@ -80,3 +80,11 @@ width: 300px; } } + +.mailpoet-size-settings-control { + .components-radio-control__option { + display: inline-block; + margin-right: 1em; + width: auto; + } +} diff --git a/assets/js/src/form_editor/components/_stories/size_settings.tsx b/assets/js/src/form_editor/components/_stories/size_settings.tsx new file mode 100644 index 0000000000..0dcde73102 --- /dev/null +++ b/assets/js/src/form_editor/components/_stories/size_settings.tsx @@ -0,0 +1,58 @@ +import React from 'react'; +import { action } from '@storybook/addon-actions'; +import { SizeSettings } from '../size_settings'; + +export default { + title: 'FormEditor/Size Settings', +}; + +export const Settings = () => ( + <> + + + +); + + +export const SettingsInSidebar = () => ( +
+ + +
+); diff --git a/assets/js/src/form_editor/components/size_settings.tsx b/assets/js/src/form_editor/components/size_settings.tsx new file mode 100644 index 0000000000..83a5db9896 --- /dev/null +++ b/assets/js/src/form_editor/components/size_settings.tsx @@ -0,0 +1,66 @@ +import React, { useState } from 'react'; +import { RangeControl, RadioControl } from '@wordpress/components'; + +export type SizeDefinition = { + value: number|undefined, + unit: 'percent'|'pixel', +}; + +type Props = { + label: string, + minPercents?: number, + maxPercents?: number, + minPixels?: number, + maxPixels?: number, + value: SizeDefinition|undefined, + defaultPercentValue?: number, + defaultPixelValue?: number, + onChange: (value: SizeDefinition) => any, +} + +export const SizeSettings = ({ + label, + minPercents = 0, + maxPercents = 100, + minPixels = 10, + maxPixels = 1000, + value, + defaultPercentValue = 50, + defaultPixelValue = 200, + onChange, +}: Props) => { + const [localValue, setLocalValue] = useState(value ?? { unit: 'pixel', value: undefined }); + return ( +
+

{label}

+ { + const newValue = { + value: unit === 'pixel' ? defaultPixelValue : defaultPercentValue, + unit, + }; + setLocalValue(newValue); + onChange(newValue); + }} + /> + { + const newValue: SizeDefinition = { + unit: localValue.unit === 'pixel' ? 'pixel' : 'percent', + value: val, + }; + setLocalValue(newValue); + onChange(newValue); + }} + /> +
+ ); +};