From 43dfacfe72c5768b1a5c3cf1076239aefe48cd15 Mon Sep 17 00:00:00 2001 From: Sami Mokaddem Date: Wed, 20 Oct 2021 11:28:39 +0200 Subject: [PATCH] chg: [genericElement:indexTable] Refactored code and added support of compact display --- src/View/Helper/BootstrapHelper.php | 2 +- templates/Instance/home.php | 2 +- .../ListTopBar/group_table_action.php | 30 +++-- .../group_table_action/compactDisplay.php | 46 ++++++++ .../group_table_action/hiddenColumns.php | 110 +++++++----------- templates/layout/default.php | 1 + webroot/css/main.css | 4 + webroot/js/bootstrap-helper.js | 1 - webroot/js/table-settings.js | 34 ++++++ 9 files changed, 148 insertions(+), 82 deletions(-) create mode 100644 templates/element/genericElements/ListTopBar/group_table_action/compactDisplay.php create mode 100644 webroot/js/table-settings.js diff --git a/src/View/Helper/BootstrapHelper.php b/src/View/Helper/BootstrapHelper.php index 22d36d7..6d9275f 100644 --- a/src/View/Helper/BootstrapHelper.php +++ b/src/View/Helper/BootstrapHelper.php @@ -1793,7 +1793,7 @@ class BoostrapDropdownMenu extends BootstrapGeneric } $params['data-open-form-id'] = mt_rand(); } - + $label = $this->genNode('span', [ 'class' => ['ms-2',], ], h($entry['text'])); diff --git a/templates/Instance/home.php b/templates/Instance/home.php index 96450ea..d80491a 100644 --- a/templates/Instance/home.php +++ b/templates/Instance/home.php @@ -1,5 +1,5 @@ user_settings_by_name['ui.bookmarks']['value']) ? json_decode($loggedUser->user_settings_by_name['ui.bookmarks']['value'], true) : [] +$bookmarks = !empty($loggedUser->user_settings_by_name['ui.bookmarks']['value']) ? json_decode($loggedUser->user_settings_by_name['ui.bookmarks']['value'], true) : []; ?>

