Skip to content

Commit ed49ee7

Browse files
committed
Refactor to testable structure
1 parent 440ed8b commit ed49ee7

20 files changed

+2502
-220
lines changed

Diff for: .vscode/settings.json

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
{
2+
}

Diff for: package.json

+8-6
Original file line numberDiff line numberDiff line change
@@ -12,24 +12,26 @@
1212
},
1313
"devDependencies": {
1414
"@firebase/app-types": "^0.3.9",
15-
"@firebase/firestore-types": "^1.2.0",
16-
"@firebase/auth-types": "^0.6.0",
15+
"@firebase/auth-types": "^0.6.0",
16+
"@firebase/firestore-types": "^1.2.0",
1717
"@firebase/util": "^0.2.11",
1818
"@types/firebase": "^3.2.1",
1919
"@types/node": "^10.9.4",
20-
"@types/rx": "^4.1.1",
2120
"@types/react": "^16.8.13",
21+
"@types/rx": "^4.1.1",
22+
"firebase-mock": "^2.2.10",
23+
"jest": "^24.8.0",
2224
"microbundle": "^0.11.0",
23-
"typescript": "^3.0.3",
24-
"tslint": "^5.16.0"
25+
"tslint": "^5.16.0",
26+
"typescript": "^3.0.3"
2527
},
2628
"homepage": "https://github.com/benwinding/react-admin-firebase",
2729
"email": "hello@benwinding.com",
2830
"license": "MIT",
2931
"scripts": {
3032
"build": "microbundle",
3133
"watch": "microbundle watch",
32-
"cp-dist": "watch cp -r ./dist/ ./src-demo/node_modules/react-admin-firebase/dist/",
34+
"cp-dist": "watch cp -r ./dist/ ./src-demo/node_modules/react-admin-firebase/",
3335
"start": "cd src-demo && yarn && yarn start"
3436
},
3537
"main": "dist/index.js",

Diff for: src-demo/src/App.js

+8-4
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,15 @@ import {
66
FirebaseAuthProvider
77
} from "react-admin-firebase";
88

9-
import { firebaseConfig as config } from './FIREBASE_CONFIG';
10-
config.debug = true;
9+
import { firebaseConfig } from './FIREBASE_CONFIG';
10+
firebaseConfig["debug"] = true;
11+
const options = {
12+
logging: true,
13+
rootRef: 'rootrefcollection/QQG2McwjR2Bohi9OwQzP'
14+
}
1115

12-
const authProvider = FirebaseAuthProvider(config);
13-
const dataProvider = FirebaseDataProvider(config);
16+
const authProvider = FirebaseAuthProvider(firebaseConfig);
17+
const dataProvider = FirebaseDataProvider(firebaseConfig, options);
1418

