From f44e43d4e441bfb4d4b63ef442e6ec4a6e71674b Mon Sep 17 00:00:00 2001
From: Frank Naegler <frank.naegler@typo3.org>
Date: Wed, 19 Oct 2016 17:08:02 +0200
Subject: [PATCH] [BUGFIX] Prevent error for tree in flexform
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

This patch prevent JS errors in case a tree is rendered in a FlexForm,
before the record was saved for the first time. In this case the data
can’t be loaded and we display a message.

This is a bit hacky but at the moment the best way to fix the issue.

Resolves: #78350
Releases: master
Change-Id: Ic11ae6e5c22711fe9a10fe3287b015ea1d87a30f
Reviewed-on: https://review.typo3.org/50275
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Markus Klein <markus.klein@typo3.org>
Tested-by: Markus Klein <markus.klein@typo3.org>
Reviewed-by: Wouter Wolters <typo3@wouterwolters.nl>
Tested-by: Wouter Wolters <typo3@wouterwolters.nl>
---
 .../Public/JavaScript/FormEngine/Element/SvgTree.js         | 6 ++++++
 typo3/sysext/lang/locallang_csh_corebe.xlf                  | 3 +++
 2 files changed, 9 insertions(+)

diff --git a/typo3/sysext/backend/Resources/Public/JavaScript/FormEngine/Element/SvgTree.js b/typo3/sysext/backend/Resources/Public/JavaScript/FormEngine/Element/SvgTree.js
index 804223eaec72..f4bd5ac47ab9 100644
--- a/typo3/sysext/backend/Resources/Public/JavaScript/FormEngine/Element/SvgTree.js
+++ b/typo3/sysext/backend/Resources/Public/JavaScript/FormEngine/Element/SvgTree.js
@@ -187,6 +187,12 @@ define(['jquery', 'd3'], function ($, d3) {
             var me = this;
             d3.json(this.settings.dataUrl, function (error, json) {
                 if (error) throw error;
+                if (json === null) {
+                    var $container = $(me.wrapper).closest('.t3js-formengine-field-item');
+                    $container.hide();
+                    $container.parent().append('<p class="text-danger">' + TYPO3.lang['tcatree.msg_save_first'] + '</p>');
+                    return;
+                }
                 if (Array.isArray(json)) {
                     //little hack, so we can use json structure prepared by ExtJsJsonTreeRenderer
                     json = json[0];
diff --git a/typo3/sysext/lang/locallang_csh_corebe.xlf b/typo3/sysext/lang/locallang_csh_corebe.xlf
index 1d392380740c..a1c0cb817c2a 100644
--- a/typo3/sysext/lang/locallang_csh_corebe.xlf
+++ b/typo3/sysext/lang/locallang_csh_corebe.xlf
@@ -162,6 +162,9 @@ If you click the folder title in the Folder Tree you will see the sub-module loa
 			<trans-unit id="tcatree.findItem">
 				<source>Find Item</source>
 			</trans-unit>
+			<trans-unit id="tcatree.msg_save_first">
+				<source>Please save the content element before selecting a category.</source>
+			</trans-unit>
 			<trans-unit id="list_module.alttitle">
 				<source>The Web&gt;List module</source>
 			</trans-unit>
-- 
GitLab