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

View File

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

View File

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

View File

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

View File

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