Skip to content

Commit 3515a10

Browse files
committed
feat: updated for scopes/collections support
1 parent f8e579c commit 3515a10

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+2309
-336
lines changed
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 DatabaseScopeCollectionActionForm from '@/components/DatabaseScopeCollectionActionForm';
9+
import create from '@/service/collection/create';
10+
11+
export default function CollectionCreateScreen() {
12+
const { databases } = useContext(DatabaseContext)!;
13+
const [databaseName, setDatabaseName] = useState<string>('');
14+
const [scopeName, setScopeName] = useState<string>('');
15+
const [collectionName, setCollectionName] = useState<string>('');
16+
const [resultMessage, setResultsMessage] = useState<string[]>([]);
17+
const navigation = useNavigation();
18+
const styles = useStyleScheme();
19+
useNavigationBarTitleResetOption('Create Collection', navigation, reset);
20+
21+
function reset() {
22+
setDatabaseName('');
23+
setScopeName('');
24+
setCollectionName('');
25+
setResultsMessage([]);
26+
}
27+
28+
const update = async () => {
29+
if (databaseName === '') {
30+
setResultsMessage((prev) => [
31+
...prev,
32+
'Error: Database name is required',
33+
]);
34+
} else {
35+
try {
36+
const collection = await create(
37+
databases,
38+
databaseName,
39+
scopeName,
40+
collectionName
41+
);
42+
setResultsMessage((prev) => [
43+
...prev,
44+
`Created collection: <${collection.scope.name}.${collection.name}> in database: <${databaseName}>`,
45+
]);
46+
} catch (error) {
47+
// @ts-ignore
48+
setResultsMessage((prev) => [...prev, error.message]);
49+
}
50+
}
51+
};
52+
53+
return (
54+
<View style={styles.container}>
55+
<DatabaseScopeCollectionActionForm
56+
databaseName={databaseName}
57+
setDatabaseName={setDatabaseName}
58+
scopeName={scopeName}
59+
setScopeName={setScopeName}
60+
collectionName={collectionName}
61+
setCollectionName={setCollectionName}
62+
handleUpdatePressed={update}
63+
/>
64+
<ResultListView messages={resultMessage} />
65+
</View>
66+
);
67+
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
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 DatabaseNameActionForm from '@/components/DatabaseNameActionForm';
9+
import defaultCollection from '@/service/collection/default';
10+
11+
export default function CollectionGetDefaultScreen() {
12+
const { databases } = useContext(DatabaseContext)!;
13+
const [databaseName, setDatabaseName] = useState<string>('');
14+
const [resultMessage, setResultsMessage] = useState<string[]>([]);
15+
const navigation = useNavigation();
16+
const styles = useStyleScheme();
17+
useNavigationBarTitleResetOption('Get Default Collection', navigation, reset);
18+
19+
function reset() {
20+
setDatabaseName('');
21+
setResultsMessage([]);
22+
}
23+
24+
const update = async () => {
25+
if (databaseName === '') {
26+
setResultsMessage((prev) => [
27+
...prev,
28+
'Error: Database name is required',
29+
]);
30+
} else {
31+
try {
32+
const collection = await defaultCollection(databases, databaseName);
33+
setResultsMessage((prev) => [
34+
...prev,
35+
`Found Collection: <${collection.fullName()}> in Database: <${databaseName}>`,
36+
]);
37+
} catch (error) {
38+
// @ts-ignore
39+
setResultsMessage((prev) => [...prev, error.message]);
40+
}
41+
}
42+
};
43+
44+
return (
45+
<View style={styles.container}>
46+
<DatabaseNameActionForm
47+
setDatabaseName={setDatabaseName}
48+
databaseName={databaseName}
49+
handleUpdatePressed={update}
50+
/>
51+
<ResultListView messages={resultMessage} />
52+
</View>
53+
);
54+
}

expo-example/app/collection/delete.tsx

Whitespace-only changes.
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 DatabaseScopeCollectionActionForm from '@/components/DatabaseScopeCollectionActionForm';
9+
import deleteCollection from '@/service/collection/delete';
10+
11+
export default function CollectionDeleteScreen() {
12+
const { databases } = useContext(DatabaseContext)!;
13+
const [databaseName, setDatabaseName] = useState<string>('');
14+
const [scopeName, setScopeName] = useState<string>('');
15+
const [collectionName, setCollectionName] = useState<string>('');
16+
const [resultMessage, setResultsMessage] = useState<string[]>([]);
17+
const navigation = useNavigation();
18+
const styles = useStyleScheme();
19+
useNavigationBarTitleResetOption('Delete Collection', navigation, reset);
20+
21+
function reset() {
22+
setDatabaseName('');
23+
setScopeName('');
24+
setCollectionName('');
25+
setResultsMessage([]);
26+
}
27+
28+
const update = async () => {
29+
if (databaseName === '') {
30+
setResultsMessage((prev) => [
31+
...prev,
32+
'Error: Database name is required',
33+
]);
34+
} else {
35+
try {
36+
await deleteCollection(
37+
databases,
38+
databaseName,
39+
scopeName,
40+
collectionName
41+
);
42+
setResultsMessage((prev) => [
43+
...prev,
44+
`Deleted Collection: <${scopeName}.${collectionName}> in Database: <${databaseName}>`,
45+
]);
46+
} catch (error) {
47+
// @ts-ignore
48+
setResultsMessage((prev) => [...prev, error.message]);
49+
}
50+
}
51+
};
52+
53+
return (
54+
<View style={styles.container}>
55+
<DatabaseScopeCollectionActionForm
56+
databaseName={databaseName}
57+
setDatabaseName={setDatabaseName}
58+
scopeName={scopeName}
59+
setScopeName={setScopeName}
60+
collectionName={collectionName}
61+
setCollectionName={setCollectionName}
62+
handleUpdatePressed={update}
63+
/>
64+
<ResultListView messages={resultMessage} />
65+
</View>
66+
);
67+
}
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 DatabaseScopeCollectionActionForm from '@/components/DatabaseScopeCollectionActionForm';
9+
import get from '@/service/collection/get';
10+
11+
export default function CollectionGetScreen() {
12+
const { databases } = useContext(DatabaseContext)!;
13+
const [databaseName, setDatabaseName] = useState<string>('');
14+
const [scopeName, setScopeName] = useState<string>('');
15+
const [collectionName, setCollectionName] = useState<string>('');
16+
const [resultMessage, setResultsMessage] = useState<string[]>([]);
17+
const navigation = useNavigation();
18+
const styles = useStyleScheme();
19+
useNavigationBarTitleResetOption('Get Collection', navigation, reset);
20+
21+
function reset() {
22+
setDatabaseName('');
23+
setScopeName('');
24+
setCollectionName('');
25+
setResultsMessage([]);
26+
}
27+
28+
const update = async () => {
29+
if (databaseName === '') {
30+
setResultsMessage((prev) => [
31+
...prev,
32+
'Error: Database name is required',
33+
]);
34+
} else {
35+
try {
36+
const collection = await get(
37+
databases,
38+
databaseName,
39+
scopeName,
40+
collectionName
41+
);
42+
setResultsMessage((prev) => [
43+
...prev,
44+
`Found Collection: <${collection.fullName()}> in Datbase <${databaseName}>`,
45+
]);
46+
} catch (error) {
47+
// @ts-ignore
48+
setResultsMessage((prev) => [...prev, error.message]);
49+
}
50+
}
51+
};
52+
53+
return (
54+
<View style={styles.container}>
55+
<DatabaseScopeCollectionActionForm
56+
databaseName={databaseName}
57+
setDatabaseName={setDatabaseName}
58+
scopeName={scopeName}
59+
setScopeName={setScopeName}
60+
collectionName={collectionName}
61+
setCollectionName={setCollectionName}
62+
handleUpdatePressed={update}
63+
/>
64+
<ResultListView messages={resultMessage} />
65+
</View>
66+
);
67+
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
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 DatabaseNameActionForm from '@/components/DatabaseNameActionForm';
6+
import ResultListView from '@/components/ResultsListView';
7+
import DatabaseContext from '@/providers/DatabaseContext';
8+
import useNavigationBarTitleResetOption from '@/hooks/useNavigationBarTitleResetOption';
9+
import defaultScope from '@/service/scope/default';
10+
11+
export default function ScopeDefaultScreen() {
12+
const { databases } = useContext(DatabaseContext)!;
13+
const [databaseName, setDatabaseName] = useState<string>('');
14+
const [resultMessage, setResultsMessage] = useState<string[]>([]);
15+
const navigation = useNavigation();
16+
const styles = useStyleScheme();
17+
useNavigationBarTitleResetOption('Default Scope', navigation, reset);
18+
19+
function reset() {
20+
setDatabaseName('');
21+
setResultsMessage([]);
22+
}
23+
24+
const update = async () => {
25+
if (databaseName === '') {
26+
setResultsMessage((prev) => [
27+
...prev,
28+
'Error: Database name is required',
29+
]);
30+
} else {
31+
try {
32+
const scope = await defaultScope(databases, databaseName);
33+
setResultsMessage((prev) => [
34+
...prev,
35+
`Found Default Scope: ${scope.name}`,
36+
]);
37+
} catch (error) {
38+
// @ts-ignore
39+
setResultsMessage((prev) => [...prev, error.message]);
40+
}
41+
}
42+
};
43+
44+
return (
45+
<View style={styles.container}>
46+
<DatabaseNameActionForm
47+
setDatabaseName={setDatabaseName}
48+
databaseName={databaseName}
49+
handleUpdatePressed={update}
50+
/>
51+
<ResultListView messages={resultMessage} />
52+
</View>
53+
);
54+
}
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
import React, { useContext, useState } from 'react';
2+
import { TextInput, View } from 'react-native';
3+
import { useNavigation } from '@react-navigation/native';
4+
import { useStyleScheme } from '@/components/Themed';
5+
import DatabaseNameForm from '@/components/DatabaseNameForm';
6+
import ResultListView from '@/components/ResultsListView';
7+
import DatabaseContext from '@/providers/DatabaseContext';
8+
import useNavigationBarTitleResetOption from '@/hooks/useNavigationBarTitleResetOption';
9+
import HeaderRunActionView from '@/components/HeaderRunActionView';
10+
import { StyledTextInput } from '@/components/StyledTextInput';
11+
import get from '@/service/scope/get';
12+
13+
export default function ScopeGetScreen() {
14+
const { databases } = useContext(DatabaseContext)!;
15+
const [databaseName, setDatabaseName] = useState<string>('');
16+
const [scopeName, setScopeName] = useState<string>('');
17+
const [resultMessage, setResultsMessage] = useState<string[]>([]);
18+
const navigation = useNavigation();
19+
const styles = useStyleScheme();
20+
useNavigationBarTitleResetOption('Get Scope', navigation, reset);
21+
22+
function reset() {
23+
setDatabaseName('');
24+
setScopeName('');
25+
setResultsMessage([]);
26+
}
27+
28+
const update = async () => {
29+
if (databaseName === '') {
30+
setResultsMessage((prev) => [
31+
...prev,
32+
'Error: Database name is required',
33+
]);
34+
} else {
35+
try {
36+
const scope = await get(databases, databaseName, scopeName);
37+
setResultsMessage((prev) => [...prev, `Found Scope: ${scope.name}`]);
38+
} catch (error) {
39+
// @ts-ignore
40+
setResultsMessage((prev) => [...prev, error.message]);
41+
}
42+
}
43+
};
44+
45+
return (
46+
<View style={styles.container}>
47+
<DatabaseNameForm
48+
setDatabaseName={setDatabaseName}
49+
databaseName={databaseName}
50+
/>
51+
<HeaderRunActionView
52+
name="Scope"
53+
iconName="file-cabinet"
54+
handleUpdatePressed={update}
55+
/>
56+
<StyledTextInput
57+
autoCapitalize="none"
58+
placeholder="Scope Name"
59+
onChangeText={(scopeText) => setScopeName(scopeText)}
60+
defaultValue={scopeName}
61+
/>
62+
<ResultListView messages={resultMessage} />
63+
</View>
64+
);
65+
}

expo-example/app/database/close.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ export default function DatabaseCloseScreen() {
3333
setResultsMessage((prev) => [...prev, results]);
3434
} catch (error) {
3535
// @ts-ignore
36-
setResultsMessage((prev) => [...prev, error]);
36+
setResultsMessage((prev) => [...prev, error.message]);
3737
}
3838
}
3939
};

0 commit comments

Comments
 (0)