Merge pull request #55901 from nextcloud/fix/app-group-limit-immediate-ui-updates

fix(settings): Reactive UI updates for app group limitations
carl/php-85
Julius Knorr 2025-11-21 12:08:56 +07: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

@ -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) {

@ -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]
}
},
},
})

@ -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