From f9e8f62e9ccb58d906697818450053ec54df1350 Mon Sep 17 00:00:00 2001 From: JM Date: Wed, 6 May 2026 12:06:26 +0200 Subject: [PATCH] neuer chat, weniger raten? --- js/src/forum/addTeamsSettings.js | 51 ++++++++++++++++++-------------- 1 file changed, 28 insertions(+), 23 deletions(-) diff --git a/js/src/forum/addTeamsSettings.js b/js/src/forum/addTeamsSettings.js index d8f1f56..d237ac3 100644 --- a/js/src/forum/addTeamsSettings.js +++ b/js/src/forum/addTeamsSettings.js @@ -5,55 +5,60 @@ import Switch from 'flarum/common/components/Switch'; import Component from 'flarum/common/Component'; class TeamsSettingsBlock extends Component { + oninit(vnode) { + super.oninit(vnode); + + // Serialisiert Saves, damit schnelle Klicks nicht zu "last write wins" führen. + this.saveChain = Promise.resolve(); + } + + queueSave(user, preferences) { + this.saveChain = this.saveChain.then(() => user.savePreferences(preferences)); + return this.saveChain; + } + view() { const user = app.session.user; - const prefs = user.preferences() || {}; + + // Sicherheitscheck: SettingsPage ist nur für eingeloggte Nutzer, aber defensiv bleibt defensiv. + if (!user) return null; return (

Microsoft Teams

- {this.prefSwitch( - user, - prefs, - 'sbp-jm-msteams.enabled', - 'Enable Microsoft Teams notifications' - )} + {this.prefSwitch(user, 'sbp-jm-msteams.enabled', 'Enable Microsoft Teams notifications')}
{this.prefSwitch( user, - prefs, 'sbp-jm-msteams.types.newPost', 'Someone replies to a discussion I am following' )} - {this.prefSwitch( - user, - prefs, - 'sbp-jm-msteams.types.postMentioned', - 'Someone mentions me in a post' - )} + {this.prefSwitch(user, 'sbp-jm-msteams.types.postMentioned', 'Someone mentions me in a post')} - {this.prefSwitch( - user, - prefs, - 'sbp-jm-msteams.types.userMentioned', - 'Someone mentions me' - )} + {this.prefSwitch(user, 'sbp-jm-msteams.types.userMentioned', 'Someone mentions me')}
); } - prefSwitch(user, prefs, key, label) { + prefSwitch(user, key, label) { + const prefs = user.preferences() || {}; + return ( { - user.savePreferences({ + // Wichtig: Merge statt Partial-Objekt, damit andere Toggles nicht "verschwinden" + // (Front-end Model hält preferences als ein Attribut). + const merged = { + ...(user.preferences() || {}), [key]: value, - }); + }; + + return this.queueSave(user, merged); }} > {label}