Add confirm dialog to deleting all data
This commit is contained in:
parent
03db3cd843
commit
6b8780c62e
|
@ -1,36 +0,0 @@
|
||||||
import React from 'react';
|
|
||||||
import {NativeModules, Text} from 'react-native';
|
|
||||||
import {Button, Dialog, Portal} from 'react-native-paper';
|
|
||||||
|
|
||||||
export default function BatteryDialog({
|
|
||||||
show,
|
|
||||||
setShow,
|
|
||||||
}: {
|
|
||||||
show: boolean;
|
|
||||||
setShow: (show: boolean) => void;
|
|
||||||
}) {
|
|
||||||
const ok = () => {
|
|
||||||
NativeModules.AlarmModule.openBatteryOptimizations();
|
|
||||||
setShow(false);
|
|
||||||
};
|
|
||||||
|
|
||||||
return (
|
|
||||||
<Portal>
|
|
||||||
<Dialog visible={show} onDismiss={() => setShow(false)}>
|
|
||||||
<Dialog.Title>Battery optimizations</Dialog.Title>
|
|
||||||
<Dialog.Content>
|
|
||||||
<Text>
|
|
||||||
Disable battery optimizations for Massive to use rest timers.
|
|
||||||
</Text>
|
|
||||||
<Text>
|
|
||||||
Settings {'>'} Battery {'>'} Unrestricted
|
|
||||||
</Text>
|
|
||||||
</Dialog.Content>
|
|
||||||
<Dialog.Actions>
|
|
||||||
<Button onPress={ok}>Open settings</Button>
|
|
||||||
<Button onPress={() => setShow(false)}>Cancel</Button>
|
|
||||||
</Dialog.Actions>
|
|
||||||
</Dialog>
|
|
||||||
</Portal>
|
|
||||||
);
|
|
||||||
}
|
|
32
ConfirmDialog.tsx
Normal file
32
ConfirmDialog.tsx
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
import React from 'react';
|
||||||
|
import {Text} from 'react-native';
|
||||||
|
import {Button, Dialog, Portal} from 'react-native-paper';
|
||||||
|
|
||||||
|
export default function ConfirmDialog({
|
||||||
|
title,
|
||||||
|
children,
|
||||||
|
onOk,
|
||||||
|
show,
|
||||||
|
setShow,
|
||||||
|
}: {
|
||||||
|
title: string;
|
||||||
|
children: string;
|
||||||
|
onOk: () => void;
|
||||||
|
show: boolean;
|
||||||
|
setShow: (show: boolean) => void;
|
||||||
|
}) {
|
||||||
|
return (
|
||||||
|
<Portal>
|
||||||
|
<Dialog visible={show} onDismiss={() => setShow(false)}>
|
||||||
|
<Dialog.Title>{title}</Dialog.Title>
|
||||||
|
<Dialog.Content>
|
||||||
|
<Text>{children}</Text>
|
||||||
|
</Dialog.Content>
|
||||||
|
<Dialog.Actions>
|
||||||
|
<Button onPress={onOk}>OK</Button>
|
||||||
|
<Button onPress={() => setShow(false)}>Cancel</Button>
|
||||||
|
</Dialog.Actions>
|
||||||
|
</Dialog>
|
||||||
|
</Portal>
|
||||||
|
);
|
||||||
|
}
|
|
@ -6,7 +6,7 @@ import {IconButton} from 'react-native-paper';
|
||||||
import {DrawerParamList} from './App';
|
import {DrawerParamList} from './App';
|
||||||
import EditSet from './EditSet';
|
import EditSet from './EditSet';
|
||||||
import Set from './set';
|
import Set from './set';
|
||||||
import SetsPage from './SetsPage';
|
import SetList from './SetList';
|
||||||
|
|
||||||
const Stack = createStackNavigator<StackParams>();
|
const Stack = createStackNavigator<StackParams>();
|
||||||
export type StackParams = {
|
export type StackParams = {
|
||||||
|
@ -22,7 +22,7 @@ export default function HomePage() {
|
||||||
return (
|
return (
|
||||||
<Stack.Navigator
|
<Stack.Navigator
|
||||||
screenOptions={{headerShown: false, animationEnabled: false}}>
|
screenOptions={{headerShown: false, animationEnabled: false}}>
|
||||||
<Stack.Screen name="Sets" component={SetsPage} />
|
<Stack.Screen name="Sets" component={SetList} />
|
||||||
<Stack.Screen
|
<Stack.Screen
|
||||||
name="EditSet"
|
name="EditSet"
|
||||||
component={EditSet}
|
component={EditSet}
|
||||||
|
|
|
@ -14,7 +14,7 @@ import SetItem from './SetItem';
|
||||||
|
|
||||||
const limit = 15;
|
const limit = 15;
|
||||||
|
|
||||||
export default function SetsPage() {
|
export default function SetList() {
|
||||||
const [sets, setSets] = useState<Set[]>();
|
const [sets, setSets] = useState<Set[]>();
|
||||||
const [offset, setOffset] = useState(0);
|
const [offset, setOffset] = useState(0);
|
||||||
const [search, setSearch] = useState('');
|
const [search, setSearch] = useState('');
|
||||||
|
@ -33,7 +33,7 @@ export default function SetsPage() {
|
||||||
const refresh = useCallback(async () => {
|
const refresh = useCallback(async () => {
|
||||||
const [result] = await db.executeSql(selectSets, [`%${search}%`, limit, 0]);
|
const [result] = await db.executeSql(selectSets, [`%${search}%`, limit, 0]);
|
||||||
if (!result) return setSets([]);
|
if (!result) return setSets([]);
|
||||||
console.log(`${SetsPage.name}.refresh:`, {search, limit});
|
console.log(`${SetList.name}.refresh:`, {search, limit});
|
||||||
setSets(result.rows.raw());
|
setSets(result.rows.raw());
|
||||||
setOffset(0);
|
setOffset(0);
|
||||||
setEnd(false);
|
setEnd(false);
|
||||||
|
@ -66,7 +66,7 @@ export default function SetsPage() {
|
||||||
if (end) return;
|
if (end) return;
|
||||||
setRefreshing(true);
|
setRefreshing(true);
|
||||||
const newOffset = offset + limit;
|
const newOffset = offset + limit;
|
||||||
console.log(`${SetsPage.name}.next:`, {
|
console.log(`${SetList.name}.next:`, {
|
||||||
offset,
|
offset,
|
||||||
limit,
|
limit,
|
||||||
newOffset,
|
newOffset,
|
|
@ -13,6 +13,7 @@ import {DatabaseContext} from './App';
|
||||||
import BatteryDialog from './BatteryDialog';
|
import BatteryDialog from './BatteryDialog';
|
||||||
import Set from './set';
|
import Set from './set';
|
||||||
import DocumentPicker from 'react-native-document-picker';
|
import DocumentPicker from 'react-native-document-picker';
|
||||||
|
import ConfirmDialog from './ConfirmDialog';
|
||||||
|
|
||||||
const {getItem, setItem} = AsyncStorage;
|
const {getItem, setItem} = AsyncStorage;
|
||||||
|
|
||||||
|
@ -24,6 +25,7 @@ export default function SettingsPage() {
|
||||||
const [predictiveSets, setPredictiveSets] = useState<boolean>(false);
|
const [predictiveSets, setPredictiveSets] = useState<boolean>(false);
|
||||||
const [snackbar, setSnackbar] = useState('');
|
const [snackbar, setSnackbar] = useState('');
|
||||||
const [showBattery, setShowBattery] = useState(false);
|
const [showBattery, setShowBattery] = useState(false);
|
||||||
|
const [showDelete, setShowDelete] = useState(false);
|
||||||
const [ignoring, setIgnoring] = useState(false);
|
const [ignoring, setIgnoring] = useState(false);
|
||||||
const [timeoutId, setTimeoutId] = useState(0);
|
const [timeoutId, setTimeoutId] = useState(0);
|
||||||
const db = useContext(DatabaseContext);
|
const db = useContext(DatabaseContext);
|
||||||
|
@ -51,6 +53,7 @@ export default function SettingsPage() {
|
||||||
);
|
);
|
||||||
|
|
||||||
const clear = useCallback(async () => {
|
const clear = useCallback(async () => {
|
||||||
|
setShowDelete(false);
|
||||||
await db.executeSql(`DELETE FROM sets`);
|
await db.executeSql(`DELETE FROM sets`);
|
||||||
toast('All data has been deleted!');
|
toast('All data has been deleted!');
|
||||||
}, [db, toast]);
|
}, [db, toast]);
|
||||||
|
@ -165,6 +168,17 @@ export default function SettingsPage() {
|
||||||
onValueChange={changeAlarmEnabled}
|
onValueChange={changeAlarmEnabled}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
<ConfirmDialog
|
||||||
|
title="Battery optimizations"
|
||||||
|
show={showBattery}
|
||||||
|
setShow={setShowBattery}
|
||||||
|
onOk={() => {
|
||||||
|
NativeModules.AlarmModule.openBatteryOptimizations();
|
||||||
|
setShowBattery(false);
|
||||||
|
}}>
|
||||||
|
Disable battery optimizations for Massive to use rest timers.
|
||||||
|
</ConfirmDialog>
|
||||||
|
|
||||||
<Text style={styles.text}>Predictive sets</Text>
|
<Text style={styles.text}>Predictive sets</Text>
|
||||||
<Switch
|
<Switch
|
||||||
style={[styles.text, {alignSelf: 'flex-start'}]}
|
style={[styles.text, {alignSelf: 'flex-start'}]}
|
||||||
|
@ -187,13 +201,19 @@ export default function SettingsPage() {
|
||||||
</Button>
|
</Button>
|
||||||
|
|
||||||
<Button
|
<Button
|
||||||
style={{alignSelf: 'flex-start', marginTop: 'auto'}}
|
style={{alignSelf: 'flex-start'}}
|
||||||
icon="trash"
|
icon="trash"
|
||||||
onPress={clear}>
|
onPress={() => setShowDelete(true)}>
|
||||||
Delete all data
|
Delete all data
|
||||||
</Button>
|
</Button>
|
||||||
|
|
||||||
<BatteryDialog show={showBattery} setShow={setShowBattery} />
|
<ConfirmDialog
|
||||||
|
title="Delete all data"
|
||||||
|
show={showDelete}
|
||||||
|
setShow={setShowDelete}
|
||||||
|
onOk={clear}>
|
||||||
|
This irreversibly deletes all data from the app. Are you sure?
|
||||||
|
</ConfirmDialog>
|
||||||
|
|
||||||
<Snackbar
|
<Snackbar
|
||||||
visible={!!snackbar}
|
visible={!!snackbar}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user