@contember/react-client 1.1.0-alpha.9 → 1.1.0-beta.2

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 (165) hide show
  1. package/dist/development/ClientError.js +3 -1
  2. package/dist/development/ClientError.js.map +1 -1
  3. package/dist/development/ContemberClient.js +49 -15
  4. package/dist/development/ContemberClient.js.map +1 -1
  5. package/dist/development/apiRequest/apiRequestReducer.js +3 -1
  6. package/dist/development/apiRequest/apiRequestReducer.js.map +1 -1
  7. package/dist/development/apiRequest/useApiRequest.js +33 -25
  8. package/dist/development/apiRequest/useApiRequest.js.map +1 -1
  9. package/dist/development/auth/SessionTokenContext.js +3 -1
  10. package/dist/development/auth/SessionTokenContext.js.map +1 -1
  11. package/dist/development/auth/SetSessionTokenContext.js +3 -1
  12. package/dist/development/auth/SetSessionTokenContext.js.map +1 -1
  13. package/dist/development/auth/useSessionToken.js +3 -1
  14. package/dist/development/auth/useSessionToken.js.map +1 -1
  15. package/dist/development/auth/useSetSessionToken.js +3 -1
  16. package/dist/development/auth/useSetSessionToken.js.map +1 -1
  17. package/dist/development/components/RichTextRenderer/ElementRenderer.js +18 -5
  18. package/dist/development/components/RichTextRenderer/ElementRenderer.js.map +1 -1
  19. package/dist/development/components/RichTextRenderer/LeafRenderer.js +11 -3
  20. package/dist/development/components/RichTextRenderer/LeafRenderer.js.map +1 -1
  21. package/dist/development/components/RichTextRenderer/RenderElementFallback.js +148 -50
  22. package/dist/development/components/RichTextRenderer/RenderElementFallback.js.map +1 -1
  23. package/dist/development/components/RichTextRenderer/RenderLeafFallback.js +65 -13
  24. package/dist/development/components/RichTextRenderer/RenderLeafFallback.js.map +1 -1
  25. package/dist/development/components/RichTextRenderer/RichTextRenderMetadataContext.js +4 -1
  26. package/dist/development/components/RichTextRenderer/RichTextRenderMetadataContext.js.map +1 -1
  27. package/dist/development/components/RichTextRenderer/RichTextRenderer.js +44 -32
  28. package/dist/development/components/RichTextRenderer/RichTextRenderer.js.map +1 -1
  29. package/dist/development/components/RichTextRenderer/RichTextRendererError.js +3 -1
  30. package/dist/development/components/RichTextRenderer/RichTextRendererError.js.map +1 -1
  31. package/dist/development/components/RichTextRenderer/defaultDeserialize.js +3 -1
  32. package/dist/development/components/RichTextRenderer/defaultDeserialize.js.map +1 -1
  33. package/dist/development/components/RichTextRenderer/renderChildren.js +31 -19
  34. package/dist/development/components/RichTextRenderer/renderChildren.js.map +1 -1
  35. package/dist/development/components/RichTextRenderer/resolveRichTextElementMetadata.js +6 -2
  36. package/dist/development/components/RichTextRenderer/resolveRichTextElementMetadata.js.map +1 -1
  37. package/dist/development/config/ApiBaseUrlContext.js +3 -1
  38. package/dist/development/config/ApiBaseUrlContext.js.map +1 -1
  39. package/dist/development/config/LoginTokenContext.js +3 -1
  40. package/dist/development/config/LoginTokenContext.js.map +1 -1
  41. package/dist/development/config/useApiBaseUrl.js +3 -1
  42. package/dist/development/config/useApiBaseUrl.js.map +1 -1
  43. package/dist/development/config/useLoginToken.js +3 -1
  44. package/dist/development/config/useLoginToken.js.map +1 -1
  45. package/dist/development/content/useContentApiRequest.js +3 -1
  46. package/dist/development/content/useContentApiRequest.js.map +1 -1
  47. package/dist/development/content/useContentGraphQlClient.js +3 -1
  48. package/dist/development/content/useContentGraphQlClient.js.map +1 -1
  49. package/dist/development/content/useCurrentContentGraphQlClient.js +3 -1
  50. package/dist/development/content/useCurrentContentGraphQlClient.js.map +1 -1
  51. package/dist/development/index.js +58 -28
  52. package/dist/development/project/ProjectSlugContext.js +3 -1
  53. package/dist/development/project/ProjectSlugContext.js.map +1 -1
  54. package/dist/development/project/StageSlugContext.js +3 -1
  55. package/dist/development/project/StageSlugContext.js.map +1 -1
  56. package/dist/development/project/useProjectSlug.js +3 -1
  57. package/dist/development/project/useProjectSlug.js.map +1 -1
  58. package/dist/development/project/useStageSlug.js +3 -1
  59. package/dist/development/project/useStageSlug.js.map +1 -1
  60. package/dist/development/system/useCurrentSystemGraphQlClient.js +3 -1
  61. package/dist/development/system/useCurrentSystemGraphQlClient.js.map +1 -1
  62. package/dist/development/system/useSystemApiRequest.js +3 -1
  63. package/dist/development/system/useSystemApiRequest.js.map +1 -1
  64. package/dist/development/system/useSystemGraphQlClient.js +3 -1
  65. package/dist/development/system/useSystemGraphQlClient.js.map +1 -1
  66. package/dist/development/tenant/useTenantApiRequest.js +3 -1
  67. package/dist/development/tenant/useTenantApiRequest.js.map +1 -1
  68. package/dist/development/tenant/useTenantGraphQlClient.js +3 -1
  69. package/dist/development/tenant/useTenantGraphQlClient.js.map +1 -1
  70. package/dist/development/upload/fileUploadReducer.js +4 -1
  71. package/dist/development/upload/fileUploadReducer.js.map +1 -1
  72. package/dist/development/upload/toFileId.js +3 -1
  73. package/dist/development/upload/toFileId.js.map +1 -1
  74. package/dist/development/upload/useFileUpload.js +131 -115
  75. package/dist/development/upload/useFileUpload.js.map +1 -1
  76. package/dist/development/useGraphQlClient.js +3 -1
  77. package/dist/development/useGraphQlClient.js.map +1 -1
  78. package/dist/development/utils/assertNever.js +3 -1
  79. package/dist/development/utils/assertNever.js.map +1 -1
  80. package/dist/production/ClientError.js +3 -1
  81. package/dist/production/ClientError.js.map +1 -1
  82. package/dist/production/ContemberClient.js +24 -15
  83. package/dist/production/ContemberClient.js.map +1 -1
  84. package/dist/production/apiRequest/apiRequestReducer.js +3 -1
  85. package/dist/production/apiRequest/apiRequestReducer.js.map +1 -1
  86. package/dist/production/apiRequest/useApiRequest.js +33 -25
  87. package/dist/production/apiRequest/useApiRequest.js.map +1 -1
  88. package/dist/production/auth/SessionTokenContext.js +3 -1
  89. package/dist/production/auth/SessionTokenContext.js.map +1 -1
  90. package/dist/production/auth/SetSessionTokenContext.js +3 -1
  91. package/dist/production/auth/SetSessionTokenContext.js.map +1 -1
  92. package/dist/production/auth/useSessionToken.js +3 -1
  93. package/dist/production/auth/useSessionToken.js.map +1 -1
  94. package/dist/production/auth/useSetSessionToken.js +3 -1
  95. package/dist/production/auth/useSetSessionToken.js.map +1 -1
  96. package/dist/production/components/RichTextRenderer/ElementRenderer.js +13 -5
  97. package/dist/production/components/RichTextRenderer/ElementRenderer.js.map +1 -1
  98. package/dist/production/components/RichTextRenderer/LeafRenderer.js +5 -2
  99. package/dist/production/components/RichTextRenderer/LeafRenderer.js.map +1 -1
  100. package/dist/production/components/RichTextRenderer/RenderElementFallback.js +81 -48
  101. package/dist/production/components/RichTextRenderer/RenderElementFallback.js.map +1 -1
  102. package/dist/production/components/RichTextRenderer/RenderLeafFallback.js +32 -13
  103. package/dist/production/components/RichTextRenderer/RenderLeafFallback.js.map +1 -1
  104. package/dist/production/components/RichTextRenderer/RichTextRenderMetadataContext.js +4 -1
  105. package/dist/production/components/RichTextRenderer/RichTextRenderMetadataContext.js.map +1 -1
  106. package/dist/production/components/RichTextRenderer/RichTextRenderer.js +39 -32
  107. package/dist/production/components/RichTextRenderer/RichTextRenderer.js.map +1 -1
  108. package/dist/production/components/RichTextRenderer/RichTextRendererError.js +3 -1
  109. package/dist/production/components/RichTextRenderer/RichTextRendererError.js.map +1 -1
  110. package/dist/production/components/RichTextRenderer/defaultDeserialize.js +3 -1
  111. package/dist/production/components/RichTextRenderer/defaultDeserialize.js.map +1 -1
  112. package/dist/production/components/RichTextRenderer/renderChildren.js +22 -19
  113. package/dist/production/components/RichTextRenderer/renderChildren.js.map +1 -1
  114. package/dist/production/components/RichTextRenderer/resolveRichTextElementMetadata.js +6 -2
  115. package/dist/production/components/RichTextRenderer/resolveRichTextElementMetadata.js.map +1 -1
  116. package/dist/production/config/ApiBaseUrlContext.js +3 -1
  117. package/dist/production/config/ApiBaseUrlContext.js.map +1 -1
  118. package/dist/production/config/LoginTokenContext.js +3 -1
  119. package/dist/production/config/LoginTokenContext.js.map +1 -1
  120. package/dist/production/config/useApiBaseUrl.js +3 -1
  121. package/dist/production/config/useApiBaseUrl.js.map +1 -1
  122. package/dist/production/config/useLoginToken.js +3 -1
  123. package/dist/production/config/useLoginToken.js.map +1 -1
  124. package/dist/production/content/useContentApiRequest.js +3 -1
  125. package/dist/production/content/useContentApiRequest.js.map +1 -1
  126. package/dist/production/content/useContentGraphQlClient.js +3 -1
  127. package/dist/production/content/useContentGraphQlClient.js.map +1 -1
  128. package/dist/production/content/useCurrentContentGraphQlClient.js +3 -1
  129. package/dist/production/content/useCurrentContentGraphQlClient.js.map +1 -1
  130. package/dist/production/index.js +58 -28
  131. package/dist/production/project/ProjectSlugContext.js +3 -1
  132. package/dist/production/project/ProjectSlugContext.js.map +1 -1
  133. package/dist/production/project/StageSlugContext.js +3 -1
  134. package/dist/production/project/StageSlugContext.js.map +1 -1
  135. package/dist/production/project/useProjectSlug.js +3 -1
  136. package/dist/production/project/useProjectSlug.js.map +1 -1
  137. package/dist/production/project/useStageSlug.js +3 -1
  138. package/dist/production/project/useStageSlug.js.map +1 -1
  139. package/dist/production/system/useCurrentSystemGraphQlClient.js +3 -1
  140. package/dist/production/system/useCurrentSystemGraphQlClient.js.map +1 -1
  141. package/dist/production/system/useSystemApiRequest.js +3 -1
  142. package/dist/production/system/useSystemApiRequest.js.map +1 -1
  143. package/dist/production/system/useSystemGraphQlClient.js +3 -1
  144. package/dist/production/system/useSystemGraphQlClient.js.map +1 -1
  145. package/dist/production/tenant/useTenantApiRequest.js +3 -1
  146. package/dist/production/tenant/useTenantApiRequest.js.map +1 -1
  147. package/dist/production/tenant/useTenantGraphQlClient.js +3 -1
  148. package/dist/production/tenant/useTenantGraphQlClient.js.map +1 -1
  149. package/dist/production/upload/fileUploadReducer.js +4 -1
  150. package/dist/production/upload/fileUploadReducer.js.map +1 -1
  151. package/dist/production/upload/toFileId.js +3 -1
  152. package/dist/production/upload/toFileId.js.map +1 -1
  153. package/dist/production/upload/useFileUpload.js +131 -115
  154. package/dist/production/upload/useFileUpload.js.map +1 -1
  155. package/dist/production/useGraphQlClient.js +3 -1
  156. package/dist/production/useGraphQlClient.js.map +1 -1
  157. package/dist/production/utils/assertNever.js +3 -1
  158. package/dist/production/utils/assertNever.js.map +1 -1
  159. package/dist/types/components/RichTextRenderer/RichTextRenderer.d.ts +2 -1
  160. package/dist/types/components/RichTextRenderer/RichTextRenderer.d.ts.map +1 -1
  161. package/dist/types/tsconfig.tsbuildinfo +1 -1
  162. package/dist/types/upload/useFileUpload.d.ts +1 -1
  163. package/dist/types/upload/useFileUpload.d.ts.map +1 -1
  164. package/package.json +3 -3
  165. package/src/components/RichTextRenderer/RichTextRenderer.tsx +1 -1
