Skip to content

Commit bc630d5

Browse files
authored
Merge pull request #20 from Couchbase-Ecosystem/6-ios-documents-api
Add Support for Document API for iOS
2 parents f895f26 + 4fd7e77 commit bc630d5

File tree

81 files changed

+3447
-1188
lines changed

Some content is hidden

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

81 files changed

+3447
-1188
lines changed

expo-example/ReactotronConfig.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import Reactotron from 'reactotron-react-native';
2+
3+
Reactotron.configure() // controls connection & communication settings
4+
.useReactNative() // add all built-in react native plugins
5+
.connect(); // let's connect!

expo-example/android/app/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ android {
110110
shrinkResources (findProperty('android.enableShrinkResourcesInReleaseBuilds')?.toBoolean() ?: false)
111111
minifyEnabled enableProguardInReleaseBuilds
112112
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
113+
crunchPngs (findProperty('android.enablePngCrunchInReleaseBuilds')?.toBoolean() ?: true)
113114
}
114115
}
115116
packagingOptions {

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

expo-example/android/gradle.properties

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@ android.useAndroidX=true
2525
# Automatically convert third-party libraries to use AndroidX
2626
android.enableJetifier=true
2727

28+
# Enable AAPT2 PNG crunching
29+
android.enablePngCrunchInReleaseBuilds=true
30+
2831
# Use this property to specify which architecture you want to build.
2932
# You can also override it from the CLI using
3033
# ./gradlew <task> -PreactNativeArchitectures=x86_64

expo-example/app/_layout.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@ export const unstable_settings = {
2929
// Prevent the splash screen from auto-hiding before asset loading is complete.
3030
SplashScreen.preventAutoHideAsync();
3131

32+
if (__DEV__) {
33+
require('../ReactotronConfig');
34+
}
35+
3236
export default function RootLayout() {
3337
const [loaded, error] = useFonts({
3438
SpaceMono: require('../assets/fonts/SpaceMono-Regular.ttf'),
Lines changed: 37 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,67 +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 DatabaseScopeCollectionActionForm from '@/components/DatabaseScopeCollectionActionForm';
1+
import React, { useState } from 'react';
2+
import { StyledTextInput } from '@/components/StyledTextInput';
93
import create from '@/service/collection/create';
4+
import { Database } from 'cbl-reactnative';
5+
import CBLDatabaseActionContainer from '@/components/CBLDatabaseActionContainer';
6+
import { Divider } from '@gluestack-ui/themed';
7+
import HeaderView from '@/components/HeaderView';
108

119
export default function CollectionCreateScreen() {
12-
const { databases } = useContext(DatabaseContext)!;
13-
const [databaseName, setDatabaseName] = useState<string>('');
1410
const [scopeName, setScopeName] = useState<string>('');
1511
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);
2012

2113
function reset() {
22-
setDatabaseName('');
2314
setScopeName('');
2415
setCollectionName('');
25-
setResultsMessage([]);
2616
}
2717

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-
}
18+
async function update(database: Database): Promise<string[]> {
19+
try {
20+
const collection = await create(database, scopeName, collectionName);
21+
return [
22+
`Created collection: <${collection.scope.name}.${collection.name}> in database: <${database.getName()}>`,
23+
];
24+
} catch (error) {
25+
// @ts-ignore
26+
return [error.message];
5027
}
51-
};
28+
}
5229

5330
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}
31+
<CBLDatabaseActionContainer
32+
screenTitle={'Create Collection'}
33+
handleUpdatePressed={update}
34+
handleResetPressed={reset}
35+
>
36+
<HeaderView name="Collection Information" iconName="bookshelf" />
37+
<StyledTextInput
38+
style={{ marginBottom: 5 }}
39+
autoCapitalize="none"
40+
placeholder="Scope Name"
41+
onChangeText={(scopeText) => setScopeName(scopeText)}
42+
defaultValue={scopeName}
43+
/>
44+
<Divider style={{ marginTop: 2, marginBottom: 2 }} />
45+
<StyledTextInput
46+
style={{ marginBottom: 5 }}
47+
autoCapitalize="none"
48+
placeholder="Collection Name"
49+
onChangeText={(collectionText) => setCollectionName(collectionText)}
50+
defaultValue={collectionName}
6351
/>
64-
<ResultListView messages={resultMessage} />
65-
</View>
52+
</CBLDatabaseActionContainer>
6653
);
6754
}
Lines changed: 18 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,28 @@
11
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';
92
import defaultCollection from '@/service/collection/default';
3+
import { Database } from 'cbl-reactnative';
4+
import CBLDatabaseActionContainer from '@/components/CBLDatabaseActionContainer';
105

116
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);
7+
function reset() {}
188

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-
}
9+
async function update(database: Database) {
10+
try {
11+
const collection = await defaultCollection(database);
12+
return [
13+
`Found Collection: <${collection.fullName()}> in Database: <${collection.database.getName()}>`,
14+
];
15+
} catch (error) {
16+
// @ts-ignore
17+
return [error.message];
4118
}
42-
};
19+
}
4320

4421
return (
45-
<View style={styles.container}>
46-
<DatabaseNameActionForm
47-
setDatabaseName={setDatabaseName}
48-
databaseName={databaseName}
49-
handleUpdatePressed={update}
50-
/>
51-
<ResultListView messages={resultMessage} />
52-
</View>
22+
<CBLDatabaseActionContainer
23+
screenTitle={'Get Default Collection'}
24+
handleUpdatePressed={update}
25+
handleResetPressed={reset}
26+
/>
5327
);
5428
}
Lines changed: 19 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -1,67 +1,28 @@
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';
1+
import React from 'react';
2+
import { Collection } from 'cbl-reactnative';
93
import deleteCollection from '@/service/collection/delete';
4+
import CBLCollectionActionContainer from '@/components/CBLCollectionActionContainer';
105

116
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);
7+
function reset() {}
208

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-
}
9+
async function update(collection: Collection) {
10+
try {
11+
await deleteCollection(collection);
12+
return [
13+
`Deleted Collection: <${collection.fullName()} in Database: <${collection.database.getName()}>`,
14+
];
15+
} catch (error) {
16+
// @ts-ignore
17+
return [error.message];
5018
}
51-
};
19+
}
5220

5321
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>
22+
<CBLCollectionActionContainer
23+
handleUpdatePressed={update}
24+
handleResetPressed={reset}
25+
screenTitle="Delete Collection"
26+
/>
6627
);
6728
}
Lines changed: 13 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -1,67 +1,21 @@
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';
1+
import React from 'react';
2+
import { Collection } from 'cbl-reactnative';
3+
import CBLCollectionActionContainer from '@/components/CBLCollectionActionContainer';
104

115
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);
6+
function reset() {}
207

21-
function reset() {
22-
setDatabaseName('');
23-
setScopeName('');
24-
setCollectionName('');
25-
setResultsMessage([]);
8+
async function update(collection: Collection): Promise<string[]> {
9+
return [
10+
`Collection: <${collection.fullName()}> was retrieved from database <${collection.database.getName()}>`,
11+
];
2612
}
2713

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-
5314
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>
15+
<CBLCollectionActionContainer
16+
handleUpdatePressed={update}
17+
handleResetPressed={reset}
18+
screenTitle="Get Collection"
19+
/>
6620
);
6721
}

0 commit comments

Comments
 (0)