@ainias42/tanstack-ids 0.0.1

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.
Files changed (88) hide show
  1. package/.ctirc +112 -0
  2. package/.eslintrc.cjs +3 -0
  3. package/.prettierrc +1 -0
  4. package/bin/release.sh +3 -0
  5. package/bin/updatePackages.sh +3 -0
  6. package/dist/NotFoundError.d.ts +3 -0
  7. package/dist/NotFoundError.js +7 -0
  8. package/dist/NotFoundError.js.map +1 -0
  9. package/dist/QueryContext/QueriesContext.d.ts +1 -0
  10. package/dist/QueryContext/QueriesContext.js +3 -0
  11. package/dist/QueryContext/QueriesContext.js.map +1 -0
  12. package/dist/QueryContext/QueriesContextProvider.d.ts +6 -0
  13. package/dist/QueryContext/QueriesContextProvider.js +16 -0
  14. package/dist/QueryContext/QueriesContextProvider.js.map +1 -0
  15. package/dist/QueryContext/SubQueriesContext.d.ts +6 -0
  16. package/dist/QueryContext/SubQueriesContext.js +24 -0
  17. package/dist/QueryContext/SubQueriesContext.js.map +1 -0
  18. package/dist/QueryContext/useGenerateQueriesContextId.d.ts +1 -0
  19. package/dist/QueryContext/useGenerateQueriesContextId.js +7 -0
  20. package/dist/QueryContext/useGenerateQueriesContextId.js.map +1 -0
  21. package/dist/QueryContext/useQueriesError.d.ts +1 -0
  22. package/dist/QueryContext/useQueriesError.js +8 -0
  23. package/dist/QueryContext/useQueriesError.js.map +1 -0
  24. package/dist/QueryContext/useQueriesIsFetching.d.ts +1 -0
  25. package/dist/QueryContext/useQueriesIsFetching.js +8 -0
  26. package/dist/QueryContext/useQueriesIsFetching.js.map +1 -0
  27. package/dist/QueryContext/useQueriesReload.d.ts +1 -0
  28. package/dist/QueryContext/useQueriesReload.js +13 -0
  29. package/dist/QueryContext/useQueriesReload.js.map +1 -0
  30. package/dist/QueryContext/useQueriesStore.d.ts +47 -0
  31. package/dist/QueryContext/useQueriesStore.js +117 -0
  32. package/dist/QueryContext/useQueriesStore.js.map +1 -0
  33. package/dist/QueryContext/useQuerySubscribeToReload.d.ts +1 -0
  34. package/dist/QueryContext/useQuerySubscribeToReload.js +21 -0
  35. package/dist/QueryContext/useQuerySubscribeToReload.js.map +1 -0
  36. package/dist/QueryContext/useScopedQueriesIsFetching.d.ts +4 -0
  37. package/dist/QueryContext/useScopedQueriesIsFetching.js +8 -0
  38. package/dist/QueryContext/useScopedQueriesIsFetching.js.map +1 -0
  39. package/dist/generateIdsQuery.d.ts +215 -0
  40. package/dist/generateIdsQuery.js +154 -0
  41. package/dist/generateIdsQuery.js.map +1 -0
  42. package/dist/generateNestedIdQuery.d.ts +215 -0
  43. package/dist/generateNestedIdQuery.js +25 -0
  44. package/dist/generateNestedIdQuery.js.map +1 -0
  45. package/dist/generateQuery.d.ts +16 -0
  46. package/dist/generateQuery.js +20 -0
  47. package/dist/generateQuery.js.map +1 -0
  48. package/dist/hoistReactQueryKitAttributes.d.ts +2 -0
  49. package/dist/hoistReactQueryKitAttributes.js +9 -0
  50. package/dist/hoistReactQueryKitAttributes.js.map +1 -0
  51. package/dist/hooks/useArrayData.d.ts +6 -0
  52. package/dist/hooks/useArrayData.js +6 -0
  53. package/dist/hooks/useArrayData.js.map +1 -0
  54. package/dist/hooks/useIndexedData.d.ts +4 -0
  55. package/dist/hooks/useIndexedData.js +9 -0
  56. package/dist/hooks/useIndexedData.js.map +1 -0
  57. package/dist/index.d.ts +19 -0
  58. package/dist/index.js +20 -0
  59. package/dist/index.js.map +1 -0
  60. package/dist/noop.d.ts +1 -0
  61. package/dist/noop.js +3 -0
  62. package/dist/noop.js.map +1 -0
  63. package/dist/tsconfig.tsbuildinfo +1 -0
  64. package/dist/types/DeepPartial.d.ts +3 -0
  65. package/dist/types/DeepPartial.js +2 -0
  66. package/dist/types/DeepPartial.js.map +1 -0
  67. package/package.json +36 -0
  68. package/src/NotFoundError.ts +6 -0
  69. package/src/QueryContext/QueriesContext.ts +3 -0
  70. package/src/QueryContext/QueriesContextProvider.tsx +28 -0
  71. package/src/QueryContext/SubQueriesContext.tsx +38 -0
  72. package/src/QueryContext/useGenerateQueriesContextId.ts +7 -0
  73. package/src/QueryContext/useQueriesError.ts +8 -0
  74. package/src/QueryContext/useQueriesIsFetching.ts +8 -0
  75. package/src/QueryContext/useQueriesReload.ts +14 -0
  76. package/src/QueryContext/useQueriesStore.ts +150 -0
  77. package/src/QueryContext/useQuerySubscribeToReload.ts +23 -0
  78. package/src/QueryContext/useScopedQueriesIsFetching.ts +9 -0
  79. package/src/generateIdsQuery.ts +286 -0
  80. package/src/generateNestedIdQuery.ts +38 -0
  81. package/src/generateQuery.ts +59 -0
  82. package/src/hoistReactQueryKitAttributes.ts +14 -0
  83. package/src/hooks/useArrayData.ts +19 -0
  84. package/src/hooks/useIndexedData.ts +24 -0
  85. package/src/index.ts +19 -0
  86. package/src/noop.ts +2 -0
  87. package/src/types/DeepPartial.ts +5 -0
  88. package/tsconfig.json +35 -0
