Skip to content

Commit b16a91d

Browse files
committed
feat: added replicator config collection form
1 parent 37d42a6 commit b16a91d

File tree

3 files changed

+101
-5
lines changed

3 files changed

+101
-5
lines changed

expo-example/app/replication/config.tsx

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,16 @@ export default function ReplicationConfigCreateScreen() {
4747
setCookieName('');
4848
}
4949

50-
async function update(database: Database) {
50+
async function update(
51+
database: Database,
52+
scopeName: string,
53+
collections: string[]
54+
) {
5155
try {
52-
const collection = await defaultCollection(database);
53-
return [
54-
`Found Collection: <${collection.fullName()}> in Database: <${collection.database.getName()}>`,
55-
];
56+
//const collection = await defaultCollection(database);
57+
//return [
58+
// `Found Collection: <${collection.fullName()}> in Database: <${collection.database.getName()}>`,
59+
//];
5660
} catch (error) {
5761
// @ts-ignore
5862
return [error.message];
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
import React, { useContext, useState } from 'react';
2+
import { ReplicatorConfigCollectionFormProps } from '@/components/ReplicationConfigCollectionForm/ReplicatorConfigCollectionFormProps.type';
3+
import { Database } from '../../../lib/typescript/src';
4+
import DatabaseContext from '@/providers/DatabaseContext';
5+
import DatabaseNameActionForm from '@/components/DatabaseNameActionForm/DatabaseNameActionForm';
6+
import HeaderView from '@/components/HeaderView/HeaderView';
7+
import { View } from 'react-native';
8+
import { StyledTextInput } from '@/components/StyledTextInput/StyledTextInput';
9+
import { Divider } from '@gluestack-ui/themed';
10+
import { useStyleScheme } from '@/components/Themed/Themed';
11+
12+
export default function ReplicatorConfigCollectionForm({
13+
handleUpdatePressed,
14+
handleResetPressed,
15+
updateResultMessage,
16+
}: ReplicatorConfigCollectionFormProps) {
17+
const styles = useStyleScheme();
18+
19+
const { databases } = useContext(DatabaseContext)!;
20+
const [databaseName, setDatabaseName] = useState<string>('');
21+
const [scopeName, setScopeName] = useState<string>('');
22+
const [collections, setCollections] = useState<string>('');
23+
24+
async function update() {
25+
if (databaseName === '') {
26+
updateResultMessage(['Error: Database name is required']);
27+
} else {
28+
try {
29+
if (
30+
databaseName in databases &&
31+
databases[databaseName] instanceof Database
32+
) {
33+
const database = databases[databaseName];
34+
const collectionsList = collections.trim().split(',');
35+
await handleUpdatePressed(database, scopeName, collectionsList);
36+
} else {
37+
updateResultMessage([
38+
`Error: Database <${databaseName}> not found in context. Make sure database was opened first prior to trying to use it.`,
39+
]);
40+
}
41+
} catch (error) {
42+
// @ts-ignore
43+
updateResultMessage([error.message]);
44+
}
45+
}
46+
}
47+
48+
function reset() {
49+
setDatabaseName('');
50+
setScopeName('');
51+
setCollections('');
52+
handleResetPressed();
53+
}
54+
return (
55+
<>
56+
<DatabaseNameActionForm
57+
setDatabaseName={setDatabaseName}
58+
databaseName={databaseName}
59+
handleUpdatePressed={update}
60+
/>
61+
<HeaderView name="Collection Information" iconName="bookshelf" />
62+
<View style={styles.component}>
63+
<StyledTextInput
64+
autoCapitalize="none"
65+
placeholder="Scope Name"
66+
onChangeText={(newText) => setScopeName(newText)}
67+
defaultValue={scopeName}
68+
/>
69+
<Divider />
70+
<StyledTextInput
71+
style={styles.input}
72+
autoCapitalize="none"
73+
placeholder="Collection Names (comma separated)"
74+
onChangeText={(newText) => setCollections(newText)}
75+
defaultValue={collections}
76+
/>
77+
</View>
78+
</>
79+
);
80+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import React from 'react';
2+
import { Database } from 'cbl-reactnative';
3+
4+
export type ReplicatorConfigCollectionFormProps = {
5+
handleUpdatePressed: (
6+
database: Database,
7+
scopeName: string,
8+
collections: string[]
9+
) => Promise<void>;
10+
handleResetPressed: () => void;
11+
updateResultMessage: (message: string[]) => void;
12+
};

0 commit comments

Comments
 (0)