react-firebase-ql 2.2.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,11 @@
1
1
  import { BaseModel, whereClause } from 'firebase-client-ql';
2
+ type UseStreamResult<T> = {
3
+ data: T[];
4
+ loading: boolean;
5
+ error: unknown;
6
+ };
2
7
  export declare const useStream: <T extends BaseModel>(param: {
3
- model: T | any;
8
+ model: any;
4
9
  where?: whereClause[];
5
10
  reference?: string;
6
11
  filter?: {
@@ -10,4 +15,5 @@ export declare const useStream: <T extends BaseModel>(param: {
10
15
  };
11
16
  offset?: string;
12
17
  };
13
- }, callback: (data: any) => void) => void;
18
+ }) => UseStreamResult<T>;
19
+ export {};
@@ -4,38 +4,48 @@ Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.useStream = void 0;
5
5
  const firebase_client_ql_1 = require("firebase-client-ql");
6
6
  const react_1 = require("react");
7
- const useStream = (param, callback) => {
7
+ const useStream = (param) => {
8
+ const [data, setData] = (0, react_1.useState)([]);
9
+ const [loading, setLoading] = (0, react_1.useState)(true);
10
+ const [error, setError] = (0, react_1.useState)(null);
8
11
  (0, react_1.useEffect)(() => {
9
12
  let unsubscribe;
13
+ setLoading(true);
10
14
  try {
11
15
  const { model, reference, where, filter } = param;
12
16
  if (reference) {
13
- unsubscribe = model.stream((data) => {
14
- if (data)
15
- callback(data);
17
+ unsubscribe = model.stream((result) => {
18
+ setData(result !== null && result !== void 0 ? result : []);
19
+ setLoading(false);
16
20
  }, reference);
17
21
  }
18
22
  else if (where) {
19
- const allInvalid = where.every((item) => item.value === undefined);
20
- if (allInvalid) {
21
- callback([]);
23
+ if (where.length > 0 && where.every(w => w.value === undefined)) {
24
+ setData([]);
25
+ setLoading(false);
22
26
  return;
23
27
  }
24
- unsubscribe = model.streamWhere(where, (data) => {
25
- if (data)
26
- callback(data);
28
+ unsubscribe = model.streamWhere(where, (result) => {
29
+ setData(result !== null && result !== void 0 ? result : []);
30
+ setLoading(false);
27
31
  }, 100, filter === null || filter === void 0 ? void 0 : filter.orderBy, filter === null || filter === void 0 ? void 0 : filter.offset);
28
32
  }
29
33
  }
30
- catch (error) {
31
- (0, firebase_client_ql_1.errorLogger)('useStream error:', error);
34
+ catch (err) {
35
+ (0, firebase_client_ql_1.errorLogger)('useStream error:', err);
36
+ setError(err);
37
+ setLoading(false);
32
38
  }
33
39
  return () => {
34
- if (typeof unsubscribe === 'function') {
40
+ if (typeof unsubscribe === 'function')
35
41
  unsubscribe();
36
- }
37
42
  };
38
- }, [JSON.stringify(param.where), JSON.stringify(param.filter), param.reference]);
43
+ }, [
44
+ JSON.stringify(param.where),
45
+ JSON.stringify(param.filter),
46
+ param.reference,
47
+ ]);
48
+ return { data, loading, error };
39
49
  };
40
50
  exports.useStream = useStream;
41
51
  //# sourceMappingURL=useStream.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useStream.js","sourceRoot":"","sources":["../../src/client/useStream.ts"],"names":[],"mappings":";AAAA,YAAY,CAAC;;;AAEb,2DAAyE;AACzE,iCAAkC;AAG3B,MAAM,SAAS,GAAG,CACvB,KAQC,EACD,QAA6B,EACvB,EAAE;IACR,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,WAAqC,CAAC;QAE1C,IAAI,CAAC;YACH,MAAM,EAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;YAEjD,IAAI,SAAS,EAAE,CAAC;gBACd,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAS,EAAE,EAAE;oBACvC,IAAI,IAAI;wBAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAC3B,CAAC,EAAE,SAAS,CAAC,CAAC;YAChB,CAAC;iBAAM,IAAI,KAAK,EAAE,CAAC;gBACjB,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;gBACnE,IAAI,UAAU,EAAE,CAAC;oBACf,QAAQ,CAAC,EAAE,CAAC,CAAC;oBACb,OAAO;gBACT,CAAC;gBAED,WAAW,GAAG,KAAK,CAAC,WAAW,CAC7B,KAAK,EACL,CAAC,IAAS,EAAE,EAAE;oBACZ,IAAI,IAAI;wBAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAC3B,CAAC,EACD,GAAG,EACH,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,OAAO,EACf,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,CACf,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAA,gCAAW,EAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;QACzC,CAAC;QAGD,OAAO,GAAG,EAAE;YACV,IAAI,OAAO,WAAW,KAAK,UAAU,EAAE,CAAC;gBACtC,WAAW,EAAE,CAAC;YAChB,CAAC;QACH,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;AACnF,CAAC,CAAC;AAlDW,QAAA,SAAS,aAkDpB"}
1
+ {"version":3,"file":"useStream.js","sourceRoot":"","sources":["../../src/client/useStream.ts"],"names":[],"mappings":";AAAA,YAAY,CAAC;;;AAEb,2DAAyE;AACzE,iCAA4C;AAQrC,MAAM,SAAS,GAAG,CACvB,KAQC,EACmB,EAAE;IACtB,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,IAAA,gBAAQ,EAAM,EAAE,CAAC,CAAC;IAC1C,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,IAAA,gBAAQ,EAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAA,gBAAQ,EAAU,IAAI,CAAC,CAAC;IAElD,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,WAAqC,CAAC;QAC1C,UAAU,CAAC,IAAI,CAAC,CAAC;QAEjB,IAAI,CAAC;YACH,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;YAElD,IAAI,SAAS,EAAE,CAAC;gBACd,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,MAAW,EAAE,EAAE;oBACzC,OAAO,CAAC,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,EAAE,CAAC,CAAC;oBACtB,UAAU,CAAC,KAAK,CAAC,CAAC;gBACpB,CAAC,EAAE,SAAS,CAAC,CAAC;YAChB,CAAC;iBACI,IAAI,KAAK,EAAE,CAAC;gBACf,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,EAAE,CAAC;oBAChE,OAAO,CAAC,EAAE,CAAC,CAAC;oBACZ,UAAU,CAAC,KAAK,CAAC,CAAC;oBAClB,OAAO;gBACT,CAAC;gBAED,WAAW,GAAG,KAAK,CAAC,WAAW,CAC7B,KAAK,EACL,CAAC,MAAW,EAAE,EAAE;oBACd,OAAO,CAAC,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,EAAE,CAAC,CAAC;oBACtB,UAAU,CAAC,KAAK,CAAC,CAAC;gBACpB,CAAC,EACD,GAAG,EACH,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,OAAO,EACf,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,CACf,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAA,gCAAW,EAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;YACrC,QAAQ,CAAC,GAAG,CAAC,CAAC;YACd,UAAU,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;QAED,OAAO,GAAG,EAAE;YACV,IAAI,OAAO,WAAW,KAAK,UAAU;gBAAE,WAAW,EAAE,CAAC;QACvD,CAAC,CAAC;IACJ,CAAC,EAAE;QACD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC;QAC5B,KAAK,CAAC,SAAS;KAChB,CAAC,CAAC;IAEH,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAClC,CAAC,CAAC;AA9DW,QAAA,SAAS,aA8DpB"}
@@ -1,37 +1,47 @@
1
1
  'use client';
2
2
  import { errorLogger } from 'firebase-client-ql';
3
- import { useEffect } from 'react';
4
- export const useStream = (param, callback) => {
3
+ import { useEffect, useState } from 'react';
4
+ export const useStream = (param) => {
5
+ const [data, setData] = useState([]);
6
+ const [loading, setLoading] = useState(true);
7
+ const [error, setError] = useState(null);
5
8
  useEffect(() => {
6
9
  let unsubscribe;
10
+ setLoading(true);
7
11
  try {
8
12
  const { model, reference, where, filter } = param;
9
13
  if (reference) {
10
- unsubscribe = model.stream((data) => {
11
- if (data)
12
- callback(data);
14
+ unsubscribe = model.stream((result) => {
15
+ setData(result !== null && result !== void 0 ? result : []);
16
+ setLoading(false);
13
17
  }, reference);
14
18
  }
15
19
  else if (where) {
16
- const allInvalid = where.every((item) => item.value === undefined);
17
- if (allInvalid) {
18
- callback([]);
20
+ if (where.length > 0 && where.every(w => w.value === undefined)) {
21
+ setData([]);
22
+ setLoading(false);
19
23
  return;
20
24
  }
21
- unsubscribe = model.streamWhere(where, (data) => {
22
- if (data)
23
- callback(data);
25
+ unsubscribe = model.streamWhere(where, (result) => {
26
+ setData(result !== null && result !== void 0 ? result : []);
27
+ setLoading(false);
24
28
  }, 100, filter === null || filter === void 0 ? void 0 : filter.orderBy, filter === null || filter === void 0 ? void 0 : filter.offset);
25
29
  }
26
30
  }
27
- catch (error) {
28
- errorLogger('useStream error:', error);
31
+ catch (err) {
32
+ errorLogger('useStream error:', err);
33
+ setError(err);
34
+ setLoading(false);
29
35
  }
30
36
  return () => {
31
- if (typeof unsubscribe === 'function') {
37
+ if (typeof unsubscribe === 'function')
32
38
  unsubscribe();
33
- }
34
39
  };
35
- }, [JSON.stringify(param.where), JSON.stringify(param.filter), param.reference]);
40
+ }, [
41
+ JSON.stringify(param.where),
42
+ JSON.stringify(param.filter),
43
+ param.reference,
44
+ ]);
45
+ return { data, loading, error };
36
46
  };
37
47
  //# sourceMappingURL=useStream.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useStream.js","sourceRoot":"","sources":["../../src/client/useStream.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAa,WAAW,EAAe,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGlC,MAAM,CAAC,MAAM,SAAS,GAAG,CACvB,KAQC,EACD,QAA6B,EACvB,EAAE;IACR,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,WAAqC,CAAC;QAE1C,IAAI,CAAC;YACH,MAAM,EAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;YAEjD,IAAI,SAAS,EAAE,CAAC;gBACd,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAS,EAAE,EAAE;oBACvC,IAAI,IAAI;wBAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAC3B,CAAC,EAAE,SAAS,CAAC,CAAC;YAChB,CAAC;iBAAM,IAAI,KAAK,EAAE,CAAC;gBACjB,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;gBACnE,IAAI,UAAU,EAAE,CAAC;oBACf,QAAQ,CAAC,EAAE,CAAC,CAAC;oBACb,OAAO;gBACT,CAAC;gBAED,WAAW,GAAG,KAAK,CAAC,WAAW,CAC7B,KAAK,EACL,CAAC,IAAS,EAAE,EAAE;oBACZ,IAAI,IAAI;wBAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAC3B,CAAC,EACD,GAAG,EACH,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,OAAO,EACf,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,CACf,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,WAAW,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;QACzC,CAAC;QAGD,OAAO,GAAG,EAAE;YACV,IAAI,OAAO,WAAW,KAAK,UAAU,EAAE,CAAC;gBACtC,WAAW,EAAE,CAAC;YAChB,CAAC;QACH,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;AACnF,CAAC,CAAC"}
1
+ {"version":3,"file":"useStream.js","sourceRoot":"","sources":["../../src/client/useStream.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAa,WAAW,EAAe,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAQ5C,MAAM,CAAC,MAAM,SAAS,GAAG,CACvB,KAQC,EACmB,EAAE;IACtB,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAM,EAAE,CAAC,CAAC;IAC1C,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAU,IAAI,CAAC,CAAC;IAElD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,WAAqC,CAAC;QAC1C,UAAU,CAAC,IAAI,CAAC,CAAC;QAEjB,IAAI,CAAC;YACH,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;YAElD,IAAI,SAAS,EAAE,CAAC;gBACd,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,MAAW,EAAE,EAAE;oBACzC,OAAO,CAAC,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,EAAE,CAAC,CAAC;oBACtB,UAAU,CAAC,KAAK,CAAC,CAAC;gBACpB,CAAC,EAAE,SAAS,CAAC,CAAC;YAChB,CAAC;iBACI,IAAI,KAAK,EAAE,CAAC;gBACf,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,EAAE,CAAC;oBAChE,OAAO,CAAC,EAAE,CAAC,CAAC;oBACZ,UAAU,CAAC,KAAK,CAAC,CAAC;oBAClB,OAAO;gBACT,CAAC;gBAED,WAAW,GAAG,KAAK,CAAC,WAAW,CAC7B,KAAK,EACL,CAAC,MAAW,EAAE,EAAE;oBACd,OAAO,CAAC,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,EAAE,CAAC,CAAC;oBACtB,UAAU,CAAC,KAAK,CAAC,CAAC;gBACpB,CAAC,EACD,GAAG,EACH,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,OAAO,EACf,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,CACf,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;YACrC,QAAQ,CAAC,GAAG,CAAC,CAAC;YACd,UAAU,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;QAED,OAAO,GAAG,EAAE;YACV,IAAI,OAAO,WAAW,KAAK,UAAU;gBAAE,WAAW,EAAE,CAAC;QACvD,CAAC,CAAC;IACJ,CAAC,EAAE;QACD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC;QAC5B,KAAK,CAAC,SAAS;KAChB,CAAC,CAAC;IAEH,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAClC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-firebase-ql",
3
- "version": "2.2.0",
3
+ "version": "3.0.0",
4
4
  "description": "A React helper library that simplifies using Firebase with side effects and live queries.",
5
5
  "main": "dist/index.js",
6
6
  "module": "esm/index.js",
@@ -1,57 +1,74 @@
1
1
  'use client';
2
2
 
3
3
  import { BaseModel, errorLogger, whereClause } from 'firebase-client-ql';
4
- import { useEffect } from 'react';
4
+ import { useEffect, useState } from 'react';
5
5
 
6
+ type UseStreamResult<T> = {
7
+ data: T[];
8
+ loading: boolean;
9
+ error: unknown;
10
+ };
6
11
 
7
12
  export const useStream = <T extends BaseModel>(
8
13
  param: {
9
- model: T | any;
14
+ model: any;
10
15
  where?: whereClause[];
11
16
  reference?: string;
12
17
  filter?: {
13
18
  orderBy?: { parameter: string; direction?: 'asc' | 'desc' };
14
19
  offset?: string;
15
20
  };
16
- },
17
- callback: (data: any) => void
18
- ): void => {
21
+ }
22
+ ): UseStreamResult<T> => {
23
+ const [data, setData] = useState<T[]>([]);
24
+ const [loading, setLoading] = useState(true);
25
+ const [error, setError] = useState<unknown>(null);
26
+
19
27
  useEffect(() => {
20
28
  let unsubscribe: (() => void) | undefined;
29
+ setLoading(true);
21
30
 
22
31
  try {
23
- const {model, reference, where, filter } = param;
32
+ const { model, reference, where, filter } = param;
24
33
 
25
34
  if (reference) {
26
- unsubscribe = model.stream((data: any) => {
27
- if (data) callback(data);
35
+ unsubscribe = model.stream((result: T[]) => {
36
+ setData(result ?? []);
37
+ setLoading(false);
28
38
  }, reference);
29
- } else if (where) {
30
- const allInvalid = where.every((item) => item.value === undefined);
31
- if (allInvalid) {
32
- callback([]);
39
+ }
40
+ else if (where) {
41
+ if (where.length > 0 && where.every(w => w.value === undefined)) {
42
+ setData([]);
43
+ setLoading(false);
33
44
  return;
34
45
  }
35
46
 
36
47
  unsubscribe = model.streamWhere(
37
48
  where,
38
- (data: any) => {
39
- if (data) callback(data);
49
+ (result: T[]) => {
50
+ setData(result ?? []);
51
+ setLoading(false);
40
52
  },
41
53
  100,
42
54
  filter?.orderBy,
43
55
  filter?.offset
44
56
  );
45
57
  }
46
- } catch (error) {
47
- errorLogger('useStream error:', error);
58
+ } catch (err) {
59
+ errorLogger('useStream error:', err);
60
+ setError(err);
61
+ setLoading(false);
48
62
  }
49
63
 
50
- // Proper cleanup
51
64
  return () => {
52
- if (typeof unsubscribe === 'function') {
53
- unsubscribe();
54
- }
65
+ if (typeof unsubscribe === 'function') unsubscribe();
55
66
  };
56
- }, [JSON.stringify(param.where), JSON.stringify(param.filter), param.reference]);
67
+ }, [
68
+ JSON.stringify(param.where),
69
+ JSON.stringify(param.filter),
70
+ param.reference,
71
+ ]);
72
+
73
+ return { data, loading, error };
57
74
  };