From ff87de32f738e2acab7c022003bbd283bc2040f6 Mon Sep 17 00:00:00 2001 From: "Grigorii K. Shartsev" Date: Mon, 12 Aug 2024 14:13:36 +0200 Subject: [PATCH] feat(desktop): add talk settings frontend API Signed-off-by: Grigorii K. Shartsev --- .../SettingsDialog/SettingsDialog.vue | 12 ++++- src/composables/useSettingsDialog.ts | 52 +++++++++++++++++++ src/main.js | 5 ++ 3 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 src/composables/useSettingsDialog.ts diff --git a/src/components/SettingsDialog/SettingsDialog.vue b/src/components/SettingsDialog/SettingsDialog.vue index 1b9b1d300a3..78fc97e7b75 100644 --- a/src/components/SettingsDialog/SettingsDialog.vue +++ b/src/components/SettingsDialog/SettingsDialog.vue @@ -7,8 +7,15 @@ + + + + + @@ -185,6 +192,7 @@ import NcCheckboxRadioSwitch from '@nextcloud/vue/dist/Components/NcCheckboxRadi import MediaDevicesPreview from './MediaDevicesPreview.vue' +import { useSettingsDialog } from '../../composables/useSettingsDialog.ts' import { PRIVACY } from '../../constants.js' import BrowserStorage from '../../services/BrowserStorage.js' import { getTalkConfig } from '../../services/CapabilitiesManager.ts' @@ -207,8 +215,10 @@ export default { setup() { const settingsStore = useSettingsStore() + const { additionalSettingsSections } = useSettingsDialog() return { + additionalSettingsSections, settingsStore, supportTypingStatus, isBackgroundBlurred, diff --git a/src/composables/useSettingsDialog.ts b/src/composables/useSettingsDialog.ts new file mode 100644 index 00000000000..1f388c1b5de --- /dev/null +++ b/src/composables/useSettingsDialog.ts @@ -0,0 +1,52 @@ +/* + * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +import { markRaw, ref } from 'vue' +import type { Ref } from 'vue' + +type TalkSettingsSection = { + /** + * Section ID + */ + id: string + /** + * Section name, passed to NcAppSettingSection component + */ + name: string + /** + * WebComponent (custom element) name to render as the section content + */ + element: string, +} + +const additionalSettingsSections: Ref = ref([]) + +/** + * Register an additional settings section + * @param section - Settings section + */ +export function registerSettingsSection(section: TalkSettingsSection) { + additionalSettingsSections.value.push(markRaw(section)) +} + +/** + * Unregister an additional settings section + * @param id - Section ID + */ +export function unregisterSettingsSection(id: string) { + const index = additionalSettingsSections.value.findIndex((section) => section.id === id) + if (index !== -1) { + additionalSettingsSections.value.splice(index, 1) + } +} + +/** + * Talk Settings Dialog composable + */ +export function useSettingsDialog() { + return { + additionalSettingsSections, + } +} diff --git a/src/main.js b/src/main.js index 62c86156858..527e3541522 100644 --- a/src/main.js +++ b/src/main.js @@ -17,6 +17,7 @@ import { options as TooltipOptions } from '@nextcloud/vue/dist/Directives/Toolti import App from './App.vue' +import { registerSettingsSection, unregisterSettingsSection } from './composables/useSettingsDialog.ts' import './init.js' import router from './router/router.js' import store from './store/index.js' @@ -155,5 +156,9 @@ if (!window.OCA.Talk) { window.OCA.Talk = {} } OCA.Talk.instance = instance +OCA.Talk.Settings = { + registerSettingsSection, + unregisterSettingsSection, +} export default instance