diff --git a/templates/element/genericElements/ListTopBar/group_table_action.php b/templates/element/genericElements/ListTopBar/group_table_action.php index a50184c..64d3cb2 100644 --- a/templates/element/genericElements/ListTopBar/group_table_action.php +++ b/templates/element/genericElements/ListTopBar/group_table_action.php @@ -4,12 +4,19 @@ if (empty($data['table_setting_id'])) { } $tableSettings = !empty($loggedUser->user_settings_by_name['ui.table_setting']['value']) ? json_decode($loggedUser->user_settings_by_name['ui.table_setting']['value'], true) : []; $tableSettings = !empty($tableSettings[$data['table_setting_id']]) ? $tableSettings[$data['table_setting_id']] : []; +$compactDisplay = !empty($tableSettings['compact_display']); $availableColumnsHtml = $this->element('/genericElements/ListTopBar/group_table_action/hiddenColumns', [ 'table_data' => $table_data, 'tableSettings' => $tableSettings, 'table_setting_id' => $data['table_setting_id'], ]); +$compactDisplayHtml = $this->element('/genericElements/ListTopBar/group_table_action/compactDisplay', [ + 'table_data' => $table_data, + 'tableSettings' => $tableSettings, + 'table_setting_id' => $data['table_setting_id'], + 'compactDisplay' => $compactDisplay +]); ?> element('/genericElements/ListTopBar/group_table_ 'data-table_setting_id' => $data['table_setting_id'], ], 'menu' => [ - [ - 'text' => __('Group by'), - 'icon' => 'layer-group', - 'menu' => [ - [ - 'text' => 'fields to be grouped by', - ] - ], - ], + // [ + // 'text' => __('Group by'), + // 'icon' => 'layer-group', + // 'menu' => [ + // [ + // 'text' => 'fields to be grouped by', TODO:implement + // ] + // ], + // ], [ 'text' => __('Show/hide columns'), 'icon' => 'eye-slash', @@ -48,9 +55,8 @@ $availableColumnsHtml = $this->element('/genericElements/ListTopBar/group_table_ ], ], [ - 'text' => __('Compact display'), - 'icon' => 'text-height' - ], + 'html' => $compactDisplayHtml, + ] ] ]); ?> diff --git a/templates/element/genericElements/ListTopBar/group_table_action/compactDisplay.php b/templates/element/genericElements/ListTopBar/group_table_action/compactDisplay.php new file mode 100644 index 0000000..312ad37 --- /dev/null +++ b/templates/element/genericElements/ListTopBar/group_table_action/compactDisplay.php @@ -0,0 +1,46 @@ + + + + + \ No newline at end of file diff --git a/templates/element/genericElements/ListTopBar/group_table_action/hiddenColumns.php b/templates/element/genericElements/ListTopBar/group_table_action/hiddenColumns.php index a6647a4..5d0ce68 100644 --- a/templates/element/genericElements/ListTopBar/group_table_action/hiddenColumns.php +++ b/templates/element/genericElements/ListTopBar/group_table_action/hiddenColumns.php @@ -10,7 +10,7 @@ foreach ($table_data['fields'] as $field) { $availableColumnsHtml .= sprintf( '
-
', @@ -29,72 +29,48 @@ echo $availableColumnsHtml; ?> \ No newline at end of file diff --git a/templates/layout/default.php b/templates/layout/default.php index 1482706..849592e 100644 --- a/templates/layout/default.php +++ b/templates/layout/default.php @@ -43,6 +43,7 @@ $sidebarOpen = $loggedUser->user_settings_by_name_with_fallback['ui.sidebar.expa Html->script('bootstrap-helper.js') ?> Html->script('api-helper.js') ?> Html->script('select2.min.js') ?> + Html->script('table-settings.js') ?> Html->script('CodeMirror/codemirror.js') ?> Html->script('CodeMirror/mode/javascript/javascript') ?> Html->script('CodeMirror/addon/hint/show-hint') ?> diff --git a/webroot/css/main.css b/webroot/css/main.css index 0403a88..8003ccc 100644 --- a/webroot/css/main.css +++ b/webroot/css/main.css @@ -58,6 +58,10 @@ line-height: 1.5; } +.cursor-pointer { + cursor: pointer; +} + .link-unstyled, .link-unstyled:link, .link-unstyled:hover { color: inherit; text-decoration: inherit; diff --git a/webroot/js/bootstrap-helper.js b/webroot/js/bootstrap-helper.js index b34ba9b..733f422 100644 --- a/webroot/js/bootstrap-helper.js +++ b/webroot/js/bootstrap-helper.js @@ -308,7 +308,6 @@ class Toaster { return $(this).is($toast) }); if (hoveredElements.length > 0) { - console.log('Toast hovered. Not hidding') evt.preventDefault() setTimeout(() => { $toast.toast('hide') diff --git a/webroot/js/table-settings.js b/webroot/js/table-settings.js new file mode 100644 index 0000000..95db30a --- /dev/null +++ b/webroot/js/table-settings.js @@ -0,0 +1,34 @@ +// function saveHiddenColumns(table_setting_id, newTableSettings) { +function mergeAndSaveSettings(table_setting_id, newTableSettings) { + const settingName = 'ui.table_setting' + const urlGet = `/user-settings/getSettingByName/${settingName}` + AJAXApi.quickFetchJSON(urlGet).then(tableSettings => { + tableSettings = JSON.parse(tableSettings.value) + newTableSettings = mergeNewTableSettingsIntoOld(table_setting_id, tableSettings, newTableSettings) + saveTableSetting(settingName, newTableSettings) + }).catch((e) => { // setting probably doesn't exist + saveTableSetting(settingName, newTableSettings) + }) +} + +function mergeNewTableSettingsIntoOld(table_setting_id, oldTableSettings, newTableSettings) { + // Merge recursively + tableSettings = Object.assign({}, oldTableSettings, newTableSettings) + tableSettings[table_setting_id] = Object.assign({}, oldTableSettings[table_setting_id], newTableSettings[table_setting_id]) + return tableSettings +} + +function saveTableSetting(settingName, newTableSettings) { + const urlSet = `/user-settings/setSetting/${settingName}` + AJAXApi.quickFetchAndPostForm(urlSet, { + value: JSON.stringify(newTableSettings) + }, { + provideFeedback: false + }).then(() => { + UI.toast({ + variant: 'success', + title: 'Table setting saved', + delay: 3000 + }) + }) +} \ No newline at end of file