Skip to content

Commit 761ccf7

Browse files
committed
fix: updated to fix issue with close/open database when deleting
1 parent 1352a73 commit 761ccf7

File tree

13 files changed

+154
-85
lines changed

13 files changed

+154
-85
lines changed

expo-example/android/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,4 +39,4 @@ allprojects {
3939
maven { url 'https://www.jitpack.io' }
4040
}
4141
}
42-
apply from: "../../android/build.gradle"
42+
apply from: "../../android/build.gradle"apply from: "../../android/build.gradle"

expo-example/app/database/close.tsx

Lines changed: 5 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,42 +2,26 @@ import React, { useContext, useLayoutEffect, useState } from 'react';
22
import { View } from 'react-native';
33
import { useNavigation } from '@react-navigation/native';
44
import { useStyleScheme } from '@/components/Themed';
5-
import DatabaseNameForm from '@/components/DatabaseNameForm';
6-
import MaterialCommunityIcons from '@expo/vector-icons/build/MaterialCommunityIcons';
5+
import DatabaseNameActionForm from '@/components/DatabaseNameActionForm';
76
import ResultListView from '@/components/ResultsListView';
87
import close from '@/service/database/close';
98
import DatabaseContext from '@/providers/DatabaseContext';
9+
import useNavigationBarTitleResetOption from '@/hooks/useNavigationBarTitleResetOption';
1010

