From 9f633d69ab0e5166f6af0c24ae7c92fbde4f8771 Mon Sep 17 00:00:00 2001 From: Silviu Bogan Date: Fri, 9 Oct 2020 20:04:54 +0300 Subject: [PATCH] Attempt (WIP) to solve the issue with a new widget --- src/ColumnsBlock/ColumnsBlockEdit.jsx | 9 ++- src/ColumnsBlock/schema.js | 1 + src/Widgets/LayoutSelectWidget.jsx | 88 +++++++++++++++++++++++++++ src/Widgets/index.js | 4 +- src/index.js | 3 +- 5 files changed, 101 insertions(+), 4 deletions(-) create mode 100644 src/Widgets/LayoutSelectWidget.jsx diff --git a/src/ColumnsBlock/ColumnsBlockEdit.jsx b/src/ColumnsBlock/ColumnsBlockEdit.jsx index fd7eef0..79ffcee 100644 --- a/src/ColumnsBlock/ColumnsBlockEdit.jsx +++ b/src/ColumnsBlock/ColumnsBlockEdit.jsx @@ -138,7 +138,13 @@ class ColumnsBlockEdit extends React.Component { componentDidUpdate(prevProps) { const cols = this.props.data.data?.blocks_layout?.items || []; const prevCols = prevProps.data.data?.blocks_layout?.items || []; - if (cols.length !== prevCols.length) { + + console.log('val', this.props.data.gridCols); + if ( + cols.length !== + prevCols.length /* || + this.props.data.gridCols?.length === 0 */ + ) { const available_variants = variants.filter( ({ defaultData }) => defaultData?.gridCols?.length === cols.length, ); @@ -146,6 +152,7 @@ class ColumnsBlockEdit extends React.Component { if (variant) { this.props.onChangeBlock(this.props.block, { ...this.props.data, + gridSize: variant.defaultData.gridSize, gridCols: variant.defaultData.gridCols, }); } diff --git a/src/ColumnsBlock/schema.js b/src/ColumnsBlock/schema.js index d47144b..d56a836 100644 --- a/src/ColumnsBlock/schema.js +++ b/src/ColumnsBlock/schema.js @@ -36,6 +36,7 @@ export const ColumnsBlockSchema = () => ({ }, gridCols: { title: 'Layout', + widget: 'layout_select', choices: [], }, }, diff --git a/src/Widgets/LayoutSelectWidget.jsx b/src/Widgets/LayoutSelectWidget.jsx new file mode 100644 index 0000000..f648b2b --- /dev/null +++ b/src/Widgets/LayoutSelectWidget.jsx @@ -0,0 +1,88 @@ +/** + * LayoutSelectWidget component. + * @module volto-columns-block/Widgets/LayoutSelectWidget + */ + +import React, { Component } from 'react'; +import { compose } from 'redux'; +import { defineMessages, injectIntl } from 'react-intl'; +import loadable from '@loadable/component'; + +import { FormFieldWrapper } from '@plone/volto/components'; + +import { + Option, + DropdownIndicator, + selectTheme, + customSelectStyles, +} from '@plone/volto/components/manage/Widgets/SelectStyling'; + +const Select = loadable(() => import('react-select')); + +/** + * SelectWidget component class. + * @function SelectWidget + * @returns {string} Markup of the component. + */ +export class LayoutSelectWidget extends Component { + state = { + selectedOption: null, + }; + + componentDidMount() { + this.setState({ + selectedOption: { + value: this.props.value, + label: this.props.choices.find((x) => x[0] === this.props.value)?.[1], + }, + }); + } + + componentDidUpdate(prevProps) { + if (prevProps.value !== this.props.value) { + this.setState({ + selectedOption: { + value: this.props.value, + label: this.props.choices.find((x) => x[0] === this.props.value)?.[1], + }, + }); + } + } + + /** + * Render method. + * @method render + * @returns {string} Markup for the component. + */ + render() { + const { id, choices, value, onChange } = this.props; + + console.log('value', value); + + return ( + +