@nestledjs/data-browser 0.1.7 → 0.1.9

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,64 +1,87 @@
1
- import { useQuery as g } from "@apollo/client/react";
2
- import { useMemo as o } from "react";
3
- import { useAdminDataContext as Q } from "../context/AdminDataContext.js";
4
- import { getAdminDocuments as w } from "../utils/graphql-utils.js";
5
- import { getSmartSearchFields as A } from "../utils/string-utils.js";
6
- import { useDebounce as k } from "./useDebounce.js";
7
- function v(a, y, d) {
8
- const { sdk: l, databaseModels: f } = Q(), s = k(y, 300), e = o(
9
- () => f.find((r) => r.name === a),
10
- [f, a]
11
- ), i = o(
12
- () => e ? w(l, e) : { listQuery: void 0 },
13
- [l, e]
14
- ), m = o(
15
- () => (e == null ? void 0 : e.pluralModelPropertyName) || a.charAt(0).toLowerCase() + a.slice(1) + "s",
16
- [e, a]
17
- ), p = o(() => e ? e.fields.filter((r) => {
18
- const t = r.type.toLowerCase();
19
- return !r.relationName && (t === "string" || t.includes("text") || t === "boolean");
20
- }).map((r) => r.name) : [], [e]), c = o(() => A(p), [p]), h = o(
1
+ import { useQuery } from "@apollo/client/react";
2
+ import { useMemo } from "react";
3
+ import { useAdminDataContext } from "../context/AdminDataContext.js";
4
+ import { getAdminDocuments } from "../utils/graphql-utils.js";
5
+ import { getSmartSearchFields } from "../utils/string-utils.js";
6
+ import { useDebounce } from "./useDebounce.js";
7
+ function useRelationData(relatedModelName, searchTerm, isOpen) {
8
+ const { sdk, databaseModels } = useAdminDataContext();
9
+ const debouncedSearchTerm = useDebounce(searchTerm, 300);
10
+ const relatedModel = useMemo(
11
+ () => databaseModels.find((m) => m.name === relatedModelName),
12
+ [databaseModels, relatedModelName]
13
+ );
14
+ const relatedDocuments = useMemo(
15
+ () => relatedModel ? getAdminDocuments(sdk, relatedModel) : { listQuery: void 0 },
16
+ [sdk, relatedModel]
17
+ );
18
+ const relatedDataPath = useMemo(
19
+ () => (relatedModel == null ? void 0 : relatedModel.pluralModelPropertyName) || relatedModelName.charAt(0).toLowerCase() + relatedModelName.slice(1) + "s",
20
+ [relatedModel, relatedModelName]
21
+ );
22
+ const searchableFields = useMemo(() => {
23
+ if (!relatedModel) return [];
24
+ return relatedModel.fields.filter((f) => {
25
+ const fieldType = f.type.toLowerCase();
26
+ return !f.relationName && (fieldType === "string" || fieldType.includes("text") || fieldType === "boolean");
27
+ }).map((f) => f.name);
28
+ }, [relatedModel]);
29
+ const searchFields = useMemo(() => getSmartSearchFields(searchableFields), [searchableFields]);
30
+ const queryVariables = useMemo(
21
31
  () => ({
22
32
  input: {
23
33
  take: 20,
24
- ...s.trim() ? {
25
- search: s,
26
- searchFields: c.length > 0 ? c : void 0
34
+ ...debouncedSearchTerm.trim() ? {
35
+ search: debouncedSearchTerm,
36
+ searchFields: searchFields.length > 0 ? searchFields : void 0
27
37
  } : {}
28
38
  }
29
39
  }),
30
- [s, c]
31
- ), {
32
- data: u,
33
- loading: D,
34
- error: n
35
- } = g(i.listQuery, {
36
- variables: h,
37
- skip: !i.listQuery || !d,
40
+ [debouncedSearchTerm, searchFields]
41
+ );
42
+ const {
43
+ data: relatedData,
44
+ loading,
45
+ error: relationError
46
+ } = useQuery(relatedDocuments.listQuery, {
47
+ variables: queryVariables,
48
+ skip: !relatedDocuments.listQuery || !isOpen,
38
49
  errorPolicy: "all",
39
50
  // Continue processing even if there are GraphQL errors
40
- notifyOnNetworkStatusChange: !0,
51
+ notifyOnNetworkStatusChange: true,
41
52
  fetchPolicy: "cache-first"
42
53
  // Use cache for better performance
43
- }), b = o(() => {
44
- if (n)
45
- return console.warn("[RelationData] GraphQL error:", n.message), [];
46
- if (!u) return [];
54
+ });
55
+ const relatedItems = useMemo(() => {
56
+ if (relationError) {
57
+ console.warn("[RelationData] GraphQL error:", relationError.message);
58
+ return [];
59
+ }
60
+ if (!relatedData) return [];
47
61
  try {
48
- const r = u[m] || [];
49
- return Array.isArray(r) ? r.filter((t) => !(!t || typeof t != "object" || !t.id)) : (console.warn("[RelationData] Expected array but got:", typeof r), []);
50
- } catch (r) {
51
- return console.error("[RelationData] Error processing relation data:", r), [];
62
+ const items = relatedData[relatedDataPath] || [];
63
+ if (!Array.isArray(items)) {
64
+ console.warn("[RelationData] Expected array but got:", typeof items);
65
+ return [];
66
+ }
67
+ return items.filter((item) => {
68
+ if (!item || typeof item !== "object") return false;
69
+ if (!item.id) return false;
70
+ return true;
71
+ });
72
+ } catch (error) {
73
+ console.error("[RelationData] Error processing relation data:", error);
74
+ return [];
52
75
  }
53
- }, [u, m, n]);
76
+ }, [relatedData, relatedDataPath, relationError]);
54
77
  return {
55
- relatedModel: e,
56
- relatedItems: b,
57
- loading: D,
58
- error: n,
59
- hasDocument: !!i.listQuery
78
+ relatedModel,
79
+ relatedItems,
80
+ loading,
81
+ error: relationError,
82
+ hasDocument: !!relatedDocuments.listQuery
60
83
  };
61
84
  }
62
85
  export {
63
- v as useRelationData
86
+ useRelationData
64
87
  };