diff --git a/docs/en_US/images/query_editing.png b/docs/en_US/images/query_editing.png index e2e5199aa..0595eb1b9 100644 Binary files a/docs/en_US/images/query_editing.png and b/docs/en_US/images/query_editing.png differ diff --git a/web/pgadmin/browser/server_groups/servers/databases/casts/static/js/cast.js b/web/pgadmin/browser/server_groups/servers/databases/casts/static/js/cast.js index bf64c1fb9..0dacbcd43 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/casts/static/js/cast.js +++ b/web/pgadmin/browser/server_groups/servers/databases/casts/static/js/cast.js @@ -59,11 +59,13 @@ define('pgadmin.node.cast', [ applies: ['object', 'context'], callback: 'show_obj_properties', category: 'create', priority: 4, label: gettext('Cast...'), data: {action: 'create'}, + shortcut_preference: ['browser', 'sub_menu_create'], },{ name: 'create_cast', node: 'cast', module: this, applies: ['object', 'context'], callback: 'show_obj_properties', category: 'create', priority: 4, label: gettext('Cast...'), data: {action: 'create'}, + shortcut_preference: ['browser', 'sub_menu_create'], }]); }, diff --git a/web/pgadmin/browser/server_groups/servers/databases/event_triggers/static/js/event_trigger.js b/web/pgadmin/browser/server_groups/servers/databases/event_triggers/static/js/event_trigger.js index 2ca636169..671a88373 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/event_triggers/static/js/event_trigger.js +++ b/web/pgadmin/browser/server_groups/servers/databases/event_triggers/static/js/event_trigger.js @@ -52,11 +52,13 @@ define('pgadmin.node.event_trigger', [ applies: ['object', 'context'], callback: 'show_obj_properties', category: 'create', priority: 4, label: gettext('Event Trigger...'), data: {action: 'create'}, + shortcut_preference: ['browser', 'sub_menu_create'], },{ name: 'create_event_trigger', node: 'event_trigger', module: this, applies: ['object', 'context'], callback: 'show_obj_properties', category: 'create', priority: 4, label: gettext('Event Trigger...'), data: {action: 'create'}, + shortcut_preference: ['browser', 'sub_menu_create'], },{ name: 'create_event_trigger', node: 'database', module: this, applies: ['object', 'context'], callback: 'show_obj_properties', diff --git a/web/pgadmin/browser/server_groups/servers/databases/extensions/static/js/extension.js b/web/pgadmin/browser/server_groups/servers/databases/extensions/static/js/extension.js index 229fc6e17..4f88e5b3f 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/extensions/static/js/extension.js +++ b/web/pgadmin/browser/server_groups/servers/databases/extensions/static/js/extension.js @@ -77,11 +77,13 @@ define('pgadmin.node.extension', [ applies: ['object', 'context'], callback: 'show_obj_properties', category: 'create', priority: 4, label: gettext('Extension...'), data: {action: 'create'}, + shortcut_preference: ['browser', 'sub_menu_create'], },{ name: 'create_extension', node: 'extension', module: this, applies: ['object', 'context'], callback: 'show_obj_properties', category: 'create', priority: 4, label: gettext('Extension...'), data: {action: 'create'}, + shortcut_preference: ['browser', 'sub_menu_create'], },{ name: 'create_extension', node: 'database', module: this, applies: ['object', 'context'], callback: 'show_obj_properties', diff --git a/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/static/js/foreign_data_wrapper.js b/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/static/js/foreign_data_wrapper.js index d537b6db7..4b80676cb 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/static/js/foreign_data_wrapper.js +++ b/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/static/js/foreign_data_wrapper.js @@ -56,11 +56,13 @@ define('pgadmin.node.foreign_data_wrapper', [ applies: ['object', 'context'], callback: 'show_obj_properties', category: 'create', priority: 4, label: gettext('Foreign Data Wrapper...'), data: {action: 'create'}, + shortcut_preference: ['browser', 'sub_menu_create'], },{ name: 'create_foreign_data_wrapper', node: 'foreign_data_wrapper', module: this, applies: ['object', 'context'], callback: 'show_obj_properties', category: 'create', priority: 4, label: gettext('Foreign Data Wrapper...'), data: {action: 'create'}, + shortcut_preference: ['browser', 'sub_menu_create'], },{ name: 'create_foreign_data_wrapper', node: 'database', module: this, applies: ['object', 'context'], callback: 'show_obj_properties', diff --git a/web/pgadmin/browser/server_groups/servers/databases/languages/static/js/language.js b/web/pgadmin/browser/server_groups/servers/databases/languages/static/js/language.js index 6b946ef51..89c4d36a0 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/languages/static/js/language.js +++ b/web/pgadmin/browser/server_groups/servers/databases/languages/static/js/language.js @@ -61,11 +61,13 @@ define('pgadmin.node.language', [ applies: ['object', 'context'], callback: 'show_obj_properties', category: 'create', priority: 4, label: gettext('Language...'), data: {action: 'create'}, + shortcut_preference: ['browser', 'sub_menu_create'], },{ name: 'create_language', node: 'language', module: this, applies: ['object', 'context'], callback: 'show_obj_properties', category: 'create', priority: 4, label: gettext('Language...'), data: {action: 'create'}, + shortcut_preference: ['browser', 'sub_menu_create'], }]); }, diff --git a/web/pgadmin/browser/server_groups/servers/databases/publications/static/js/publication.js b/web/pgadmin/browser/server_groups/servers/databases/publications/static/js/publication.js index a02d9d75a..05041ca93 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/publications/static/js/publication.js +++ b/web/pgadmin/browser/server_groups/servers/databases/publications/static/js/publication.js @@ -62,11 +62,13 @@ define('pgadmin.node.publication', [ applies: ['object', 'context'], callback: 'show_obj_properties', category: 'create', priority: 4, label: gettext('Publication...'), data: {action: 'create'}, + shortcut_preference: ['browser', 'sub_menu_create'], },{ name: 'create_publication', node: 'publication', module: this, applies: ['object', 'context'], callback: 'show_obj_properties', category: 'create', priority: 4, label: gettext('Publication...'), data: {action: 'create'}, + shortcut_preference: ['browser', 'sub_menu_create'], }]); }, diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/static/js/collation.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/static/js/collation.js index 47d2ad751..965dd5457 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/static/js/collation.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/static/js/collation.js @@ -52,11 +52,13 @@ define('pgadmin.node.collation', [ applies: ['object', 'context'], callback: 'show_obj_properties', category: 'create', priority: 4, label: gettext('Collation...'), data: {action: 'create', check: true}, enable: 'canCreate', + shortcut_preference: ['browser', 'sub_menu_create'], },{ name: 'create_collation', node: 'collation', module: this, applies: ['object', 'context'], callback: 'show_obj_properties', category: 'create', priority: 4, label: gettext('Collation...'), data: {action: 'create', check: true}, enable: 'canCreate', + shortcut_preference: ['browser', 'sub_menu_create'], },{ name: 'create_collation', node: 'schema', module: this, applies: ['object', 'context'], callback: 'show_obj_properties', diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/domain_constraints/static/js/domain_constraints.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/domain_constraints/static/js/domain_constraints.js index aef5e27d9..64329e829 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/domain_constraints/static/js/domain_constraints.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/domain_constraints/static/js/domain_constraints.js @@ -53,6 +53,7 @@ define('pgadmin.node.domain_constraints', [ applies: ['object', 'context'], callback: 'show_obj_properties', category: 'create', priority: 5, label: gettext('Domain Constraint...'), data: {action: 'create', check: true}, enable: 'canCreate', + shortcut_preference: ['browser', 'sub_menu_create'], },{ name: 'create_domain_constraints', node: 'domain_constraints', module: this, applies: ['object', 'context'], callback: 'show_obj_properties', @@ -63,6 +64,7 @@ define('pgadmin.node.domain_constraints', [ applies: ['object', 'context'], callback: 'show_obj_properties', category: 'create', priority: 5, label: gettext('Domain Constraint...'), data: {action: 'create', check: false}, enable: 'canCreate', + shortcut_preference: ['browser', 'sub_menu_create'], }, ]); diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/static/js/domain.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/static/js/domain.js index 8b4f9bf9c..f21314241 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/static/js/domain.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/static/js/domain.js @@ -55,11 +55,13 @@ define('pgadmin.node.domain', [ applies: ['object', 'context'], callback: 'show_obj_properties', category: 'create', priority: 4, label: gettext('Domain...'), data: {action: 'create', check: true}, enable: 'canCreate', + shortcut_preference: ['browser', 'sub_menu_create'], },{ name: 'create_domain', node: 'domain', module: this, applies: ['object', 'context'], callback: 'show_obj_properties', category: 'create', priority: 4, label: gettext('Domain...'), data: {action: 'create', check: true}, enable: 'canCreate', + shortcut_preference: ['browser', 'sub_menu_create'], },{ name: 'create_domain', node: 'schema', module: this, applies: ['object', 'context'], callback: 'show_obj_properties', diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/static/js/foreign_table.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/static/js/foreign_table.js index f89637014..f95e69d91 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/static/js/foreign_table.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/static/js/foreign_table.js @@ -60,11 +60,13 @@ define('pgadmin.node.foreign_table', ['pgadmin.tables.js/enable_disable_triggers applies: ['object', 'context'], callback: 'show_obj_properties', category: 'create', priority: 4, label: gettext('Foreign Table...'), data: {action: 'create', check: true}, enable: 'canCreate', + shortcut_preference: ['browser', 'sub_menu_create'], },{ name: 'create_foreign_table', node: 'foreign_table', module: this, applies: ['object', 'context'], callback: 'show_obj_properties', category: 'create', priority: 4, label: gettext('Foreign Table...'), data: {action: 'create', check: true}, enable: 'canCreate', + shortcut_preference: ['browser', 'sub_menu_create'], },{ name: 'create_foreign_table', node: 'schema', module: this, applies: ['object', 'context'], callback: 'show_obj_properties', diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_configurations/static/js/fts_configuration.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_configurations/static/js/fts_configuration.js index 8cf76980e..24894ff67 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_configurations/static/js/fts_configuration.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_configurations/static/js/fts_configuration.js @@ -62,12 +62,14 @@ define('pgadmin.node.fts_configuration', [ callback: 'show_obj_properties', category: 'create', label: gettext('FTS Configuration...'), data: {action: 'create'}, enable: 'canCreate', + shortcut_preference: ['browser', 'sub_menu_create'], },{ name: 'create_fts_configuration', node: 'fts_configuration', module: this, applies: ['object', 'context'], callback: 'show_obj_properties', category: 'create', priority: 4, label: gettext('FTS Configuration...'), data: {action: 'create'}, enable: 'canCreate', + shortcut_preference: ['browser', 'sub_menu_create'], }]); }, diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_dictionaries/static/js/fts_dictionary.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_dictionaries/static/js/fts_dictionary.js index a3c2397a3..f89041f35 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_dictionaries/static/js/fts_dictionary.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_dictionaries/static/js/fts_dictionary.js @@ -62,12 +62,14 @@ define('pgadmin.node.fts_dictionary', [ callback: 'show_obj_properties', category: 'create', label: gettext('FTS Dictionary...'), data: {action: 'create'}, enable: 'canCreate', + shortcut_preference: ['browser', 'sub_menu_create'], },{ name: 'create_fts_dictionary', node: 'fts_dictionary', module: this, applies: ['object', 'context'], callback: 'show_obj_properties', category: 'create', priority: 4, label: gettext('FTS Dictionary...'), data: {action: 'create'}, enable: 'canCreate', + shortcut_preference: ['browser', 'sub_menu_create'], }]); }, diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_parsers/static/js/fts_parser.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_parsers/static/js/fts_parser.js index 7fd294ca3..bb0623a24 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_parsers/static/js/fts_parser.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_parsers/static/js/fts_parser.js @@ -58,11 +58,13 @@ define('pgadmin.node.fts_parser', [ applies: ['object', 'context'], callback: 'show_obj_properties', category: 'create', priority: 4, label: gettext('FTS Parser...'), data: {action: 'create'}, module: this, enable: 'canCreate', + shortcut_preference: ['browser', 'sub_menu_create'], },{ name: 'create_fts_parser', node: 'fts_parser', module: this, applies: ['object', 'context'], callback: 'show_obj_properties', category: 'create', priority: 4, label: gettext('FTS Parser...'), data: {action: 'create'}, enable: 'canCreate', + shortcut_preference: ['browser', 'sub_menu_create'], }]); }, diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_templates/static/js/fts_template.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_templates/static/js/fts_template.js index 9f38bfcbf..f8db446da 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_templates/static/js/fts_template.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_templates/static/js/fts_template.js @@ -58,11 +58,13 @@ define('pgadmin.node.fts_template', [ applies: ['object', 'context'], callback: 'show_obj_properties', category: 'create', priority: 4, label: gettext('FTS Template...'), data: {action: 'create'}, enable: 'canCreate', + shortcut_preference: ['browser', 'sub_menu_create'], },{ name: 'create_fts_template', node: 'fts_template', module: this, applies: ['object', 'context'], callback: 'show_obj_properties', category: 'create', priority: 4, label: gettext('FTS Template...'), data: {action: 'create'}, enable: 'canCreate', + shortcut_preference: ['browser', 'sub_menu_create'], }]); }, diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/static/js/function.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/static/js/function.js index e773d3ce5..415c13cb5 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/static/js/function.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/static/js/function.js @@ -59,11 +59,13 @@ define('pgadmin.node.function', [ applies: ['object', 'context'], callback: 'show_obj_properties', category: 'create', priority: 4, label: gettext('Function...'), data: {action: 'create', check: true}, enable: 'canCreate', + shortcut_preference: ['browser', 'sub_menu_create'], },{ name: 'create_function', node: 'function', module: this, applies: ['object', 'context'], callback: 'show_obj_properties', category: 'create', priority: 4, label: gettext('Function...'), data: {action: 'create', check: true}, enable: 'canCreate', + shortcut_preference: ['browser', 'sub_menu_create'], },{ name: 'create_function', node: 'schema', module: this, applies: ['object', 'context'], callback: 'show_obj_properties', diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/static/js/procedure.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/static/js/procedure.js index 5cd4195de..7eb34183b 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/static/js/procedure.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/static/js/procedure.js @@ -60,11 +60,13 @@ define('pgadmin.node.procedure', [ applies: ['object', 'context'], callback: 'show_obj_properties', category: 'create', priority: 4, label: gettext('Procedure...'), data: {action: 'create', check: false}, enable: 'canCreateProc', + shortcut_preference: ['browser', 'sub_menu_create'], },{ name: 'create_procedure', node: 'procedure', module: this, applies: ['object', 'context'], callback: 'show_obj_properties', category: 'create', priority: 4, label: gettext('Procedure...'), data: {action: 'create', check: true}, enable: 'canCreateProc', + shortcut_preference: ['browser', 'sub_menu_create'], },{ name: 'create_procedure', node: 'schema', module: this, applies: ['object', 'context'], callback: 'show_obj_properties', diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/static/js/trigger_function.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/static/js/trigger_function.js index 7fbc24d45..e15ecacf7 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/static/js/trigger_function.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/static/js/trigger_function.js @@ -66,11 +66,13 @@ define('pgadmin.node.trigger_function', [ applies: ['object', 'context'], callback: 'show_obj_properties', category: 'create', priority: 4, label: gettext('Trigger function...'), data: {action: 'create', check: true}, enable: 'canCreate', + shortcut_preference: ['browser', 'sub_menu_create'], },{ name: 'create_trigger_function', node: 'trigger_function', module: this, applies: ['object', 'context'], callback: 'show_obj_properties', category: 'create', priority: 4, label: gettext('Trigger function...'), data: {action: 'create', check: true}, enable: 'canCreate', + shortcut_preference: ['browser', 'sub_menu_create'], },{ name: 'create_trigger_function', node: 'schema', module: this, applies: ['object', 'context'], callback: 'show_obj_properties', diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/static/js/sequence.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/static/js/sequence.js index 6399ba367..41a7df06c 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/static/js/sequence.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/static/js/sequence.js @@ -57,11 +57,13 @@ define('pgadmin.node.sequence', [ applies: ['object', 'context'], callback: 'show_obj_properties', category: 'create', priority: 4, label: gettext('Sequence...'), data: {action: 'create', check: true}, enable: 'canCreate', + shortcut_preference: ['browser', 'sub_menu_create'], },{ name: 'create_sequence', node: 'sequence', module: this, applies: ['object', 'context'], callback: 'show_obj_properties', category: 'create', priority: 4, label: gettext('Sequence...'), data: {action: 'create', check: true}, enable: 'canCreate', + shortcut_preference: ['browser', 'sub_menu_create'], },{ name: 'create_sequence', node: 'schema', module: this, applies: ['object', 'context'], callback: 'show_obj_properties', diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/static/js/schema.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/static/js/schema.js index 6229be58d..66412d741 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/static/js/schema.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/static/js/schema.js @@ -52,11 +52,13 @@ define('pgadmin.node.schema', [ applies: ['object', 'context'], callback: 'show_obj_properties', category: 'create', priority: 1, label: gettext('Schema...'), data: {action: 'create'}, + shortcut_preference: ['browser', 'sub_menu_create'], },{ name: 'create_schema', node: 'schema', module: this, applies: ['object', 'context'], callback: 'show_obj_properties', category: 'create', priority: 1, label: gettext('Schema...'), - data: {action: 'create'}, + shortcut_preference: ['browser', 'sub_menu_create'], + data: {action: 'create'}, },{ name: 'create_schema', node: 'database', module: this, applies: ['object', 'context'], callback: 'show_obj_properties', diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/columns/static/js/column.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/columns/static/js/column.js index 5b24acadf..5361943af 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/columns/static/js/column.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/columns/static/js/column.js @@ -74,11 +74,13 @@ define('pgadmin.node.column', [ applies: ['object', 'context'], callback: 'show_obj_properties', category: 'create', priority: 4, label: gettext('Column...'), data: {action: 'create', check: true}, enable: 'canCreate', + shortcut_preference: ['browser', 'sub_menu_create'], },{ name: 'create_column', node: 'column', module: this, applies: ['object', 'context'], callback: 'show_obj_properties', category: 'create', priority: 4, label: gettext('Column...'), data: {action: 'create', check: true}, enable: 'canCreate', + shortcut_preference: ['browser', 'sub_menu_create'], },{ name: 'create_column_onTable', node: 'table', module: this, applies: ['object', 'context'], callback: 'show_obj_properties', diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/indexes/static/js/index.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/indexes/static/js/index.js index 3728ddfac..388956886 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/indexes/static/js/index.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/indexes/static/js/index.js @@ -61,11 +61,13 @@ define('pgadmin.node.index', [ applies: ['object', 'context'], callback: 'show_obj_properties', category: 'create', priority: 4, label: gettext('Index...'), data: {action: 'create', check: true}, enable: 'canCreate', + shortcut_preference: ['browser', 'sub_menu_create'], },{ name: 'create_index', node: 'index', module: this, applies: ['object', 'context'], callback: 'show_obj_properties', category: 'create', priority: 4, label: gettext('Index...'), data: {action: 'create', check: true}, enable: 'canCreate', + shortcut_preference: ['browser', 'sub_menu_create'], },{ name: 'create_index_onTable', node: 'table', module: this, applies: ['object', 'context'], callback: 'show_obj_properties', diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/row_security_policies/static/js/row_security_policy.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/row_security_policies/static/js/row_security_policy.js index f80bd8fbf..abd50092e 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/row_security_policies/static/js/row_security_policy.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/row_security_policies/static/js/row_security_policy.js @@ -56,11 +56,13 @@ define('pgadmin.node.row_security_policy', [ applies: ['object', 'context'], callback: 'show_obj_properties', category: 'create', priority: 1, label: gettext('RLS Policy...'), data: {action: 'create', check: true}, enable: 'canCreate', + shortcut_preference: ['browser', 'sub_menu_create'], },{ name: 'create_row_security_policy', node: 'row_security_policy', module: this, applies: ['object', 'context'], callback: 'show_obj_properties', category: 'create', priority: 1, label: gettext('RLS Policy...'), data: {action: 'create', check: true}, enable: 'canCreate', + shortcut_preference: ['browser', 'sub_menu_create'], }, { name: 'create_row_security_policy_on_coll', node: 'table', module: this, diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/static/js/rule.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/static/js/rule.js index f540eee62..a814918e7 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/static/js/rule.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/static/js/rule.js @@ -87,6 +87,7 @@ define('pgadmin.node.rule', [ applies: ['object', 'context'], callback: 'show_obj_properties', category: 'create', priority: 1, label: gettext('Rule...'), data: {action: 'create', check: true}, enable: 'canCreate', + shortcut_preference: ['browser', 'sub_menu_create'], },{ name: 'create_rule_onView', node: 'view', module: this, applies: ['object', 'context'], callback: 'show_obj_properties', @@ -97,6 +98,7 @@ define('pgadmin.node.rule', [ applies: ['object', 'context'], callback: 'show_obj_properties', category: 'create', priority: 1, label: gettext('Rule...'), data: {action: 'create', check: true}, enable: 'canCreate', + shortcut_preference: ['browser', 'sub_menu_create'], },{ name: 'create_rule', node: 'table', module: this, applies: ['object', 'context'], callback: 'show_obj_properties', diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/static/js/table.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/static/js/table.js index 0ccb0db12..1c4b8d768 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/static/js/table.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/static/js/table.js @@ -68,12 +68,14 @@ define('pgadmin.node.table', [ category: 'create', priority: 1, label: gettext('Table...'), data: {action: 'create', check: true}, enable: 'canCreate', + shortcut_preference: ['browser', 'sub_menu_create'], },{ name: 'create_table', node: 'table', module: this, applies: ['object', 'context'], callback: 'show_obj_properties', category: 'create', priority: 1, label: gettext('Table...'), data: {action: 'create', check: true}, enable: 'canCreate', + shortcut_preference: ['browser', 'sub_menu_create'], },{ name: 'create_table__on_schema', node: 'schema', module: this, applies: ['object', 'context'], callback: 'show_obj_properties', diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/triggers/static/js/trigger.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/triggers/static/js/trigger.js index ebddc3f5d..0d1875831 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/triggers/static/js/trigger.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/triggers/static/js/trigger.js @@ -58,12 +58,14 @@ define('pgadmin.node.trigger', [ category: 'create', priority: 4, label: gettext('Trigger...'), data: {action: 'create', check: true}, enable: 'canCreate', + shortcut_preference: ['browser', 'sub_menu_create'], },{ name: 'create_trigger', node: 'trigger', module: this, applies: ['object', 'context'], callback: 'show_obj_properties', category: 'create', priority: 4, label: gettext('Trigger...'), data: {action: 'create', check: true}, enable: 'canCreate', + shortcut_preference: ['browser', 'sub_menu_create'], },{ name: 'create_trigger_onTable', node: 'table', module: this, applies: ['object', 'context'], callback: 'show_obj_properties', diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/types/static/js/type.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/types/static/js/type.js index 14644bddc..d1027da26 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/types/static/js/type.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/types/static/js/type.js @@ -55,12 +55,14 @@ define('pgadmin.node.type', [ category: 'create', priority: 4, label: gettext('Type...'), data: {action: 'create', check: true}, enable: 'canCreate', + shortcut_preference: ['browser', 'sub_menu_create'], },{ name: 'create_type', node: 'type', module: this, applies: ['object', 'context'], callback: 'show_obj_properties', category: 'create', priority: 4, label: gettext('Type...'), data: {action: 'create', check: true}, enable: 'canCreate', + shortcut_preference: ['browser', 'sub_menu_create'], },{ name: 'create_type', node: 'schema', module: this, applies: ['object', 'context'], callback: 'show_obj_properties', diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/static/js/mview.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/static/js/mview.js index a07f5bc18..022e53ef7 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/static/js/mview.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/static/js/mview.js @@ -97,12 +97,14 @@ define('pgadmin.node.mview', [ category: 'create', priority: 1, data: {action: 'create', check: true}, enable: 'canCreate', label: gettext('Materialized View...'), + shortcut_preference: ['browser', 'sub_menu_create'], },{ name: 'create_mview', node: 'mview', module: this, applies: ['object', 'context'], callback: 'show_obj_properties', category: 'create', priority: 1, data: {action: 'create', check: true}, enable: 'canCreate', label: gettext('Materialized View...'), + shortcut_preference: ['browser', 'sub_menu_create'], },{ name: 'create_mview', node: 'schema', module: this, applies: ['object', 'context'], callback: 'show_obj_properties', diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/static/js/view.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/static/js/view.js index 929e7341a..7ca1e539a 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/static/js/view.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/static/js/view.js @@ -78,12 +78,14 @@ define('pgadmin.node.view', [ category: 'create', priority: 1, label: gettext('View...'), data: {action: 'create', check: true}, enable: 'canCreate', + shortcut_preference: ['browser', 'sub_menu_create'], },{ name: 'create_view', node: 'view', module: this, applies: ['object', 'context'], callback: 'show_obj_properties', category: 'create', priority: 1, label: gettext('View...'), data: {action: 'create', check: true}, enable: 'canCreate', + shortcut_preference: ['browser', 'sub_menu_create'], },{ name: 'create_view', node: 'schema', module: this, applies: ['object', 'context'], callback: 'show_obj_properties', diff --git a/web/pgadmin/browser/server_groups/servers/databases/static/js/database.js b/web/pgadmin/browser/server_groups/servers/databases/static/js/database.js index 35d3378dc..deff54a9e 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/static/js/database.js +++ b/web/pgadmin/browser/server_groups/servers/databases/static/js/database.js @@ -85,12 +85,14 @@ define('pgadmin.node.database', [ category: 'create', priority: 4, label: gettext('Database...'), data: {action: 'create'}, enable: 'can_create_database', + shortcut_preference: ['browser', 'sub_menu_create'], },{ name: 'create_database', node: 'database', module: this, applies: ['object', 'context'], callback: 'show_obj_properties', category: 'create', priority: 4, label: gettext('Database...'), data: {action: 'create'}, enable: 'can_create_database', + shortcut_preference: ['browser', 'sub_menu_create'], },{ name: 'connect_database', node: 'database', module: this, applies: ['object', 'context'], callback: 'connect_database', diff --git a/web/pgadmin/browser/server_groups/servers/databases/subscriptions/static/js/subscription.js b/web/pgadmin/browser/server_groups/servers/databases/subscriptions/static/js/subscription.js index 34d7f16a3..b6860e761 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/subscriptions/static/js/subscription.js +++ b/web/pgadmin/browser/server_groups/servers/databases/subscriptions/static/js/subscription.js @@ -66,12 +66,14 @@ define('pgadmin.node.subscription', [ category: 'create', priority: 4, label: gettext('Subscription...'), data: {action: 'create'}, enable: 'canCreate', + shortcut_preference: ['browser', 'sub_menu_create'], },{ name: 'create_subscription', node: 'subscription', module: this, applies: ['object', 'context'], callback: 'show_obj_properties', category: 'create', priority: 4, label: gettext('Subscription...'), data: {action: 'create'}, enable: 'canCreate', + shortcut_preference: ['browser', 'sub_menu_create'], }]); }, getSchema: function(treeNodeInfo, itemNodeData){ diff --git a/web/pgadmin/browser/server_groups/servers/roles/static/js/role.js b/web/pgadmin/browser/server_groups/servers/roles/static/js/role.js index e9cf01f60..30a2cad9c 100644 --- a/web/pgadmin/browser/server_groups/servers/roles/static/js/role.js +++ b/web/pgadmin/browser/server_groups/servers/roles/static/js/role.js @@ -96,12 +96,14 @@ define('pgadmin.node.role', [ category: 'create', priority: 4, label: gettext('Login/Group Role...'), data: {action: 'create'}, enable: 'can_create_role', + shortcut_preference: ['browser', 'sub_menu_create'], },{ name: 'create_role', node: 'role', module: this, applies: ['object', 'context'], callback: 'show_obj_properties', category: 'create', priority: 4, label: gettext('Login/Group Role...'), data: {action: 'create'}, enable: 'can_create_role', + shortcut_preference: ['browser', 'sub_menu_create'], }, { name: 'reassign_role', node: 'role', module: this, applies: ['object', 'context'], callback: 'reassign_role', diff --git a/web/pgadmin/browser/server_groups/servers/static/js/server.js b/web/pgadmin/browser/server_groups/servers/static/js/server.js index fc4b25c16..bfe077e79 100644 --- a/web/pgadmin/browser/server_groups/servers/static/js/server.js +++ b/web/pgadmin/browser/server_groups/servers/static/js/server.js @@ -92,6 +92,7 @@ define('pgadmin.node.server', [ name: 'create_server', node: 'server', module: this, applies: ['object', 'context'], callback: 'show_obj_properties', category: 'register', priority: 3, label: gettext('Server...'), + shortcut_preference: ['browser', 'sub_menu_create'], data: {action: 'create'}, enable: 'canCreate', permission: AllPermissionTypes.OBJECT_REGISTER_SERVER },{ name: 'connect_server', node: 'server', module: this, diff --git a/web/pgadmin/browser/server_groups/servers/tablespaces/static/js/tablespace.js b/web/pgadmin/browser/server_groups/servers/tablespaces/static/js/tablespace.js index e8c58c2a4..74ba10d5f 100644 --- a/web/pgadmin/browser/server_groups/servers/tablespaces/static/js/tablespace.js +++ b/web/pgadmin/browser/server_groups/servers/tablespaces/static/js/tablespace.js @@ -65,12 +65,14 @@ define('pgadmin.node.tablespace', [ category: 'create', priority: 4, label: gettext('Tablespace...'), data: {action: 'create'}, enable: 'can_create_tablespace', + shortcut_preference: ['browser', 'sub_menu_create'], },{ name: 'create_tablespace', node: 'tablespace', module: this, applies: ['object', 'context'], callback: 'show_obj_properties', category: 'create', priority: 4, label: gettext('Tablespace...'), data: {action: 'create'}, enable: 'can_create_tablespace', + shortcut_preference: ['browser', 'sub_menu_create'], }, ]); }, diff --git a/web/pgadmin/browser/server_groups/static/js/server_group.js b/web/pgadmin/browser/server_groups/static/js/server_group.js index ff80f917f..0efb8b1d8 100644 --- a/web/pgadmin/browser/server_groups/static/js/server_group.js +++ b/web/pgadmin/browser/server_groups/static/js/server_group.js @@ -35,6 +35,7 @@ define('pgadmin.node.server_group', [ applies: ['object', 'context'], callback: 'show_obj_properties', category: 'create', priority: 1, label: gettext('Server Group...'), data: {'action': 'create'}, + shortcut_preference: ['browser', 'sub_menu_create'], }]); }, getSchema: ()=>new ServerGroupSchema(), diff --git a/web/pgadmin/browser/static/js/MainMenuFactory.js b/web/pgadmin/browser/static/js/MainMenuFactory.js index 54555809b..39d6ff0ba 100644 --- a/web/pgadmin/browser/static/js/MainMenuFactory.js +++ b/web/pgadmin/browser/static/js/MainMenuFactory.js @@ -12,6 +12,7 @@ import Menu, { MenuItem } from '../../../static/js/helpers/Menu'; import getApiInstance from '../../../static/js/api_instance'; import url_for from 'sources/url_for'; import withCheckPermission from './withCheckPermission'; +import usePreferences from '../../../preferences/static/js/store'; const MAIN_MENUS = [ { label: gettext('File'), name: 'file', id: 'mnu_file', index: 0, addSeprator: true, hasDynamicMenuItems: false }, @@ -97,6 +98,33 @@ export default class MainMenuFactory { }); } + static updateShortcutsFromPreferences(prefStore) { + const updateShortcuts = (item) => { + if (!item || typeof item !== 'object') return; + + Object.values(item).forEach((menuItem) => { + if (!menuItem || typeof menuItem !== 'object') return; + + if (menuItem?.shortcut_preference) { + const [module, key] = menuItem.shortcut_preference; + menuItem.shortcut = prefStore.getPreferences(module, key)?.value || null; + } + // Recurse only if it's a nested object. + if (!menuItem.name) { + updateShortcuts(menuItem); + } + }); + }; + let allMenus = pgAdmin.Browser?.all_menus_cache || {}; + Object.values(allMenus).forEach(updateShortcuts); + }; + + // Assign and Update menu shortcuts using preference. + static subscribeShortcutChanges() { + MainMenuFactory.updateShortcutsFromPreferences(usePreferences.getState()); + usePreferences.subscribe(MainMenuFactory.updateShortcutsFromPreferences); + } + static enableDisableMenus(item) { let itemData = item ? pgAdmin.Browser.tree.itemData(item) : undefined; diff --git a/web/pgadmin/browser/static/js/browser.js b/web/pgadmin/browser/static/js/browser.js index 438b35ef0..974426ccc 100644 --- a/web/pgadmin/browser/static/js/browser.js +++ b/web/pgadmin/browser/static/js/browser.js @@ -206,6 +206,14 @@ define('pgadmin.browser', [ uiloaded: function() { this.set_master_password(''); this.check_version_update(); + const prefStore = usePreferences.getState(); + let save_the_workspace = prefStore.getPreferencesForModule('misc').save_app_state; + if(save_the_workspace){ + this.restore_pgadmin_state(); + pgBrowser.docker.default_workspace.focus(); + } + // Assign and Update shortcuts from preferences. + MainMenuFactory.subscribeShortcutChanges(); }, check_corrupted_db_file: function() { getApiInstance().get( @@ -392,6 +400,8 @@ define('pgadmin.browser', [ below: _m.below, applies: _m.applies, permission: _m.permission, + shortcut_preference: _m.shortcut_preference, + shortcut:_m.shortcut }; }; @@ -406,7 +416,7 @@ define('pgadmin.browser', [ } _menus[m.name]['menu_items'] = sub_menu_items; } - } else { + } else { console.warn( 'Developer warning: Category \'' + a + diff --git a/web/pgadmin/browser/static/js/collection.js b/web/pgadmin/browser/static/js/collection.js index caff5c3a4..c67383e72 100644 --- a/web/pgadmin/browser/static/js/collection.js +++ b/web/pgadmin/browser/static/js/collection.js @@ -45,6 +45,7 @@ define([ name: 'refresh', node: this.type, module: this, applies: ['object', 'context'], callback: 'refresh', priority: 2, label: gettext('Refresh'), + shortcut_preference: ['browser', 'sub_menu_refresh'], }]); // show query tool only in context menu of supported nodes. @@ -55,6 +56,7 @@ define([ applies: ['context'], callback: 'show_query_tool', priority: 998, label: gettext('Query Tool'), permission: AllPermissionTypes.TOOLS_QUERY_TOOL, + shortcut_preference: ['browser', 'sub_menu_query_tool'], }]); // show search objects same as query tool @@ -63,6 +65,7 @@ define([ applies: ['context'], callback: 'show_search_objects', priority: 997, label: gettext('Search Objects...'), permission: AllPermissionTypes.TOOLS_SEARCH_OBJECTS, + shortcut_preference: ['browser', 'sub_menu_search_objects'], }]); // show psql tool same as query tool. diff --git a/web/pgadmin/browser/static/js/keyboard.js b/web/pgadmin/browser/static/js/keyboard.js index 28322f45b..85d229321 100644 --- a/web/pgadmin/browser/static/js/keyboard.js +++ b/web/pgadmin/browser/static/js/keyboard.js @@ -250,6 +250,14 @@ _.extend(pgBrowser.keyboardNavigation, { if (!tree.d){ return; } else if(node_obj.collection_node === true) { + const menuItems = pgAdmin.Browser.all_menus_cache.context?.[node_obj.type]; + // Filter all items with category 'create'. + const createMenuItems = Object.values(menuItems || {}).filter( + item => item.category === 'create' + ); + // If more than 1 create menu, ignore shortcut. + if(createMenuItems.length > 1) return; + if(node_obj.node) { node_obj = pgAdmin.Browser.Nodes[node_obj.node]; } else { diff --git a/web/pgadmin/browser/static/js/node.js b/web/pgadmin/browser/static/js/node.js index 50306eec2..afee2c046 100644 --- a/web/pgadmin/browser/static/js/node.js +++ b/web/pgadmin/browser/static/js/node.js @@ -113,7 +113,7 @@ define('pgadmin.browser.node', [ if (self.node_initialized) return; self.node_initialized = true; - + pgAdmin.Browser.add_menus([{ name: 'refresh', node: self.type, @@ -122,6 +122,7 @@ define('pgadmin.browser.node', [ callback: 'refresh', priority: 2, label: gettext('Refresh...'), + shortcut_preference: ['browser', 'sub_menu_refresh'], enable: true, }]); @@ -137,6 +138,7 @@ define('pgadmin.browser.node', [ data: { 'action': 'edit', }, + shortcut_preference: ['browser', 'sub_menu_properties'], enable: _.isFunction(self.canEdit) ? function() { return !!(self.canEdit(...arguments)); @@ -158,6 +160,7 @@ define('pgadmin.browser.node', [ 'url': 'drop', data_disabled: gettext('The selected tree node does not support this option.'), }, + shortcut_preference: ['browser', 'sub_menu_delete'], enable: _.isFunction(self.canDrop) ? function() { return !!(self.canDrop(...arguments)); @@ -205,6 +208,7 @@ define('pgadmin.browser.node', [ label: gettext('Query Tool'), enable: enable, permission: AllPermissionTypes.TOOLS_QUERY_TOOL, + shortcut_preference: ['browser', 'sub_menu_query_tool'], }]); // show search objects same as query tool @@ -214,6 +218,7 @@ define('pgadmin.browser.node', [ priority: 997, label: gettext('Search Objects...'), icon: 'fa fa-search', enable: enable, permission: AllPermissionTypes.TOOLS_SEARCH_OBJECTS, + shortcut_preference: ['browser', 'sub_menu_search_objects'], }]); if(pgAdmin['enable_psql']) { diff --git a/web/pgadmin/static/js/AppMenuBar.jsx b/web/pgadmin/static/js/AppMenuBar.jsx index 527d67495..71010d860 100644 --- a/web/pgadmin/static/js/AppMenuBar.jsx +++ b/web/pgadmin/static/js/AppMenuBar.jsx @@ -90,6 +90,7 @@ export default function AppMenuBar() { hasCheck={hasCheck} checked={menuItem.checked} closeOnCheck={true} + shortcut={menuItem.shortcut} >{menuItem.label}; }; diff --git a/web/pgadmin/static/js/SchemaView/DataGridView/formHeader.jsx b/web/pgadmin/static/js/SchemaView/DataGridView/formHeader.jsx index 666a8faf9..799b78f26 100644 --- a/web/pgadmin/static/js/SchemaView/DataGridView/formHeader.jsx +++ b/web/pgadmin/static/js/SchemaView/DataGridView/formHeader.jsx @@ -112,7 +112,7 @@ export function DataGridFormHeader({tableEleRef, rows}) { }, [canAddRow, rows?.length, addOnTop]); useEffect(() => { - if (newRowIndex.current < -1) return; + if (isNaN(newRowIndex.current) || newRowIndex.current <= -1) return; virtualizer.scrollToIndex(newRowIndex.current); diff --git a/web/pgadmin/static/js/SchemaView/DataGridView/header.jsx b/web/pgadmin/static/js/SchemaView/DataGridView/header.jsx index 4a11fbb40..3c2c55d10 100644 --- a/web/pgadmin/static/js/SchemaView/DataGridView/header.jsx +++ b/web/pgadmin/static/js/SchemaView/DataGridView/header.jsx @@ -56,7 +56,7 @@ export function DataGridHeader({tableEleRef}) { }, [canAddRow, rows?.length]); useEffect(() => { - if (newRowIndex.current < -1) return; + if (isNaN(newRowIndex.current) || newRowIndex.current <= -1) return; virtualizer.scrollToIndex(newRowIndex.current); diff --git a/web/pgadmin/static/js/components/ContextMenu.jsx b/web/pgadmin/static/js/components/ContextMenu.jsx index 2a540188a..19535c5d6 100644 --- a/web/pgadmin/static/js/components/ContextMenu.jsx +++ b/web/pgadmin/static/js/components/ContextMenu.jsx @@ -27,6 +27,7 @@ export default function ContextMenu({menuItems, position, onClose, label='contex }} hasCheck={hasCheck} checked={menuItem.checked} + shortcut={menuItem.shortcut} >{menuItem.label}; }; diff --git a/web/pgadmin/static/js/components/Menu.jsx b/web/pgadmin/static/js/components/Menu.jsx index 1a0f1c329..b92da4965 100644 --- a/web/pgadmin/static/js/components/Menu.jsx +++ b/web/pgadmin/static/js/components/Menu.jsx @@ -20,6 +20,7 @@ import { export {MenuDivider as PgMenuDivider} from '@szhsin/react-menu'; import { shortcutToString } from './ShortcutTitle'; import CustomPropTypes from '../custom_prop_types'; +import { Box } from '@mui/material'; export function PgMenu({open, className='', label, menuButton=null, ...props}) { const state = open ? 'open' : 'closed'; @@ -81,9 +82,26 @@ export const PgMenuItem = (({hasCheck=false, checked=false, accesskey, shortcut, return {hasCheck && } {children} - - {keyVal ? `(${keyVal})` : ''} - + + {Array.isArray(keyVal) + ? keyVal.map((key, idx) => ( + {key} + )) + : {keyVal ? `${keyVal}` : ''} + } + ; }); diff --git a/web/pgadmin/static/js/components/ShortcutTitle.jsx b/web/pgadmin/static/js/components/ShortcutTitle.jsx index bb4fa9bbe..209370b2c 100644 --- a/web/pgadmin/static/js/components/ShortcutTitle.jsx +++ b/web/pgadmin/static/js/components/ShortcutTitle.jsx @@ -59,19 +59,19 @@ export function shortcutToString(shortcut, accesskey=null, asArray=false) { keys = getBrowserAccesskey(); keys.push(_.capitalize(accesskey?.toUpperCase())); } else if(shortcut) { - shortcut.alt && keys.push((isMac() ? 'Option' : 'Alt')); + if(shortcut.alt) keys.push(isMac() ? '⌥' : 'Alt'); if(isMac() && shortcut.ctrl_is_meta) { - shortcut.control && keys.push('Cmd'); + if(shortcut.control) keys.push('⌘'); } else { - shortcut.control && keys.push('Ctrl'); + if(shortcut.control) keys.push(isMac() ? '⌃' : 'Ctrl'); } - shortcut.shift && keys.push('Shift'); + if(shortcut.shift) keys.push(isMac() ? '⇧' : 'Shift'); keys.push(_.capitalize(shortcut.key.char)); } else { return ''; } - return asArray ? keys : keys.join(' + '); + return asArray || isMac() ? keys : keys.join(' + '); } /* The tooltip content to show shortcut details */ @@ -82,8 +82,8 @@ export default function ShortcutTitle({title, shortcut, accesskey}) { ( {title} - {keys.map((key)=>{ - return {key}; + {keys.map((key, idx)=>{ + return {key}; })} ) diff --git a/web/pgadmin/static/js/helpers/Menu.js b/web/pgadmin/static/js/helpers/Menu.js index 6c7cd2566..2881fb25e 100644 --- a/web/pgadmin/static/js/helpers/Menu.js +++ b/web/pgadmin/static/js/helpers/Menu.js @@ -124,6 +124,7 @@ export class MenuItem { 'checked', 'below', 'menu_items', 'is_checkbox', 'action', 'applies', 'is_native_only', 'type', 'permission', ]; + this.shortcut = options.shortcut; let defaults = { url: '#', target: '_self', diff --git a/web/pgadmin/tools/search_objects/static/js/index.js b/web/pgadmin/tools/search_objects/static/js/index.js index 231acdd25..feb524567 100644 --- a/web/pgadmin/tools/search_objects/static/js/index.js +++ b/web/pgadmin/tools/search_objects/static/js/index.js @@ -48,6 +48,7 @@ export default class SearchObjectModule { data_disabled: gettext('Please select a database from the object explorer to search the database objects.'), }, permission: 'tools_search_objects', + shortcut_preference: ['browser', 'sub_menu_search_objects'], }]; pgBrowser.add_menus(menus); diff --git a/web/pgadmin/tools/sqleditor/static/js/SQLEditorModule.js b/web/pgadmin/tools/sqleditor/static/js/SQLEditorModule.js index 01a27b95c..7fc9acd70 100644 --- a/web/pgadmin/tools/sqleditor/static/js/SQLEditorModule.js +++ b/web/pgadmin/tools/sqleditor/static/js/SQLEditorModule.js @@ -107,6 +107,7 @@ export default class SQLEditor { data_disabled: gettext('Please select a database from the object explorer to access Query Tool.'), }, permission: AllPermissionTypes.TOOLS_QUERY_TOOL, + shortcut_preference: ['browser', 'sub_menu_query_tool'], }]; // Create context menu @@ -125,7 +126,8 @@ export default class SQLEditor { priority: 101, label: gettext('All Rows'), permission: AllPermissionTypes.TOOLS_QUERY_TOOL, - },{ + shortcut_preference: ['browser', 'sub_menu_view_data'], + }, { name: 'view_first_100_rows_context_' + supportedNode, node: supportedNode, module: this, diff --git a/web/regression/javascript/components/Menu.spec.js b/web/regression/javascript/components/Menu.spec.js index d50876365..9aa473013 100644 --- a/web/regression/javascript/components/Menu.spec.js +++ b/web/regression/javascript/components/Menu.spec.js @@ -82,7 +82,7 @@ describe('Menu', ()=>{ } }); const menuItem = screen.getByRole('menuitem'); - expect(menuItem.textContent).toBe('Test(Ctrl + Shift + K)'); + expect(menuItem.textContent).toBe('Test Ctrl + Shift + K'); }); it('not checked', ()=>{ diff --git a/web/regression/javascript/components/ShortcutTitle.spec.js b/web/regression/javascript/components/ShortcutTitle.spec.js index 729baa5cd..e897ee06f 100644 --- a/web/regression/javascript/components/ShortcutTitle.spec.js +++ b/web/regression/javascript/components/ShortcutTitle.spec.js @@ -59,7 +59,7 @@ describe('ShortcutTitle', ()=>{ it('mac meta key', ()=>{ shortcut.ctrl_is_meta = true; jest.spyOn(keyShort, 'isMac').mockReturnValue(true); - expect(shortcutToString(shortcut)).toBe('Cmd + Shift + K'); + expect(shortcutToString(shortcut)).toEqual(['⌘', '⇧', 'K']); }); }); });