diff --git a/application/controllers/api/frontend/v1/dashboard/admin/Preset.php b/application/controllers/api/frontend/v1/dashboard/admin/Preset.php index 7dc810181..5983d9660 100644 --- a/application/controllers/api/frontend/v1/dashboard/admin/Preset.php +++ b/application/controllers/api/frontend/v1/dashboard/admin/Preset.php @@ -30,7 +30,7 @@ class Preset extends FHCAPI_Controller parent::__construct([ 'list' => 'dashboard/admin:r', 'getBatch' => 'dashboard/admin:r', - 'addWidgets' => 'dashboard/admin:rw', + 'addWidget' => 'dashboard/admin:rw', 'removeWidget' => 'dashboard/admin:rw' ]); @@ -132,25 +132,29 @@ class Preset extends FHCAPI_Controller return $this->terminateWithSuccess($result); } - public function addWidgets() + public function addWidget() { $this->load->library('form_validation'); - $this->form_validation->set_rules('db', 'Dashboard', 'required'); + $this->form_validation->set_rules('dashboard', 'Dashboard', 'required'); $this->form_validation->set_rules('funktion_kurzbz', 'Funktion', 'required'); + $this->form_validation->set_rules('widget[widget]', 'Widget', 'required'); if (!$this->form_validation->run()) $this->terminateWithValidationErrors($this->form_validation->error_array()); - $dashboard_kurzbz = $this->input->post('db'); + $dashboard_kurzbz = $this->input->post('dashboard'); $funktion_kurzbz = $this->input->post('funktion_kurzbz'); - $widgets = $this->input->post('widgets') ?: []; + $widget = $this->input->post('widget'); + + if (!isset($widget['widgetid'])) + $widget['widgetid'] = $this->dashboardlib->generateWidgetId($dashboard_kurzbz); $preset = $this->dashboardlib->getPresetOrCreateEmptyPreset($dashboard_kurzbz, $funktion_kurzbz); $preset_decoded = json_decode($preset->preset, true); - $this->dashboardlib->addWidgetsToWidgets($preset_decoded, $dashboard_kurzbz, $funktion_kurzbz, $widgets); + $this->dashboardlib->addWidgetsToWidgets($preset_decoded, $dashboard_kurzbz, $funktion_kurzbz, [$widget]); $preset->preset = json_encode($preset_decoded); @@ -158,7 +162,7 @@ class Preset extends FHCAPI_Controller $this->getDataOrTerminateWithError($result); - $this->terminateWithSuccess($preset_decoded); + $this->terminateWithSuccess($widget['widgetid']); } public function removeWidget() diff --git a/public/js/api/factory/dashboard/dashboardAdmin.js b/public/js/api/factory/dashboard/dashboardAdmin.js index f734dae64..f685df485 100644 --- a/public/js/api/factory/dashboard/dashboardAdmin.js +++ b/public/js/api/factory/dashboard/dashboardAdmin.js @@ -58,7 +58,7 @@ export default { addWidgetsToPreset(params) { return { method: 'post', - url: 'api/frontend/v1/dashboard/admin/preset/addWidgets', + url: 'api/frontend/v1/dashboard/admin/preset/addWidget', params }; }, diff --git a/public/js/components/Dashboard/Admin/Presets.js b/public/js/components/Dashboard/Admin/Presets.js index 518e9d20f..88584cc03 100644 --- a/public/js/components/Dashboard/Admin/Presets.js +++ b/public/js/components/Dashboard/Admin/Presets.js @@ -26,6 +26,7 @@ export default { widgetAdd(section_name, widget) { this.$refs.widgetpicker.getWidget().then(widget_id => { widget.widget = widget_id; + widget.id = 'loading_' + String((new Date()).valueOf()); delete widget.custom; widget.preset = 1; let loading = {...widget}; @@ -36,15 +37,15 @@ export default { }); const params = { - db: this.dashboard, + dashboard: this.dashboard, funktion_kurzbz: section_name, - widgets: [widget] + widget }; return this.$api .call(ApiDashboardAdmin.addWidgetsToPreset(params)) .then(result => { - let newId = Object.keys(result.data[section_name].widgets).pop(); + let newId = result.data; widget.id = newId; widget.custom = 1; this.sections.forEach(section => { @@ -66,34 +67,29 @@ export default { widgetUpdate(section_name, payload) { payload = payload[section_name]; for (var k in payload) { - for (var i in this.sections) { - if (this.sections[i].name == section_name) { - for (var wid in this.sections[i].widgets) { - if (this.sections[i].widgets[wid].id == k) { - payload[k] = ObjectUtils.mergeDeep(this.sections[i].widgets[wid], payload[k]); - // NOTE(chris): remove internal props - for (var prop in {_x:1,_y:1,_w:1,_h:1,index:1,id:1}) - if (payload[k][prop]) - delete payload[k][prop]; - break; - } - } + const section = this.sections.find(section => section.name == section_name); + for (var wid in section.widgets) { + if (section.widgets[wid].id == k) { + payload[k] = ObjectUtils.mergeDeep(section.widgets[wid], payload[k]); + // NOTE(chris): remove internal props + for (var prop of ['_x', '_y', '_w', '_h', 'index', 'id']) + if (payload[k][prop]) + delete payload[k][prop]; break; } } payload[k].widgetid = k; delete payload[k].custom; } - - //TODO(manu) test - const params = { - db: this.dashboard, - funktion_kurzbz: section_name, - widgets: payload - }; - - return this.$api - .call(ApiDashboardAdmin.addWidgetsToPreset(params)) + this.$api + .call(Object.entries(payload).map(([key, widget]) => [ + key, + ApiDashboardAdmin.addWidgetsToPreset({ + dashboard: this.dashboard, + funktion_kurzbz: section_name, + widget + }) + ])) .then(result => { this.sections.forEach(section => { if (section.name == section_name) { diff --git a/public/js/components/Dashboard/Dashboard.js b/public/js/components/Dashboard/Dashboard.js index 497564fa5..e92e34f29 100644 --- a/public/js/components/Dashboard/Dashboard.js +++ b/public/js/components/Dashboard/Dashboard.js @@ -80,7 +80,10 @@ export default { payload[k].widgetid = k; } this.$api - .call(Object.entries(payload).map(([key, widget]) => [key, ApiDashboardUser.addWidget(this.dashboard, widget)])) + .call(Object.entries(payload).map(([key, widget]) => [ + key, + ApiDashboardUser.addWidget(this.dashboard, widget) + ])) .then(result => { const failed = result .filter(o => o.status == 'rejected')