refactor(sharebymail): migrate app to Vue 3

Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
pull/55432/head
Ferdinand Thiessen 2025-10-19 18:53:23 +07:00
parent 3c1e9cd99e
commit 0ba4f5266e
No known key found for this signature in database
GPG Key ID: 45FAE7268762B400
8 changed files with 32 additions and 31 deletions

@ -178,7 +178,7 @@ SPDX-FileCopyrightText = "2020 Nextcloud GmbH and Nextcloud contributors"
SPDX-License-Identifier = "AGPL-3.0-or-later" SPDX-License-Identifier = "AGPL-3.0-or-later"
[[annotations]] [[annotations]]
path = ["cypress/tsconfig.json", "cypress/fixtures/appstore/apps.json", "dist/icons.css"] path = ["cypress/tsconfig.json", "cypress/fixtures/appstore/apps.json", "dist/*.css"]
precedence = "aggregate" precedence = "aggregate"
SPDX-FileCopyrightText = "2022 Nextcloud GmbH and Nextcloud contributors" SPDX-FileCopyrightText = "2022 Nextcloud GmbH and Nextcloud contributors"
SPDX-License-Identifier = "AGPL-3.0-or-later" SPDX-License-Identifier = "AGPL-3.0-or-later"

@ -26,6 +26,8 @@ class Admin implements IDelegatedSettings {
$this->initialState->provideInitialState('sendPasswordMail', $this->settingsManager->sendPasswordByMail()); $this->initialState->provideInitialState('sendPasswordMail', $this->settingsManager->sendPasswordByMail());
$this->initialState->provideInitialState('replyToInitiator', $this->settingsManager->replyToInitiator()); $this->initialState->provideInitialState('replyToInitiator', $this->settingsManager->replyToInitiator());
\OCP\Util::addStyle('sharebymail', 'admin-settings');
\OCP\Util::addScript('sharebymail', 'admin-settings');
return new TemplateResponse('sharebymail', 'settings-admin', [], ''); return new TemplateResponse('sharebymail', 'settings-admin', [], '');
} }

@ -7,17 +7,11 @@
<NcSettingsSection <NcSettingsSection
:name="t('sharebymail', 'Share by mail')" :name="t('sharebymail', 'Share by mail')"
:description="t('sharebymail', 'Allows people to share a personalized link to a file or folder by putting in an email address.')"> :description="t('sharebymail', 'Allows people to share a personalized link to a file or folder by putting in an email address.')">
<NcCheckboxRadioSwitch <NcCheckboxRadioSwitch v-model="sendPasswordMail" type="switch">
type="switch"
:checked.sync="sendPasswordMail"
@update:checked="update('sendpasswordmail', sendPasswordMail)">
{{ t('sharebymail', 'Send password by mail') }} {{ t('sharebymail', 'Send password by mail') }}
</NcCheckboxRadioSwitch> </NcCheckboxRadioSwitch>
<NcCheckboxRadioSwitch <NcCheckboxRadioSwitch v-model="replyToInitiator" type="switch">
type="switch"
:checked.sync="replyToInitiator"
@update:checked="update('replyToInitiator', replyToInitiator)">
{{ t('sharebymail', 'Reply to initiator') }} {{ t('sharebymail', 'Reply to initiator') }}
</NcCheckboxRadioSwitch> </NcCheckboxRadioSwitch>
</NcSettingsSection> </NcSettingsSection>
@ -27,6 +21,7 @@
import axios from '@nextcloud/axios' import axios from '@nextcloud/axios'
import { showError } from '@nextcloud/dialogs' import { showError } from '@nextcloud/dialogs'
import { loadState } from '@nextcloud/initial-state' import { loadState } from '@nextcloud/initial-state'
import { t } from '@nextcloud/l10n'
import { confirmPassword } from '@nextcloud/password-confirmation' import { confirmPassword } from '@nextcloud/password-confirmation'
import { generateOcsUrl } from '@nextcloud/router' import { generateOcsUrl } from '@nextcloud/router'
import NcCheckboxRadioSwitch from '@nextcloud/vue/components/NcCheckboxRadioSwitch' import NcCheckboxRadioSwitch from '@nextcloud/vue/components/NcCheckboxRadioSwitch'
@ -40,6 +35,10 @@ export default {
NcSettingsSection, NcSettingsSection,
}, },
setup() {
return { t }
},
data() { data() {
return { return {
sendPasswordMail: loadState('sharebymail', 'sendPasswordMail'), sendPasswordMail: loadState('sharebymail', 'sendPasswordMail'),
@ -47,6 +46,16 @@ export default {
} }
}, },
watch: {
sendPasswordMail(newValue) {
this.update('sendpasswordmail', newValue)
},
replyToInitiator(newValue) {
this.update('replyToInitiator', newValue)
},
},
methods: { methods: {
async update(key, value) { async update(key, value) {
await confirmPassword() await confirmPassword()

@ -1,20 +0,0 @@
/**
* SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
import { getCSPNonce } from '@nextcloud/auth'
import { translate as t } from '@nextcloud/l10n'
import Vue from 'vue'
import AdminSettings from './components/AdminSettings.vue'
__webpack_nonce__ = getCSPNonce()
Vue.mixin({
methods: {
t,
},
})
const AdminSettingsView = Vue.extend(AdminSettings)
new AdminSettingsView().$mount('#vue-admin-sharebymail')

@ -0,0 +1,10 @@
/**
* SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
import { createApp } from 'vue'
import AdminSettings from './components/AdminSettings.vue'
const app = createApp(AdminSettings)
app.mount('#vue-admin-sharebymail')

@ -3,7 +3,6 @@
* SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later * SPDX-License-Identifier: AGPL-3.0-or-later
*/ */
\OCP\Util::addScript('sharebymail', 'vue-settings-admin-sharebymail');
?> ?>
<div id="vue-admin-sharebymail"></div> <div id="vue-admin-sharebymail"></div>

@ -7,6 +7,7 @@ import { createAppConfig } from '@nextcloud/vite-config'
import { resolve } from 'node:path' import { resolve } from 'node:path'
export default createAppConfig({ export default createAppConfig({
'admin-settings': resolve(import.meta.dirname, 'apps/sharebymail/src', 'settings-admin.ts'),
}, { }, {
emptyOutputDirectory: { emptyOutputDirectory: {
additionalDirectories: [resolve(import.meta.dirname, '../..', 'dist')], additionalDirectories: [resolve(import.meta.dirname, '../..', 'dist')],