+ {pref.displayName} |
+ {makeContentCell(PreferenceContext.Account, globalServer, inherit = pref.defaultValue)} |
+ {makeContentCell(PreferenceContext.Device, globalLocal, inherit = globalServer ?? inherit)} |
+ {makeContentCell(PreferenceContext.RoomAccount, roomServer, inherit = globalLocal ?? inherit)} |
+ {makeContentCell(PreferenceContext.RoomDevice, roomLocal, inherit = roomServer ?? inherit)} |
+
+}
+
interface SettingsViewProps {
room: RoomStateStore
}
const SettingsView = ({ room }: SettingsViewProps) => {
+ const client = use(ClientContext)!
+ const setPref = useCallback((context: PreferenceContext, key: keyof Preferences, value: PreferenceValueType | undefined)=> {
+ if (context === PreferenceContext.Account) {
+ client.rpc.setAccountData("fi.mau.gomuks.preferences", {
+ ...client.store.serverPreferenceCache,
+ [key]: value,
+ })
+ } else if (context === PreferenceContext.Device) {
+ if (value === undefined) {
+ delete client.store.localPreferenceCache[key]
+ } else {
+ (client.store.localPreferenceCache[key] as PreferenceValueType) = value
+ }
+ } else if (context === PreferenceContext.RoomAccount) {
+ client.rpc.setAccountData("fi.mau.gomuks.preferences", {
+ ...room.serverPreferenceCache,
+ [key]: value,
+ }, room.roomID)
+ } else if (context === PreferenceContext.RoomDevice) {
+ if (value === undefined) {
+ delete room.localPreferenceCache[key]
+ } else {
+ (room.localPreferenceCache[key] as PreferenceValueType) = value
+ }
+ }
+ }, [client, room])
+ usePreferences(client.store, room)
+ const globalServer = client.store.serverPreferenceCache
+ const globalLocal = client.store.localPreferenceCache
+ const roomServer = room.serverPreferenceCache
+ const roomLocal = room.localPreferenceCache
return <>