diff --git a/CHANGELOG.md b/CHANGELOG.md index 19b74ca099400a41f0f7dc4334ff58f5c0f3db91..2ed53c05db6bb514ad7ad1b36abf814e51209502 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Statuses count changes when an instance is selected and shows the amount of statuses from an originating instance - Add a dialog window with a confirmation when a remove button is clicked on the Settings page +- Disable tab on the Settings page if there are no settings on this tab that can be changed in Admin FE ### Fixed diff --git a/src/views/settings/components/ActivityPub.vue b/src/views/settings/components/ActivityPub.vue index 4e5ab1b81f74573af8a5aa174201467db0d48076..67dee024f993f638abc3c3570ff2b9540e5fa9c6 100644 --- a/src/views/settings/components/ActivityPub.vue +++ b/src/views/settings/components/ActivityPub.vue @@ -3,7 +3,7 @@ <el-form ref="activitypubData" :model="activitypubData" :label-position="labelPosition" :label-width="labelWidth" data-search=":activitypub"> <setting :setting-group="activitypub" :data="activitypubData"/> </el-form> - <el-divider class="divider thick-line"/> + <el-divider v-if="activitypub" class="divider thick-line"/> <el-form ref="userData" :model="userData" :label-position="labelPosition" :label-width="labelWidth" data-search=":user"> <setting :setting-group="user" :data="userData"/> </el-form> diff --git a/src/views/settings/components/Authentication.vue b/src/views/settings/components/Authentication.vue index 69e5f1432fc4bfe78837de6e7db68104de3906d6..9b055aad7ce5b148d13b930cd92a0ce8cc608de4 100644 --- a/src/views/settings/components/Authentication.vue +++ b/src/views/settings/components/Authentication.vue @@ -3,15 +3,15 @@ <el-form ref="pleromaAuthenticatorData" :model="pleromaAuthenticatorData" :label-position="labelPosition" :label-width="labelWidth"> <setting :setting-group="pleromaAuthenticator" :data="pleromaAuthenticatorData"/> </el-form> - <el-divider class="divider thick-line"/> + <el-divider v-if="pleromaAuthenticator" class="divider thick-line"/> <el-form ref="authData" :model="authData" :label-position="labelPosition" :label-width="labelWidth"> <setting :setting-group="auth" :data="authData"/> </el-form> - <el-divider class="divider thick-line"/> + <el-divider v-if="auth" class="divider thick-line"/> <el-form ref="ldapData" :model="ldapData" :label-position="labelPosition" :label-width="labelWidth"> <setting :setting-group="ldap" :data="ldapData"/> </el-form> - <el-divider class="divider thick-line"/> + <el-divider v-if="oauth2" class="divider thick-line"/> <el-form ref="oauth2" :model="oauth2Data" :label-position="labelPosition" :label-width="labelWidth"> <setting :setting-group="oauth2" :data="oauth2Data"/> </el-form> diff --git a/src/views/settings/components/Captcha.vue b/src/views/settings/components/Captcha.vue index 5e91074aa0584f05d1773d9c5063aa8ae5f8cfe6..97f067a69525481cd84895a8733508d5f6e49192 100644 --- a/src/views/settings/components/Captcha.vue +++ b/src/views/settings/components/Captcha.vue @@ -3,7 +3,7 @@ <el-form ref="captchaData" :model="captchaData" :label-position="labelPosition" :label-width="labelWidth"> <setting :setting-group="captcha" :data="captchaData"/> </el-form> - <el-divider class="divider thick-line"/> + <el-divider v-if="captcha" class="divider thick-line"/> <el-form ref="kocaptchaData" :model="kocaptchaData" :label-position="labelPosition" :label-width="labelWidth"> <setting :setting-group="kocaptcha" :data="kocaptchaData"/> </el-form> diff --git a/src/views/settings/components/Frontend.vue b/src/views/settings/components/Frontend.vue index 2af44656e0441a8761f038f734219ab65719fdf2..69f7a4b657e30770094933b6421033da983f59c3 100644 --- a/src/views/settings/components/Frontend.vue +++ b/src/views/settings/components/Frontend.vue @@ -6,27 +6,27 @@ <el-form ref="staticFeData" :model="staticFeData" :label-position="labelPosition" :label-width="labelWidth"> <setting :setting-group="staticFe" :data="staticFeData"/> </el-form> - <el-divider class="divider thick-line"/> + <el-divider v-if="staticFe" class="divider thick-line"/> <el-form ref="assetsData" :model="assetsData" :label-position="labelPosition" :label-width="labelWidth"> - <el-form-item class="grouped-settings-header"> + <el-form-item v-if="assets" class="grouped-settings-header"> <span class="label-font label-with-margin">{{ $t('settings.assets') }}</span> </el-form-item> <setting :setting-group="assets" :data="assetsData"/> </el-form> - <el-divider class="divider thick-line"/> + <el-divider v-if="assets" class="divider thick-line"/> <el-form ref="emojiData" :model="emojiData" :label-position="labelPosition" :label-width="labelWidth"> - <el-form-item data-search=":emoji" class="grouped-settings-header"> + <el-form-item v-if="emoji" data-search=":emoji" class="grouped-settings-header"> <span class="label-font label-with-margin">{{ $t('settings.emoji') }}</span> </el-form-item> <setting :setting-group="emoji" :data="emojiData"/> </el-form> - <el-divider class="divider thick-line"/> + <el-divider v-if="emoji" class="divider thick-line"/> <el-form ref="chatData" :model="chatData" :label-position="labelPosition" :label-width="labelWidth"> <setting :setting-group="chat" :data="chatData"/> </el-form> - <el-divider class="divider thick-line"/> + <el-divider v-if="chat" class="divider thick-line"/> <el-form ref="markupData" :model="markupData" :label-position="labelPosition" :label-width="labelWidth"> - <el-form-item data-search=":markup" class="grouped-settings-header"> + <el-form-item v-if="markup" data-search=":markup" class="grouped-settings-header"> <span class="label-font label-with-margin">{{ $t('settings.markup') }}</span> </el-form-item> <setting :setting-group="markup" :data="markupData"/> diff --git a/src/views/settings/components/Http.vue b/src/views/settings/components/Http.vue index 39042b61e0650bcff7d3bc7967094ac4dda15f2a..c9145d248cd0fc9a47a4686b34e55be5c1cb14bf 100644 --- a/src/views/settings/components/Http.vue +++ b/src/views/settings/components/Http.vue @@ -4,20 +4,20 @@ <setting :setting-group="http" :data="httpData"/> </el-form> <el-form ref="corsPlugData" :model="corsPlugData" :label-position="labelPosition" :label-width="labelWidth"> - <el-form-item data-search=":cors_plug" class="grouped-settings-header"> + <el-form-item v-if="corsPlug" data-search=":cors_plug" class="grouped-settings-header"> <span class="label-font label-with-margin">{{ $t('settings.corsPlug') }}</span> </el-form-item> <setting :setting-group="corsPlug" :data="corsPlugData"/> </el-form> - <el-divider class="divider thick-line"/> + <el-divider v-if="corsPlug" class="divider thick-line"/> <el-form ref="httpSignatures" :model="httpSignaturesData" :label-position="labelPosition" :label-width="labelWidth"> <setting :setting-group="httpSignatures" :data="httpSignaturesData"/> </el-form> - <el-divider class="divider thick-line"/> + <el-divider v-if="httpSignatures" class="divider thick-line"/> <el-form ref="httpSecurityData" :model="httpSecurityData" :label-position="labelPosition" :label-width="labelWidth"> <setting :setting-group="httpSecurity" :data="httpSecurityData"/> </el-form> - <el-divider class="divider thick-line"/> + <el-divider v-if="httpSecurity" class="divider thick-line"/> <el-form ref="webCacheTtl" :model="webCacheTtlData" :label-position="labelPosition" :label-width="labelWidth"> <setting :setting-group="webCacheTtl" :data="webCacheTtlData"/> </el-form> diff --git a/src/views/settings/components/Instance.vue b/src/views/settings/components/Instance.vue index 02abe6553e19fbb8c6a3a7ace5576c155b8e5dfa..3156c33f4dc19a4f07e8befc0c85c996e85387b9 100644 --- a/src/views/settings/components/Instance.vue +++ b/src/views/settings/components/Instance.vue @@ -3,27 +3,27 @@ <el-form ref="instanceData" :model="instanceData" :label-position="labelPosition" :label-width="labelWidth"> <setting :setting-group="instance" :data="instanceData"/> </el-form> - <el-divider class="divider thick-line"/> + <el-divider v-if="instance" class="divider thick-line"/> <el-form ref="adminToken" :model="adminTokenData" :label-position="labelPosition" :label-width="labelWidth"> <setting :setting-group="adminToken" :data="adminTokenData"/> </el-form> - <el-divider class="divider thick-line"/> + <el-divider v-if="adminToken" class="divider thick-line"/> <el-form ref="scheduledActivity" :model="scheduledActivityData" :label-position="labelPosition" :label-width="labelWidth"> <setting :setting-group="scheduledActivity" :data="scheduledActivityData"/> </el-form> - <el-divider class="divider thick-line"/> + <el-divider v-if="scheduledActivity" class="divider thick-line"/> <el-form ref="manifest" :model="manifestData" :label-position="labelPosition" :label-width="labelWidth"> <setting :setting-group="manifest" :data="manifestData"/> </el-form> - <el-divider class="divider thick-line"/> + <el-divider v-if="manifest" class="divider thick-line"/> <el-form ref="pleromaUser" :model="pleromaUserData" :label-position="labelPosition" :label-width="labelWidth" data-search="Pleroma.User"> <setting :setting-group="pleromaUser" :data="pleromaUserData"/> </el-form> - <el-divider class="divider thick-line"/> + <el-divider v-if="pleromaUser" class="divider thick-line"/> <el-form ref="uriSchemes" :model="uriSchemesData" :label-position="labelPosition" :label-width="labelWidth"> <setting :setting-group="uriSchemes" :data="uriSchemesData"/> </el-form> - <el-divider class="divider thick-line"/> + <el-divider v-if="uriSchemes" class="divider thick-line"/> <el-form ref="feed" :model="feedData" :label-position="labelPosition" :label-width="labelWidth"> <setting :setting-group="feed" :data="feedData"/> </el-form> diff --git a/src/views/settings/components/Logger.vue b/src/views/settings/components/Logger.vue index b9fb891e0df0d446e676f71437871d05ae27a14d..dc62d1538eb0bb8e9f4dce1a6889bd86edbee846 100644 --- a/src/views/settings/components/Logger.vue +++ b/src/views/settings/components/Logger.vue @@ -3,15 +3,15 @@ <el-form ref="loggerData" :model="loggerData" :label-position="labelPosition" :label-width="labelWidth"> <setting :setting-group="logger" :data="loggerData"/> </el-form> - <el-divider class="divider thick-line"/> + <el-divider v-if="logger" class="divider thick-line"/> <el-form ref="consoleData" :model="consoleData" :label-position="labelPosition" :label-width="labelWidth"> <setting :setting-group="console" :data="consoleData"/> </el-form> - <el-divider class="divider thick-line"/> + <el-divider v-if="console" class="divider thick-line"/> <el-form ref="exsysloggerData" :model="exsysloggerData" :label-position="labelPosition" :label-width="labelWidth"> <setting :setting-group="exsyslogger" :data="exsysloggerData"/> </el-form> - <el-divider class="divider thick-line"/> + <el-divider v-if="exsyslogger" class="divider thick-line"/> <el-form ref="quackData" :model="quackData" :label-position="labelPosition" :label-width="labelWidth"> <setting :setting-group="quack" :data="quackData"/> </el-form> diff --git a/src/views/settings/components/MRF.vue b/src/views/settings/components/MRF.vue index 94d3762e15925628f0ec64996725e069f974fc3d..977d15822d8fdec29a834a70bb7d5504d706edfa 100644 --- a/src/views/settings/components/MRF.vue +++ b/src/views/settings/components/MRF.vue @@ -3,15 +3,15 @@ <el-form ref="mrfSimple" :model="mrfSimpleData" :label-position="labelPosition" :label-width="labelWidth"> <setting :setting-group="mrfSimple" :data="mrfSimpleData"/> </el-form> - <el-divider class="divider thick-line"/> + <el-divider v-if="mrfSimple" class="divider thick-line"/> <el-form ref="mrfRejectnonpublic" :model="mrfRejectnonpublicData" :label-position="labelPosition" :label-width="labelWidth"> <setting :setting-group="mrfRejectnonpublic" :data="mrfRejectnonpublicData"/> </el-form> - <el-divider class="divider thick-line"/> + <el-divider v-if="mrfRejectnonpublic" class="divider thick-line"/> <el-form ref="mrfHellthread" :model="mrfHellthreadData" :label-position="labelPosition" :label-width="labelWidth"> <setting :setting-group="mrfHellthread" :data="mrfHellthreadData"/> </el-form> - <el-divider class="divider thick-line"/> + <el-divider v-if="mrfHellthread" class="divider thick-line"/> <el-form ref="mrfKeyword" :model="mrfKeywordData" :label-position="labelPosition" :label-width="labelWidth"> <setting :setting-group="mrfKeyword" :data="mrfKeywordData"/> </el-form> @@ -21,19 +21,19 @@ <el-form ref="mrfMention" :model="mrfMentionData" :label-position="labelPosition" :label-width="labelWidth"> <setting :setting-group="mrfMention" :data="mrfMentionData"/> </el-form> - <el-divider class="divider thick-line"/> + <el-divider v-if="mrfMention" class="divider thick-line"/> <el-form ref="mrfNormalizeMarkup" :model="mrfNormalizeMarkupData" :label-position="labelPosition" :label-width="labelWidth"> <setting :setting-group="mrfNormalizeMarkup" :data="mrfNormalizeMarkupData"/> </el-form> - <el-divider class="divider thick-line"/> + <el-divider v-if="mrfNormalizeMarkup" class="divider thick-line"/> <el-form ref="mrfVocabulary" :model="mrfVocabularyData" :label-position="labelPosition" :label-width="labelWidth"> <setting :setting-group="mrfVocabulary" :data="mrfVocabularyData"/> </el-form> - <el-divider class="divider thick-line"/> + <el-divider v-if="mrfVocabulary" class="divider thick-line"/> <el-form ref="mrfObjectAge" :model="mrfObjectAgeData" :label-position="labelPosition" :label-width="labelWidth"> <setting :setting-group="mrfObjectAge" :data="mrfObjectAgeData"/> </el-form> - <el-divider class="divider thick-line"/> + <el-divider v-if="mrfObjectAge" class="divider thick-line"/> <el-form ref="modules" :model="modulesData" :label-position="labelPosition" :label-width="labelWidth"> <setting :setting-group="modules" :data="modulesData"/> </el-form> diff --git a/src/views/settings/components/Mailer.vue b/src/views/settings/components/Mailer.vue index 0a438693ff4b3c9223e7d1de18cea4af7aa526b3..c62568a9b7838dd278bdb505618fa71557ff713e 100644 --- a/src/views/settings/components/Mailer.vue +++ b/src/views/settings/components/Mailer.vue @@ -3,11 +3,11 @@ <el-form ref="mailer" :model="mailerData" :label-position="labelPosition" :label-width="labelWidth"> <setting :setting-group="mailer" :data="mailerData"/> </el-form> - <el-divider class="divider thick-line"/> + <el-divider v-if="mailer" class="divider thick-line"/> <el-form ref="swoosh" :model="swooshData" :label-position="labelPosition" :label-width="labelWidth"> <setting :setting-group="swoosh" :data="swooshData"/> </el-form> - <el-divider class="divider thick-line"/> + <el-divider v-if="swoosh" class="divider thick-line"/> <el-form ref="emailNotifications" :model="emailNotificationsData" :label-position="labelPosition" :label-width="labelWidth"> <setting :setting-group="emailNotifications" :data="emailNotificationsData"/> </el-form> diff --git a/src/views/settings/components/Metadata.vue b/src/views/settings/components/Metadata.vue index b4aef7c8e34d4542615aad4283ca81708afdd40a..f0ef71c40f6bd2170bd7cfcbbd1a11d860c600d2 100644 --- a/src/views/settings/components/Metadata.vue +++ b/src/views/settings/components/Metadata.vue @@ -3,7 +3,7 @@ <el-form ref="metadata" :model="metadataData" :label-position="labelPosition" :label-width="labelWidth"> <setting :setting-group="metadata" :data="metadataData"/> </el-form> - <el-divider class="divider thick-line"/> + <el-divider v-if="metadata" class="divider thick-line"/> <el-form ref="richMedia" :model="richMediaData" :label-position="labelPosition" :label-width="labelWidth"> <setting :setting-group="richMedia" :data="richMediaData"/> </el-form> diff --git a/src/views/settings/components/Upload.vue b/src/views/settings/components/Upload.vue index b557fb5a7e70b5b32d0488f9f93f0fba105238c3..97860d75ebd862f916b0a7a13421c843b9aea537 100644 --- a/src/views/settings/components/Upload.vue +++ b/src/views/settings/components/Upload.vue @@ -4,20 +4,20 @@ <setting :setting-group="upload" :data="uploadData"/> </el-form> <el-form v-if="showUploadersLocal" ref="uploadersLocal" :model="uploadersLocalData" :label-position="labelPosition" :label-width="labelWidth"> - <el-form-item class="grouped-settings-header"> + <el-form-item v-if="uploadersLocal" class="grouped-settings-header"> <span class="label-font label-with-margin">Pleroma.Uploaders.Local</span> </el-form-item> <setting :setting-group="uploadersLocal" :data="uploadersLocalData"/> - <el-divider class="divider thick-line"/> + <el-divider v-if="uploadersLocal" class="divider thick-line"/> </el-form> <el-form v-if="showUploadersS3" ref="uploadersS3" :model="uploadersS3Data" :label-position="labelPosition" :label-width="labelWidth"> <setting :setting-group="uploadersS3" :data="uploadersS3Data"/> - <el-divider class="divider thick-line"/> + <el-divider v-if="uploadersS3" class="divider thick-line"/> </el-form> <el-form ref="uploadFilterMogrify" :model="uploadFilterMogrifyData" :label-position="labelPosition" :label-width="labelWidth"> <setting :setting-group="uploadFilterMogrify" :data="uploadFilterMogrifyData"/> </el-form> - <el-divider class="divider thick-line"/> + <el-divider v-if="uploadFilterMogrify" class="divider thick-line"/> <el-form ref="uploadAnonymizeFilename" :model="uploadAnonymizeFilenameData" :label-position="labelPosition" :label-width="labelWidth"> <setting :setting-group="uploadAnonymizeFilename" :data="uploadAnonymizeFilenameData"/> </el-form> diff --git a/src/views/settings/components/tabs.js b/src/views/settings/components/tabs.js index f9b41621ae3e6ba09ef114db166d37d3d061a562..5c170353448985828d41324d82533543290fb1e4 100644 --- a/src/views/settings/components/tabs.js +++ b/src/views/settings/components/tabs.js @@ -65,7 +65,7 @@ export const tabs = { }, 'relays': { label: 'settings.relays', - settings: [] + settings: ['relays'] }, 'web-push': { label: 'settings.webPush', diff --git a/src/views/settings/index.vue b/src/views/settings/index.vue index ff1b3435de986aa9ccc08b6cd4289bd5095975f3..db62318421acac2d1c3e18cd1f86a8ead79f4d9c 100644 --- a/src/views/settings/index.vue +++ b/src/views/settings/index.vue @@ -33,7 +33,7 @@ <el-tab-pane v-for="(value, componentName) in tabs" :label="$t(value.label)" - :disabled="configDisabled" + :disabled="configDisabled || settingsCantBeChanged(value.settings)" :key="componentName" :name="componentName" lazy> @@ -227,6 +227,20 @@ export default { : { value: `${searchObj.label} in ${searchObj.groupLabel}`, group: searchObj.groupKey, key: searchObj.key } }) cb(results) + }, + settingsCantBeChanged(settings) { + const existingSettings = settings.filter(setting => { + if ([':esshd', ':cors_plug', ':http_signatures', ':quack', ':logger', ':swoosh', ':mime'].includes(setting)) { + return this.$store.state.settings.description.findIndex(el => el.group === setting) !== -1 + } else if (setting === 'Pleroma.Web.Auth.Authenticator' || setting === ':admin_token') { + return this.$store.state.settings.description.findIndex(el => el.children[0].key === setting) !== -1 + } else if (setting === 'relays') { + return [setting] + } else { + return this.$store.state.settings.description.findIndex(el => el.key === setting) !== -1 + } + }) + return existingSettings.length === 0 } } }