refactor dashboards Preset->addWidgets to (single) Preset->addWidget

This commit is contained in:
chfhtw
2026-03-23 16:05:22 +01:00
parent ca630e94ae
commit 2fc392c084
4 changed files with 37 additions and 34 deletions
@@ -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()
@@ -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
};
},
+21 -25
View File
@@ -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) {
+4 -1
View File
@@ -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')