diff options
Diffstat (limited to 'apps/files/src/store/userconfig.ts')
-rw-r--r-- | apps/files/src/store/userconfig.ts | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/apps/files/src/store/userconfig.ts b/apps/files/src/store/userconfig.ts new file mode 100644 index 00000000000..48fe01d5134 --- /dev/null +++ b/apps/files/src/store/userconfig.ts @@ -0,0 +1,62 @@ +/** + * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ +import type { UserConfig } from '../types' +import { getCurrentUser } from '@nextcloud/auth' +import { emit, subscribe } from '@nextcloud/event-bus' +import { loadState } from '@nextcloud/initial-state' +import { generateUrl } from '@nextcloud/router' +import { defineStore } from 'pinia' +import { ref, set } from 'vue' +import axios from '@nextcloud/axios' + +const initialUserConfig = loadState<UserConfig>('files', 'config', { + crop_image_previews: true, + default_view: 'files', + grid_view: false, + show_files_extensions: true, + show_hidden: false, + show_mime_column: true, + sort_favorites_first: true, + sort_folders_first: true, + + show_dialog_deletion: false, + show_dialog_file_extension: true, +}) + +export const useUserConfigStore = defineStore('userconfig', () => { + const userConfig = ref<UserConfig>({ ...initialUserConfig }) + + /** + * Update the user config local store + * @param key The config key + * @param value The new value + */ + function onUpdate(key: string, value: boolean): void { + set(userConfig.value, key, value) + } + + /** + * Update the user config local store AND on server side + * @param key The config key + * @param value The new value + */ + async function update(key: string, value: boolean): Promise<void> { + // only update if a user is logged in (not the case for public shares) + if (getCurrentUser() !== null) { + await axios.put(generateUrl('/apps/files/api/v1/config/{key}', { key }), { + value, + }) + } + emit('files:config:updated', { key, value }) + } + + // Register the event listener + subscribe('files:config:updated', ({ key, value }) => onUpdate(key, value)) + + return { + userConfig, + update, + } +}) |