react-firebase-ql 2.3.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,40 +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
- if (where.length > 0) {
20
- const allInvalid = where.every((item) => item.value === undefined);
21
- if (allInvalid) {
22
- callback([]);
23
- return;
24
- }
23
+ if (where.length > 0 && where.every(w => w.value === undefined)) {
24
+ setData([]);
25
+ setLoading(false);
26
+ return;
25
27
  }
26
- unsubscribe = model.streamWhere(where, (data) => {
27
- if (data)
28
- callback(data);
28
+ unsubscribe = model.streamWhere(where, (result) => {
29
+ setData(result !== null && result !== void 0 ? result : []);
30
+ setLoading(false);
29
31
  }, 100, filter === null || filter === void 0 ? void 0 : filter.orderBy, filter === null || filter === void 0 ? void 0 : filter.offset);
30
32
  }
31
33
  }
32
- catch (error) {
33
- (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);
34
38
  }
35
39
  return () => {
36
- if (typeof unsubscribe === 'function') {
40
+ if (typeof unsubscribe === 'function')
37
41
  unsubscribe();
38
- }
39
42
  };
40
- }, [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 };
41
49
  };
42
50
  exports.useStream = useStream;
43
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;IAER,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,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACnB,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;oBACnE,IAAI,UAAU,EAAE,CAAC;wBACf,QAAQ,CAAC,EAAE,CAAC,CAAC;wBACb,OAAO;oBACT,CAAC;gBACL,CAAC;gBACD,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;AApDW,QAAA,SAAS,aAoDpB"}
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,39 +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
- if (where.length > 0) {
17
- const allInvalid = where.every((item) => item.value === undefined);
18
- if (allInvalid) {
19
- callback([]);
20
- return;
21
- }
20
+ if (where.length > 0 && where.every(w => w.value === undefined)) {
21
+ setData([]);
22
+ setLoading(false);
23
+ return;
22
24
  }
23
- unsubscribe = model.streamWhere(where, (data) => {
24
- if (data)
25
- callback(data);
25
+ unsubscribe = model.streamWhere(where, (result) => {
26
+ setData(result !== null && result !== void 0 ? result : []);
27
+ setLoading(false);
26
28
  }, 100, filter === null || filter === void 0 ? void 0 : filter.orderBy, filter === null || filter === void 0 ? void 0 : filter.offset);
27
29
  }
28
30
  }
29
- catch (error) {
30
- errorLogger('useStream error:', error);
31
+ catch (err) {
32
+ errorLogger('useStream error:', err);
33
+ setError(err);
34
+ setLoading(false);
31
35
  }
32
36
  return () => {
33
- if (typeof unsubscribe === 'function') {
37
+ if (typeof unsubscribe === 'function')
34
38
  unsubscribe();
35
- }
36
39
  };
37
- }, [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 };
38
46
  };
39
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;IAER,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,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACnB,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;oBACnE,IAAI,UAAU,EAAE,CAAC;wBACf,QAAQ,CAAC,EAAE,CAAC,CAAC;wBACb,OAAO;oBACT,CAAC;gBACL,CAAC;gBACD,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.3.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,59 +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);
19
26
 
20
27
  useEffect(() => {
21
28
  let unsubscribe: (() => void) | undefined;
29
+ setLoading(true);
22
30
 
23
31
  try {
24
- const {model, reference, where, filter } = param;
32
+ const { model, reference, where, filter } = param;
25
33
 
26
34
  if (reference) {
27
- unsubscribe = model.stream((data: any) => {
28
- if (data) callback(data);
35
+ unsubscribe = model.stream((result: T[]) => {
36
+ setData(result ?? []);
37
+ setLoading(false);
29
38
  }, reference);
30
- } else if (where) {
31
- if (where.length > 0) {
32
- const allInvalid = where.every((item) => item.value === undefined);
33
- if (allInvalid) {
34
- callback([]);
35
- return;
36
- }
39
+ }
40
+ else if (where) {
41
+ if (where.length > 0 && where.every(w => w.value === undefined)) {
42
+ setData([]);
43
+ setLoading(false);
44
+ return;
37
45
  }
46
+
38
47
  unsubscribe = model.streamWhere(
39
48
  where,
40
- (data: any) => {
41
- if (data) callback(data);
49
+ (result: T[]) => {
50
+ setData(result ?? []);
51
+ setLoading(false);
42
52
  },
43
53
  100,
44
54
  filter?.orderBy,
45
55
  filter?.offset
46
56
  );
47
57
  }
48
- } catch (error) {
49
- errorLogger('useStream error:', error);
58
+ } catch (err) {
59
+ errorLogger('useStream error:', err);
60
+ setError(err);
61
+ setLoading(false);
50
62
  }
51
63
 
52
- // Proper cleanup
53
64
  return () => {
54
- if (typeof unsubscribe === 'function') {
55
- unsubscribe();
56
- }
65
+ if (typeof unsubscribe === 'function') unsubscribe();
57
66
  };
58
- }, [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 };
59
74
  };