From 3439b86bb74e940e15d037bea81de6bf02beec08 Mon Sep 17 00:00:00 2001 From: fenn-cs Date: Mon, 9 Oct 2023 07:58:14 +0100 Subject: [PATCH] WIP: New UI global search Resolves: #39162 Signed-off-by: fenn-cs --- core/src/global-search.js | 55 ++++++++++++++++++++++++ core/src/views/GlobalSearch.vue | 62 ++++++++++++++++++++++++++++ core/src/views/GlobalSearchModal.vue | 46 +++++++++++++++++++++ core/templates/layout.user.php | 1 + lib/private/TemplateLayout.php | 1 + webpack.modules.js | 1 + 6 files changed, 166 insertions(+) create mode 100644 core/src/global-search.js create mode 100644 core/src/views/GlobalSearch.vue create mode 100644 core/src/views/GlobalSearchModal.vue diff --git a/core/src/global-search.js b/core/src/global-search.js new file mode 100644 index 0000000000000..f0c47fa189501 --- /dev/null +++ b/core/src/global-search.js @@ -0,0 +1,55 @@ +/** + * @copyright Copyright (c) 2020 Fon E. Noel NFEBE + * + * @author Fon E. Noel NFEBE + * + * @license AGPL-3.0-or-later + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + +import { getLoggerBuilder } from '@nextcloud/logger' +import { getRequestToken } from '@nextcloud/auth' +import { translate as t, translatePlural as n } from '@nextcloud/l10n' +import Vue from 'vue' + +import GlobalSearch from './views/GlobalSearch.vue' + +// eslint-disable-next-line camelcase +__webpack_nonce__ = btoa(getRequestToken()) + +const logger = getLoggerBuilder() + .setApp('global-search') + .detectUser() + .build() + +Vue.mixin({ + data() { + return { + logger, + } + }, + methods: { + t, + n, + }, +}) + +export default new Vue({ + el: '#global-search', + // eslint-disable-next-line vue/match-component-file-name + name: 'GlobalSearchRoot', + render: h => h(GlobalSearch), +}) diff --git a/core/src/views/GlobalSearch.vue b/core/src/views/GlobalSearch.vue new file mode 100644 index 0000000000000..02e45cc839f25 --- /dev/null +++ b/core/src/views/GlobalSearch.vue @@ -0,0 +1,62 @@ + + + + + + diff --git a/core/src/views/GlobalSearchModal.vue b/core/src/views/GlobalSearchModal.vue new file mode 100644 index 0000000000000..229f926a03032 --- /dev/null +++ b/core/src/views/GlobalSearchModal.vue @@ -0,0 +1,46 @@ + + + + + diff --git a/core/templates/layout.user.php b/core/templates/layout.user.php index aebcda5c84940..5b1252d25f8f5 100644 --- a/core/templates/layout.user.php +++ b/core/templates/layout.user.php @@ -68,6 +68,7 @@
+
diff --git a/lib/private/TemplateLayout.php b/lib/private/TemplateLayout.php index e2504363257ee..90ca935974074 100644 --- a/lib/private/TemplateLayout.php +++ b/lib/private/TemplateLayout.php @@ -110,6 +110,7 @@ public function __construct($renderAs, $appId = '') { $this->initialState->provideInitialState('unified-search', 'min-search-length', (int)$this->config->getAppValue('core', 'unified-search.min-search-length', (string)1)); $this->initialState->provideInitialState('unified-search', 'live-search', $this->config->getAppValue('core', 'unified-search.live-search', 'yes') === 'yes'); Util::addScript('core', 'unified-search', 'core'); + Util::addScript('core', 'global-search', 'core'); // Set body data-theme $this->assign('enabledThemes', []); diff --git a/webpack.modules.js b/webpack.modules.js index 67be70c5fed64..b380a8385ed0b 100644 --- a/webpack.modules.js +++ b/webpack.modules.js @@ -38,6 +38,7 @@ module.exports = { profile: path.join(__dirname, 'core/src', 'profile.js'), recommendedapps: path.join(__dirname, 'core/src', 'recommendedapps.js'), systemtags: path.resolve(__dirname, 'core/src', 'systemtags/merged-systemtags.js'), + 'global-search': path.join(__dirname, 'core/src', 'global-search.js'), 'unified-search': path.join(__dirname, 'core/src', 'unified-search.js'), 'unsupported-browser': path.join(__dirname, 'core/src', 'unsupported-browser.js'), 'unsupported-browser-redirect': path.join(__dirname, 'core/src', 'unsupported-browser-redirect.js'),