Force update the screen when adding default repo

This commit is contained in:
PalmDevs 2026-08-13 01:55:57 +07:00
parent 9959ff7513
commit f4a8c8d30f
No known key found for this signature in database
GPG key ID: 6FAE8F8677ACA8BA

View file

@ -18,12 +18,12 @@ import {
updateAllPlugins, updateAllPlugins,
} from '@revenge-mod/plugins/_/repositories' } from '@revenge-mod/plugins/_/repositories'
import { lookupGeneratedIconComponent } from '@revenge-mod/utils/discord' import { lookupGeneratedIconComponent } from '@revenge-mod/utils/discord'
import { useCallback, useEffect, useState } from 'react' import { useCallback, useEffect, useReducer, useState } from 'react'
import { ScrollView, View } from 'react-native' import { ScrollView, View } from 'react-native'
import { api } from '..' import { api } from '..'
import { addDefaultRepoIfNeeded, toConfig } from '../repos' import { addDefaultRepoIfNeeded, toConfig } from '../repos'
import { formatBytes, messageOf, showErrorToast } from '../utils/repos'
import { showRemoveRepoConfirmation } from '../utils/alerts' import { showRemoveRepoConfirmation } from '../utils/alerts'
import { formatBytes, messageOf, showErrorToast } from '../utils/repos'
import type { import type {
DownloadProgressEvent, DownloadProgressEvent,
Repo, Repo,
@ -103,7 +103,8 @@ function UserRepoRow({
label: 'Delete', label: 'Delete',
IconComponent: TrashIconComponent, IconComponent: TrashIconComponent,
variant: 'destructive' as const, variant: 'destructive' as const,
action: () => showRemoveRepoConfirmation(repo, () => onRemove(repo)), action: () =>
showRemoveRepoConfirmation(repo, () => onRemove(repo)),
}, },
], ],
] ]
@ -147,6 +148,7 @@ export default function RevengePluginsAdvancedSettingScreen() {
Record<string, RepoStateEvent['state']> Record<string, RepoStateEvent['state']>
>({}) >({})
const [progress, setProgress] = useState<DownloadProgressEvent | null>(null) const [progress, setProgress] = useState<DownloadProgressEvent | null>(null)
const [n, forceUpdate] = useReducer(x => ~x, 0)
useEffect(() => { useEffect(() => {
const onRepoState = (event: RepoStateEvent) => { const onRepoState = (event: RepoStateEvent) => {
@ -170,7 +172,8 @@ export default function RevengePluginsAdvancedSettingScreen() {
listRepos().then(setReposState, e => showErrorToast(messageOf(e))) listRepos().then(setReposState, e => showErrorToast(messageOf(e)))
}, []) }, [])
useEffect(refresh, [refresh]) // biome-ignore lint/correctness/useExhaustiveDependencies: forceUpdate so we can refresh the screen
useEffect(refresh, [refresh, n])
const commit = useCallback( const commit = useCallback(
async (config: RepoConfigEntry[]) => { async (config: RepoConfigEntry[]) => {
@ -214,7 +217,6 @@ export default function RevengePluginsAdvancedSettingScreen() {
const removeRepo = useCallback( const removeRepo = useCallback(
async (repo: Repo) => { async (repo: Repo) => {
await commit(toConfig(userRepos.filter(r => r.url !== repo.url))) await commit(toConfig(userRepos.filter(r => r.url !== repo.url)))
// Plugins installed from the removed repository turn Sideloaded // Plugins installed from the removed repository turn Sideloaded
@ -378,11 +380,16 @@ export default function RevengePluginsAdvancedSettingScreen() {
try { try {
const restored = const restored =
await addDefaultRepoIfNeeded(true) await addDefaultRepoIfNeeded(true)
if (!restored) if (!restored) {
ToastActionCreators.open({ ToastActionCreators.open({
key: 'revenge-default-repo-nothing', key: 'revenge-default-repo-nothing',
content: 'No default repository to restore', content: 'Nothing to restore',
}) })
return
}
forceUpdate()
} catch (e) { } catch (e) {
showErrorToast(messageOf(e)) showErrorToast(messageOf(e))
} }