From 24fd68785639860bc0fac0fa90ae35d316fb6e95 Mon Sep 17 00:00:00 2001 From: Brandon Presley Date: Tue, 22 Aug 2023 11:39:51 +1200 Subject: [PATCH] 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. --- SetList.tsx | 8 ++++++-- SettingsPage.tsx | 7 ++++--- android/app/build.gradle | 4 ++-- package.json | 2 +- settings.ts | 7 +++++++ 5 files changed, 20 insertions(+), 8 deletions(-) diff --git a/SetList.tsx b/SetList.tsx index d2c488c..ee0ab89 100644 --- a/SetList.tsx +++ b/SetList.tsx @@ -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 */ }, []); diff --git a/SettingsPage.tsx b/SettingsPage.tsx index 678ccdb..0adfc38 100644 --- a/SettingsPage.tsx +++ b/SettingsPage.tsx @@ -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(() => { diff --git a/android/app/build.gradle b/android/app/build.gradle index ccb5f40..03584c7 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -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 { diff --git a/package.json b/package.json index 335b6c4..dd05414 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "massive", - "version": "1.149", + "version": "1.150", "private": true, "license": "GPL-3.0-only", "scripts": { diff --git a/settings.ts b/settings.ts index af72f50..2d2ab24 100644 --- a/settings.ts +++ b/settings.ts @@ -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); +};