Skip to content

Commit aacc212

Browse files
committed
feat: updated
1 parent 1e731a9 commit aacc212

36 files changed

+3685
-237
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"apply from: "../../android/build.gradle"
42+
apply from: "../../android/build.gradle"apply from: "../../android/build.gradle"apply from: "../../android/build.gradle"

expo-example/app/_layout.tsx

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import 'expo-dev-client';
22
import FontAwesome from '@expo/vector-icons/FontAwesome';
3+
import { GluestackUIProvider } from '@gluestack-ui/themed';
4+
import { config } from '@gluestack-ui/config';
35
import {
46
DarkTheme,
57
DefaultTheme,
@@ -56,11 +58,18 @@ function RootLayoutNav() {
5658

5759
return (
5860
<DatabaseProvider>
59-
<ThemeProvider value={colorScheme === 'dark' ? DarkTheme : DefaultTheme}>
60-
<Stack>
61-
<Stack.Screen name="(tabs)" options={{ headerShown: false }} />
62-
</Stack>
63-
</ThemeProvider>
61+
<GluestackUIProvider
62+
colorMode={colorScheme === 'dark' ? 'dark' : 'light'}
63+
config={config}
64+
>
65+
<ThemeProvider
66+
value={colorScheme === 'dark' ? DarkTheme : DefaultTheme}
67+
>
68+
<Stack>
69+
<Stack.Screen name="(tabs)" options={{ headerShown: false }} />
70+
</Stack>
71+
</ThemeProvider>
72+
</GluestackUIProvider>
6473
</DatabaseProvider>
6574
);
6675
}
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
import React, { useContext, useLayoutEffect, useState } from 'react';
2+
import { TextInput, useColorScheme, View } from 'react-native';
3+
import { useNavigation } from '@react-navigation/native';
4+
import { useStyleScheme, useThemeColor } from '@/components/Themed';
5+
import DatabaseNameForm from '@/components/DatabaseNameForm';
6+
import HeaderRunActionView from '@/components/HeaderRunActionView';
7+
import ResultListView from '@/components/ResultsListView';
8+
import changeEncryptionKey from '@/service/database/changeEncryptionKey';
9+
import DatabaseContext from '@/providers/DatabaseContext';
10+
import useNavigationBarTitleResetOption from '@/hooks/useNavigationBarTitleResetOption';
11+
import { usePlaceholderTextColor } from '@/hooks/usePlaceholderTextColor';
12+
13+
export default function ChangeEncryptionScreen() {
14+
const { databases } = useContext(DatabaseContext)!;
15+
const [databaseName, setDatabaseName] = useState<string>('');
16+
const [encryptionKey, setEncryptionKey] = useState<string>('');
17+
const [resultMessage, setResultsMessage] = useState<string[]>([]);
18+
const navigation = useNavigation();
19+
const styles = useStyleScheme();
20+
const scheme = useColorScheme();
21+
const textColor = useThemeColor({ light: 'black', dark: 'white' }, 'text');
22+
const placeholderTextColor = usePlaceholderTextColor(scheme);
23+
24+
useNavigationBarTitleResetOption('Change Encryption Key', navigation, reset);
25+
26+
function reset() {
27+
setDatabaseName('');
28+
setEncryptionKey('');
29+
setResultsMessage([]);
30+
}
31+
32+
const update = async () => {
33+
if (databaseName === '') {
34+
setResultsMessage((prev) => [
35+
...prev,
36+
'Error: Database name is required',
37+
]);
38+
} else {
39+
try {
40+
const results = await changeEncryptionKey(
41+
databases,
42+
databaseName,
43+
encryptionKey
44+
);
45+
setResultsMessage((prev) => [...prev, results]);
46+
} catch (error) {
47+
setResultsMessage((prev) => [...prev, '' + error]);
48+
}
49+
}
50+
};
51+
52+
return (
53+
<View style={styles.container}>
54+
<DatabaseNameForm
55+
setDatabaseName={setDatabaseName}
56+
databaseName={databaseName}
57+
/>
58+
<HeaderRunActionView
59+
name="Encryption Key"
60+
iconName="security"
61+
handleUpdatePressed={update}
62+
/>
63+
<TextInput
64+
autoCapitalize="none"
65+
style={[styles.textInput, { color: textColor }]}
66+
placeholder="Encryption Key"
67+
placeholderTextColor={placeholderTextColor}
68+
onChangeText={(newText) => setEncryptionKey(newText)}
69+
defaultValue={encryptionKey}
70+
/>
71+
<ResultListView messages={resultMessage} />
72+
</View>
73+
);
74+
}

expo-example/app/database/close.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,8 @@ export default function DatabaseCloseScreen() {
3232
const results = await close(databases, databaseName);
3333
setResultsMessage((prev) => [...prev, results]);
3434
} catch (error) {
35-
setResultsMessage((prev) => [...prev, '' + error]);
35+
// @ts-ignore
36+
setResultsMessage((prev) => [...prev, error]);
3637
}
3738
}
3839
};