1519
class App extends React.Component {
1620
render() {

Diff for: src/index.ts

+9-7
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1-
import firebaseRealTimeSaga from "./firebaseRealtimeSaga";
2-
import firebaseDataProvider from "./firebaseDataProvider";
3-
import firebaseAuthProvider from "./firebaseAuthProvider";
1+
import { RealtimeSaga } from "./providers/RealtimeSaga";
2+
import { DataProvider } from "./providers/DataProvider";
3+
import { AuthProvider } from "./providers/AuthProvider";
4+
import { RAFirebaseOptions } from "./providers/RAFirebaseOptions";
45

56
export {
6-
firebaseRealTimeSaga as FirebaseRealTimeSaga,
7-
firebaseDataProvider as FirebaseDataProvider,
8-
firebaseAuthProvider as FirebaseAuthProvider,
9-
}
7+
RealtimeSaga as FirebaseRealTimeSaga,
8+
DataProvider as FirebaseDataProvider,
9+
AuthProvider as FirebaseAuthProvider,
10+
RAFirebaseOptions as RAFirebaseOptions
11+
};
File renamed without changes.

Diff for: src/logger.ts renamed to src/misc/logger.ts

File renamed without changes.
File renamed without changes.

Diff for: src/firebaseAuthProvider.ts renamed to src/providers/AuthProvider.ts

+3-5
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { FirebaseApp } from "@firebase/app-types";
66
import { FirebaseAuth } from "@firebase/auth-types";
77

88
import { AUTH_LOGIN, AUTH_LOGOUT, AUTH_ERROR, AUTH_CHECK } from "react-admin";
9-
import { log, EnableLogging } from "logger";
9+
import { log, EnableLogging } from "../misc/logger";
1010

1111
class AuthClient {
1212
private app: FirebaseApp;
@@ -41,7 +41,7 @@ class AuthClient {
4141
await this.auth.signOut();
4242
}
4343

44-
public async HandleAuthError(params) {}
44+
public async HandleAuthError(params) { }
4545

4646
public async HandleAuthCheck(params) {
4747
try {
@@ -76,7 +76,7 @@ class AuthClient {
7676
}
7777
}
7878

79-
function SetUpAuth(config: {}) {
79+
export function AuthProvider(config: {}) {
8080
if (!config) {
8181
throw new Error(
8282
"Please pass the Firebase config.json object to the FirebaseAuthProvider"
@@ -107,5 +107,3 @@ function SetUpAuth(config: {}) {
107107
}
108108
};
109109
}
110-
111-
export default SetUpAuth;

Diff for: src/providers/DataProvider.ts

+58
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import {
2+
CREATE,
3+
DELETE,
4+
DELETE_MANY,
5+
GET_LIST,
6+
GET_MANY,
7+
GET_MANY_REFERENCE,
8+
GET_ONE,
9+
UPDATE,
10+
UPDATE_MANY
11+
} from "react-admin";
12+
import { log, EnableLogging } from "../misc/logger";
13+
import { RAFirebaseOptions } from "./RAFirebaseOptions";
14+
import { IFirebase } from "./database/firebase/Firebase.interface";
15+
import { FirebaseFactory } from "./database/firebase/FirebaseFactory";
16+
import { FirebaseClient } from "./database/FirebaseClient";
17+
18+
export let fb: FirebaseClient;
19+
20+
export function DataProvider(config: {}, options?: RAFirebaseOptions) {
21+
if (!config) {
22+
throw new Error("Please pass the Firebase config.json object to the FirebaseDataProvider");
23+
}
24+
console.log("react-admin-firebase:: Creating FirebaseDataProvider", { config, options });
25+
const optionsSafe = options || {};
26+
if (config["debug"] || optionsSafe.logging) {
27+
EnableLogging();
28+
}
29+
const fireClient: IFirebase = FirebaseFactory.Create();
30+
fireClient.init(config);
31+
fb = new FirebaseClient(fireClient, optionsSafe);
32+
async function providerApi(type: string, resourceName: string, params: any): Promise<any> {
33+
log("FirebaseDataProvider: event", { type, resourceName, params });
34+
switch (type) {
35+
case GET_MANY:
36+
return fb.apiGetMany(resourceName, params);
37+
case GET_MANY_REFERENCE:
38+
return fb.apiGetManyReference(resourceName, params);
39+
case GET_LIST:
40+
return fb.apiGetList(resourceName, params);
41+
case GET_ONE:
42+
return fb.apiGetOne(resourceName, params);
43+
case CREATE:
44+
return fb.apiCreate(resourceName, params);
45+
case UPDATE:
46+
return fb.apiUpdate(resourceName, params);
47+
case UPDATE_MANY:
48+
return fb.apiUpdateMany(resourceName, params);
49+
case DELETE:
50+
return fb.apiDelete(resourceName, params);
51+
case DELETE_MANY:
52+
return fb.apiDeleteMany(resourceName, params);
53+
default:
54+
return {};
55+
}
56+
}
57+
return providerApi;
58+
}

Diff for: src/providers/RAFirebaseOptions.ts

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export interface RAFirebaseOptions {
2+
rootRef?: string;
3+
logging?: boolean;
4+
}

Diff for: src/firebaseRealtimeSaga.ts renamed to src/providers/RealtimeSaga.ts

+3-5
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
import realtimeSaga from "ra-realtime";
2-
import {
3-
fb
4-
} from "./firebaseDataProvider";
2+
import { fb } from "./DataProvider";
53

64
const observeRequest = (dataProvider, options) => (type, resource, params) => {
75
// If the paths are explicitly set in options
@@ -37,6 +35,6 @@ const observeRequest = (dataProvider, options) => (type, resource, params) => {
3735
};
3836
};
3937

40-
export default (dataProvider, options) => {
38+
export function RealtimeSaga(dataProvider, options) {
4139
return realtimeSaga(observeRequest(dataProvider, options));
42-
};
40+
}

0 commit comments

Comments
 (0)