Add custom event for settings being updated - 1.150

When we used navigation params to decide whether
or not to update the SetList, we broke reacting to
settings changes. This is because we used to update settings
whenever the user navigated to the page.
This commit is contained in:
Brandon Presley 2023-08-22 11:39:51 +12:00
parent bd9746bddb
commit 24fd687856
5 changed files with 20 additions and 8 deletions

View File

@ -5,7 +5,7 @@ import {
useRoute,
} from "@react-navigation/native";
import { useCallback, useEffect, useMemo, useState } from "react";
import { FlatList } from "react-native";
import { DeviceEventEmitter, FlatList } from "react-native";
import { List } from "react-native-paper";
import { Like } from "typeorm";
import { LIMIT } from "./constants";
@ -16,7 +16,7 @@ import { HomePageParams } from "./home-page-params";
import ListMenu from "./ListMenu";
import Page from "./Page";
import SetItem from "./SetItem";
import Settings from "./settings";
import Settings, { SETTINGS } from "./settings";
export default function SetList() {
const [refreshing, setRefreshing] = useState(false);
@ -59,6 +59,10 @@ export default function SetList() {
value: "",
skip: 0,
});
const description = DeviceEventEmitter.addListener(SETTINGS, () => {
settingsRepo.findOne({ where: {} }).then(setSettings);
});
return description.remove;
/* eslint-disable react-hooks/exhaustive-deps */
}, []);

View File

@ -16,7 +16,7 @@ import { darkOptions, lightOptions, themeOptions } from "./options";
import Page from "./Page";
import Select from "./Select";
import SettingButton from "./SettingButton";
import Settings from "./settings";
import Settings, { settingsUpdated } from "./settings";
import Switch from "./Switch";
import { toast } from "./toast";
import { useTheme } from "./use-theme";
@ -71,13 +71,14 @@ export default function SettingsPage() {
});
}, []);
const update = useCallback((key: keyof Settings, value: unknown) => {
return settingsRepo
const update = useCallback(async (key: keyof Settings, value: unknown) => {
await settingsRepo
.createQueryBuilder()
.update()
.set({ [key]: value })
.printSql()
.execute();
settingsUpdated();
}, []);
const soundString = useMemo(() => {

View File

@ -85,8 +85,8 @@ android {
applicationId "com.massive"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 36175
versionName "1.149"
versionCode 36176
versionName "1.150"
}
signingConfigs {
release {

View File

@ -1,6 +1,6 @@
{
"name": "massive",
"version": "1.149",
"version": "1.150",
"private": true,
"license": "GPL-3.0-only",
"scripts": {

View File

@ -1,4 +1,5 @@
import { Column, Entity, PrimaryColumn } from "typeorm";
import { DeviceEventEmitter } from "react-native";
@Entity()
export default class Settings {
@ -47,3 +48,9 @@ export default class Settings {
@Column("boolean")
backup: boolean;
}
export const SETTINGS = "settings";
export const settingsUpdated = () => {
DeviceEventEmitter.emit(SETTINGS);
};