expo-example/app/database/copy.tsx

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
import React, { useContext, useLayoutEffect, useState } from 'react';
2+
import { TextInput, useColorScheme, View } from 'react-native';
3+
import { useNavigation } from '@react-navigation/native';
4+
import { useStyleScheme, useThemeColor } from '@/components/Themed';
5+
import DatabaseNameForm from '@/components/DatabaseNameForm';
6+
import MaterialCommunityIcons from '@expo/vector-icons/build/MaterialCommunityIcons';
7+
import getFileDefaultPath from '@/service/file/getFileDefaultPath';
8+
import DatabaseConfigForm from '@/components/DatabaseConfigForm';
9+
import ResultListView from '@/components/ResultsListView';
10+
import DatabaseContext from '@/providers/DatabaseContext';
11+
import useNavigationBarTitleResetOption from '@/hooks/useNavigationBarTitleResetOption';
12+
import HeaderRunActionView from '@/components/HeaderRunActionView';
13+
import { usePlaceholderTextColor } from '@/hooks/usePlaceholderTextColor';
14+
import DatabaseCopyActionForm from '@/components/DatabaseCopyActionForm';
15+
import copy from '@/service/database/copy';
16+
17+
export default function DatabaseCopyScreen() {
18+
const { databases, setDatabases } = useContext(DatabaseContext)!;
19+
const [databaseName, setDatabaseName] = useState<string>('');
20+
const [newDatabaseName, setNewDatabaseName] = useState<string>('');
21+
const [fileLocation, setFileLocation] = useState<string>('');
22+
const [encryptionKey, setEncryptionKey] = useState<string>('');
23+
const [resultMessage, setResultsMessage] = useState<string[]>([]);
24+
const navigation = useNavigation();
25+
useNavigationBarTitleResetOption('Copy Database', navigation, reset);
26+
27+
const scheme = useColorScheme();
28+
const styles = useStyleScheme();
29+
const textColor = useThemeColor({ light: 'black', dark: 'white' }, 'text');
30+
const placeholderTextColor = usePlaceholderTextColor(scheme);
31+
32+
function reset() {
33+
setDatabaseName('');
34+
setNewDatabaseName('');
35+
setFileLocation('');
36+
setEncryptionKey('');
37+
setResultsMessage([]);
38+
}
39+
40+
const update = async () => {
41+
if (databaseName === '' && newDatabaseName === '') {
42+
setResultsMessage((prev) => [
43+
...prev,
44+
'Error: Database names are required',
45+
]);
46+
} else {
47+
try {
48+
const results = await copy(
49+
databases,
50+
databaseName,
51+
newDatabaseName,
52+
fileLocation,
53+
encryptionKey
54+
);
55+
setResultsMessage((prev) => [...prev, '' + results]);
56+
} catch (error) {
57+
setResultsMessage((prev) => [...prev, '' + error]);
58+
}
59+
}
60+
};
61+
62+
const handleLocationPress = async () => {
63+
try {
64+
const path = await getFileDefaultPath();
65+
setFileLocation(path);
66+
} catch (error) {
67+
// @ts-ignore
68+
setResultsMessage((prev) => [...prev, error]);
69+
}
70+
};
71+
72+
return (
73+
<View style={styles.container}>
74+
<DatabaseNameForm
75+
setDatabaseName={setDatabaseName}
76+
databaseName={databaseName}
77+
/>
78+
<DatabaseCopyActionForm
79+
newDatabaseName={newDatabaseName}
80+
setNewDatabaseName={setNewDatabaseName}
81+
setFileLocation={setFileLocation}
82+
fileLocation={fileLocation}
83+
setEncryptionKey={setEncryptionKey}
84+
encryptionKey={encryptionKey}
85+
handleLocationPress={handleLocationPress}
86+
handleUpdatePressed={update}
87+
/>
88+
<ResultListView messages={resultMessage} />
89+
</View>
90+
);
91+
}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
import React, { useContext, useState } from 'react';
2+
import { View } from 'react-native';
3+
import { useNavigation } from '@react-navigation/native';
4+
import { useStyleScheme } from '@/components/Themed';
5+
import ResultListView from '@/components/ResultsListView';
6+
import DatabaseContext from '@/providers/DatabaseContext';
7+
import useNavigationBarTitleResetOption from '@/hooks/useNavigationBarTitleResetOption';
8+
import { useLogDomainAsValues } from '@/hooks/useLogDomain';
9+
import HeaderRunActionView from '@/components/HeaderRunActionView';
10+
import SelectKeyValue from '@/components/SelectKeyValue';
11+
import { useLogLevelAsValues } from '@/hooks/useLogLevel';
12+
import setConsoleLog from '@/service/database/setConsoleLog';
13+
14+
export default function LoggingConsoleScreen() {
15+
const { databases } = useContext(DatabaseContext)!;
16+
const [selectedLogLevel, setSelectedLogLevel] = useState<string>('');
17+
const [selectedLogDomain, setSelectedLogDomain] = useState<string>('');
18+
const [resultMessage, setResultsMessage] = useState<string[]>([]);
19+
const navigation = useNavigation();
20+
const styles = useStyleScheme();
21+
useNavigationBarTitleResetOption('Console Logging', navigation, reset);
22+
23+
const logDomains = useLogDomainAsValues();
24+
25+
const logLevels = useLogLevelAsValues();
26+
27+
function reset() {
28+
setSelectedLogLevel('');
29+
setSelectedLogDomain('');
30+
setResultsMessage([]);
31+
}
32+
33+
const update = async () => {
34+
if (selectedLogLevel && selectedLogDomain) {
35+
const result = await setConsoleLog(selectedLogLevel, selectedLogDomain);
36+
setResultsMessage((prev) => [...prev, result]);
37+
}
38+
};
39+
40+
return (
41+
<View style={styles.container}>
42+
<HeaderRunActionView
43+
name="Console Log"
44+
iconName="file-compare"
45+
handleUpdatePressed={update}
46+
/>
47+
<SelectKeyValue
48+
headerTitle="Select a Log Domain"
49+
onSelectChange={setSelectedLogDomain}
50+
placeholder="Log Domain"
51+
items={logDomains}
52+
/>
53+
54+
<SelectKeyValue
55+
headerTitle="Select a Log Level"
56+
onSelectChange={setSelectedLogLevel}
57+
placeholder="Log Level"
58+
items={logLevels}
59+
/>
60+
<ResultListView messages={resultMessage} />
61+
</View>
62+
);
63+
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
import React, { useContext, useState } from 'react';
2+
import { View } from 'react-native';
3+
import { useNavigation } from '@react-navigation/native';
4+
import { useStyleScheme } from '@/components/Themed';
5+
import ResultListView from '@/components/ResultsListView';
6+
import DatabaseContext from '@/providers/DatabaseContext';
7+
import useNavigationBarTitleResetOption from '@/hooks/useNavigationBarTitleResetOption';
8+
import HeaderRunActionView from '@/components/HeaderRunActionView';
9+
import SelectKeyValue from '@/components/SelectKeyValue';
10+
import { useLogLevelAsValues } from '@/hooks/useLogLevel';
11+
import DatabaseHeaderView from '@/components/DatabaseHeaderView';
12+
import DatabaseNameForm from '@/components/DatabaseNameForm';
13+
14+
export default function LoggingFileScreen() {
15+
const { databases } = useContext(DatabaseContext)!;
16+
const [databaseName, setDatabaseName] = useState<string>('');
17+
const [selectedLogLevel, setSelectedLogLevel] = useState<string>('');
18+
const [path, setPath] = useState<string>('');
19+
const [maxRotateCount, setMaxRotateCount] = useState<number>(0);
20+
const [maxSize, setMaxSize] = useState<number>(0);
21+
const [usePlainText, setUsePlainText] = useState<boolean>(true);
22+
const [resultMessage, setResultsMessage] = useState<string[]>([]);
23+
24+
const navigation = useNavigation();
25+
const styles = useStyleScheme();
26+
useNavigationBarTitleResetOption('File Logging', navigation, reset);
27+
28+
const logLevels = useLogLevelAsValues();
29+
30+
function reset() {
31+
setDatabaseName('');
32+
setPath('');
33+
setMaxRotateCount(0);
34+
setMaxSize(0);
35+
setUsePlainText(true);
36+
setSelectedLogLevel('');
37+
setResultsMessage([]);
38+
}
39+
40+
const update = async () => {
41+
if (selectedLogLevel) {
42+
//const result = await setConsoleLog(selectedLogLevel, selectedLogDomain);
43+
//setResultsMessage((prev) => [...prev, result]);
44+
}
45+
};
46+
47+
return (
48+
<View style={styles.container}>
49+
<DatabaseNameForm
50+
setDatabaseName={setDatabaseName}
51+
databaseName={databaseName}
52+
/>
53+
<HeaderRunActionView
54+
name="File Information"
55+
iconName="file-compare"
56+
handleUpdatePressed={update}
57+
/>
58+
<SelectKeyValue
59+
headerTitle="Select a Log Level"
60+
onSelectChange={setSelectedLogLevel}
61+
placeholder="Log Level"
62+
items={logLevels}
63+
/>
64+
<ResultListView messages={resultMessage} />
65+
</View>
66+
);
67+
}

0 commit comments

Comments
 (0)