Browse Source

feat(files): expose Files router

Signed-off-by: John Molakvoæ <skjnldsv@protonmail.com>
John Molakvoæ 1 year ago
parent
commit
0a2a1b4b52

+ 1 - 1
apps/files/src/components/FilesListHeaderActions.vue

@@ -168,7 +168,7 @@ export default Vue.extend({
 				const results = await action.execBatch(this.nodes, this.currentView)
 
 				// Check if all actions returned null
-				if (results.filter(result => result !== null).length === 0) {
+				if (!results.some(result => result !== null)) {
 					// If the actions returned null, we stay silent
 					this.selectionStore.reset()
 					return

+ 17 - 11
apps/files/src/main.js → apps/files/src/main.ts

@@ -1,29 +1,35 @@
 import './templates.js'
 import './legacy/filelistSearch.js'
-import './actions/deleteAction.ts'
-
-import processLegacyFilesViews from './legacy/navigationMapper.js'
+import './actions/deleteAction'
 
 import Vue from 'vue'
 import { createPinia, PiniaVuePlugin } from 'pinia'
 
-import NavigationService from './services/Navigation.ts'
-import registerPreviewServiceWorker from './services/ServiceWorker.js'
-
-import NavigationView from './views/Navigation.vue'
 import FilesListView from './views/FilesList.vue'
-
-import SettingsService from './services/Settings.js'
+import NavigationService from './services/Navigation'
+import NavigationView from './views/Navigation.vue'
+import processLegacyFilesViews from './legacy/navigationMapper.js'
+import registerPreviewServiceWorker from './services/ServiceWorker.js'
+import router from './router/router.js'
 import SettingsModel from './models/Setting.js'
+import SettingsService from './services/Settings.js'
+import RouterService from './services/RouterService'
 
-import router from './router/router.js'
+declare global {
+	interface Window {
+		OC: any;
+		OCA: any;
+		OCP: any;
+	}
+}
 
 // Init private and public Files namespace
 window.OCA.Files = window.OCA.Files ?? {}
 window.OCP.Files = window.OCP.Files ?? {}
 
 // Expose router
-Object.assign(window.OCP.Files, { Router: router })
+const Router = new RouterService(router)
+Object.assign(window.OCP.Files, { Router })
 
 // Init Pinia store
 Vue.use(PiniaVuePlugin)

+ 1 - 1
apps/files/src/services/FileAction.ts

@@ -20,7 +20,7 @@
  *
  */
 
-import { Node } from '@nextcloud/files'
+import type { Node } from '@nextcloud/files'
 import logger from '../logger'
 
 declare global {

+ 71 - 0
apps/files/src/services/RouterService.ts

@@ -0,0 +1,71 @@
+/**
+ * @copyright Copyright (c) 2023 John Molakvoæ <skjnldsv@protonmail.com>
+ *
+ * @author John Molakvoæ <skjnldsv@protonmail.com>
+ *
+ * @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 <http://www.gnu.org/licenses/>.
+ *
+ */
+import type { Route } from 'vue-router';
+import type VueRouter from 'vue-router';
+import type { Dictionary } from 'vue-router/types/router';
+import type { Location } from 'vue-router/types/router';
+
+export default class RouterService {
+
+	private _router: VueRouter;
+
+	constructor(router: VueRouter) {
+		this._router = router
+	}
+
+	/**
+	 * Trigger a route change on the files app
+	 * 
+	 * @param path the url path, eg: '/trashbin?dir=/Deleted'
+	 * @param replace replace the current history
+	 * @see https://router.vuejs.org/guide/essentials/navigation.html#navigate-to-a-different-location
+	 */
+	goTo(path: string, replace: boolean = false): Promise<Route> {
+		return this._router.push({
+			path,
+			replace,
+		})
+	}
+
+	/**
+	 * Trigger a route change on the files App
+	 *
+	 * @param name the route name
+	 * @param params the route parameters
+	 * @param query the url query parameters
+	 * @param replace replace the current history
+	 * @see https://router.vuejs.org/guide/essentials/navigation.html#navigate-to-a-different-location
+	 */
+	goToRoute(
+		name?: string,
+		params?: Dictionary<string>,
+		query?: Dictionary<string | (string | null)[] | null | undefined>,
+		replace?: boolean,
+	): Promise<Route> {
+		return this._router.push({
+			name,
+			query,
+			params,
+			replace,
+		} as Location)
+	}
+}

File diff suppressed because it is too large
+ 0 - 0
dist/files-main.js


File diff suppressed because it is too large
+ 0 - 0
dist/files-main.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/files_trashbin-main.js.map


+ 1 - 1
webpack.modules.js

@@ -50,7 +50,7 @@ module.exports = {
 	},
 	files: {
 		sidebar: path.join(__dirname, 'apps/files/src', 'sidebar.js'),
-		main: path.join(__dirname, 'apps/files/src', 'main.js'),
+		main: path.join(__dirname, 'apps/files/src', 'main.ts'),
 		'personal-settings': path.join(__dirname, 'apps/files/src', 'main-personal-settings.js'),
 		'reference-files': path.join(__dirname, 'apps/files/src', 'reference-files.js'),
 	},

Some files were not shown because too many files changed in this diff