1111
export default function DatabaseCloseScreen() {
1212
const { databases } = useContext(DatabaseContext)!;
1313
const [databaseName, setDatabaseName] = useState<string>('');
1414
const [resultMessage, setResultsMessage] = useState<string[]>([]);
1515
const navigation = useNavigation();
1616
const styles = useStyleScheme();
17-
useLayoutEffect(() => {
18-
navigation.setOptions({
19-
title: 'Database Open',
20-
headerBackTitle: 'Back',
21-
headerRight: () => (
22-
<MaterialCommunityIcons
23-
name="refresh"
24-
size={24}
25-
color="#428cff"
26-
onPress={reset}
27-
/>
28-
),
29-
});
30-
}, [navigation]);
17+
useNavigationBarTitleResetOption('Close Database', navigation, reset);
3118

3219
function reset() {
3320
setDatabaseName('');
3421
setResultsMessage([]);
3522
}
3623

3724
const update = async () => {
38-
// validate that the database name isn't blank
39-
// and see if the database is in context, if so throw error
40-
// otherwise get a pointer to the database, open it, and add to the context
4125
if (databaseName === '') {
4226
setResultsMessage((prev) => [
4327
...prev,
@@ -55,9 +39,10 @@ export default function DatabaseCloseScreen() {
5539

5640
return (
5741
<View style={styles.container}>
58-
<DatabaseNameForm
42+
<DatabaseNameActionForm
5943
setDatabaseName={setDatabaseName}
6044
databaseName={databaseName}
45+
handleUpdatePressed={update}
6146
/>
6247
<ResultListView messages={resultMessage} />
6348
</View>

expo-example/app/database/delete.tsx

Lines changed: 11 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,32 +2,20 @@ import React, { useContext, useLayoutEffect, useState } from 'react';
22
import { View } from 'react-native';
33
import { useNavigation } from '@react-navigation/native';
44
import { useStyleScheme } from '@/components/Themed';
5-
import DatabaseNameForm from '@/components/DatabaseNameForm';
6-
import MaterialCommunityIcons from '@expo/vector-icons/build/MaterialCommunityIcons';
5+
import DatabaseNameActionForm from '@/components/DatabaseNameActionForm';
76
import ResultListView from '@/components/ResultsListView';
87
import deleteDatabase from '@/service/database/deleteDatabase';
98
import DatabaseContext from '@/providers/DatabaseContext';
109

10+
import useNavigationBarTitleResetOption from '@/hooks/useNavigationBarTitleResetOption';
11+
1112
export default function DatabaseDeleteScreen() {
1213
const { databases, setDatabases } = useContext(DatabaseContext)!;
1314
const [databaseName, setDatabaseName] = useState<string>('');
1415
const [resultMessage, setResultsMessage] = useState<string[]>([]);
1516
const navigation = useNavigation();
1617
const styles = useStyleScheme();
17-
useLayoutEffect(() => {
18-
navigation.setOptions({
19-
title: 'Database Open',
20-
headerBackTitle: 'Back',
21-
headerRight: () => (
22-
<MaterialCommunityIcons
23-
name="refresh"
24-
size={24}
25-
color="#428cff"
26-
onPress={reset}
27-
/>
28-
),
29-
});
30-
}, [navigation]);
18+
useNavigationBarTitleResetOption('Delete Database', navigation, reset);
3119

3220
function reset() {
3321
setDatabaseName('');
@@ -45,7 +33,11 @@ export default function DatabaseDeleteScreen() {
4533
]);
4634
} else {
4735
try {
48-
const results = await deleteDatabase(databases, databaseName);
36+
const results = await deleteDatabase(
37+
databases,
38+
setDatabases,
39+
databaseName
40+
);
4941
setResultsMessage((prev) => [...prev, results]);
5042
} catch (error) {
5143
setResultsMessage((prev) => [...prev, '' + error]);
@@ -55,9 +47,10 @@ export default function DatabaseDeleteScreen() {
5547

5648
return (
5749
<View style={styles.container}>
58-
<DatabaseNameForm
50+
<DatabaseNameActionForm
5951
setDatabaseName={setDatabaseName}
6052
databaseName={databaseName}
53+
handleUpdatePressed={update}
6154
/>
6255
<ResultListView messages={resultMessage} />
6356
</View>
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import DatabaseToolbarHeaderView from '@/components/DatabaseToolbarHeaderView';
2+
import { TextInput, useColorScheme } from 'react-native';
3+
import React from 'react';
4+
import { useStyleScheme, useThemeColor } from '@/components/Themed';
5+
import { usePlaceholderTextColor } from '@/hooks/usePlaceholderTextColor';
6+
import { DatabaseNameActionFormProps } from '@/types/databaseNameActionFormProps.type';
7+
8+
export default function DatabaseNameActionForm({
9+
databaseName,
10+
setDatabaseName,
11+
handleUpdatePressed,
12+
}: DatabaseNameActionFormProps) {
13+
const scheme = useColorScheme();
14+
const styles = useStyleScheme();
15+
const textColor = useThemeColor({ light: 'black', dark: 'white' }, 'text');
16+
const placeholderTextColor = usePlaceholderTextColor(scheme);
17+
const icons = [
18+
{
19+
iconName: 'play',
20+
onPress: handleUpdatePressed,
21+
},
22+
];
23+
return (
24+
<>
25+
<DatabaseToolbarHeaderView icons={icons} />
26+
<TextInput
27+
autoCapitalize="none"
28+
style={[styles.textInput, { color: textColor }]}
29+
placeholder="Database Name"
30+
placeholderTextColor={placeholderTextColor}
31+
onChangeText={(newText) => setDatabaseName(newText)}
32+
defaultValue={databaseName}
33+
/>
34+
</>
35+
);
36+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import HeaderToolbarView from '@/components/HeaderToolbarView';
2+
import { ToolbarViewProps } from '@/types/toolbarViewProps.type';
3+
4+
export default function DatabaseHeaderView({ icons }: ToolbarViewProps) {
5+
return HeaderToolbarView({ name: 'Database', iconName: 'database', icons });
6+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
// Custom hook to set reset icon in navigation header
2+
import React from 'react';
3+
import { useLayoutEffect } from 'react';
4+
import MaterialCommunityIcons from '@expo/vector-icons/build/MaterialCommunityIcons';
5+
6+
const useNavigationBarTitleResetOption = (
7+
title: string,
8+
navigation: any,
9+
reset: () => void
10+
) => {
11+
useLayoutEffect(() => {
12+
navigation.setOptions({
13+
title: title,
14+
headerBackTitle: 'Back',
15+
headerRight: () => (
16+
<MaterialCommunityIcons
17+
name="refresh"
18+
size={24}
19+
color="#428cff"
20+
onPress={reset}
21+
/>
22+
),
23+
});
24+
}, [navigation, reset, title]);
25+
};
26+
27+
export default useNavigationBarTitleResetOption;

0 commit comments

Comments
 (0)