From 29e336908a52653b3392c83bdbd4705b06520da4 Mon Sep 17 00:00:00 2001 From: Dylan Wagstaff Date: Fri, 2 Nov 2018 11:36:45 +1300 Subject: [PATCH 1/8] remove branch alias for 3.1 as there is now a branch 3.1 --- composer.json | 3 --- 1 file changed, 3 deletions(-) diff --git a/composer.json b/composer.json index d9b08915..4fa73d87 100644 --- a/composer.json +++ b/composer.json @@ -33,9 +33,6 @@ "dnadesign/silverstripe-elemental-virtual": "Adds support to share blocks between pages" }, "extra": { - "branch-alias": { - "3.x-dev": "3.1.x-dev" - }, "expose": [ "client/dist" ] From b584fa2346d3105104a5d3a16e654ad4409101e5 Mon Sep 17 00:00:00 2001 From: Guy Marriott Date: Wed, 14 Nov 2018 11:54:00 +1300 Subject: [PATCH 2/8] NEW Adding a plus icon to the Add Blocks button --- client/dist/js/bundle.js | 2 +- client/src/components/ElementEditor/AddNewButton.js | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/client/dist/js/bundle.js b/client/dist/js/bundle.js index de0fb8b3..ed4ae78a 100644 --- a/client/dist/js/bundle.js +++ b/client/dist/js/bundle.js @@ -1 +1 @@ -!function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s="./client/src/bundles/bundle.js")}({"./client/src/boot/index.js":function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}var o=n("./client/src/boot/registerComponents.js"),i=r(o),a=n("./client/src/boot/registerTransforms.js"),l=r(a);window.document.addEventListener("DOMContentLoaded",function(){(0,i.default)(),(0,l.default)()})},"./client/src/boot/registerComponents.js":function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=n(1),i=r(o),a=n("./client/src/components/ElementEditor/Element.js"),l=r(a),s=n("./client/src/components/ElementEditor/ElementActions.js"),c=r(s),u=n("./client/src/components/ElementEditor/ElementEditor.js"),d=r(u),p=n("./client/src/components/ElementEditor/ElementList.js"),f=r(p),m=n("./client/src/components/ElementEditor/Toolbar.js"),y=r(m),b=n("./client/src/components/ElementEditor/AddNewButton.js"),h=r(b),g=n("./client/src/components/ElementEditor/Header.js"),v=r(g),E=n("./client/src/components/ElementEditor/Content.js"),T=r(E),_=n("./client/src/components/ElementEditor/Summary.js"),O=r(_),P=n("./client/src/components/ElementEditor/InlineEditForm.js"),j=r(P),I=n("./client/src/components/ElementEditor/AddElementPopover.js"),w=r(I),k=n("./client/src/components/ElementEditor/HoverBar.js"),D=r(k),A=n("./client/src/components/ElementEditor/DragPositionIndicator.js"),S=r(A),C=n("./client/src/components/TextCheckboxGroupField/TextCheckboxGroupField.js"),B=r(C);t.default=function(){i.default.component.registerMany({ElementEditor:d.default,ElementToolbar:y.default,ElementAddNewButton:h.default,ElementList:f.default,Element:l.default,ElementActions:c.default,ElementHeader:v.default,ElementContent:T.default,ElementSummary:O.default,ElementInlineEditForm:j.default,AddElementPopover:w.default,HoverBar:D.default,DragPositionIndicator:S.default,TextCheckboxGroupField:B.default})}},"./client/src/boot/registerTransforms.js":function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=n(1),i=r(o),a=n("./client/src/state/history/readOneBlockQuery.js"),l=r(a),s=n("./client/src/components/HistoricElementView/HistoricElementView.js"),c=r(s),u=n("./client/src/state/history/revertToBlockVersionMutation.js"),d=r(u),p=n("./client/src/state/editor/readBlocksForPageQuery.js"),f=r(p),m=n("./client/src/state/editor/addElementMutation.js"),y=r(m),b=n("./client/src/components/ElementActions/ArchiveAction.js"),h=r(b),g=n("./client/src/components/ElementActions/PublishAction.js"),v=r(g),E=n("./client/src/components/ElementActions/SaveAction.js"),T=r(E),_=n("./client/src/components/ElementActions/UnpublishAction.js"),O=r(_);t.default=function(){i.default.transform("elemental-fieldgroup",function(e){e.component("FieldGroup.HistoryViewer.VersionDetail",c.default,"HistoricElement")},{after:"field-holders"}),i.default.transform("elements-history",function(e){e.component("HistoryViewer.Form_ItemEditForm",l.default,"ElementHistoryViewer")}),i.default.transform("blocks-history-revert",function(e){e.component("HistoryViewerToolbar.VersionedAdmin.HistoryViewer.Element.HistoryViewerVersionDetail",d.default,"BlockRevertMutation")}),i.default.transform("cms-element-editor",function(e){e.component("ElementList",f.default,"PageElements")}),i.default.transform("cms-element-adder",function(e){e.component("AddElementPopover",y.default,"ElementAddButton")}),i.default.transform("element-actions",function(e){e.component("ElementActions",T.default,"ElementActionsWithSave"),e.component("ElementActions",h.default,"ElementActionsWithArchive"),e.component("ElementActions",v.default,"ElementActionsWithPublish"),e.component("ElementActions",O.default,"ElementActionsWithUnpublish")})}},"./client/src/bundles/bundle.js":function(e,t,n){"use strict";n("./client/src/legacy/ElementEditor/entwine.js"),n("./client/src/boot/index.js")},"./client/src/components/ElementActions/AbstractAction.js":function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=Object.assign||function(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=!!e&&e.ID;this.setState({dragTargetElementId:n,dragSpot:!1===t?"bottom":"top"})}},{key:"handleDragEnd",value:function(e,t){var n=this.props;(0,n.actions.handleSortBlock)(e,t,n.pageId),this.setState({dragTargetElementId:null,dragSpot:null})}},{key:"render",value:function(){var e=this.props,t=e.fieldName,n=e.formState,r=e.ToolbarComponent,o=e.ListComponent,i=e.pageId,a=e.elementalAreaId,l=e.elementTypes,s=e.isDraggingOver,c=e.connectDropTarget,u=this.state,d=u.dragTargetElementId,f=u.dragSpot,m=(0,E.default)("element-editor",{});return c(p.default.createElement("div",{className:m},p.default.createElement(r,{elementTypes:l,elementalAreaId:a,onDragOver:this.handleDragOver}),p.default.createElement(o,{elementTypes:l,pageId:i,elementalAreaId:a,onDragOver:this.handleDragOver,onDragStart:this.handleDragStart,onDragEnd:this.handleDragEnd,dragSpot:f,isDraggingOver:s,dragTargetElementId:d}),p.default.createElement(P.default,null),p.default.createElement("input",{name:t,type:"hidden",value:JSON.stringify(n)||""})))}}]),t}(d.PureComponent);w.propTypes={fieldName:d.PropTypes.string,elementTypes:d.PropTypes.arrayOf(y.elementTypeType).isRequired,pageId:d.PropTypes.number.isRequired,elementalAreaId:d.PropTypes.number.isRequired,actions:d.PropTypes.shape({handleSortBlock:d.PropTypes.func})},w.defaultProps={},t.Component=w,t.default=(0,m.compose)(I.default,(0,g.DropTarget)("element",{},function(e,t){return{connectDropTarget:e.dropTarget(),isDraggingOver:t.isOver()}}),(0,b.connect)(s),(0,f.inject)(["ElementToolbar","ElementList"],function(e,t){return{ToolbarComponent:e,ListComponent:t}},function(){return"ElementEditor"}),_.default)(w)},"./client/src/components/ElementEditor/ElementList.js":function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0}),t.Component=void 0;var l=Object.assign||function(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:null,t=o.default.getSection("DNADesign\\Elemental\\Controllers\\ElementalAreaController"),n=t.form.elementForm.formNameTemplate;return e?n.replace("{id}",e):n}},"./client/src/state/editor/loadElementSchemaValue.js":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.loadElementSchemaValue=void 0;var r=n(11),o=function(e){return e&&e.__esModule?e:{default:e}}(r);t.loadElementSchemaValue=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=o.default.getSection("DNADesign\\Elemental\\Controllers\\ElementalAreaController"),r=n.form.elementForm[e]||"";return t?r+"/"+t:r}},"./client/src/state/editor/publishBlockMutation.js":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.config=t.mutation=void 0;var r=Object.assign||function(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=!!e&&e.ID;this.setState({dragTargetElementId:n,dragSpot:!1===t?"bottom":"top"})}},{key:"handleDragEnd",value:function(e,t){var n=this.props;(0,n.actions.handleSortBlock)(e,t,n.pageId),this.setState({dragTargetElementId:null,dragSpot:null})}},{key:"render",value:function(){var e=this.props,t=e.fieldName,n=e.formState,r=e.ToolbarComponent,o=e.ListComponent,i=e.pageId,a=e.elementalAreaId,l=e.elementTypes,s=e.isDraggingOver,c=e.connectDropTarget,u=this.state,d=u.dragTargetElementId,f=u.dragSpot,m=(0,E.default)("element-editor",{});return c(p.default.createElement("div",{className:m},p.default.createElement(r,{elementTypes:l,elementalAreaId:a,onDragOver:this.handleDragOver}),p.default.createElement(o,{elementTypes:l,pageId:i,elementalAreaId:a,onDragOver:this.handleDragOver,onDragStart:this.handleDragStart,onDragEnd:this.handleDragEnd,dragSpot:f,isDraggingOver:s,dragTargetElementId:d}),p.default.createElement(P.default,null),p.default.createElement("input",{name:t,type:"hidden",value:JSON.stringify(n)||""})))}}]),t}(d.PureComponent);w.propTypes={fieldName:d.PropTypes.string,elementTypes:d.PropTypes.arrayOf(y.elementTypeType).isRequired,pageId:d.PropTypes.number.isRequired,elementalAreaId:d.PropTypes.number.isRequired,actions:d.PropTypes.shape({handleSortBlock:d.PropTypes.func})},w.defaultProps={},t.Component=w,t.default=(0,m.compose)(I.default,(0,g.DropTarget)("element",{},function(e,t){return{connectDropTarget:e.dropTarget(),isDraggingOver:t.isOver()}}),(0,b.connect)(s),(0,f.inject)(["ElementToolbar","ElementList"],function(e,t){return{ToolbarComponent:e,ListComponent:t}},function(){return"ElementEditor"}),_.default)(w)},"./client/src/components/ElementEditor/ElementList.js":function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0}),t.Component=void 0;var l=Object.assign||function(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:null,t=o.default.getSection("DNADesign\\Elemental\\Controllers\\ElementalAreaController"),n=t.form.elementForm.formNameTemplate;return e?n.replace("{id}",e):n}},"./client/src/state/editor/loadElementSchemaValue.js":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.loadElementSchemaValue=void 0;var r=n(11),o=function(e){return e&&e.__esModule?e:{default:e}}(r);t.loadElementSchemaValue=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=o.default.getSection("DNADesign\\Elemental\\Controllers\\ElementalAreaController"),r=n.form.elementForm[e]||"";return t?r+"/"+t:r}},"./client/src/state/editor/publishBlockMutation.js":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.config=t.mutation=void 0;var r=Object.assign||function(e){for(var t=1;t Date: Thu, 15 Nov 2018 14:28:23 +1300 Subject: [PATCH 3/8] Check if elementdata exists before looping it --- src/Forms/ElementalAreaField.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Forms/ElementalAreaField.php b/src/Forms/ElementalAreaField.php index 64ff3224..a9657235 100644 --- a/src/Forms/ElementalAreaField.php +++ b/src/Forms/ElementalAreaField.php @@ -229,6 +229,10 @@ public function saveInto(DataObjectInterface $dataObject) $elementData = $this->Value(); $idPrefixLength = strlen(sprintf(ElementalAreaController::FORM_NAME_TEMPLATE, '')); + if (!$elementData) { + return; + } + foreach ($elementData as $form => $data) { // Extract the ID $elementId = (int) substr($form, $idPrefixLength); From 5f064f468c51f1314d794d63bd61ce582cb11c7a Mon Sep 17 00:00:00 2001 From: Simone Bosco Date: Mon, 19 Nov 2018 16:51:22 +1100 Subject: [PATCH 4/8] replaced static call with specific Class call to avoid sort order errors --- src/Models/BaseElement.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Models/BaseElement.php b/src/Models/BaseElement.php index 6af8e5e1..47312924 100644 --- a/src/Models/BaseElement.php +++ b/src/Models/BaseElement.php @@ -247,7 +247,7 @@ public function onBeforeWrite() parent::onBeforeWrite(); if (!$this->Sort) { - $this->Sort = static::get()->max('Sort') + 1; + $this->Sort = BaseElement::get()->max('Sort') + 1; } } From 0dab0eda207812fe2fd1d7e33fcdebfc131017a7 Mon Sep 17 00:00:00 2001 From: Robbie Averill Date: Mon, 19 Nov 2018 11:15:49 +0100 Subject: [PATCH 5/8] Add test to ensure that Sort is calculated on BaseElement values rather than static --- tests/BaseElementTest.php | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/tests/BaseElementTest.php b/tests/BaseElementTest.php index 8267fc2c..296fe16d 100644 --- a/tests/BaseElementTest.php +++ b/tests/BaseElementTest.php @@ -146,4 +146,20 @@ public function testStyleVariants() $element->Style = 'old'; $this->assertEquals('', $element->getStyleVariant()); } + + public function testOnBeforeWrite() + { + $element1 = new ElementContent(); + $element1->write(); + $baselineSort = $element1->Sort; + + $element2 = new ElementContent(); + $element2->write(); + $this->assertEquals($baselineSort + 1, $element2->Sort, 'Sort order should be higher than the max'); + + // Use a different element type, ensuring that sort orders are relative to the BaseElement + $element3 = new TestElement(); + $element3->write(); + $this->assertEquals($baselineSort + 2, $element3->Sort, 'Sort order should be higher than the max'); + } } From 2a9d240343f59ba83432c6b8fd13d96f4abe8730 Mon Sep 17 00:00:00 2001 From: Guy Marriott Date: Tue, 20 Nov 2018 17:02:09 +1300 Subject: [PATCH 6/8] Update travis to still use admin@4.3 for NPM tests in 4.0 branch --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 984f5383..e3a315c6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -26,7 +26,7 @@ matrix: - php: 7.2 env: DB=MYSQL RECIPE_VERSION=4.x-dev PHPUNIT_TEST=1 - php: 7.2 - env: DB=MYSQL RECIPE_VERSION=4.x-dev NPM_TEST=1 + env: DB=MYSQL RECIPE_VERSION=4.3.x-dev NPM_TEST=1 before_script: # Extra $PATH From c1a1c4599da15608d3be05ea61fcc52e68827b80 Mon Sep 17 00:00:00 2001 From: Guy Marriott Date: Tue, 20 Nov 2018 16:19:40 +1300 Subject: [PATCH 7/8] FIX TextCheckboxGroupField should passthrough if it has only one child --- client/dist/js/bundle.js | 2 +- .../TextCheckboxGroupField.js | 33 +++++++++++-------- 2 files changed, 20 insertions(+), 15 deletions(-) diff --git a/client/dist/js/bundle.js b/client/dist/js/bundle.js index ed4ae78a..b2ec4e14 100644 --- a/client/dist/js/bundle.js +++ b/client/dist/js/bundle.js @@ -1 +1 @@ -!function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s="./client/src/bundles/bundle.js")}({"./client/src/boot/index.js":function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}var o=n("./client/src/boot/registerComponents.js"),i=r(o),a=n("./client/src/boot/registerTransforms.js"),l=r(a);window.document.addEventListener("DOMContentLoaded",function(){(0,i.default)(),(0,l.default)()})},"./client/src/boot/registerComponents.js":function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=n(1),i=r(o),a=n("./client/src/components/ElementEditor/Element.js"),l=r(a),s=n("./client/src/components/ElementEditor/ElementActions.js"),c=r(s),u=n("./client/src/components/ElementEditor/ElementEditor.js"),d=r(u),p=n("./client/src/components/ElementEditor/ElementList.js"),f=r(p),m=n("./client/src/components/ElementEditor/Toolbar.js"),y=r(m),b=n("./client/src/components/ElementEditor/AddNewButton.js"),h=r(b),g=n("./client/src/components/ElementEditor/Header.js"),v=r(g),E=n("./client/src/components/ElementEditor/Content.js"),T=r(E),_=n("./client/src/components/ElementEditor/Summary.js"),O=r(_),P=n("./client/src/components/ElementEditor/InlineEditForm.js"),j=r(P),I=n("./client/src/components/ElementEditor/AddElementPopover.js"),w=r(I),k=n("./client/src/components/ElementEditor/HoverBar.js"),D=r(k),A=n("./client/src/components/ElementEditor/DragPositionIndicator.js"),S=r(A),C=n("./client/src/components/TextCheckboxGroupField/TextCheckboxGroupField.js"),B=r(C);t.default=function(){i.default.component.registerMany({ElementEditor:d.default,ElementToolbar:y.default,ElementAddNewButton:h.default,ElementList:f.default,Element:l.default,ElementActions:c.default,ElementHeader:v.default,ElementContent:T.default,ElementSummary:O.default,ElementInlineEditForm:j.default,AddElementPopover:w.default,HoverBar:D.default,DragPositionIndicator:S.default,TextCheckboxGroupField:B.default})}},"./client/src/boot/registerTransforms.js":function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=n(1),i=r(o),a=n("./client/src/state/history/readOneBlockQuery.js"),l=r(a),s=n("./client/src/components/HistoricElementView/HistoricElementView.js"),c=r(s),u=n("./client/src/state/history/revertToBlockVersionMutation.js"),d=r(u),p=n("./client/src/state/editor/readBlocksForPageQuery.js"),f=r(p),m=n("./client/src/state/editor/addElementMutation.js"),y=r(m),b=n("./client/src/components/ElementActions/ArchiveAction.js"),h=r(b),g=n("./client/src/components/ElementActions/PublishAction.js"),v=r(g),E=n("./client/src/components/ElementActions/SaveAction.js"),T=r(E),_=n("./client/src/components/ElementActions/UnpublishAction.js"),O=r(_);t.default=function(){i.default.transform("elemental-fieldgroup",function(e){e.component("FieldGroup.HistoryViewer.VersionDetail",c.default,"HistoricElement")},{after:"field-holders"}),i.default.transform("elements-history",function(e){e.component("HistoryViewer.Form_ItemEditForm",l.default,"ElementHistoryViewer")}),i.default.transform("blocks-history-revert",function(e){e.component("HistoryViewerToolbar.VersionedAdmin.HistoryViewer.Element.HistoryViewerVersionDetail",d.default,"BlockRevertMutation")}),i.default.transform("cms-element-editor",function(e){e.component("ElementList",f.default,"PageElements")}),i.default.transform("cms-element-adder",function(e){e.component("AddElementPopover",y.default,"ElementAddButton")}),i.default.transform("element-actions",function(e){e.component("ElementActions",T.default,"ElementActionsWithSave"),e.component("ElementActions",h.default,"ElementActionsWithArchive"),e.component("ElementActions",v.default,"ElementActionsWithPublish"),e.component("ElementActions",O.default,"ElementActionsWithUnpublish")})}},"./client/src/bundles/bundle.js":function(e,t,n){"use strict";n("./client/src/legacy/ElementEditor/entwine.js"),n("./client/src/boot/index.js")},"./client/src/components/ElementActions/AbstractAction.js":function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=Object.assign||function(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=!!e&&e.ID;this.setState({dragTargetElementId:n,dragSpot:!1===t?"bottom":"top"})}},{key:"handleDragEnd",value:function(e,t){var n=this.props;(0,n.actions.handleSortBlock)(e,t,n.pageId),this.setState({dragTargetElementId:null,dragSpot:null})}},{key:"render",value:function(){var e=this.props,t=e.fieldName,n=e.formState,r=e.ToolbarComponent,o=e.ListComponent,i=e.pageId,a=e.elementalAreaId,l=e.elementTypes,s=e.isDraggingOver,c=e.connectDropTarget,u=this.state,d=u.dragTargetElementId,f=u.dragSpot,m=(0,E.default)("element-editor",{});return c(p.default.createElement("div",{className:m},p.default.createElement(r,{elementTypes:l,elementalAreaId:a,onDragOver:this.handleDragOver}),p.default.createElement(o,{elementTypes:l,pageId:i,elementalAreaId:a,onDragOver:this.handleDragOver,onDragStart:this.handleDragStart,onDragEnd:this.handleDragEnd,dragSpot:f,isDraggingOver:s,dragTargetElementId:d}),p.default.createElement(P.default,null),p.default.createElement("input",{name:t,type:"hidden",value:JSON.stringify(n)||""})))}}]),t}(d.PureComponent);w.propTypes={fieldName:d.PropTypes.string,elementTypes:d.PropTypes.arrayOf(y.elementTypeType).isRequired,pageId:d.PropTypes.number.isRequired,elementalAreaId:d.PropTypes.number.isRequired,actions:d.PropTypes.shape({handleSortBlock:d.PropTypes.func})},w.defaultProps={},t.Component=w,t.default=(0,m.compose)(I.default,(0,g.DropTarget)("element",{},function(e,t){return{connectDropTarget:e.dropTarget(),isDraggingOver:t.isOver()}}),(0,b.connect)(s),(0,f.inject)(["ElementToolbar","ElementList"],function(e,t){return{ToolbarComponent:e,ListComponent:t}},function(){return"ElementEditor"}),_.default)(w)},"./client/src/components/ElementEditor/ElementList.js":function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0}),t.Component=void 0;var l=Object.assign||function(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:null,t=o.default.getSection("DNADesign\\Elemental\\Controllers\\ElementalAreaController"),n=t.form.elementForm.formNameTemplate;return e?n.replace("{id}",e):n}},"./client/src/state/editor/loadElementSchemaValue.js":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.loadElementSchemaValue=void 0;var r=n(11),o=function(e){return e&&e.__esModule?e:{default:e}}(r);t.loadElementSchemaValue=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=o.default.getSection("DNADesign\\Elemental\\Controllers\\ElementalAreaController"),r=n.form.elementForm[e]||"";return t?r+"/"+t:r}},"./client/src/state/editor/publishBlockMutation.js":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.config=t.mutation=void 0;var r=Object.assign||function(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=!!e&&e.ID;this.setState({dragTargetElementId:n,dragSpot:!1===t?"bottom":"top"})}},{key:"handleDragEnd",value:function(e,t){var n=this.props;(0,n.actions.handleSortBlock)(e,t,n.pageId),this.setState({dragTargetElementId:null,dragSpot:null})}},{key:"render",value:function(){var e=this.props,t=e.fieldName,n=e.formState,r=e.ToolbarComponent,o=e.ListComponent,i=e.pageId,a=e.elementalAreaId,l=e.elementTypes,s=e.isDraggingOver,c=e.connectDropTarget,u=this.state,d=u.dragTargetElementId,f=u.dragSpot,m=(0,E.default)("element-editor",{});return c(p.default.createElement("div",{className:m},p.default.createElement(r,{elementTypes:l,elementalAreaId:a,onDragOver:this.handleDragOver}),p.default.createElement(o,{elementTypes:l,pageId:i,elementalAreaId:a,onDragOver:this.handleDragOver,onDragStart:this.handleDragStart,onDragEnd:this.handleDragEnd,dragSpot:f,isDraggingOver:s,dragTargetElementId:d}),p.default.createElement(P.default,null),p.default.createElement("input",{name:t,type:"hidden",value:JSON.stringify(n)||""})))}}]),t}(d.PureComponent);w.propTypes={fieldName:d.PropTypes.string,elementTypes:d.PropTypes.arrayOf(y.elementTypeType).isRequired,pageId:d.PropTypes.number.isRequired,elementalAreaId:d.PropTypes.number.isRequired,actions:d.PropTypes.shape({handleSortBlock:d.PropTypes.func})},w.defaultProps={},t.Component=w,t.default=(0,m.compose)(I.default,(0,g.DropTarget)("element",{},function(e,t){return{connectDropTarget:e.dropTarget(),isDraggingOver:t.isOver()}}),(0,b.connect)(s),(0,f.inject)(["ElementToolbar","ElementList"],function(e,t){return{ToolbarComponent:e,ListComponent:t}},function(){return"ElementEditor"}),_.default)(w)},"./client/src/components/ElementEditor/ElementList.js":function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0}),t.Component=void 0;var l=Object.assign||function(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:null,t=o.default.getSection("DNADesign\\Elemental\\Controllers\\ElementalAreaController"),n=t.form.elementForm.formNameTemplate;return e?n.replace("{id}",e):n}},"./client/src/state/editor/loadElementSchemaValue.js":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.loadElementSchemaValue=void 0;var r=n(11),o=function(e){return e&&e.__esModule?e:{default:e}}(r);t.loadElementSchemaValue=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=o.default.getSection("DNADesign\\Elemental\\Controllers\\ElementalAreaController"),r=n.form.elementForm[e]||"";return t?r+"/"+t:r}},"./client/src/state/editor/publishBlockMutation.js":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.config=t.mutation=void 0;var r=Object.assign||function(e){for(var t=1;t { - const { children } = props; + const { children } = props; - const childrenWithProps = React.Children.toArray( - React.Children.map(children, child => - React.cloneElement(child, { noHolder: true }) - ) - ); - return ( - - {childrenWithProps[0]} - - {childrenWithProps[1]} - - - ); + const childrenWithProps = React.Children.toArray( + React.Children.map(children, child => + React.cloneElement(child, { noHolder: true }) + ) + ); + + if (childrenWithProps.length === 1) { + return childrenWithProps[0]; + } + + return ( + + {childrenWithProps[0]} + + {childrenWithProps[1]} + + + ); }; export default fieldHolder(TextCheckboxGroupField); From 84ab525449f96c842157fc8d437066fa11fc993d Mon Sep 17 00:00:00 2001 From: Robbie Averill Date: Tue, 20 Nov 2018 13:46:13 +0100 Subject: [PATCH 8/8] Add comment to explain why we render a single field sometimes --- .../components/TextCheckboxGroupField/TextCheckboxGroupField.js | 1 + 1 file changed, 1 insertion(+) diff --git a/client/src/components/TextCheckboxGroupField/TextCheckboxGroupField.js b/client/src/components/TextCheckboxGroupField/TextCheckboxGroupField.js index 3d66043b..253bf34a 100644 --- a/client/src/components/TextCheckboxGroupField/TextCheckboxGroupField.js +++ b/client/src/components/TextCheckboxGroupField/TextCheckboxGroupField.js @@ -11,6 +11,7 @@ const TextCheckboxGroupField = (props) => { ) ); + // If the checkbox has been removed, just render the TextField on its own if (childrenWithProps.length === 1) { return childrenWithProps[0]; }