Skip to content

Commit 766c5ce

Browse files
authored
Merge pull request #18 from Couchbase-Ecosystem/2-ios---database-api
2 ios database api
2 parents 1352a73 + 78e6945 commit 766c5ce

File tree

82 files changed

+5846
-342
lines changed

Some content is hidden

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

82 files changed

+5846
-342
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"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: 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+
}

0 commit comments

Comments
 (0)