@@ -27,119 +27,130 @@ const useFileUpload = (options) => {
27
27
  error
28
28
  });
29
29
  }, []);
30
- const initializeUpload = useCallback((files) => {
31
- const newFileIds = /* @__PURE__ */ new Set();
32
- const fileWithMetadataByFileConfig = /* @__PURE__ */ new Map();
33
- for (const fileMaybeWithId of files) {
34
- const abortController = new AbortController();
35
- let fileId;
36
- let file;
37
- if (fileMaybeWithId instanceof File) {
38
- fileId = `__contember__file-${fileIdSeedRef.current++}`;
39
- file = fileMaybeWithId;
40
- } else {
41
- fileId = fileMaybeWithId[0];
42
- file = fileMaybeWithId[1];
43
- }
44
- abortController.signal.addEventListener("abort", () => {
45
- purgeUpload([fileId]);
46
- });
47
- fileWithMetadataByFileConfig.set(fileId, {
48
- previewUrl: URL.createObjectURL(file),
49
- abortController,
50
- file,
51
- fileId
52
- });
53
- newFileIds.add(fileId);
54
- }
55
- if (fileWithMetadataByFileConfig.size === 0) {
56
- return fileWithMetadataByFileConfig;
57
- }
58
- if (newFileIds.size) {
59
- dispatch({
60
- type: "purge",
61
- files: newFileIds
62
- });
63
- }
64
- dispatch({
65
- type: "initialize",
66
- files: fileWithMetadataByFileConfig
67
- });
68
- return fileWithMetadataByFileConfig;
69
- }, [purgeUpload]);
70
- const startUpload = useCallback((files) => {
71
- const filesById = /* @__PURE__ */ new Map();
72
- const groupedByUploader = /* @__PURE__ */ new Map();
73
- const currentState = multiTemporalStateRef.current;
74
- for (const fileOrIdMaybeWithOptions of files) {
75
- let fileOrId;
76
- let options2;
77
- if (Array.isArray(fileOrIdMaybeWithOptions)) {
78
- fileOrId = fileOrIdMaybeWithOptions[0];
79
- options2 = fileOrIdMaybeWithOptions[1];
80
- } else {
81
- fileOrId = fileOrIdMaybeWithOptions;
82
- options2 = {};
30
+ const initializeUpload = useCallback(
31
+ (files) => {
32
+ const newFileIds = /* @__PURE__ */ new Set();
33
+ const fileWithMetadataByFileConfig = /* @__PURE__ */ new Map();
34
+ for (const fileMaybeWithId of files) {
35
+ const abortController = new AbortController();
36
+ let fileId;
37
+ let file;
38
+ if (fileMaybeWithId instanceof File) {
39
+ fileId = `__contember__file-${fileIdSeedRef.current++}`;
40
+ file = fileMaybeWithId;
41
+ } else {
42
+ fileId = fileMaybeWithId[0];
43
+ file = fileMaybeWithId[1];
44
+ }
45
+ abortController.signal.addEventListener("abort", () => {
46
+ purgeUpload([fileId]);
47
+ });
48
+ fileWithMetadataByFileConfig.set(fileId, {
49
+ previewUrl: URL.createObjectURL(file),
50
+ abortController,
51
+ file,
52
+ fileId
53
+ });
54
+ newFileIds.add(fileId);
83
55
  }
84
- const { uploader = defaultUploader, metadata } = options2;
85
- const fileId = toFileId(currentState, fileOrId);
86
- const fileState = currentState.liveState.get(fileId);
87
- if (fileState === void 0 || fileState.readyState !== "initializing") {
88
- throw new Error(`Trying to startUpload a file that hasn't been previously initialized. This will be possible in future, but isn't yet.`);
56
+ if (fileWithMetadataByFileConfig.size === 0) {
57
+ return fileWithMetadataByFileConfig;
89
58
  }
90
- filesById.set(fileId, {
91
- uploader,
92
- metadata
93
- });
94
- let filesWithSameUploader = groupedByUploader.get(uploader);
95
- if (filesWithSameUploader === void 0) {
96
- groupedByUploader.set(uploader, filesWithSameUploader = /* @__PURE__ */ new Map());
59
+ if (newFileIds.size) {
60
+ dispatch({
61
+ type: "purge",
62
+ files: newFileIds
63
+ });
97
64
  }
98
- filesWithSameUploader.set(fileState.file, {
99
- abortSignal: fileState.abortController.signal
65
+ dispatch({
66
+ type: "initialize",
67
+ files: fileWithMetadataByFileConfig
100
68
  });
101
- }
102
- dispatch({
103
- type: "startUploading",
104
- files: filesById
105
- });
106
- for (const [uploader, filesForUpload] of groupedByUploader) {
107
- try {
108
- uploader.upload(filesForUpload, {
109
- onProgress: (progress) => {
110
- dispatch({
111
- type: "updateUploadProgress",
112
- progress
113
- });
114
- },
115
- onSuccess: (result) => {
116
- dispatch({
117
- type: "finishSuccessfully",
118
- result
119
- });
120
- },
121
- onError: (error) => {
122
- dispatch({
123
- type: "finishWithError",
124
- error
125
- });
126
- },
127
- contentApiClient
69
+ return fileWithMetadataByFileConfig;
70
+ },
71
+ [purgeUpload]
72
+ );
73
+ const startUpload = useCallback(
74
+ (files) => {
75
+ const filesById = /* @__PURE__ */ new Map();
76
+ const groupedByUploader = /* @__PURE__ */ new Map();
77
+ const currentState = multiTemporalStateRef.current;
78
+ for (const fileOrIdMaybeWithOptions of files) {
79
+ let fileOrId;
80
+ let options2;
81
+ if (Array.isArray(fileOrIdMaybeWithOptions)) {
82
+ fileOrId = fileOrIdMaybeWithOptions[0];
83
+ options2 = fileOrIdMaybeWithOptions[1];
84
+ } else {
85
+ fileOrId = fileOrIdMaybeWithOptions;
86
+ options2 = {};
87
+ }
88
+ const { uploader = defaultUploader, metadata } = options2;
89
+ const fileId = toFileId(currentState, fileOrId);
90
+ const fileState = currentState.liveState.get(fileId);
91
+ if (fileState === void 0 || fileState.readyState !== "initializing") {
92
+ throw new Error(
93
+ `Trying to startUpload a file that hasn't been previously initialized. This will be possible in future, but isn't yet.`
94
+ );
95
+ }
96
+ filesById.set(fileId, {
97
+ uploader,
98
+ metadata
128
99
  });
129
- } catch (error) {
130
- dispatch({
131
- type: "finishWithError",
132
- error: Array.from(filesForUpload).map(([file]) => [file, error])
100
+ let filesWithSameUploader = groupedByUploader.get(uploader);
101
+ if (filesWithSameUploader === void 0) {
102
+ groupedByUploader.set(uploader, filesWithSameUploader = /* @__PURE__ */ new Map());
103
+ }
104
+ filesWithSameUploader.set(fileState.file, {
105
+ abortSignal: fileState.abortController.signal
133
106
  });
134
107
  }
135
- }
136
- }, [contentApiClient, defaultUploader]);
137
- const operations = useMemo(() => ({
138
- failUpload,
139
- initializeUpload,
140
- purgeUpload,
141
- startUpload
142
- }), [failUpload, initializeUpload, purgeUpload, startUpload]);
108
+ dispatch({
109
+ type: "startUploading",
110
+ files: filesById
111
+ });
112
+ for (const [uploader, filesForUpload] of groupedByUploader) {
113
+ try {
114
+ uploader.upload(filesForUpload, {
115
+ onProgress: (progress) => {
116
+ dispatch({
117
+ type: "updateUploadProgress",
118
+ progress
119
+ });
120
+ },
121
+ onSuccess: (result) => {
122
+ dispatch({
123
+ type: "finishSuccessfully",
124
+ result
125
+ });
126
+ },
127
+ onError: (error) => {
128
+ dispatch({
129
+ type: "finishWithError",
130
+ error
131
+ });
132
+ },
133
+ contentApiClient
134
+ });
135
+ } catch (error) {
136
+ dispatch({
137
+ type: "finishWithError",
138
+ error: Array.from(filesForUpload).map(([file]) => [file, error])
139
+ });
140
+ }
141
+ }
142
+ },
143
+ [contentApiClient, defaultUploader]
144
+ );
145
+ const operations = useMemo(
146
+ () => ({
147
+ failUpload,
148
+ initializeUpload,
149
+ purgeUpload,
150
+ startUpload
151
+ }),
152
+ [failUpload, initializeUpload, purgeUpload, startUpload]
153
+ );
143
154
  useEffect(() => {
144
155
  if (isFirstRenderRef.current) {
145
156
  return;
@@ -173,18 +184,23 @@ const useFileUpload = (options) => {
173
184
  multiTemporalState.publicState,
174
185
  maxUpdateFrequency
175
186
  ]);
176
- useEffect(() => () => {
177
- for (const [, state] of multiTemporalStateRef.current.liveState) {
178
- URL.revokeObjectURL(state.previewUrl);
179
- }
180
- for (const [, state] of multiTemporalStateRef.current.publicState) {
181
- URL.revokeObjectURL(state.previewUrl);
182
- }
183
- }, []);
187
+ useEffect(
188
+ () => () => {
189
+ for (const [, state] of multiTemporalStateRef.current.liveState) {
190
+ URL.revokeObjectURL(state.previewUrl);
191
+ }
192
+ for (const [, state] of multiTemporalStateRef.current.publicState) {
193
+ URL.revokeObjectURL(state.previewUrl);
194
+ }
195
+ },
196
+ []
197
+ );
184
198
  useEffect(() => {
185
199
  isFirstRenderRef.current = false;
186
200
  }, []);
187
201
  return [multiTemporalState.publicState, operations];
188
202
  };
189
- export { useFileUpload };
203
+ export {
204
+ useFileUpload
205
+ };
190
206
  //# sourceMappingURL=useFileUpload.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useFileUpload.js","sources":["../../../src/upload/useFileUpload.ts"],"sourcesContent":["import { FileUploader, S3FileUploader, UploadedFileMetadata } from '@contember/client'\nimport { Reducer, useCallback, useEffect, useMemo, useReducer, useRef } from 'react'\nimport { useCurrentContentGraphQlClient } from '../content'\nimport type { FileId } from './FileId'\nimport type { FileUploadAction } from './FileUploadAction'\nimport type { FileUploadCompoundState } from './FileUploadCompoundState'\nimport type { FileUploadMetadata } from './FileUploadMetadata'\nimport type { FileUploadMultiTemporalState } from './FileUploadMultiTemporalState'\nimport type {\n\tPurgeUpload,\n\tFileUploadOperations,\n\tInitializeUpload,\n\tStartUpload,\n\tStartUploadFileOptions,\n\tFailUpload,\n} from './FileUploadOperations'\nimport { fileUploadReducer, initializeFileUploadState } from './fileUploadReducer'\nimport type { FileWithMetadata } from './FileWithMetadata'\nimport { toFileId } from './toFileId'\n\nexport type FileUpload<Result = unknown, Metadata = undefined> = [\n\tFileUploadCompoundState<Result, Metadata>,\n\tFileUploadOperations<Metadata>,\n]\n\nexport interface FileUploadOptions {\n\tmaxUpdateFrequency?: number // This does NOT apply to all kinds of updates.\n}\n\nexport const useFileUpload = <Result = unknown, Metadata = undefined>(\n\toptions?: FileUploadOptions,\n): FileUpload<Result, Metadata> => {\n\tconst maxUpdateFrequency = options?.maxUpdateFrequency ?? 100\n\n\tconst contentApiClient = useCurrentContentGraphQlClient()\n\n\tconst updateTimeoutRef = useRef<number | undefined>(undefined)\n\tconst isFirstRenderRef = useRef(true)\n\tconst fileIdSeedRef = useRef(1)\n\n\tconst [multiTemporalState, dispatch] = useReducer<\n\t\tReducer<FileUploadMultiTemporalState<Result, Metadata>, FileUploadAction<Result, Metadata>>,\n\t\tundefined\n\t>(fileUploadReducer, undefined, initializeFileUploadState)\n\tconst multiTemporalStateRef = useRef(multiTemporalState)\n\n\tconst defaultUploader = useMemo(() => new S3FileUploader(), [])\n\n\tuseEffect(() => {\n\t\tmultiTemporalStateRef.current = multiTemporalState\n\t})\n\n\tconst purgeUpload = useCallback<PurgeUpload>(files => {\n\t\tdispatch({\n\t\t\ttype: 'purge',\n\t\t\tfiles,\n\t\t})\n\t}, [])\n\tconst failUpload = useCallback<FailUpload>(error => {\n\t\tdispatch({\n\t\t\ttype: 'finishWithError',\n\t\t\terror,\n\t\t})\n\t}, [])\n\tconst initializeUpload = useCallback<InitializeUpload>(\n\t\tfiles => {\n\t\t\tconst newFileIds = new Set<FileId>()\n\t\t\tconst fileWithMetadataByFileConfig = new Map<FileId, FileWithMetadata>()\n\n\t\t\tfor (const fileMaybeWithId of files) {\n\t\t\t\tconst abortController = new AbortController()\n\n\t\t\t\tlet fileId: FileId\n\t\t\t\tlet file: File\n\n\t\t\t\tif (fileMaybeWithId instanceof File) {\n\t\t\t\t\tfileId = `__contember__file-${fileIdSeedRef.current++}`\n\t\t\t\t\tfile = fileMaybeWithId\n\t\t\t\t} else {\n\t\t\t\t\tfileId = fileMaybeWithId[0]\n\t\t\t\t\tfile = fileMaybeWithId[1]\n\t\t\t\t}\n\n\t\t\t\tabortController.signal.addEventListener('abort', () => {\n\t\t\t\t\tpurgeUpload([fileId])\n\t\t\t\t})\n\n\t\t\t\tfileWithMetadataByFileConfig.set(fileId, {\n\t\t\t\t\tpreviewUrl: URL.createObjectURL(file),\n\t\t\t\t\tabortController,\n\t\t\t\t\tfile,\n\t\t\t\t\tfileId,\n\t\t\t\t})\n\n\t\t\t\tnewFileIds.add(fileId)\n\t\t\t}\n\t\t\tif (fileWithMetadataByFileConfig.size === 0) {\n\t\t\t\treturn fileWithMetadataByFileConfig\n\t\t\t}\n\n\t\t\tif (newFileIds.size) {\n\t\t\t\tdispatch({\n\t\t\t\t\ttype: 'purge',\n\t\t\t\t\tfiles: newFileIds,\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tdispatch({\n\t\t\t\ttype: 'initialize',\n\t\t\t\tfiles: fileWithMetadataByFileConfig,\n\t\t\t})\n\n\t\t\treturn fileWithMetadataByFileConfig\n\t\t},\n\t\t[purgeUpload],\n\t)\n\tconst startUpload = useCallback<StartUpload<Metadata>>(\n\t\tfiles => {\n\t\t\tconst filesById = new Map<FileId, FileUploadMetadata<Metadata>>()\n\t\t\tconst groupedByUploader: Map<FileUploader, Map<File, UploadedFileMetadata>> = new Map()\n\n\t\t\tconst currentState = multiTemporalStateRef.current\n\n\t\t\tfor (const fileOrIdMaybeWithOptions of files) {\n\t\t\t\tlet fileOrId: File | FileId\n\t\t\t\tlet options: StartUploadFileOptions<Metadata>\n\n\t\t\t\tif (Array.isArray(fileOrIdMaybeWithOptions)) {\n\t\t\t\t\tfileOrId = fileOrIdMaybeWithOptions[0]\n\t\t\t\t\toptions = fileOrIdMaybeWithOptions[1]\n\t\t\t\t} else {\n\t\t\t\t\tfileOrId = fileOrIdMaybeWithOptions\n\t\t\t\t\toptions = {}\n\t\t\t\t}\n\t\t\t\tconst { uploader = defaultUploader, metadata } = options\n\n\t\t\t\tconst fileId = toFileId(currentState, fileOrId)\n\t\t\t\tconst fileState = currentState.liveState.get(fileId)\n\n\t\t\t\tif (fileState === undefined || fileState.readyState !== 'initializing') {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`Trying to startUpload a file that hasn't been previously initialized. ` +\n\t\t\t\t\t\t\t`This will be possible in future, but isn't yet.`,\n\t\t\t\t\t)\n\t\t\t\t}\n\n\t\t\t\tfilesById.set(fileId, {\n\t\t\t\t\tuploader,\n\t\t\t\t\tmetadata,\n\t\t\t\t})\n\n\t\t\t\tlet filesWithSameUploader = groupedByUploader.get(uploader)\n\t\t\t\tif (filesWithSameUploader === undefined) {\n\t\t\t\t\tgroupedByUploader.set(uploader, (filesWithSameUploader = new Map()))\n\t\t\t\t}\n\t\t\t\tfilesWithSameUploader.set(fileState.file, {\n\t\t\t\t\tabortSignal: fileState.abortController.signal,\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tdispatch({\n\t\t\t\ttype: 'startUploading',\n\t\t\t\tfiles: filesById,\n\t\t\t})\n\n\t\t\tfor (const [uploader, filesForUpload] of groupedByUploader) {\n\t\t\t\ttry {\n\t\t\t\t\tuploader.upload(filesForUpload, {\n\t\t\t\t\t\tonProgress: progress => {\n\t\t\t\t\t\t\tdispatch({\n\t\t\t\t\t\t\t\ttype: 'updateUploadProgress',\n\t\t\t\t\t\t\t\tprogress,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t},\n\t\t\t\t\t\tonSuccess: result => {\n\t\t\t\t\t\t\tdispatch({\n\t\t\t\t\t\t\t\ttype: 'finishSuccessfully',\n\t\t\t\t\t\t\t\tresult,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t},\n\t\t\t\t\t\tonError: error => {\n\t\t\t\t\t\t\tdispatch({\n\t\t\t\t\t\t\t\ttype: 'finishWithError',\n\t\t\t\t\t\t\t\terror,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t},\n\t\t\t\t\t\tcontentApiClient,\n\t\t\t\t\t})\n\t\t\t\t} catch (error) {\n\t\t\t\t\tdispatch({\n\t\t\t\t\t\ttype: 'finishWithError',\n\t\t\t\t\t\terror: Array.from(filesForUpload).map(([file]) => [file, error]),\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[contentApiClient, defaultUploader],\n\t)\n\n\tconst operations = useMemo<FileUploadOperations<Metadata>>(\n\t\t() => ({\n\t\t\tfailUpload,\n\t\t\tinitializeUpload,\n\t\t\tpurgeUpload,\n\t\t\tstartUpload,\n\t\t}),\n\t\t[failUpload, initializeUpload, purgeUpload, startUpload],\n\t)\n\n\tuseEffect(() => {\n\t\tif (isFirstRenderRef.current) {\n\t\t\treturn\n\t\t}\n\t\tif (multiTemporalState.isLiveStateDirty) {\n\t\t\tconst now = Date.now()\n\t\t\tconst timeDelta = Math.max(now - multiTemporalState.lastUpdateTime, 0) // The max is just a sanity check\n\t\t\tif (timeDelta > maxUpdateFrequency) {\n\t\t\t\tif (updateTimeoutRef.current !== undefined) {\n\t\t\t\t\tclearTimeout(updateTimeoutRef.current)\n\t\t\t\t}\n\t\t\t\tdispatch({\n\t\t\t\t\ttype: 'publishNewestState',\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tif (updateTimeoutRef.current !== undefined) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tupdateTimeoutRef.current = window.setTimeout(() => {\n\t\t\t\t\tdispatch({\n\t\t\t\t\t\ttype: 'publishNewestState',\n\t\t\t\t\t})\n\t\t\t\t\tupdateTimeoutRef.current = undefined\n\t\t\t\t}, maxUpdateFrequency - timeDelta)\n\t\t\t}\n\t\t}\n\t}, [\n\t\tmultiTemporalState.isLiveStateDirty,\n\t\tmultiTemporalState.lastUpdateTime,\n\t\tmultiTemporalState.liveState,\n\t\tmultiTemporalState.publicState,\n\t\tmaxUpdateFrequency,\n\t])\n\n\tuseEffect(\n\t\t() => () => {\n\t\t\tfor (const [, state] of multiTemporalStateRef.current.liveState) {\n\t\t\t\tURL.revokeObjectURL(state.previewUrl)\n\t\t\t}\n\t\t\tfor (const [, state] of multiTemporalStateRef.current.publicState) {\n\t\t\t\tURL.revokeObjectURL(state.previewUrl)\n\t\t\t}\n\t\t},\n\t\t[],\n\t)\n\n\t// For this to work, this effect must be the last one to run.\n\tuseEffect(() => {\n\t\tisFirstRenderRef.current = false\n\t}, [])\n\n\treturn [multiTemporalState.publicState, operations]\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useFileUpload.js","sources":["../../../src/upload/useFileUpload.ts"],"sourcesContent":["import { FileUploader, S3FileUploader, UploadedFileMetadata } from '@contember/client'\nimport { Reducer, useCallback, useEffect, useMemo, useReducer, useRef } from 'react'\nimport { useCurrentContentGraphQlClient } from '../content'\nimport type { FileId } from './FileId'\nimport type { FileUploadAction } from './FileUploadAction'\nimport type { FileUploadCompoundState } from './FileUploadCompoundState'\nimport type { FileUploadMetadata } from './FileUploadMetadata'\nimport type { FileUploadMultiTemporalState } from './FileUploadMultiTemporalState'\nimport type {\n\tPurgeUpload,\n\tFileUploadOperations,\n\tInitializeUpload,\n\tStartUpload,\n\tStartUploadFileOptions,\n\tFailUpload,\n} from './FileUploadOperations'\nimport { fileUploadReducer, initializeFileUploadState } from './fileUploadReducer'\nimport type { FileWithMetadata } from './FileWithMetadata'\nimport { toFileId } from './toFileId'\n\nexport type FileUpload<Result = unknown, Metadata = undefined> = [\n\tFileUploadCompoundState<Result, Metadata>,\n\tFileUploadOperations<Metadata>,\n]\n\nexport interface FileUploadOptions {\n\tmaxUpdateFrequency?: number // This does NOT apply to all kinds of updates.\n}\n\nexport const useFileUpload = <Result = unknown, Metadata = undefined>(\n\toptions?: FileUploadOptions,\n): FileUpload<Result, Metadata> => {\n\tconst maxUpdateFrequency = options?.maxUpdateFrequency ?? 100\n\n\tconst contentApiClient = useCurrentContentGraphQlClient()\n\n\tconst updateTimeoutRef = useRef<number | undefined>(undefined)\n\tconst isFirstRenderRef = useRef(true)\n\tconst fileIdSeedRef = useRef(1)\n\n\tconst [multiTemporalState, dispatch] = useReducer<\n\t\tReducer<FileUploadMultiTemporalState<Result, Metadata>, FileUploadAction<Result, Metadata>>,\n\t\tundefined\n\t>(fileUploadReducer, undefined, initializeFileUploadState)\n\tconst multiTemporalStateRef = useRef(multiTemporalState)\n\n\tconst defaultUploader = useMemo(() => new S3FileUploader(), [])\n\n\tuseEffect(() => {\n\t\tmultiTemporalStateRef.current = multiTemporalState\n\t})\n\n\tconst purgeUpload = useCallback<PurgeUpload>(files => {\n\t\tdispatch({\n\t\t\ttype: 'purge',\n\t\t\tfiles,\n\t\t})\n\t}, [])\n\tconst failUpload = useCallback<FailUpload>(error => {\n\t\tdispatch({\n\t\t\ttype: 'finishWithError',\n\t\t\terror,\n\t\t})\n\t}, [])\n\tconst initializeUpload = useCallback<InitializeUpload>(\n\t\tfiles => {\n\t\t\tconst newFileIds = new Set<FileId>()\n\t\t\tconst fileWithMetadataByFileConfig = new Map<FileId, FileWithMetadata>()\n\n\t\t\tfor (const fileMaybeWithId of files) {\n\t\t\t\tconst abortController = new AbortController()\n\n\t\t\t\tlet fileId: FileId\n\t\t\t\tlet file: File\n\n\t\t\t\tif (fileMaybeWithId instanceof File) {\n\t\t\t\t\tfileId = `__contember__file-${fileIdSeedRef.current++}`\n\t\t\t\t\tfile = fileMaybeWithId\n\t\t\t\t} else {\n\t\t\t\t\tfileId = fileMaybeWithId[0]\n\t\t\t\t\tfile = fileMaybeWithId[1]\n\t\t\t\t}\n\n\t\t\t\tabortController.signal.addEventListener('abort', () => {\n\t\t\t\t\tpurgeUpload([fileId])\n\t\t\t\t})\n\n\t\t\t\tfileWithMetadataByFileConfig.set(fileId, {\n\t\t\t\t\tpreviewUrl: URL.createObjectURL(file),\n\t\t\t\t\tabortController,\n\t\t\t\t\tfile,\n\t\t\t\t\tfileId,\n\t\t\t\t})\n\n\t\t\t\tnewFileIds.add(fileId)\n\t\t\t}\n\t\t\tif (fileWithMetadataByFileConfig.size === 0) {\n\t\t\t\treturn fileWithMetadataByFileConfig\n\t\t\t}\n\n\t\t\tif (newFileIds.size) {\n\t\t\t\tdispatch({\n\t\t\t\t\ttype: 'purge',\n\t\t\t\t\tfiles: newFileIds,\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tdispatch({\n\t\t\t\ttype: 'initialize',\n\t\t\t\tfiles: fileWithMetadataByFileConfig,\n\t\t\t})\n\n\t\t\treturn fileWithMetadataByFileConfig\n\t\t},\n\t\t[purgeUpload],\n\t)\n\tconst startUpload = useCallback<StartUpload<Metadata>>(\n\t\tfiles => {\n\t\t\tconst filesById = new Map<FileId, FileUploadMetadata<Metadata>>()\n\t\t\tconst groupedByUploader: Map<FileUploader, Map<File, UploadedFileMetadata>> = new Map()\n\n\t\t\tconst currentState = multiTemporalStateRef.current\n\n\t\t\tfor (const fileOrIdMaybeWithOptions of files) {\n\t\t\t\tlet fileOrId: File | FileId\n\t\t\t\tlet options: StartUploadFileOptions<Metadata>\n\n\t\t\t\tif (Array.isArray(fileOrIdMaybeWithOptions)) {\n\t\t\t\t\tfileOrId = fileOrIdMaybeWithOptions[0]\n\t\t\t\t\toptions = fileOrIdMaybeWithOptions[1]\n\t\t\t\t} else {\n\t\t\t\t\tfileOrId = fileOrIdMaybeWithOptions\n\t\t\t\t\toptions = {}\n\t\t\t\t}\n\t\t\t\tconst { uploader = defaultUploader, metadata } = options\n\n\t\t\t\tconst fileId = toFileId(currentState, fileOrId)\n\t\t\t\tconst fileState = currentState.liveState.get(fileId)\n\n\t\t\t\tif (fileState === undefined || fileState.readyState !== 'initializing') {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`Trying to startUpload a file that hasn't been previously initialized. ` +\n\t\t\t\t\t\t\t`This will be possible in future, but isn't yet.`,\n\t\t\t\t\t)\n\t\t\t\t}\n\n\t\t\t\tfilesById.set(fileId, {\n\t\t\t\t\tuploader,\n\t\t\t\t\tmetadata,\n\t\t\t\t})\n\n\t\t\t\tlet filesWithSameUploader = groupedByUploader.get(uploader)\n\t\t\t\tif (filesWithSameUploader === undefined) {\n\t\t\t\t\tgroupedByUploader.set(uploader, (filesWithSameUploader = new Map()))\n\t\t\t\t}\n\t\t\t\tfilesWithSameUploader.set(fileState.file, {\n\t\t\t\t\tabortSignal: fileState.abortController.signal,\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tdispatch({\n\t\t\t\ttype: 'startUploading',\n\t\t\t\tfiles: filesById,\n\t\t\t})\n\n\t\t\tfor (const [uploader, filesForUpload] of groupedByUploader) {\n\t\t\t\ttry {\n\t\t\t\t\tuploader.upload(filesForUpload, {\n\t\t\t\t\t\tonProgress: progress => {\n\t\t\t\t\t\t\tdispatch({\n\t\t\t\t\t\t\t\ttype: 'updateUploadProgress',\n\t\t\t\t\t\t\t\tprogress,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t},\n\t\t\t\t\t\tonSuccess: result => {\n\t\t\t\t\t\t\tdispatch({\n\t\t\t\t\t\t\t\ttype: 'finishSuccessfully',\n\t\t\t\t\t\t\t\tresult,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t},\n\t\t\t\t\t\tonError: error => {\n\t\t\t\t\t\t\tdispatch({\n\t\t\t\t\t\t\t\ttype: 'finishWithError',\n\t\t\t\t\t\t\t\terror,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t},\n\t\t\t\t\t\tcontentApiClient,\n\t\t\t\t\t})\n\t\t\t\t} catch (error) {\n\t\t\t\t\tdispatch({\n\t\t\t\t\t\ttype: 'finishWithError',\n\t\t\t\t\t\terror: Array.from(filesForUpload).map(([file]) => [file, error]),\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[contentApiClient, defaultUploader],\n\t)\n\n\tconst operations = useMemo<FileUploadOperations<Metadata>>(\n\t\t() => ({\n\t\t\tfailUpload,\n\t\t\tinitializeUpload,\n\t\t\tpurgeUpload,\n\t\t\tstartUpload,\n\t\t}),\n\t\t[failUpload, initializeUpload, purgeUpload, startUpload],\n\t)\n\n\tuseEffect(() => {\n\t\tif (isFirstRenderRef.current) {\n\t\t\treturn\n\t\t}\n\t\tif (multiTemporalState.isLiveStateDirty) {\n\t\t\tconst now = Date.now()\n\t\t\tconst timeDelta = Math.max(now - multiTemporalState.lastUpdateTime, 0) // The max is just a sanity check\n\t\t\tif (timeDelta > maxUpdateFrequency) {\n\t\t\t\tif (updateTimeoutRef.current !== undefined) {\n\t\t\t\t\tclearTimeout(updateTimeoutRef.current)\n\t\t\t\t}\n\t\t\t\tdispatch({\n\t\t\t\t\ttype: 'publishNewestState',\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tif (updateTimeoutRef.current !== undefined) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tupdateTimeoutRef.current = window.setTimeout(() => {\n\t\t\t\t\tdispatch({\n\t\t\t\t\t\ttype: 'publishNewestState',\n\t\t\t\t\t})\n\t\t\t\t\tupdateTimeoutRef.current = undefined\n\t\t\t\t}, maxUpdateFrequency - timeDelta)\n\t\t\t}\n\t\t}\n\t}, [\n\t\tmultiTemporalState.isLiveStateDirty,\n\t\tmultiTemporalState.lastUpdateTime,\n\t\tmultiTemporalState.liveState,\n\t\tmultiTemporalState.publicState,\n\t\tmaxUpdateFrequency,\n\t])\n\n\tuseEffect(\n\t\t() => () => {\n\t\t\tfor (const [, state] of multiTemporalStateRef.current.liveState) {\n\t\t\t\tURL.revokeObjectURL(state.previewUrl)\n\t\t\t}\n\t\t\tfor (const [, state] of multiTemporalStateRef.current.publicState) {\n\t\t\t\tURL.revokeObjectURL(state.previewUrl)\n\t\t\t}\n\t\t},\n\t\t[],\n\t)\n\n\t// For this to work, this effect must be the last one to run.\n\tuseEffect(() => {\n\t\tisFirstRenderRef.current = false\n\t}, [])\n\n\treturn [multiTemporalState.publicState, operations]\n}\n"],"names":["options"],"mappings":"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"}
@@ -7,5 +7,7 @@ const useGraphQlClient = (path) => {
7
7
  const sessionToken = useSessionToken();
8
8
  return useMemo(() => new GraphQlClient(`${apiBaseUrl}${path}`, sessionToken), [apiBaseUrl, path, sessionToken]);
9
9
  };
10
- export { useGraphQlClient };
10
+ export {
11
+ useGraphQlClient
12
+ };
11
13
  //# sourceMappingURL=useGraphQlClient.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useGraphQlClient.js","sources":["../../src/useGraphQlClient.ts"],"sourcesContent":["import { GraphQlClient } from '@contember/client'\nimport { useMemo } from 'react'\nimport { useSessionToken } from './auth'\nimport { useApiBaseUrl } from './config'\n\nexport const useGraphQlClient = (path: string): GraphQlClient => {\n\tconst apiBaseUrl = useApiBaseUrl()\n\tconst sessionToken = useSessionToken()\n\treturn useMemo(() => new GraphQlClient(`${apiBaseUrl}${path}`, sessionToken), [apiBaseUrl, path, sessionToken])\n}\n"],"names":[],"mappings":";;;;AAKa,MAAA,mBAAmB,CAAC,SAAgC;AAChE,QAAM,aAAa;AACnB,QAAM,eAAe;AACrB,SAAO,QAAQ,MAAM,IAAI,cAAc,GAAG,aAAa,QAAQ,YAAY,GAAG,CAAC,YAAY,MAAM,YAAY,CAAC;AAC/G;;"}
1
+ {"version":3,"file":"useGraphQlClient.js","sources":["../../src/useGraphQlClient.ts"],"sourcesContent":["import { GraphQlClient } from '@contember/client'\nimport { useMemo } from 'react'\nimport { useSessionToken } from './auth'\nimport { useApiBaseUrl } from './config'\n\nexport const useGraphQlClient = (path: string): GraphQlClient => {\n\tconst apiBaseUrl = useApiBaseUrl()\n\tconst sessionToken = useSessionToken()\n\treturn useMemo(() => new GraphQlClient(`${apiBaseUrl}${path}`, sessionToken), [apiBaseUrl, path, sessionToken])\n}\n"],"names":[],"mappings":";;;;AAKa,MAAA,mBAAmB,CAAC,SAAgC;AAChE,QAAM,aAAa;AACnB,QAAM,eAAe;AACrB,SAAO,QAAQ,MAAM,IAAI,cAAc,GAAG,aAAa,QAAQ,YAAY,GAAG,CAAC,YAAY,MAAM,YAAY,CAAC;AAC/G;"}
@@ -1,5 +1,7 @@
1
1
  function assertNever(_) {
2
2
  throw new Error();
3
3
  }
4
- export { assertNever };
4
+ export {
5
+ assertNever
6
+ };
5
7
  //# sourceMappingURL=assertNever.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"assertNever.js","sources":["../../../src/utils/assertNever.ts"],"sourcesContent":["export function assertNever(_: never): asserts _ is never {\n\tthrow new Error()\n}\n"],"names":[],"mappings":"AAAO,qBAAqB,GAA8B;AACzD,QAAM,IAAI,MAAM;AACjB;;"}
1
+ {"version":3,"file":"assertNever.js","sources":["../../../src/utils/assertNever.ts"],"sourcesContent":["export function assertNever(_: never): asserts _ is never {\n\tthrow new Error()\n}\n"],"names":[],"mappings":"AAAO,SAAS,YAAY,GAA8B;AACzD,QAAM,IAAI,MAAM;AACjB;"}
@@ -1,4 +1,6 @@
1
1
  class ClientError extends Error {
2
2
  }
3
- export { ClientError };
3
+ export {
4
+ ClientError
5
+ };
4
6
  //# sourceMappingURL=ClientError.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ClientError.js","sources":["../../src/ClientError.ts"],"sourcesContent":["export class ClientError extends Error {}\n"],"names":[],"mappings":"AAAO,MAAM,oBAAoB,MAAM;AAAC;;"}
1
+ {"version":3,"file":"ClientError.js","sources":["../../src/ClientError.ts"],"sourcesContent":["export class ClientError extends Error {}\n"],"names":[],"mappings":"AAAO,MAAM,oBAAoB,MAAM;AAAC;"}
@@ -1,4 +1,5 @@
1
- import { memo, useState, useCallback, createElement } from "react";
1
+ import { memo, useState, useCallback } from "react";
2
+ import { jsx } from "react/jsx-runtime";
2
3
  import { ApiBaseUrlContext } from "./config/ApiBaseUrlContext.js";
3
4
  import { LoginTokenContext } from "./config/LoginTokenContext.js";
4
5
  import { SetSessionTokenContext } from "./auth/SetSessionTokenContext.js";
@@ -23,19 +24,27 @@ const ContemberClient = memo(function ContemberClient2({
23
24
  }
24
25
  setSessionTokenInner(token);
25
26
  }, []);
26
- return /* @__PURE__ */ createElement(ApiBaseUrlContext.Provider, {
27
- value: apiBaseUrl
28
- }, /* @__PURE__ */ createElement(LoginTokenContext.Provider, {
29
- value: loginToken
30
- }, /* @__PURE__ */ createElement(SetSessionTokenContext.Provider, {
31
- value: setSessionToken
32
- }, /* @__PURE__ */ createElement(SessionTokenContext.Provider, {
33
- value: sessionTokenInner
34
- }, /* @__PURE__ */ createElement(ProjectSlugContext.Provider, {
35
- value: project
36
- }, /* @__PURE__ */ createElement(StageSlugContext.Provider, {
37
- value: stage
38
- }, children))))));
27
+ return /* @__PURE__ */ jsx(ApiBaseUrlContext.Provider, {
28
+ value: apiBaseUrl,
29
+ children: /* @__PURE__ */ jsx(LoginTokenContext.Provider, {
30
+ value: loginToken,
31
+ children: /* @__PURE__ */ jsx(SetSessionTokenContext.Provider, {
32
+ value: setSessionToken,
33
+ children: /* @__PURE__ */ jsx(SessionTokenContext.Provider, {
34
+ value: sessionTokenInner,
35
+ children: /* @__PURE__ */ jsx(ProjectSlugContext.Provider, {
36
+ value: project,
37
+ children: /* @__PURE__ */ jsx(StageSlugContext.Provider, {
38
+ value: stage,
39
+ children
40
+ })
41
+ })
42
+ })
43
+ })
44
+ })
45
+ });
39
46
  });
40
- export { ContemberClient };
47
+ export {
48
+ ContemberClient
49
+ };
41
50
  //# sourceMappingURL=ContemberClient.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ContemberClient.js","sources":["../../src/ContemberClient.tsx"],"sourcesContent":["import { memo, useCallback, useEffect, useState } from 'react'\nimport { SessionTokenContext, SetSessionTokenContext } from './auth'\nimport { ApiBaseUrlContext, LoginTokenContext } from './config'\nimport { ProjectSlugContext, StageSlugContext } from './project'\n\nexport interface ContemberClientProps {\n\tapiBaseUrl: string\n\tsessionToken?: string\n\tloginToken?: string\n\tproject?: string\n\tstage?: string\n}\n\nconst sessionTokenKey = 'contember_session_token'\n\nexport const ContemberClient = memo<ContemberClientProps & { children: React.ReactNode }>(function ContemberClient({\n\tapiBaseUrl,\n\tchildren,\n\tloginToken,\n\tproject,\n\tsessionToken,\n\tstage,\n}) {\n\tconst [sessionTokenInner, setSessionTokenInner] = useState(() => localStorage.getItem(sessionTokenKey) ?? sessionToken ?? undefined)\n\n\tconst setSessionToken = useCallback((token: string | undefined) => {\n\t\tif (token !== undefined) {\n\t\t\tlocalStorage.setItem(sessionTokenKey, token)\n\t\t} else {\n\t\t\tlocalStorage.removeItem(sessionTokenKey)\n\t\t}\n\t\tsetSessionTokenInner(token)\n\t}, [])\n\n\treturn (\n\t\t<ApiBaseUrlContext.Provider value={apiBaseUrl}>\n\t\t\t<LoginTokenContext.Provider value={loginToken}>\n\t\t\t\t<SetSessionTokenContext.Provider value={setSessionToken}>\n\t\t\t\t\t<SessionTokenContext.Provider value={sessionTokenInner}>\n\t\t\t\t\t\t<ProjectSlugContext.Provider value={project}>\n\t\t\t\t\t\t\t<StageSlugContext.Provider value={stage}>{children}</StageSlugContext.Provider>\n\t\t\t\t\t\t</ProjectSlugContext.Provider>\n\t\t\t\t\t</SessionTokenContext.Provider>\n\t\t\t\t</SetSessionTokenContext.Provider>\n\t\t\t</LoginTokenContext.Provider>\n\t\t</ApiBaseUrlContext.Provider>\n\t)\n})\n"],"names":["_jsx"],"mappings":";;;;;;;AAaA,MAAM,kBAAkB;AAEX,MAAA,kBAAkB,KAA2D,0BAAyB;AAAA,EAClH;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,GACE;AACI,QAAA,CAAC,mBAAmB,wBAAwB,SAAS,MAAM,aAAa,QAAQ,eAAe,KAAK,gBAAiB,MAAS;AAE9H,QAAA,kBAAkB,YAAY,CAAC,UAA8B;AAClE,QAAI,UAAU,QAAW;AACX,mBAAA,QAAQ,iBAAiB,KAAK;AAAA,IAAA,OACrC;AACN,mBAAa,WAAW,eAAe;AAAA,IACxC;AACA,yBAAqB,KAAK;AAAA,EAC3B,GAAG,CAAE,CAAA;AAGJ,SAAAA,8BAAC,kBAAkB,UAAlB;AAAA,IAA2B,OAAO;AAAA,EAAA,GAClCA,8BAAC,kBAAkB,UAAlB;AAAA,IAA2B,OAAO;AAAA,EAAA,GAClCA,8BAAC,uBAAuB,UAAvB;AAAA,IAAgC,OAAO;AAAA,EAAA,GACvCA,8BAAC,oBAAoB,UAApB;AAAA,IAA6B,OAAO;AAAA,EAAA,GACpCA,8BAAC,mBAAmB,UAAnB;AAAA,IAA4B,OAAO;AAAA,EAAA,GACnCA,8BAAC,iBAAiB,UAAjB;AAAA,IAA0B,OAAO;AAAA,EAAA,GAAQ,QAAS,CACpD,CACD,CACD,CACD,CACD;AAEF,CAAC;;"}
1
+ {"version":3,"file":"ContemberClient.js","sources":["../../src/ContemberClient.tsx"],"sourcesContent":["import { memo, useCallback, useEffect, useState } from 'react'\nimport { SessionTokenContext, SetSessionTokenContext } from './auth'\nimport { ApiBaseUrlContext, LoginTokenContext } from './config'\nimport { ProjectSlugContext, StageSlugContext } from './project'\n\nexport interface ContemberClientProps {\n\tapiBaseUrl: string\n\tsessionToken?: string\n\tloginToken?: string\n\tproject?: string\n\tstage?: string\n}\n\nconst sessionTokenKey = 'contember_session_token'\n\nexport const ContemberClient = memo<ContemberClientProps & { children: React.ReactNode }>(function ContemberClient({\n\tapiBaseUrl,\n\tchildren,\n\tloginToken,\n\tproject,\n\tsessionToken,\n\tstage,\n}) {\n\tconst [sessionTokenInner, setSessionTokenInner] = useState(() => localStorage.getItem(sessionTokenKey) ?? sessionToken ?? undefined)\n\n\tconst setSessionToken = useCallback((token: string | undefined) => {\n\t\tif (token !== undefined) {\n\t\t\tlocalStorage.setItem(sessionTokenKey, token)\n\t\t} else {\n\t\t\tlocalStorage.removeItem(sessionTokenKey)\n\t\t}\n\t\tsetSessionTokenInner(token)\n\t}, [])\n\n\treturn (\n\t\t<ApiBaseUrlContext.Provider value={apiBaseUrl}>\n\t\t\t<LoginTokenContext.Provider value={loginToken}>\n\t\t\t\t<SetSessionTokenContext.Provider value={setSessionToken}>\n\t\t\t\t\t<SessionTokenContext.Provider value={sessionTokenInner}>\n\t\t\t\t\t\t<ProjectSlugContext.Provider value={project}>\n\t\t\t\t\t\t\t<StageSlugContext.Provider value={stage}>{children}</StageSlugContext.Provider>\n\t\t\t\t\t\t</ProjectSlugContext.Provider>\n\t\t\t\t\t</SessionTokenContext.Provider>\n\t\t\t\t</SetSessionTokenContext.Provider>\n\t\t\t</LoginTokenContext.Provider>\n\t\t</ApiBaseUrlContext.Provider>\n\t)\n})\n"],"names":["sessionTokenKey","ContemberClient","memo","apiBaseUrl","children","loginToken","project","sessionToken","stage","sessionTokenInner","setSessionTokenInner","useState","localStorage","getItem","undefined","setSessionToken","useCallback","token","setItem","removeItem","_jsx"],"mappings":";;;;;;;;AAaA,MAAMA,kBAAkB;AAEXC,MAAAA,kBAAkBC,KAA2D,SAASD,iBAAgB;AAAA,EAClHE;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AACD,GAAG;AACI,QAAA,CAACC,mBAAmBC,oBAAoB,IAAIC,SAAS,MAAMC,aAAaC,QAAQb,eAAe,KAAKO,gBAAiBO,MAAS;AAE9HC,QAAAA,kBAAkBC,YAAY,CAACC,UAA8B;AAClE,QAAIA,UAAUH,QAAW;AACXI,mBAAAA,QAAQlB,iBAAiBiB,KAAK;AAAA,IAAA,OACrC;AACNL,mBAAaO,WAAWnB,eAAe;AAAA,IACxC;AACAU,yBAAqBO,KAAK;AAAA,EAC3B,GAAG,CAAE,CAAA;AAGJ,SAAAG,oBAAC,kBAAkB,UAAQ;AAAA,IAAC,OAAOjB;AAAAA,IAAW,UAC5CiB,oBAAA,kBAAkB,UAAQ;AAAA,MAAC,OAAOf;AAAAA,MAAW,UAC5Ce,oBAAA,uBAAuB,UAAQ;AAAA,QAAC,OAAOL;AAAAA,QAAgB,UACtDK,oBAAA,oBAAoB,UAAQ;AAAA,UAAC,OAAOX;AAAAA,UAAkB,UACrDW,oBAAA,mBAAmB,UAAQ;AAAA,YAAC,OAAOd;AAAAA,YAAQ,UAC1Cc,oBAAA,iBAAiB,UAAQ;AAAA,cAAC,OAAOZ;AAAAA,cAAM;AAAA,YAAA,CAAU;AAAA,UAAA,CAA6B;AAAA,QAAA,CAClD;AAAA,MAAA,CACA;AAAA,IAAA,CACE;AAAA,EAAA,CAEP;AAE/B,CAAC;"}
@@ -28,5 +28,7 @@ const apiRequestReducer = (previousState, action) => {
28
28
  };
29
29
  }
30
30
  };
31
- export { apiRequestReducer };
31
+ export {
32
+ apiRequestReducer
33
+ };
32
34
  //# sourceMappingURL=apiRequestReducer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"apiRequestReducer.js","sources":["../../../src/apiRequest/apiRequestReducer.ts"],"sourcesContent":["import type { ApiRequestAction } from './ApiRequestAction'\nimport type { ApiRequestState } from './ApiRequestState'\n\nexport type ApiRequestReducer<SuccessData> = (\n\tpreviousState: ApiRequestState<SuccessData>,\n\taction: ApiRequestAction<SuccessData>,\n) => ApiRequestState<SuccessData>\n\nexport const apiRequestReducer = <SuccessData>(\n\tpreviousState: ApiRequestState<SuccessData>,\n\taction: ApiRequestAction<SuccessData>,\n): ApiRequestState<SuccessData> => {\n\tswitch (action.type) {\n\t\tcase 'uninitialize':\n\t\t\treturn {\n\t\t\t\treadyState: 'uninitialized',\n\t\t\t\tisFinished: false,\n\t\t\t\tisLoading: false,\n\t\t\t}\n\t\tcase 'initialize':\n\t\t\treturn {\n\t\t\t\treadyState: 'pending',\n\t\t\t\tisFinished: false,\n\t\t\t\tisLoading: true,\n\t\t\t}\n\t\tcase 'resolveSuccessfully':\n\t\t\treturn {\n\t\t\t\treadyState: 'networkSuccess',\n\t\t\t\tdata: action.data,\n\t\t\t\tisFinished: true,\n\t\t\t\tisLoading: false,\n\t\t\t}\n\t\tcase 'resolveWithError':\n\t\t\treturn {\n\t\t\t\treadyState: 'networkError',\n\t\t\t\tdata: action.error,\n\t\t\t\tisFinished: true,\n\t\t\t\tisLoading: false,\n\t\t\t}\n\t}\n}\n"],"names":[],"mappings":"AAQa,MAAA,oBAAoB,CAChC,eACA,WACkC;AAClC,UAAQ,OAAO;AAAA,SACT;AACG,aAAA;AAAA,QACN,YAAY;AAAA,QACZ,YAAY;AAAA,QACZ,WAAW;AAAA,MAAA;AAAA,SAER;AACG,aAAA;AAAA,QACN,YAAY;AAAA,QACZ,YAAY;AAAA,QACZ,WAAW;AAAA,MAAA;AAAA,SAER;AACG,aAAA;AAAA,QACN,YAAY;AAAA,QACZ,MAAM,OAAO;AAAA,QACb,YAAY;AAAA,QACZ,WAAW;AAAA,MAAA;AAAA,SAER;AACG,aAAA;AAAA,QACN,YAAY;AAAA,QACZ,MAAM,OAAO;AAAA,QACb,YAAY;AAAA,QACZ,WAAW;AAAA,MAAA;AAAA;AAGf;;"}
1
+ {"version":3,"file":"apiRequestReducer.js","sources":["../../../src/apiRequest/apiRequestReducer.ts"],"sourcesContent":["import type { ApiRequestAction } from './ApiRequestAction'\nimport type { ApiRequestState } from './ApiRequestState'\n\nexport type ApiRequestReducer<SuccessData> = (\n\tpreviousState: ApiRequestState<SuccessData>,\n\taction: ApiRequestAction<SuccessData>,\n) => ApiRequestState<SuccessData>\n\nexport const apiRequestReducer = <SuccessData>(\n\tpreviousState: ApiRequestState<SuccessData>,\n\taction: ApiRequestAction<SuccessData>,\n): ApiRequestState<SuccessData> => {\n\tswitch (action.type) {\n\t\tcase 'uninitialize':\n\t\t\treturn {\n\t\t\t\treadyState: 'uninitialized',\n\t\t\t\tisFinished: false,\n\t\t\t\tisLoading: false,\n\t\t\t}\n\t\tcase 'initialize':\n\t\t\treturn {\n\t\t\t\treadyState: 'pending',\n\t\t\t\tisFinished: false,\n\t\t\t\tisLoading: true,\n\t\t\t}\n\t\tcase 'resolveSuccessfully':\n\t\t\treturn {\n\t\t\t\treadyState: 'networkSuccess',\n\t\t\t\tdata: action.data,\n\t\t\t\tisFinished: true,\n\t\t\t\tisLoading: false,\n\t\t\t}\n\t\tcase 'resolveWithError':\n\t\t\treturn {\n\t\t\t\treadyState: 'networkError',\n\t\t\t\tdata: action.error,\n\t\t\t\tisFinished: true,\n\t\t\t\tisLoading: false,\n\t\t\t}\n\t}\n}\n"],"names":[],"mappings":"AAQa,MAAA,oBAAoB,CAChC,eACA,WACkC;AAClC,UAAQ,OAAO;AAAA,SACT;AACG,aAAA;AAAA,QACN,YAAY;AAAA,QACZ,YAAY;AAAA,QACZ,WAAW;AAAA,MAAA;AAAA,SAER;AACG,aAAA;AAAA,QACN,YAAY;AAAA,QACZ,YAAY;AAAA,QACZ,WAAW;AAAA,MAAA;AAAA,SAER;AACG,aAAA;AAAA,QACN,YAAY;AAAA,QACZ,MAAM,OAAO;AAAA,QACb,YAAY;AAAA,QACZ,WAAW;AAAA,MAAA;AAAA,SAER;AACG,aAAA;AAAA,QACN,YAAY;AAAA,QACZ,MAAM,OAAO;AAAA,QACb,YAAY;AAAA,QACZ,WAAW;AAAA,MAAA;AAAA;AAGf;"}
@@ -8,34 +8,42 @@ const initialState = {
8
8
  const useApiRequest = (client) => {
9
9
  const [state, dispatch] = useReducer(apiRequestReducer, initialState);
10
10
  const isUnmountedRef = useRef(false);
11
- const sendRequest = useCallback(async (query, variables = {}, options) => {
12
- if (isUnmountedRef.current) {
13
- return Promise.reject();
14
- }
15
- dispatch({
16
- type: "initialize"
17
- });
18
- return client.sendRequest(query, {
19
- ...options,
20
- variables
21
- }).then((data) => {
11
+ const sendRequest = useCallback(
12
+ async (query, variables = {}, options) => {
13
+ if (isUnmountedRef.current) {
14
+ return Promise.reject();
15
+ }
22
16
  dispatch({
23
- type: "resolveSuccessfully",
24
- data
17
+ type: "initialize"
25
18
  });
26
- return Promise.resolve(data);
27
- }).catch((error) => {
28
- dispatch({
29
- type: "resolveWithError",
30
- error
19
+ return client.sendRequest(query, {
20
+ ...options,
21
+ variables
22
+ }).then((data) => {
23
+ dispatch({
24
+ type: "resolveSuccessfully",
25
+ data
26
+ });
27
+ return Promise.resolve(data);
28
+ }).catch((error) => {
29
+ dispatch({
30
+ type: "resolveWithError",
31
+ error
32
+ });
33
+ return Promise.reject(error);
31
34
  });
32
- return Promise.reject(error);
33
- });
34
- }, [client]);
35
- useEffect(() => () => {
36
- isUnmountedRef.current = true;
37
- }, []);
35
+ },
36
+ [client]
37
+ );
38
+ useEffect(
39
+ () => () => {
40
+ isUnmountedRef.current = true;
41
+ },
42
+ []
43
+ );
38
44
  return [state, sendRequest];
39
45
  };
40
- export { useApiRequest };
46
+ export {
47
+ useApiRequest
48
+ };
41
49
  //# sourceMappingURL=useApiRequest.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useApiRequest.js","sources":["../../../src/apiRequest/useApiRequest.ts"],"sourcesContent":["import type {\n\tGraphQlClient,\n\tGraphQlClientFailedRequestMetadata,\n\tGraphQlClientRequestOptions,\n\tGraphQlClientVariables,\n} from '@contember/client'\nimport { useCallback, useEffect, useReducer, useRef } from 'react'\nimport { ApiRequestReducer, apiRequestReducer } from './apiRequestReducer'\nimport type { ApiRequestState } from './ApiRequestState'\n\nconst initialState: ApiRequestState<any> = {\n\tisLoading: false,\n\tisFinished: false,\n\treadyState: 'uninitialized',\n}\n\nexport type UseApiRequestResult<SuccessData> = [\n\tApiRequestState<SuccessData>,\n\t(\n\t\tquery: string,\n\t\tvariables?: GraphQlClientVariables,\n\t\toptions?: Omit<GraphQlClientRequestOptions, 'variables'>,\n\t) => Promise<SuccessData>,\n]\n\nexport const useApiRequest = <SuccessData>(client: GraphQlClient): UseApiRequestResult<SuccessData> => {\n\tconst [state, dispatch] = useReducer(apiRequestReducer as ApiRequestReducer<SuccessData>, initialState)\n\n\tconst isUnmountedRef = useRef(false)\n\tconst sendRequest = useCallback(\n\t\tasync (\n\t\t\tquery: string,\n\t\t\tvariables: GraphQlClientVariables = {},\n\t\t\toptions?: Omit<GraphQlClientRequestOptions, 'variables'>,\n\t\t): Promise<SuccessData> => {\n\t\t\tif (isUnmountedRef.current) {\n\t\t\t\treturn Promise.reject()\n\t\t\t}\n\t\t\tdispatch({\n\t\t\t\ttype: 'initialize',\n\t\t\t})\n\t\t\treturn client\n\t\t\t\t.sendRequest<SuccessData>(query, {\n\t\t\t\t\t...options,\n\t\t\t\t\tvariables,\n\t\t\t\t})\n\t\t\t\t.then(data => {\n\t\t\t\t\tdispatch({\n\t\t\t\t\t\ttype: 'resolveSuccessfully',\n\t\t\t\t\t\tdata,\n\t\t\t\t\t})\n\t\t\t\t\treturn Promise.resolve(data)\n\t\t\t\t})\n\t\t\t\t.catch((error: GraphQlClientFailedRequestMetadata) => {\n\t\t\t\t\tdispatch({\n\t\t\t\t\t\ttype: 'resolveWithError',\n\t\t\t\t\t\terror,\n\t\t\t\t\t})\n\t\t\t\t\treturn Promise.reject(error)\n\t\t\t\t})\n\t\t},\n\t\t[client],\n\t)\n\n\tuseEffect(\n\t\t() => () => {\n\t\t\tisUnmountedRef.current = true\n\t\t},\n\t\t[], // This empty array is crucial! Otherwise it will first \"unmount\" before second render no matter what.\n\t)\n\n\treturn [state, sendRequest]\n}\n"],"names":[],"mappings":";;AAUA,MAAM,eAAqC;AAAA,EAC1C,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,YAAY;AACb;AAWa,MAAA,gBAAgB,CAAc,WAA4D;AACtG,QAAM,CAAC,OAAO,YAAY,WAAW,mBAAqD,YAAY;AAEhG,QAAA,iBAAiB,OAAO,KAAK;AACnC,QAAM,cAAc,YACnB,OACC,OACA,YAAoC,IACpC,YAC0B;AAC1B,QAAI,eAAe,SAAS;AAC3B,aAAO,QAAQ;IAChB;AACS,aAAA;AAAA,MACR,MAAM;AAAA,IAAA,CACN;AACM,WAAA,OACL,YAAyB,OAAO;AAAA,SAC7B;AAAA,MACH;AAAA,IAAA,CACA,EACA,KAAK,CAAQ,SAAA;AACJ,eAAA;AAAA,QACR,MAAM;AAAA,QACN;AAAA,MAAA,CACA;AACM,aAAA,QAAQ,QAAQ,IAAI;AAAA,IAAA,CAC3B,EACA,MAAM,CAAC,UAA8C;AAC5C,eAAA;AAAA,QACR,MAAM;AAAA,QACN;AAAA,MAAA,CACA;AACM,aAAA,QAAQ,OAAO,KAAK;AAAA,IAAA,CAC3B;AAAA,EAAA,GAEH,CAAC,MAAM,CACR;AAEA,YACC,MAAM,MAAM;AACX,mBAAe,UAAU;AAAA,EAC1B,GACA,CACD,CAAA;AAEO,SAAA,CAAC,OAAO,WAAW;AAC3B;;"}
1
+ {"version":3,"file":"useApiRequest.js","sources":["../../../src/apiRequest/useApiRequest.ts"],"sourcesContent":["import type {\n\tGraphQlClient,\n\tGraphQlClientFailedRequestMetadata,\n\tGraphQlClientRequestOptions,\n\tGraphQlClientVariables,\n} from '@contember/client'\nimport { useCallback, useEffect, useReducer, useRef } from 'react'\nimport { ApiRequestReducer, apiRequestReducer } from './apiRequestReducer'\nimport type { ApiRequestState } from './ApiRequestState'\n\nconst initialState: ApiRequestState<any> = {\n\tisLoading: false,\n\tisFinished: false,\n\treadyState: 'uninitialized',\n}\n\nexport type UseApiRequestResult<SuccessData> = [\n\tApiRequestState<SuccessData>,\n\t(\n\t\tquery: string,\n\t\tvariables?: GraphQlClientVariables,\n\t\toptions?: Omit<GraphQlClientRequestOptions, 'variables'>,\n\t) => Promise<SuccessData>,\n]\n\nexport const useApiRequest = <SuccessData>(client: GraphQlClient): UseApiRequestResult<SuccessData> => {\n\tconst [state, dispatch] = useReducer(apiRequestReducer as ApiRequestReducer<SuccessData>, initialState)\n\n\tconst isUnmountedRef = useRef(false)\n\tconst sendRequest = useCallback(\n\t\tasync (\n\t\t\tquery: string,\n\t\t\tvariables: GraphQlClientVariables = {},\n\t\t\toptions?: Omit<GraphQlClientRequestOptions, 'variables'>,\n\t\t): Promise<SuccessData> => {\n\t\t\tif (isUnmountedRef.current) {\n\t\t\t\treturn Promise.reject()\n\t\t\t}\n\t\t\tdispatch({\n\t\t\t\ttype: 'initialize',\n\t\t\t})\n\t\t\treturn client\n\t\t\t\t.sendRequest<SuccessData>(query, {\n\t\t\t\t\t...options,\n\t\t\t\t\tvariables,\n\t\t\t\t})\n\t\t\t\t.then(data => {\n\t\t\t\t\tdispatch({\n\t\t\t\t\t\ttype: 'resolveSuccessfully',\n\t\t\t\t\t\tdata,\n\t\t\t\t\t})\n\t\t\t\t\treturn Promise.resolve(data)\n\t\t\t\t})\n\t\t\t\t.catch((error: GraphQlClientFailedRequestMetadata) => {\n\t\t\t\t\tdispatch({\n\t\t\t\t\t\ttype: 'resolveWithError',\n\t\t\t\t\t\terror,\n\t\t\t\t\t})\n\t\t\t\t\treturn Promise.reject(error)\n\t\t\t\t})\n\t\t},\n\t\t[client],\n\t)\n\n\tuseEffect(\n\t\t() => () => {\n\t\t\tisUnmountedRef.current = true\n\t\t},\n\t\t[], // This empty array is crucial! Otherwise it will first \"unmount\" before second render no matter what.\n\t)\n\n\treturn [state, sendRequest]\n}\n"],"names":[],"mappings":";;AAUA,MAAM,eAAqC;AAAA,EAC1C,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,YAAY;AACb;AAWa,MAAA,gBAAgB,CAAc,WAA4D;AACtG,QAAM,CAAC,OAAO,QAAQ,IAAI,WAAW,mBAAqD,YAAY;AAEhG,QAAA,iBAAiB,OAAO,KAAK;AACnC,QAAM,cAAc;AAAA,IACnB,OACC,OACA,YAAoC,IACpC,YAC0B;AAC1B,UAAI,eAAe,SAAS;AAC3B,eAAO,QAAQ;MAChB;AACS,eAAA;AAAA,QACR,MAAM;AAAA,MAAA,CACN;AACM,aAAA,OACL,YAAyB,OAAO;AAAA,QAChC,GAAG;AAAA,QACH;AAAA,MAAA,CACA,EACA,KAAK,CAAQ,SAAA;AACJ,iBAAA;AAAA,UACR,MAAM;AAAA,UACN;AAAA,QAAA,CACA;AACM,eAAA,QAAQ,QAAQ,IAAI;AAAA,MAAA,CAC3B,EACA,MAAM,CAAC,UAA8C;AAC5C,iBAAA;AAAA,UACR,MAAM;AAAA,UACN;AAAA,QAAA,CACA;AACM,eAAA,QAAQ,OAAO,KAAK;AAAA,MAAA,CAC3B;AAAA,IACH;AAAA,IACA,CAAC,MAAM;AAAA,EAAA;AAGR;AAAA,IACC,MAAM,MAAM;AACX,qBAAe,UAAU;AAAA,IAC1B;AAAA,IACA,CAAC;AAAA,EAAA;AAGK,SAAA,CAAC,OAAO,WAAW;AAC3B;"}
@@ -1,4 +1,6 @@
1
1
  import { createContext } from "react";
2
2
  const SessionTokenContext = createContext(void 0);
3
- export { SessionTokenContext };
3
+ export {
4
+ SessionTokenContext
5
+ };
4
6
  //# sourceMappingURL=SessionTokenContext.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SessionTokenContext.js","sources":["../../../src/auth/SessionTokenContext.ts"],"sourcesContent":["import { createContext } from 'react'\n\nexport const SessionTokenContext = createContext<string | undefined>(undefined)\n"],"names":[],"mappings":";AAEa,MAAA,sBAAsB,cAAkC,MAAS;;"}
1
+ {"version":3,"file":"SessionTokenContext.js","sources":["../../../src/auth/SessionTokenContext.ts"],"sourcesContent":["import { createContext } from 'react'\n\nexport const SessionTokenContext = createContext<string | undefined>(undefined)\n"],"names":[],"mappings":";AAEa,MAAA,sBAAsB,cAAkC,MAAS;"}
@@ -2,5 +2,7 @@ import { createContext } from "react";
2
2
  const SetSessionTokenContext = createContext(() => {
3
3
  throw new Error("SetSessionTokenContext is not set");
4
4
  });
5
- export { SetSessionTokenContext };
5
+ export {
6
+ SetSessionTokenContext
7
+ };
6
8
  //# sourceMappingURL=SetSessionTokenContext.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SetSessionTokenContext.js","sources":["../../../src/auth/SetSessionTokenContext.ts"],"sourcesContent":["import { createContext } from 'react'\n\nexport const SetSessionTokenContext = createContext<(token: string | undefined) => void>(() => {\n\tthrow new Error('SetSessionTokenContext is not set')\n})\n"],"names":[],"mappings":";AAEa,MAAA,yBAAyB,cAAmD,MAAM;AACxF,QAAA,IAAI,MAAM,mCAAmC;AACpD,CAAC;;"}
1
+ {"version":3,"file":"SetSessionTokenContext.js","sources":["../../../src/auth/SetSessionTokenContext.ts"],"sourcesContent":["import { createContext } from 'react'\n\nexport const SetSessionTokenContext = createContext<(token: string | undefined) => void>(() => {\n\tthrow new Error('SetSessionTokenContext is not set')\n})\n"],"names":[],"mappings":";AAEa,MAAA,yBAAyB,cAAmD,MAAM;AACxF,QAAA,IAAI,MAAM,mCAAmC;AACpD,CAAC;"}
@@ -1,5 +1,7 @@
1
1
  import { useContext } from "react";
2
2
  import { SessionTokenContext } from "./SessionTokenContext.js";
3
3
  const useSessionToken = () => useContext(SessionTokenContext);
4
- export { useSessionToken };
4
+ export {
5
+ useSessionToken
6
+ };
5
7
  //# sourceMappingURL=useSessionToken.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useSessionToken.js","sources":["../../../src/auth/useSessionToken.ts"],"sourcesContent":["import { useContext } from 'react'\nimport { SessionTokenContext } from './SessionTokenContext'\n\nexport const useSessionToken = () => useContext(SessionTokenContext)\n"],"names":[],"mappings":";;AAGa,MAAA,kBAAkB,MAAM,WAAW,mBAAmB;;"}
1
+ {"version":3,"file":"useSessionToken.js","sources":["../../../src/auth/useSessionToken.ts"],"sourcesContent":["import { useContext } from 'react'\nimport { SessionTokenContext } from './SessionTokenContext'\n\nexport const useSessionToken = () => useContext(SessionTokenContext)\n"],"names":[],"mappings":";;AAGa,MAAA,kBAAkB,MAAM,WAAW,mBAAmB;"}
@@ -1,5 +1,7 @@
1
1
  import { useContext } from "react";
2
2
  import { SetSessionTokenContext } from "./SetSessionTokenContext.js";
3
3
  const useSetSessionToken = () => useContext(SetSessionTokenContext);
4
- export { useSetSessionToken };
4
+ export {
5
+ useSetSessionToken
6
+ };
5
7
  //# sourceMappingURL=useSetSessionToken.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useSetSessionToken.js","sources":["../../../src/auth/useSetSessionToken.ts"],"sourcesContent":["import { useContext } from 'react'\nimport { SetSessionTokenContext } from './SetSessionTokenContext'\n\nexport const useSetSessionToken = () => useContext(SetSessionTokenContext)\n"],"names":[],"mappings":";;AAGa,MAAA,qBAAqB,MAAM,WAAW,sBAAsB;;"}
1
+ {"version":3,"file":"useSetSessionToken.js","sources":["../../../src/auth/useSetSessionToken.ts"],"sourcesContent":["import { useContext } from 'react'\nimport { SetSessionTokenContext } from './SetSessionTokenContext'\n\nexport const useSetSessionToken = () => useContext(SetSessionTokenContext)\n"],"names":[],"mappings":";;AAGa,MAAA,qBAAqB,MAAM,WAAW,sBAAsB;"}