package/.ctirc ADDED
@@ -0,0 +1,112 @@
1
+ {
2
+ // Stream of cli spinner, you can pass stdout or stderr
3
+ //
4
+ // @mode all
5
+ // @default stdout
6
+ "spinnerStream": "stdout",
7
+ // Stream of cli progress, you can pass stdout or stderr
8
+ //
9
+ // @mode all
10
+ // @default stdout
11
+ "progressStream": "stdout",
12
+ // Stream of cli reasoner. Reasoner show name conflict error and already exist index.ts file error.
13
+ // You can pass stdout or stderr
14
+ //
15
+ // @mode all
16
+ // @default stderr
17
+ "reasonerStream": "stderr",
18
+ "options": [
19
+ {
20
+ // build mode
21
+ // - create: create an `index.ts` file in each directory
22
+ // - bundle: bundle all export information in one `index.ts` file
23
+ "mode": "bundle",
24
+ // tsconfig.json path: you must pass path with filename, like this "./tsconfig.json"
25
+ // only work root directory or cli parameter
26
+ //
27
+ // @mode all
28
+ "project": "tsconfig.json",
29
+ // Export filename, if you not pass this field that use "index.ts" or "index.d.ts"
30
+ //
31
+ // @mode create, bundle, remove
32
+ // @default index.ts
33
+ "exportFilename": "index.ts",
34
+ // add ctix comment at first line of creted index.ts file, that remark created from ctix
35
+ //
36
+ // @mode create, bundle
37
+ // @default false
38
+ "useSemicolon": true,
39
+ // add ctix comment at first line of creted index.ts file, that remark created from ctix
40
+ //
41
+ // @mode create, bundle
42
+ // @default false
43
+ "useBanner": false,
44
+ // If specified as true, adds the created date to the top of the `index.ts` file,
45
+ // this option only works if the `useBanner` option is enabled
46
+ //
47
+ // @mode create, bundle
48
+ // @default false
49
+ "useTimestamp": false,
50
+ // quote mark " or '
51
+ // @mode create, bundle
52
+ //
53
+ // @default '
54
+ "quote": "'",
55
+ // Use to add a literal like `"use strict"` to the top. It will be added before the banner.
56
+ //
57
+ // @mode create, bundle
58
+ "directive": "",
59
+ // keep file extension in export statement path
60
+ //
61
+ // if this option set true that see below
62
+ // export * from './test.ts'
63
+ //
64
+ // @mode create, bundle
65
+ // @default none
66
+ "fileExt": "none",
67
+ // overwrite each index.ts file
68
+ // @mode create, bundle
69
+ // @default false
70
+ "overwrite": true,
71
+ // Create a backup file if the `index.ts` file already exists.
72
+ // This option only works if the `overwrite` option is enabled.
73
+ //
74
+ // @mode create, bundle
75
+ // @default true
76
+ "backup": false,
77
+ // When generating the `index.ts` file, decide how you want to generate it
78
+ //
79
+ // @mode create, bundle
80
+ // @default auto
81
+ "generationStyle": "auto",
82
+ // A list of files to use when generating the index.ts file. If no value is set,
83
+ // the value of the include setting set in the tsconfig.json file will be used
84
+ //
85
+ // @mode create, bundle
86
+ "include": [
87
+ "src/**/*.tsx",
88
+ "src/**/*.ts"
89
+ ],
90
+ // A list of files to exclude when generating the index.ts file. If no value is set,
91
+ // the value of the exclude setting set in the tsconfig.json file is used
92
+ //
93
+ // @mode create, bundle
94
+ "exclude": [
95
+ "../../node_modules",
96
+ "dist/**/*",
97
+ "dist/src/**/*"
98
+ ],
99
+ // Output directory. Default value is same project directory
100
+ // @mode bundle
101
+ "output": "./src",
102
+ // remove with backup file
103
+ // @mode remove
104
+ // @default false
105
+ "removeBackup": false,
106
+ // answer `yes` to all questions
107
+ // @mode remove
108
+ // @default false
109
+ "forceYes": false
110
+ }
111
+ ]
112
+ }
package/.eslintrc.cjs ADDED
@@ -0,0 +1,3 @@
1
+ module.exports = {
2
+ extends: ['@ainias42/eslint-config'].map(require.resolve),
3
+ };
package/.prettierrc ADDED
@@ -0,0 +1 @@
1
+ "@ainia42/prettier-config"
package/bin/release.sh ADDED
@@ -0,0 +1,3 @@
1
+ #! /bin/bash
2
+
3
+ ../../bin/release.sh $1 tanstack-ids
@@ -0,0 +1,3 @@
1
+ #! /bin/bash
2
+
3
+ ../../bin/updatePackages.sh tanstack-ids
@@ -0,0 +1,3 @@
1
+ export declare class NotFoundError extends Error {
2
+ constructor(id: number | string | symbol);
3
+ }
@@ -0,0 +1,7 @@
1
+ export class NotFoundError extends Error {
2
+ constructor(id) {
3
+ super(`Item with id ${String(id)} not found`);
4
+ this.name = 'NotFoundError';
5
+ }
6
+ }
7
+ //# sourceMappingURL=NotFoundError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NotFoundError.js","sourceRoot":"","sources":["../src/NotFoundError.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,aAAc,SAAQ,KAAK;IACpC,YAAY,EAA4B;QACpC,KAAK,CAAC,gBAAgB,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC;QAC9C,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAChC,CAAC;CACJ"}
@@ -0,0 +1 @@
1
+ export declare const QueriesContext: import("react").Context<number>;
@@ -0,0 +1,3 @@
1
+ import { createContext } from 'react';
2
+ export const QueriesContext = createContext(0);
3
+ //# sourceMappingURL=QueriesContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueriesContext.js","sourceRoot":"","sources":["../../src/QueryContext/QueriesContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAEtC,MAAM,CAAC,MAAM,cAAc,GAAG,aAAa,CAAS,CAAC,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ import type { ReactNode } from 'react';
3
+ export type QueriesContextProviderProps = {
4
+ children: ReactNode;
5
+ };
6
+ export declare const QueriesContextProvider: ({ children }: QueriesContextProviderProps) => React.JSX.Element;
@@ -0,0 +1,16 @@
1
+ import { QueriesContext } from '../QueryContext/QueriesContext.js';
2
+ import { useGenerateQueriesContextId } from '../QueryContext/useGenerateQueriesContextId.js';
3
+ import { withMemo } from '@ainias42/react-bootstrap-mobile';
4
+ import React from 'react';
5
+ export const QueriesContextProvider = withMemo(function QueriesContextProvider({ children }) {
6
+ // Refs
7
+ // States/Variables/Selectors
8
+ const id = useGenerateQueriesContextId();
9
+ // Dispatch
10
+ // Callbacks
11
+ // Effects
12
+ // Other
13
+ // RenderFunctions
14
+ return React.createElement(QueriesContext.Provider, { value: id }, children);
15
+ });
16
+ //# sourceMappingURL=QueriesContextProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueriesContextProvider.js","sourceRoot":"","sources":["../../src/QueryContext/QueriesContextProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,2BAA2B,EAAE,MAAM,4CAA4C,CAAC;AACzF,OAAO,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAC5D,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,MAAM,CAAC,MAAM,sBAAsB,GAAG,QAAQ,CAAC,SAAS,sBAAsB,CAAC,EACI,QAAQ,EACkB;IACzG,OAAO;IAEP,6BAA6B;IAC7B,MAAM,EAAE,GAAG,2BAA2B,EAAE,CAAC;IAEzC,WAAW;IAEX,YAAY;IAEZ,UAAU;IAEV,QAAQ;IAER,kBAAkB;IAElB,OAAO,oBAAC,cAAc,CAAC,QAAQ,IAAC,KAAK,EAAE,EAAE,IAAG,QAAQ,CAA2B,CAAC;AACpF,CAAC,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ import React, { type ReactNode } from 'react';
2
+ export type SubQueriesContextProps = {
3
+ children: ReactNode;
4
+ subContextId?: number;
5
+ };
6
+ export declare const SubQueriesContext: ({ children, subContextId }: SubQueriesContextProps) => React.JSX.Element;
@@ -0,0 +1,24 @@
1
+ import { QueriesContext } from '../QueryContext/QueriesContext.js';
2
+ import { useGenerateQueriesContextId } from '../QueryContext/useGenerateQueriesContextId.js';
3
+ import { useQueriesStore } from '../QueryContext/useQueriesStore.js';
4
+ import { withMemo } from '@ainias42/react-bootstrap-mobile';
5
+ import React, { useContext, useLayoutEffect } from 'react';
6
+ export const SubQueriesContext = withMemo(function SubQueriesContext({ children, subContextId }) {
7
+ // Refs
8
+ // States/Variables/Selectors
9
+ const parentId = useContext(QueriesContext);
10
+ const [addSubContext, removeSubContext] = useQueriesStore(s => [s.addSubContext, s.removeSubContext]);
11
+ const id = useGenerateQueriesContextId();
12
+ const usedId = subContextId !== null && subContextId !== void 0 ? subContextId : id;
13
+ // Dispatch
14
+ // Callbacks
15
+ // Effects
16
+ useLayoutEffect(() => {
17
+ addSubContext(parentId, usedId);
18
+ return () => removeSubContext(parentId, usedId);
19
+ }, [addSubContext, usedId, parentId, removeSubContext]);
20
+ // Other
21
+ // RenderFunctions
22
+ return React.createElement(QueriesContext.Provider, { value: usedId }, children);
23
+ });
24
+ //# sourceMappingURL=SubQueriesContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SubQueriesContext.js","sourceRoot":"","sources":["../../src/QueryContext/SubQueriesContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,2BAA2B,EAAE,MAAM,4CAA4C,CAAC;AACzF,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAC5D,OAAO,KAAK,EAAE,EAAkB,UAAU,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC;AAI3E,MAAM,CAAC,MAAM,iBAAiB,GAAG,QAAQ,CAAC,SAAS,iBAAiB,CAAC,EACI,QAAQ,EACR,YAAY,EACS;IAC1F,OAAO;IAEP,6BAA6B;IAC7B,MAAM,QAAQ,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;IAE5C,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAEtG,MAAM,EAAE,GAAG,2BAA2B,EAAE,CAAC;IACzC,MAAM,MAAM,GAAG,YAAY,aAAZ,YAAY,cAAZ,YAAY,GAAI,EAAE,CAAC;IAElC,WAAW;IAEX,YAAY;IAEZ,UAAU;IACV,eAAe,CAAC,GAAG,EAAE;QACjB,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAChC,OAAO,GAAG,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACpD,CAAC,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAExD,QAAQ;IAER,kBAAkB;IAElB,OAAO,oBAAC,cAAc,CAAC,QAAQ,IAAC,KAAK,EAAE,MAAM,IAAG,QAAQ,CAA2B,CAAC;AACxF,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function useGenerateQueriesContextId(): number;
@@ -0,0 +1,7 @@
1
+ import { useMemo } from 'react';
2
+ import { useQueriesStore } from '../QueryContext/useQueriesStore.js';
3
+ export function useGenerateQueriesContextId() {
4
+ const generateId = useQueriesStore(s => s.generateContextId);
5
+ return useMemo(() => generateId(), [generateId]);
6
+ }
7
+ //# sourceMappingURL=useGenerateQueriesContextId.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useGenerateQueriesContextId.js","sourceRoot":"","sources":["../../src/QueryContext/useGenerateQueriesContextId.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEjE,MAAM,UAAU,2BAA2B;IACvC,MAAM,UAAU,GAAG,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC;IAC7D,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;AACrD,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function useQueriesError(contextId?: number): any;
@@ -0,0 +1,8 @@
1
+ import { QueriesContext } from '../QueryContext/QueriesContext.js';
2
+ import { useContext } from 'react';
3
+ import { useQueriesStore } from '../QueryContext/useQueriesStore.js';
4
+ export function useQueriesError(contextId) {
5
+ const context = useContext(QueriesContext);
6
+ return useQueriesStore(s => s.getError(contextId !== null && contextId !== void 0 ? contextId : context));
7
+ }
8
+ //# sourceMappingURL=useQueriesError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useQueriesError.js","sourceRoot":"","sources":["../../src/QueryContext/useQueriesError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEjE,MAAM,UAAU,eAAe,CAAC,SAAkB;IAC9C,MAAM,OAAO,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;IAC3C,OAAO,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,OAAO,CAAC,CAAC,CAAC;AAClE,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function useQueriesIsFetching(contextId?: number): boolean;
@@ -0,0 +1,8 @@
1
+ import { QueriesContext } from '../QueryContext/QueriesContext.js';
2
+ import { useContext } from 'react';
3
+ import { useQueriesStore } from '../QueryContext/useQueriesStore.js';
4
+ export function useQueriesIsFetching(contextId) {
5
+ const context = useContext(QueriesContext);
6
+ return useQueriesStore(s => s.isFetching(contextId !== null && contextId !== void 0 ? contextId : context));
7
+ }
8
+ //# sourceMappingURL=useQueriesIsFetching.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useQueriesIsFetching.js","sourceRoot":"","sources":["../../src/QueryContext/useQueriesIsFetching.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEjE,MAAM,UAAU,oBAAoB,CAAC,SAAkB;IACnD,MAAM,OAAO,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;IAC3C,OAAO,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,OAAO,CAAC,CAAC,CAAC;AACpE,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function useQueriesReload(contextId?: number): () => Promise<void>;
@@ -0,0 +1,13 @@
1
+ import { QueriesContext } from '../QueryContext/QueriesContext.js';
2
+ import { useCallback, useContext } from 'react';
3
+ import { useQueriesStore } from '../QueryContext/useQueriesStore.js';
4
+ import { useQueryClient } from '@tanstack/react-query';
5
+ export function useQueriesReload(contextId) {
6
+ const context = useContext(QueriesContext);
7
+ const reloadContext = useQueriesStore(s => s.reload);
8
+ const queryClient = useQueryClient();
9
+ return useCallback(async () => {
10
+ return reloadContext(queryClient, contextId !== null && contextId !== void 0 ? contextId : context);
11
+ }, [context, contextId, queryClient, reloadContext]);
12
+ }
13
+ //# sourceMappingURL=useQueriesReload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useQueriesReload.js","sourceRoot":"","sources":["../../src/QueryContext/useQueriesReload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,MAAM,UAAU,gBAAgB,CAAC,SAAkB;IAC/C,MAAM,OAAO,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;IAC3C,MAAM,aAAa,GAAG,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACrD,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IAErC,OAAO,WAAW,CAAC,KAAK,IAAI,EAAE;QAC1B,OAAO,aAAa,CAAC,WAAW,EAAE,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,OAAO,CAAC,CAAC;IAC5D,CAAC,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC;AACzD,CAAC"}
@@ -0,0 +1,47 @@
1
+ import type { QueryClient } from '@tanstack/react-query';
2
+ import type { URecord } from '@ainias42/js-helper';
3
+ type QueryItem = {
4
+ keys: string[];
5
+ isFetching: boolean;
6
+ error: any;
7
+ };
8
+ declare function initialState(): {
9
+ lastContextId: number;
10
+ contexts: URecord<number, {
11
+ lastId: number;
12
+ items: URecord<number, QueryItem>;
13
+ }>;
14
+ subContexts: URecord<number, number[]>;
15
+ };
16
+ export type QueriesStoreState = ReturnType<typeof actionsGenerator> & ReturnType<typeof initialState>;
17
+ type SetState = (newState: Partial<QueriesStoreState> | QueriesStoreState | ((state: QueriesStoreState) => QueriesStoreState | void), replace?: boolean) => void;
18
+ type GetState = () => Readonly<QueriesStoreState>;
19
+ declare const actionsGenerator: (set: SetState, get: GetState) => {
20
+ get: GetState;
21
+ clear(): void;
22
+ generateContextId(): number;
23
+ setItem(contextId: number, itemId: number | undefined, item: QueryItem): number | undefined;
24
+ removeItem(contextId: number, itemId: number | undefined): void;
25
+ isFetching(contextId: number): boolean;
26
+ isFetchingByScope(contextId: number, scope: {
27
+ global: boolean;
28
+ subContexts: boolean;
29
+ }): boolean;
30
+ getError(contextId: number): any;
31
+ getAllKeys(contextId: number): Set<string>;
32
+ reload(queryClient: QueryClient, contextId: number): Promise<void>;
33
+ addSubContext(parent: number, child: number): void;
34
+ removeSubContext(parent: number, child: number): void;
35
+ };
36
+ export declare const useQueriesStore: import("zustand").UseBoundStore<Omit<Omit<import("zustand").StoreApi<QueriesStoreState>, "subscribe"> & {
37
+ subscribe: {
38
+ (listener: (selectedState: QueriesStoreState, previousSelectedState: QueriesStoreState) => void): () => void;
39
+ <U>(selector: (state: QueriesStoreState) => U, listener: (selectedState: U, previousSelectedState: U) => void, options?: {
40
+ equalityFn?: ((a: U, b: U) => boolean) | undefined;
41
+ fireImmediately?: boolean;
42
+ } | undefined): () => void;
43
+ };
44
+ }, "setState"> & {
45
+ setState(nextStateOrUpdater: QueriesStoreState | Partial<QueriesStoreState> | ((state: Draft<T>) => void), shouldReplace?: boolean | undefined): void;
46
+ }>;
47
+ export {};
@@ -0,0 +1,117 @@
1
+ import { ObjectHelper } from '@ainias42/js-helper';
2
+ import { create } from 'zustand';
3
+ import { immer } from 'zustand/middleware/immer';
4
+ import { subscribeWithSelector } from 'zustand/middleware';
5
+ function initialState() {
6
+ return {
7
+ lastContextId: 0,
8
+ contexts: {},
9
+ subContexts: {}
10
+ };
11
+ }
12
+ const actionsGenerator = (set, get) => ({
13
+ get,
14
+ clear() {
15
+ set(Object.assign(Object.assign({}, initialState()), actionsGenerator(set, get)), true);
16
+ },
17
+ generateContextId() {
18
+ let id = 0;
19
+ set(state => {
20
+ state.lastContextId++;
21
+ state.contexts[state.lastContextId] = {
22
+ lastId: 0,
23
+ items: {}
24
+ };
25
+ id = state.lastContextId;
26
+ });
27
+ return id;
28
+ },
29
+ setItem(contextId, itemId, item) {
30
+ let id = itemId;
31
+ set(state => {
32
+ const contextData = state.contexts[contextId];
33
+ if (!contextData) {
34
+ return;
35
+ }
36
+ if (!id) {
37
+ contextData.lastId++;
38
+ id = contextData.lastId;
39
+ }
40
+ contextData.items[id] = item;
41
+ });
42
+ return id;
43
+ },
44
+ removeItem(contextId, itemId) {
45
+ if (!itemId) {
46
+ return;
47
+ }
48
+ set(state => {
49
+ var _a;
50
+ (_a = state.contexts[contextId]) === null || _a === void 0 ? true : delete _a.items[itemId];
51
+ });
52
+ },
53
+ isFetching(contextId) {
54
+ var _a, _b, _c, _d;
55
+ const state = get();
56
+ return (ObjectHelper.values((_b = (_a = state.contexts[contextId]) === null || _a === void 0 ? void 0 : _a.items) !== null && _b !== void 0 ? _b : {}).some(item => item.isFetching) ||
57
+ ((_d = (_c = state.subContexts[contextId]) === null || _c === void 0 ? void 0 : _c.some(id => state.isFetching(id))) !== null && _d !== void 0 ? _d : false));
58
+ },
59
+ isFetchingByScope(contextId, scope) {
60
+ var _a, _b, _c, _d;
61
+ const state = get();
62
+ return ((_d = ((scope.global &&
63
+ ObjectHelper.values((_b = (_a = state.contexts[contextId]) === null || _a === void 0 ? void 0 : _a.items) !== null && _b !== void 0 ? _b : {}).some(item => item.isFetching)) ||
64
+ (scope.subContexts && ((_c = state.subContexts[contextId]) === null || _c === void 0 ? void 0 : _c.some(id => state.isFetching(id)))))) !== null && _d !== void 0 ? _d : false);
65
+ },
66
+ getError(contextId) {
67
+ var _a, _b, _c, _d;
68
+ const state = get();
69
+ const error = (_c = ObjectHelper.values((_b = (_a = state.contexts[contextId]) === null || _a === void 0 ? void 0 : _a.items) !== null && _b !== void 0 ? _b : {}).find(item => item.error)) === null || _c === void 0 ? void 0 : _c.error;
70
+ if (error) {
71
+ return error;
72
+ }
73
+ const subContextWithError = (_d = state.subContexts[contextId]) === null || _d === void 0 ? void 0 : _d.find(childId => state.getError(childId));
74
+ if (subContextWithError) {
75
+ return state.getError(subContextWithError);
76
+ }
77
+ return undefined;
78
+ },
79
+ getAllKeys(contextId) {
80
+ var _a, _b;
81
+ const state = get();
82
+ const keys = new Set(ObjectHelper.values((_b = (_a = state.contexts[contextId]) === null || _a === void 0 ? void 0 : _a.items) !== null && _b !== void 0 ? _b : {}).flatMap(item => item.keys));
83
+ const subContext = state.subContexts[contextId];
84
+ if (subContext) {
85
+ for (const childId of subContext) {
86
+ const subKeys = state.getAllKeys(childId);
87
+ for (const key of subKeys) {
88
+ keys.add(key);
89
+ }
90
+ }
91
+ }
92
+ return keys;
93
+ },
94
+ reload(queryClient, contextId) {
95
+ const state = get();
96
+ const keys = state.getAllKeys(contextId);
97
+ return queryClient.refetchQueries({
98
+ predicate: query => keys.has(query.queryHash)
99
+ });
100
+ },
101
+ addSubContext(parent, child) {
102
+ set(state => {
103
+ var _a;
104
+ const newChildren = (_a = state.subContexts[parent]) !== null && _a !== void 0 ? _a : [];
105
+ newChildren.push(child);
106
+ state.subContexts[parent] = newChildren;
107
+ });
108
+ },
109
+ removeSubContext(parent, child) {
110
+ set(state => {
111
+ var _a;
112
+ state.subContexts[parent] = (_a = state.subContexts[parent]) === null || _a === void 0 ? void 0 : _a.filter(id => id !== child);
113
+ });
114
+ }
115
+ });
116
+ export const useQueriesStore = create()(subscribeWithSelector(immer((set, get) => (Object.assign(Object.assign({}, initialState()), actionsGenerator(set, get))))));
117
+ //# sourceMappingURL=useQueriesStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useQueriesStore.js","sourceRoot":"","sources":["../../src/QueryContext/useQueriesStore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function useQueriesSubscribeToReload(keys: string[], isFetching: boolean, error: any): void;
@@ -0,0 +1,21 @@
1
+ import { QueriesContext } from '../QueryContext/QueriesContext.js';
2
+ import { useContext, useLayoutEffect, useRef } from 'react';
3
+ import { useQueriesStore } from '../QueryContext/useQueriesStore.js';
4
+ export function useQueriesSubscribeToReload(keys, isFetching, error) {
5
+ const contextId = useContext(QueriesContext);
6
+ const setItem = useQueriesStore(s => s.setItem);
7
+ const removeItem = useQueriesStore(s => s.removeItem);
8
+ const id = useRef();
9
+ useLayoutEffect(() => {
10
+ id.current = setItem(contextId, id.current, {
11
+ keys,
12
+ error,
13
+ isFetching
14
+ });
15
+ // eslint-disable-next-line react-hooks/exhaustive-deps
16
+ }, [contextId, error, isFetching, setItem, ...keys]);
17
+ useLayoutEffect(() => {
18
+ return () => removeItem(contextId, id.current);
19
+ }, [contextId, removeItem]);
20
+ }
21
+ //# sourceMappingURL=useQuerySubscribeToReload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useQuerySubscribeToReload.js","sourceRoot":"","sources":["../../src/QueryContext/useQuerySubscribeToReload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEjE,MAAM,UAAU,2BAA2B,CAAC,IAAc,EAAE,UAAmB,EAAE,KAAU;IACvF,MAAM,SAAS,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAChD,MAAM,UAAU,GAAG,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;IACtD,MAAM,EAAE,GAAG,MAAM,EAAsB,CAAC;IAExC,eAAe,CAAC,GAAG,EAAE;QACjB,EAAE,CAAC,OAAO,GAAG,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,OAAO,EAAE;YACxC,IAAI;YACJ,KAAK;YACL,UAAU;SACb,CAAC,CAAC;QACH,uDAAuD;IAC3D,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;IAErD,eAAe,CAAC,GAAG,EAAE;QACjB,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;IACnD,CAAC,EAAE,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;AAChC,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare function useScopedQueriesIsFetching(scope: {
2
+ global: boolean;
3
+ subContexts: boolean;
4
+ }, contextId?: number): boolean;
@@ -0,0 +1,8 @@
1
+ import { QueriesContext } from '../QueryContext/QueriesContext.js';
2
+ import { useContext } from 'react';
3
+ import { useQueriesStore } from '../QueryContext/useQueriesStore.js';
4
+ export function useScopedQueriesIsFetching(scope, contextId) {
5
+ const context = useContext(QueriesContext);
6
+ return useQueriesStore(s => s.isFetchingByScope(contextId !== null && contextId !== void 0 ? contextId : context, scope));
7
+ }
8
+ //# sourceMappingURL=useScopedQueriesIsFetching.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useScopedQueriesIsFetching.js","sourceRoot":"","sources":["../../src/QueryContext/useScopedQueriesIsFetching.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEjE,MAAM,UAAU,0BAA0B,CAAC,KAAgD,EAAE,SAAkB;IAC3G,MAAM,OAAO,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;IAE3C,OAAO,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,iBAAiB,CAAC,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;AAClF,CAAC"}