Merge pull request #55901 from nextcloud/fix/app-group-limit-immediate-ui-updates
Some checks are pending
CodeQL Advanced / Analyze (actions) (push) Waiting to run
CodeQL Advanced / Analyze (javascript-typescript) (push) Waiting to run
Integration sqlite / changes (push) Waiting to run
Integration sqlite / integration-sqlite (master, 8.4, main, --tags ~@large files_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, capabilities_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, collaboration_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, comments_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, dav_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, federation_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, file_conversions) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, files_reminders) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, filesdrop_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, ldap_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, openldap_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, openldap_numerical_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, remoteapi_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, routing_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, setup_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, sharees_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, sharing_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, theming_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite (master, 8.4, main, videoverification_features) (push) Blocked by required conditions
Integration sqlite / integration-sqlite-summary (push) Blocked by required conditions
Psalm static code analysis / static-code-analysis (push) Waiting to run
Psalm static code analysis / static-code-analysis-security (push) Waiting to run
Psalm static code analysis / static-code-analysis-ocp (push) Waiting to run
Psalm static code analysis / static-code-analysis-ncu (push) Waiting to run

fix(settings): Reactive UI updates for app group limitations
This commit is contained in:
Julius Knorr 2025-11-21 12:08:56 +01:00 committed by GitHub
commit ff5041fc8e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 56 additions and 12 deletions

View file

@ -166,21 +166,35 @@ export default {
},
addGroupLimitation(groupArray) {
if (this.app?.app_api) {
return // not supported for app_api apps
return
}
const group = groupArray.pop()
const groups = this.app.groups.concat([]).concat([group.id])
if (this.store && this.store.updateAppGroups) {
this.store.updateAppGroups(this.app.id, groups)
}
this.$store.dispatch('enableApp', { appId: this.app.id, groups })
},
removeGroupLimitation(group) {
if (this.app?.app_api) {
return // not supported for app_api apps
return
}
const currentGroups = this.app.groups.concat([])
const index = currentGroups.indexOf(group.id)
if (index > -1) {
currentGroups.splice(index, 1)
}
if (this.store && this.store.updateAppGroups) {
this.store.updateAppGroups(this.app.id, currentGroups)
}
if (currentGroups.length === 0) {
this.groupCheckedAppsData = false
}
this.$store.dispatch('enableApp', { appId: this.app.id, groups: currentGroups })
},
forceEnable(appId) {

View file

@ -81,5 +81,12 @@ export const useAppsStore = defineStore('settings-apps', {
getAppById(appId: string): IAppstoreApp | null {
return this.apps.find(({ id }) => id === appId) ?? null
},
updateAppGroups(appId: string, groups: string[]) {
const app = this.apps.find(({ id }) => id === appId)
if (app) {
app.groups = [...groups]
}
},
},
})

View file

@ -72,7 +72,7 @@ const mutations = {
enableApp(state, { appId, groups }) {
const app = state.apps.find((app) => app.id === appId)
app.active = true
app.groups = groups
Vue.set(app, 'groups', [...groups])
if (app.id === 'app_api') {
state.appApiEnabled = true
}
@ -183,13 +183,23 @@ const actions = {
return api.requireAdmin().then(() => {
context.commit('startLoading', apps)
context.commit('startLoading', 'install')
const previousState = {}
apps.forEach((_appId) => {
const app = context.state.apps.find((app) => app.id === _appId)
if (app) {
previousState[_appId] = {
active: app.active,
groups: [...(app.groups || [])],
}
context.commit('enableApp', { appId: _appId, groups })
}
})
return api.post(generateUrl('settings/apps/enable'), { appIds: apps, groups })
.then((response) => {
context.commit('stopLoading', apps)
context.commit('stopLoading', 'install')
apps.forEach((_appId) => {
context.commit('enableApp', { appId: _appId, groups })
})
// check for server health
return axios.get(generateUrl('apps/files/'))
@ -225,6 +235,19 @@ const actions = {
.catch((error) => {
context.commit('stopLoading', apps)
context.commit('stopLoading', 'install')
apps.forEach((_appId) => {
if (previousState[_appId]) {
context.commit('enableApp', {
appId: _appId,
groups: previousState[_appId].groups,
})
if (!previousState[_appId].active) {
context.commit('disableApp', _appId)
}
}
})
context.commit('setError', {
appId: apps,
error: error.response.data.data.message,

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long