fix: force widget refresh after subtask toggle (#32) #33

Merged
maximus merged 3 commits from fix/simpl-liste-32-widget-subtask-toggle into master 2026-04-08 16:44:47 +00:00
Showing only changes of commit 82b501e753 - Show all commits

View file

@ -1,8 +1,11 @@
import type { WidgetTaskHandlerProps } from 'react-native-android-widget';
import { requestWidgetUpdate } from 'react-native-android-widget';
import { TaskListWidget } from './TaskListWidget';
import { getWidgetState, setWidgetState, type WidgetTask } from '../services/widgetSync';
import { isValidUUID } from '../lib/validation';
const WIDGET_NAMES = ['SimplListeSmall', 'SimplListeMedium', 'SimplListeLarge'];
const EXPAND_DEBOUNCE_MS = 2000;
const lastExpandTimes = new Map<string, number>();
@ -24,6 +27,25 @@ function renderWithState(
);
}
async function forceWidgetRefresh(
tasks: WidgetTask[],
isDark: boolean,
expandedTaskIds: string[],
): Promise<void> {
for (const widgetName of WIDGET_NAMES) {
try {
await requestWidgetUpdate({
widgetName,
renderWidget: (props) =>
TaskListWidget({ ...props, widgetName, tasks, isDark, expandedTaskIds }),
widgetNotFound: () => {},
});
} catch {
// Widget not placed on home screen
}
}
}
export async function widgetTaskHandler(
props: WidgetTaskHandlerProps
): Promise<void> {
@ -51,6 +73,7 @@ export async function widgetTaskHandler(
await setWidgetState(state);
renderWithState(renderWidget, widgetInfo, state.tasks, state.isDark, state.expandedTaskIds);
await forceWidgetRefresh(state.tasks, state.isDark, state.expandedTaskIds);
try {
const { toggleComplete } = await import('../db/repository/tasks');
@ -82,6 +105,7 @@ export async function widgetTaskHandler(
await setWidgetState(state);
renderWithState(renderWidget, widgetInfo, state.tasks, state.isDark, state.expandedTaskIds);
await forceWidgetRefresh(state.tasks, state.isDark, state.expandedTaskIds);
}
if (props.clickAction === 'TOGGLE_SUBTASK') {
@ -103,6 +127,7 @@ export async function widgetTaskHandler(
await setWidgetState(state);
renderWithState(renderWidget, widgetInfo, state.tasks, state.isDark, state.expandedTaskIds);
await forceWidgetRefresh(state.tasks, state.isDark, state.expandedTaskIds);
try {
const { toggleComplete } = await import('../db/repository/tasks');