@contember/react-client 1.0.0-rc.8 → 1.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.
- package/dist/development/ClientError.js +0 -1
- package/dist/development/ClientError.js.map +1 -1
- package/dist/development/ContemberClient.js +7 -9
- package/dist/development/ContemberClient.js.map +1 -1
- package/dist/development/apiRequest/apiRequestReducer.js +0 -1
- package/dist/development/apiRequest/apiRequestReducer.js.map +1 -1
- package/dist/development/apiRequest/useApiRequest.js +2 -4
- package/dist/development/apiRequest/useApiRequest.js.map +1 -1
- package/dist/development/auth/SessionTokenContext.js +1 -3
- package/dist/development/auth/SessionTokenContext.js.map +1 -1
- package/dist/development/auth/SetSessionTokenContext.js +1 -3
- package/dist/development/auth/SetSessionTokenContext.js.map +1 -1
- package/dist/development/auth/useSessionToken.js +2 -4
- package/dist/development/auth/useSessionToken.js.map +1 -1
- package/dist/development/auth/useSetSessionToken.js +2 -4
- package/dist/development/auth/useSetSessionToken.js.map +1 -1
- package/dist/development/components/RichTextRenderer/ElementRenderer.js +5 -7
- package/dist/development/components/RichTextRenderer/ElementRenderer.js.map +1 -1
- package/dist/development/components/RichTextRenderer/LeafRenderer.js +3 -5
- package/dist/development/components/RichTextRenderer/LeafRenderer.js.map +1 -1
- package/dist/development/components/RichTextRenderer/RenderElementFallback.js +5 -7
- package/dist/development/components/RichTextRenderer/RenderElementFallback.js.map +1 -1
- package/dist/development/components/RichTextRenderer/RenderLeafFallback.js +1 -3
- package/dist/development/components/RichTextRenderer/RenderLeafFallback.js.map +1 -1
- package/dist/development/components/RichTextRenderer/RichTextRenderMetadataContext.js +1 -3
- package/dist/development/components/RichTextRenderer/RichTextRenderMetadataContext.js.map +1 -1
- package/dist/development/components/RichTextRenderer/RichTextRenderer.js +5 -7
- package/dist/development/components/RichTextRenderer/RichTextRenderer.js.map +1 -1
- package/dist/development/components/RichTextRenderer/RichTextRendererError.js +0 -1
- package/dist/development/components/RichTextRenderer/RichTextRendererError.js.map +1 -1
- package/dist/development/components/RichTextRenderer/defaultDeserialize.js +0 -1
- package/dist/development/components/RichTextRenderer/defaultDeserialize.js.map +1 -1
- package/dist/development/components/RichTextRenderer/renderChildren.js +3 -5
- package/dist/development/components/RichTextRenderer/renderChildren.js.map +1 -1
- package/dist/development/components/RichTextRenderer/resolveRichTextElementMetadata.js +1 -3
- package/dist/development/components/RichTextRenderer/resolveRichTextElementMetadata.js.map +1 -1
- package/dist/development/config/ApiBaseUrlContext.js +1 -3
- package/dist/development/config/ApiBaseUrlContext.js.map +1 -1
- package/dist/development/config/LoginTokenContext.js +1 -3
- package/dist/development/config/LoginTokenContext.js.map +1 -1
- package/dist/development/config/useApiBaseUrl.js +2 -4
- package/dist/development/config/useApiBaseUrl.js.map +1 -1
- package/dist/development/config/useLoginToken.js +2 -4
- package/dist/development/config/useLoginToken.js.map +1 -1
- package/dist/development/content/useContentApiRequest.js +2 -4
- package/dist/development/content/useContentApiRequest.js.map +1 -1
- package/dist/development/content/useContentGraphQlClient.js +2 -4
- package/dist/development/content/useContentGraphQlClient.js.map +1 -1
- package/dist/development/content/useCurrentContentGraphQlClient.js +4 -6
- package/dist/development/content/useCurrentContentGraphQlClient.js.map +1 -1
- package/dist/development/index.js +29 -29
- package/dist/development/index.js.map +1 -1
- package/dist/development/project/ProjectSlugContext.js +1 -3
- package/dist/development/project/ProjectSlugContext.js.map +1 -1
- package/dist/development/project/StageSlugContext.js +1 -3
- package/dist/development/project/StageSlugContext.js.map +1 -1
- package/dist/development/project/useProjectSlug.js +2 -4
- package/dist/development/project/useProjectSlug.js.map +1 -1
- package/dist/development/project/useStageSlug.js +2 -4
- package/dist/development/project/useStageSlug.js.map +1 -1
- package/dist/development/system/useCurrentSystemGraphQlClient.js +3 -5
- package/dist/development/system/useCurrentSystemGraphQlClient.js.map +1 -1
- package/dist/development/system/useSystemApiRequest.js +2 -4
- package/dist/development/system/useSystemApiRequest.js.map +1 -1
- package/dist/development/system/useSystemGraphQlClient.js +2 -4
- package/dist/development/system/useSystemGraphQlClient.js.map +1 -1
- package/dist/development/tenant/useTenantApiRequest.js +2 -4
- package/dist/development/tenant/useTenantApiRequest.js.map +1 -1
- package/dist/development/tenant/useTenantGraphQlClient.js +2 -4
- package/dist/development/tenant/useTenantGraphQlClient.js.map +1 -1
- package/dist/development/upload/fileUploadReducer.js +3 -5
- package/dist/development/upload/fileUploadReducer.js.map +1 -1
- package/dist/development/upload/toFileId.js +0 -1
- package/dist/development/upload/toFileId.js.map +1 -1
- package/dist/development/upload/useFileUpload.js +5 -7
- package/dist/development/upload/useFileUpload.js.map +1 -1
- package/dist/development/useGraphQlClient.js +4 -6
- package/dist/development/useGraphQlClient.js.map +1 -1
- package/dist/development/utils/assertNever.js +0 -1
- package/dist/development/utils/assertNever.js.map +1 -1
- package/dist/production/ClientError.js.map +1 -1
- package/dist/production/ContemberClient.js.map +1 -1
- package/dist/production/apiRequest/apiRequestReducer.js.map +1 -1
- package/dist/production/apiRequest/useApiRequest.js.map +1 -1
- package/dist/production/auth/SessionTokenContext.js.map +1 -1
- package/dist/production/auth/SetSessionTokenContext.js.map +1 -1
- package/dist/production/auth/useSessionToken.js.map +1 -1
- package/dist/production/auth/useSetSessionToken.js.map +1 -1
- package/dist/production/components/RichTextRenderer/ElementRenderer.js.map +1 -1
- package/dist/production/components/RichTextRenderer/LeafRenderer.js.map +1 -1
- package/dist/production/components/RichTextRenderer/RenderElementFallback.js.map +1 -1
- package/dist/production/components/RichTextRenderer/RenderLeafFallback.js.map +1 -1
- package/dist/production/components/RichTextRenderer/RichTextRenderMetadataContext.js.map +1 -1
- package/dist/production/components/RichTextRenderer/RichTextRenderer.js.map +1 -1
- package/dist/production/components/RichTextRenderer/RichTextRendererError.js.map +1 -1
- package/dist/production/components/RichTextRenderer/defaultDeserialize.js.map +1 -1
- package/dist/production/components/RichTextRenderer/renderChildren.js.map +1 -1
- package/dist/production/components/RichTextRenderer/resolveRichTextElementMetadata.js.map +1 -1
- package/dist/production/config/ApiBaseUrlContext.js.map +1 -1
- package/dist/production/config/LoginTokenContext.js.map +1 -1
- package/dist/production/config/useApiBaseUrl.js.map +1 -1
- package/dist/production/config/useLoginToken.js.map +1 -1
- package/dist/production/content/useContentApiRequest.js.map +1 -1
- package/dist/production/content/useContentGraphQlClient.js.map +1 -1
- package/dist/production/content/useCurrentContentGraphQlClient.js.map +1 -1
- package/dist/production/project/ProjectSlugContext.js.map +1 -1
- package/dist/production/project/StageSlugContext.js.map +1 -1
- package/dist/production/project/useProjectSlug.js.map +1 -1
- package/dist/production/project/useStageSlug.js.map +1 -1
- package/dist/production/system/useCurrentSystemGraphQlClient.js.map +1 -1
- package/dist/production/system/useSystemApiRequest.js.map +1 -1
- package/dist/production/system/useSystemGraphQlClient.js.map +1 -1
- package/dist/production/tenant/useTenantApiRequest.js.map +1 -1
- package/dist/production/tenant/useTenantGraphQlClient.js.map +1 -1
- package/dist/production/upload/fileUploadReducer.js.map +1 -1
- package/dist/production/upload/toFileId.js.map +1 -1
- package/dist/production/upload/useFileUpload.js.map +1 -1
- package/dist/production/useGraphQlClient.js.map +1 -1
- package/dist/production/utils/assertNever.js.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +6 -4
- package/readme.md +39 -1
- package/src/tsconfig.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useApiBaseUrl.js","sources":["../../../src/config/useApiBaseUrl.ts"],"sourcesContent":["import { useContext } from 'react'\nimport { ApiBaseUrlContext } from './ApiBaseUrlContext'\n\nexport const useApiBaseUrl = () => useContext(ApiBaseUrlContext)\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useApiBaseUrl.js","sources":["../../../src/config/useApiBaseUrl.ts"],"sourcesContent":["import { useContext } from 'react'\nimport { ApiBaseUrlContext } from './ApiBaseUrlContext'\n\nexport const useApiBaseUrl = () => useContext(ApiBaseUrlContext)\n"],"names":[],"mappings":";;AAGa,MAAA,gBAAgB,MAAM,WAAW,iBAAiB;;"}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
import { useContext } from
|
|
2
|
-
import { LoginTokenContext } from
|
|
3
|
-
|
|
1
|
+
import { useContext } from "react";
|
|
2
|
+
import { LoginTokenContext } from "./LoginTokenContext.js";
|
|
4
3
|
const useLoginToken = () => useContext(LoginTokenContext);
|
|
5
|
-
|
|
6
4
|
export { useLoginToken };
|
|
7
5
|
//# sourceMappingURL=useLoginToken.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useLoginToken.js","sources":["../../../src/config/useLoginToken.ts"],"sourcesContent":["import { useContext } from 'react'\nimport { LoginTokenContext } from './LoginTokenContext'\n\nexport const useLoginToken = () => useContext(LoginTokenContext)\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useLoginToken.js","sources":["../../../src/config/useLoginToken.ts"],"sourcesContent":["import { useContext } from 'react'\nimport { LoginTokenContext } from './LoginTokenContext'\n\nexport const useLoginToken = () => useContext(LoginTokenContext)\n"],"names":[],"mappings":";;AAGa,MAAA,gBAAgB,MAAM,WAAW,iBAAiB;;"}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
import { useCurrentContentGraphQlClient } from
|
|
2
|
-
import { useApiRequest } from
|
|
3
|
-
|
|
1
|
+
import { useCurrentContentGraphQlClient } from "./useCurrentContentGraphQlClient.js";
|
|
2
|
+
import { useApiRequest } from "../apiRequest/useApiRequest.js";
|
|
4
3
|
const useContentApiRequest = () => useApiRequest(useCurrentContentGraphQlClient());
|
|
5
|
-
|
|
6
4
|
export { useContentApiRequest };
|
|
7
5
|
//# sourceMappingURL=useContentApiRequest.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useContentApiRequest.js","sources":["../../../src/content/useContentApiRequest.ts"],"sourcesContent":["import type { UseApiRequestResult } from '../apiRequest'\nimport { useApiRequest } from '../apiRequest'\nimport { useCurrentContentGraphQlClient } from './useCurrentContentGraphQlClient'\n\nexport const useContentApiRequest = <SuccessData>(): UseApiRequestResult<SuccessData> =>\n\tuseApiRequest<SuccessData>(useCurrentContentGraphQlClient())\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useContentApiRequest.js","sources":["../../../src/content/useContentApiRequest.ts"],"sourcesContent":["import type { UseApiRequestResult } from '../apiRequest'\nimport { useApiRequest } from '../apiRequest'\nimport { useCurrentContentGraphQlClient } from './useCurrentContentGraphQlClient'\n\nexport const useContentApiRequest = <SuccessData>(): UseApiRequestResult<SuccessData> =>\n\tuseApiRequest<SuccessData>(useCurrentContentGraphQlClient())\n"],"names":[],"mappings":";;AAIO,MAAM,uBAAuB,MACnC,cAA2B,+BAAgC,CAAA;;"}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
import { formatContentApiRelativeUrl } from
|
|
2
|
-
import { useGraphQlClient } from
|
|
3
|
-
|
|
1
|
+
import { formatContentApiRelativeUrl } from "@contember/client";
|
|
2
|
+
import { useGraphQlClient } from "../useGraphQlClient.js";
|
|
4
3
|
const useContentGraphQlClient = (projectSlug, stageSlug) => useGraphQlClient(formatContentApiRelativeUrl(projectSlug, stageSlug));
|
|
5
|
-
|
|
6
4
|
export { useContentGraphQlClient };
|
|
7
5
|
//# sourceMappingURL=useContentGraphQlClient.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useContentGraphQlClient.js","sources":["../../../src/content/useContentGraphQlClient.ts"],"sourcesContent":["import type { GraphQlClient } from '@contember/client'\nimport { formatContentApiRelativeUrl } from '@contember/client'\nimport { useGraphQlClient } from '../useGraphQlClient'\n\nexport const useContentGraphQlClient = (projectSlug: string, stageSlug: string): GraphQlClient =>\n\tuseGraphQlClient(formatContentApiRelativeUrl(projectSlug, stageSlug))\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useContentGraphQlClient.js","sources":["../../../src/content/useContentGraphQlClient.ts"],"sourcesContent":["import type { GraphQlClient } from '@contember/client'\nimport { formatContentApiRelativeUrl } from '@contember/client'\nimport { useGraphQlClient } from '../useGraphQlClient'\n\nexport const useContentGraphQlClient = (projectSlug: string, stageSlug: string): GraphQlClient =>\n\tuseGraphQlClient(formatContentApiRelativeUrl(projectSlug, stageSlug))\n"],"names":[],"mappings":";;AAIa,MAAA,0BAA0B,CAAC,aAAqB,cAC5D,iBAAiB,4BAA4B,aAAa,SAAS,CAAC;;"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import { ClientError } from
|
|
2
|
-
import { useContentGraphQlClient } from
|
|
3
|
-
import { useProjectSlug } from
|
|
4
|
-
import { useStageSlug } from
|
|
5
|
-
|
|
1
|
+
import { ClientError } from "../ClientError.js";
|
|
2
|
+
import { useContentGraphQlClient } from "./useContentGraphQlClient.js";
|
|
3
|
+
import { useProjectSlug } from "../project/useProjectSlug.js";
|
|
4
|
+
import { useStageSlug } from "../project/useStageSlug.js";
|
|
6
5
|
const useCurrentContentGraphQlClient = () => {
|
|
7
6
|
const projectSlug = useProjectSlug();
|
|
8
7
|
const stageSlug = useStageSlug();
|
|
@@ -14,6 +13,5 @@ const useCurrentContentGraphQlClient = () => {
|
|
|
14
13
|
}
|
|
15
14
|
return useContentGraphQlClient(projectSlug, stageSlug);
|
|
16
15
|
};
|
|
17
|
-
|
|
18
16
|
export { useCurrentContentGraphQlClient };
|
|
19
17
|
//# sourceMappingURL=useCurrentContentGraphQlClient.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCurrentContentGraphQlClient.js","sources":["../../../src/content/useCurrentContentGraphQlClient.ts"],"sourcesContent":["import type { GraphQlClient } from '@contember/client'\nimport { ClientError } from '../ClientError'\nimport { useProjectSlug, useStageSlug } from '../project'\nimport { useContentGraphQlClient } from './useContentGraphQlClient'\n\nexport const useCurrentContentGraphQlClient = (): GraphQlClient => {\n\tconst projectSlug = useProjectSlug()\n\tconst stageSlug = useStageSlug()\n\n\tif (projectSlug === undefined) {\n\t\tthrow new ClientError(`Cannot contact the content API: undefined project slug.`)\n\t}\n\tif (stageSlug === undefined) {\n\t\tthrow new ClientError(`Cannot contact the content API: undefined stage slug.`)\n\t}\n\treturn useContentGraphQlClient(projectSlug, stageSlug)\n}\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useCurrentContentGraphQlClient.js","sources":["../../../src/content/useCurrentContentGraphQlClient.ts"],"sourcesContent":["import type { GraphQlClient } from '@contember/client'\nimport { ClientError } from '../ClientError'\nimport { useProjectSlug, useStageSlug } from '../project'\nimport { useContentGraphQlClient } from './useContentGraphQlClient'\n\nexport const useCurrentContentGraphQlClient = (): GraphQlClient => {\n\tconst projectSlug = useProjectSlug()\n\tconst stageSlug = useStageSlug()\n\n\tif (projectSlug === undefined) {\n\t\tthrow new ClientError(`Cannot contact the content API: undefined project slug.`)\n\t}\n\tif (stageSlug === undefined) {\n\t\tthrow new ClientError(`Cannot contact the content API: undefined stage slug.`)\n\t}\n\treturn useContentGraphQlClient(projectSlug, stageSlug)\n}\n"],"names":[],"mappings":";;;;AAKO,MAAM,iCAAiC,MAAqB;AAClE,QAAM,cAAc;AACpB,QAAM,YAAY;AAElB,MAAI,gBAAgB,QAAW;AACxB,UAAA,IAAI,YAAY,yDAAyD;AAAA,EAChF;AACA,MAAI,cAAc,QAAW;AACtB,UAAA,IAAI,YAAY,uDAAuD;AAAA,EAC9E;AACO,SAAA,wBAAwB,aAAa,SAAS;AACtD;;"}
|
|
@@ -1,30 +1,30 @@
|
|
|
1
|
-
export { ContemberClient } from
|
|
2
|
-
export { ClientError } from
|
|
3
|
-
export { useGraphQlClient } from
|
|
4
|
-
export * from
|
|
5
|
-
export { apiRequestReducer } from
|
|
6
|
-
export { useApiRequest } from
|
|
7
|
-
export { SessionTokenContext } from
|
|
8
|
-
export { SetSessionTokenContext } from
|
|
9
|
-
export { useSessionToken } from
|
|
10
|
-
export { useSetSessionToken } from
|
|
11
|
-
export { RichTextRenderer } from
|
|
12
|
-
export { RichTextRendererError } from
|
|
13
|
-
export { ApiBaseUrlContext } from
|
|
14
|
-
export { LoginTokenContext } from
|
|
15
|
-
export { useApiBaseUrl } from
|
|
16
|
-
export { useLoginToken } from
|
|
17
|
-
export { useContentApiRequest } from
|
|
18
|
-
export { useContentGraphQlClient } from
|
|
19
|
-
export { useCurrentContentGraphQlClient } from
|
|
20
|
-
export { ProjectSlugContext } from
|
|
21
|
-
export { StageSlugContext } from
|
|
22
|
-
export { useProjectSlug } from
|
|
23
|
-
export { useStageSlug } from
|
|
24
|
-
export { useCurrentSystemGraphQlClient } from
|
|
25
|
-
export { useSystemApiRequest } from
|
|
26
|
-
export { useSystemGraphQlClient } from
|
|
27
|
-
export { useTenantApiRequest } from
|
|
28
|
-
export { useTenantGraphQlClient } from
|
|
29
|
-
export { useFileUpload } from
|
|
1
|
+
export { ContemberClient } from "./ContemberClient.js";
|
|
2
|
+
export { ClientError } from "./ClientError.js";
|
|
3
|
+
export { useGraphQlClient } from "./useGraphQlClient.js";
|
|
4
|
+
export * from "@contember/client";
|
|
5
|
+
export { apiRequestReducer } from "./apiRequest/apiRequestReducer.js";
|
|
6
|
+
export { useApiRequest } from "./apiRequest/useApiRequest.js";
|
|
7
|
+
export { SessionTokenContext } from "./auth/SessionTokenContext.js";
|
|
8
|
+
export { SetSessionTokenContext } from "./auth/SetSessionTokenContext.js";
|
|
9
|
+
export { useSessionToken } from "./auth/useSessionToken.js";
|
|
10
|
+
export { useSetSessionToken } from "./auth/useSetSessionToken.js";
|
|
11
|
+
export { RichTextRenderer } from "./components/RichTextRenderer/RichTextRenderer.js";
|
|
12
|
+
export { RichTextRendererError } from "./components/RichTextRenderer/RichTextRendererError.js";
|
|
13
|
+
export { ApiBaseUrlContext } from "./config/ApiBaseUrlContext.js";
|
|
14
|
+
export { LoginTokenContext } from "./config/LoginTokenContext.js";
|
|
15
|
+
export { useApiBaseUrl } from "./config/useApiBaseUrl.js";
|
|
16
|
+
export { useLoginToken } from "./config/useLoginToken.js";
|
|
17
|
+
export { useContentApiRequest } from "./content/useContentApiRequest.js";
|
|
18
|
+
export { useContentGraphQlClient } from "./content/useContentGraphQlClient.js";
|
|
19
|
+
export { useCurrentContentGraphQlClient } from "./content/useCurrentContentGraphQlClient.js";
|
|
20
|
+
export { ProjectSlugContext } from "./project/ProjectSlugContext.js";
|
|
21
|
+
export { StageSlugContext } from "./project/StageSlugContext.js";
|
|
22
|
+
export { useProjectSlug } from "./project/useProjectSlug.js";
|
|
23
|
+
export { useStageSlug } from "./project/useStageSlug.js";
|
|
24
|
+
export { useCurrentSystemGraphQlClient } from "./system/useCurrentSystemGraphQlClient.js";
|
|
25
|
+
export { useSystemApiRequest } from "./system/useSystemApiRequest.js";
|
|
26
|
+
export { useSystemGraphQlClient } from "./system/useSystemGraphQlClient.js";
|
|
27
|
+
export { useTenantApiRequest } from "./tenant/useTenantApiRequest.js";
|
|
28
|
+
export { useTenantGraphQlClient } from "./tenant/useTenantGraphQlClient.js";
|
|
29
|
+
export { useFileUpload } from "./upload/useFileUpload.js";
|
|
30
30
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProjectSlugContext.js","sources":["../../../src/project/ProjectSlugContext.ts"],"sourcesContent":["import { createContext } from 'react'\n\nexport const ProjectSlugContext = createContext<string | undefined>(undefined)\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ProjectSlugContext.js","sources":["../../../src/project/ProjectSlugContext.ts"],"sourcesContent":["import { createContext } from 'react'\n\nexport const ProjectSlugContext = createContext<string | undefined>(undefined)\n"],"names":[],"mappings":";AAEa,MAAA,qBAAqB,cAAkC,MAAS;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StageSlugContext.js","sources":["../../../src/project/StageSlugContext.ts"],"sourcesContent":["import { createContext } from 'react'\n\nexport const StageSlugContext = createContext<string | undefined>(undefined)\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"StageSlugContext.js","sources":["../../../src/project/StageSlugContext.ts"],"sourcesContent":["import { createContext } from 'react'\n\nexport const StageSlugContext = createContext<string | undefined>(undefined)\n"],"names":[],"mappings":";AAEa,MAAA,mBAAmB,cAAkC,MAAS;;"}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
import { useContext } from
|
|
2
|
-
import { ProjectSlugContext } from
|
|
3
|
-
|
|
1
|
+
import { useContext } from "react";
|
|
2
|
+
import { ProjectSlugContext } from "./ProjectSlugContext.js";
|
|
4
3
|
const useProjectSlug = () => useContext(ProjectSlugContext);
|
|
5
|
-
|
|
6
4
|
export { useProjectSlug };
|
|
7
5
|
//# sourceMappingURL=useProjectSlug.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useProjectSlug.js","sources":["../../../src/project/useProjectSlug.ts"],"sourcesContent":["import { useContext } from 'react'\nimport { ProjectSlugContext } from './ProjectSlugContext'\n\nexport const useProjectSlug = () => useContext(ProjectSlugContext)\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useProjectSlug.js","sources":["../../../src/project/useProjectSlug.ts"],"sourcesContent":["import { useContext } from 'react'\nimport { ProjectSlugContext } from './ProjectSlugContext'\n\nexport const useProjectSlug = () => useContext(ProjectSlugContext)\n"],"names":[],"mappings":";;AAGa,MAAA,iBAAiB,MAAM,WAAW,kBAAkB;;"}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
import { useContext } from
|
|
2
|
-
import { StageSlugContext } from
|
|
3
|
-
|
|
1
|
+
import { useContext } from "react";
|
|
2
|
+
import { StageSlugContext } from "./StageSlugContext.js";
|
|
4
3
|
const useStageSlug = () => useContext(StageSlugContext);
|
|
5
|
-
|
|
6
4
|
export { useStageSlug };
|
|
7
5
|
//# sourceMappingURL=useStageSlug.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useStageSlug.js","sources":["../../../src/project/useStageSlug.ts"],"sourcesContent":["import { useContext } from 'react'\nimport { StageSlugContext } from './StageSlugContext'\n\nexport const useStageSlug = () => useContext(StageSlugContext)\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useStageSlug.js","sources":["../../../src/project/useStageSlug.ts"],"sourcesContent":["import { useContext } from 'react'\nimport { StageSlugContext } from './StageSlugContext'\n\nexport const useStageSlug = () => useContext(StageSlugContext)\n"],"names":[],"mappings":";;AAGa,MAAA,eAAe,MAAM,WAAW,gBAAgB;;"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { ClientError } from
|
|
2
|
-
import { useSystemGraphQlClient } from
|
|
3
|
-
import { useProjectSlug } from
|
|
4
|
-
|
|
1
|
+
import { ClientError } from "../ClientError.js";
|
|
2
|
+
import { useSystemGraphQlClient } from "./useSystemGraphQlClient.js";
|
|
3
|
+
import { useProjectSlug } from "../project/useProjectSlug.js";
|
|
5
4
|
const useCurrentSystemGraphQlClient = () => {
|
|
6
5
|
const projectSlug = useProjectSlug();
|
|
7
6
|
if (projectSlug === void 0) {
|
|
@@ -9,6 +8,5 @@ const useCurrentSystemGraphQlClient = () => {
|
|
|
9
8
|
}
|
|
10
9
|
return useSystemGraphQlClient(projectSlug);
|
|
11
10
|
};
|
|
12
|
-
|
|
13
11
|
export { useCurrentSystemGraphQlClient };
|
|
14
12
|
//# sourceMappingURL=useCurrentSystemGraphQlClient.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCurrentSystemGraphQlClient.js","sources":["../../../src/system/useCurrentSystemGraphQlClient.ts"],"sourcesContent":["import type { GraphQlClient } from '@contember/client'\nimport { ClientError } from '../ClientError'\nimport { useProjectSlug } from '../project'\nimport { useSystemGraphQlClient } from './useSystemGraphQlClient'\n\nexport const useCurrentSystemGraphQlClient = (): GraphQlClient => {\n\tconst projectSlug = useProjectSlug()\n\n\tif (projectSlug === undefined) {\n\t\tthrow new ClientError(`Cannot contact the system API: undefined project slug.`)\n\t}\n\treturn useSystemGraphQlClient(projectSlug)\n}\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useCurrentSystemGraphQlClient.js","sources":["../../../src/system/useCurrentSystemGraphQlClient.ts"],"sourcesContent":["import type { GraphQlClient } from '@contember/client'\nimport { ClientError } from '../ClientError'\nimport { useProjectSlug } from '../project'\nimport { useSystemGraphQlClient } from './useSystemGraphQlClient'\n\nexport const useCurrentSystemGraphQlClient = (): GraphQlClient => {\n\tconst projectSlug = useProjectSlug()\n\n\tif (projectSlug === undefined) {\n\t\tthrow new ClientError(`Cannot contact the system API: undefined project slug.`)\n\t}\n\treturn useSystemGraphQlClient(projectSlug)\n}\n"],"names":[],"mappings":";;;AAKO,MAAM,gCAAgC,MAAqB;AACjE,QAAM,cAAc;AAEpB,MAAI,gBAAgB,QAAW;AACxB,UAAA,IAAI,YAAY,wDAAwD;AAAA,EAC/E;AACA,SAAO,uBAAuB,WAAW;AAC1C;;"}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
import { useCurrentSystemGraphQlClient } from
|
|
2
|
-
import { useApiRequest } from
|
|
3
|
-
|
|
1
|
+
import { useCurrentSystemGraphQlClient } from "./useCurrentSystemGraphQlClient.js";
|
|
2
|
+
import { useApiRequest } from "../apiRequest/useApiRequest.js";
|
|
4
3
|
const useSystemApiRequest = () => useApiRequest(useCurrentSystemGraphQlClient());
|
|
5
|
-
|
|
6
4
|
export { useSystemApiRequest };
|
|
7
5
|
//# sourceMappingURL=useSystemApiRequest.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSystemApiRequest.js","sources":["../../../src/system/useSystemApiRequest.ts"],"sourcesContent":["import type { UseApiRequestResult } from '../apiRequest'\nimport { useApiRequest } from '../apiRequest'\nimport { useCurrentSystemGraphQlClient } from './useCurrentSystemGraphQlClient'\n\nexport const useSystemApiRequest = <SuccessData>(): UseApiRequestResult<SuccessData> =>\n\tuseApiRequest<SuccessData>(useCurrentSystemGraphQlClient())\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useSystemApiRequest.js","sources":["../../../src/system/useSystemApiRequest.ts"],"sourcesContent":["import type { UseApiRequestResult } from '../apiRequest'\nimport { useApiRequest } from '../apiRequest'\nimport { useCurrentSystemGraphQlClient } from './useCurrentSystemGraphQlClient'\n\nexport const useSystemApiRequest = <SuccessData>(): UseApiRequestResult<SuccessData> =>\n\tuseApiRequest<SuccessData>(useCurrentSystemGraphQlClient())\n"],"names":[],"mappings":";;AAIO,MAAM,sBAAsB,MAClC,cAA2B,8BAA+B,CAAA;;"}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
import { formatSystemApiRelativeUrl } from
|
|
2
|
-
import { useGraphQlClient } from
|
|
3
|
-
|
|
1
|
+
import { formatSystemApiRelativeUrl } from "@contember/client";
|
|
2
|
+
import { useGraphQlClient } from "../useGraphQlClient.js";
|
|
4
3
|
const useSystemGraphQlClient = (projectSlug) => useGraphQlClient(formatSystemApiRelativeUrl(projectSlug));
|
|
5
|
-
|
|
6
4
|
export { useSystemGraphQlClient };
|
|
7
5
|
//# sourceMappingURL=useSystemGraphQlClient.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSystemGraphQlClient.js","sources":["../../../src/system/useSystemGraphQlClient.ts"],"sourcesContent":["import { formatSystemApiRelativeUrl } from '@contember/client'\nimport { useGraphQlClient } from '../useGraphQlClient'\n\nexport const useSystemGraphQlClient = (projectSlug: string) => useGraphQlClient(formatSystemApiRelativeUrl(projectSlug))\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useSystemGraphQlClient.js","sources":["../../../src/system/useSystemGraphQlClient.ts"],"sourcesContent":["import { formatSystemApiRelativeUrl } from '@contember/client'\nimport { useGraphQlClient } from '../useGraphQlClient'\n\nexport const useSystemGraphQlClient = (projectSlug: string) => useGraphQlClient(formatSystemApiRelativeUrl(projectSlug))\n"],"names":[],"mappings":";;AAGO,MAAM,yBAAyB,CAAC,gBAAwB,iBAAiB,2BAA2B,WAAW,CAAC;;"}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
import { useTenantGraphQlClient } from
|
|
2
|
-
import { useApiRequest } from
|
|
3
|
-
|
|
1
|
+
import { useTenantGraphQlClient } from "./useTenantGraphQlClient.js";
|
|
2
|
+
import { useApiRequest } from "../apiRequest/useApiRequest.js";
|
|
4
3
|
const useTenantApiRequest = () => useApiRequest(useTenantGraphQlClient());
|
|
5
|
-
|
|
6
4
|
export { useTenantApiRequest };
|
|
7
5
|
//# sourceMappingURL=useTenantApiRequest.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTenantApiRequest.js","sources":["../../../src/tenant/useTenantApiRequest.ts"],"sourcesContent":["import type { UseApiRequestResult } from '../apiRequest'\nimport { useApiRequest } from '../apiRequest'\nimport { useTenantGraphQlClient } from './useTenantGraphQlClient'\n\nexport const useTenantApiRequest = <SuccessData>(): UseApiRequestResult<SuccessData> =>\n\tuseApiRequest<SuccessData>(useTenantGraphQlClient())\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useTenantApiRequest.js","sources":["../../../src/tenant/useTenantApiRequest.ts"],"sourcesContent":["import type { UseApiRequestResult } from '../apiRequest'\nimport { useApiRequest } from '../apiRequest'\nimport { useTenantGraphQlClient } from './useTenantGraphQlClient'\n\nexport const useTenantApiRequest = <SuccessData>(): UseApiRequestResult<SuccessData> =>\n\tuseApiRequest<SuccessData>(useTenantGraphQlClient())\n"],"names":[],"mappings":";;AAIO,MAAM,sBAAsB,MAClC,cAA2B,uBAAwB,CAAA;;"}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
import { tenantApiRelativeUrl } from
|
|
2
|
-
import { useGraphQlClient } from
|
|
3
|
-
|
|
1
|
+
import { tenantApiRelativeUrl } from "@contember/client";
|
|
2
|
+
import { useGraphQlClient } from "../useGraphQlClient.js";
|
|
4
3
|
const useTenantGraphQlClient = () => useGraphQlClient(tenantApiRelativeUrl);
|
|
5
|
-
|
|
6
4
|
export { useTenantGraphQlClient };
|
|
7
5
|
//# sourceMappingURL=useTenantGraphQlClient.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTenantGraphQlClient.js","sources":["../../../src/tenant/useTenantGraphQlClient.ts"],"sourcesContent":["import { tenantApiRelativeUrl } from '@contember/client'\nimport { useGraphQlClient } from '../useGraphQlClient'\n\nexport const useTenantGraphQlClient = () => useGraphQlClient(tenantApiRelativeUrl)\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useTenantGraphQlClient.js","sources":["../../../src/tenant/useTenantGraphQlClient.ts"],"sourcesContent":["import { tenantApiRelativeUrl } from '@contember/client'\nimport { useGraphQlClient } from '../useGraphQlClient'\n\nexport const useTenantGraphQlClient = () => useGraphQlClient(tenantApiRelativeUrl)\n"],"names":[],"mappings":";;AAGa,MAAA,yBAAyB,MAAM,iBAAiB,oBAAoB;;"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { FileUploadError } from
|
|
2
|
-
import { toFileId } from
|
|
3
|
-
import { assertNever } from
|
|
4
|
-
|
|
1
|
+
import { FileUploadError } from "@contember/client";
|
|
2
|
+
import { toFileId } from "./toFileId.js";
|
|
3
|
+
import { assertNever } from "../utils/assertNever.js";
|
|
5
4
|
const initializeFileUploadState = () => ({
|
|
6
5
|
lastUpdateTime: 0,
|
|
7
6
|
fileIdByFile: /* @__PURE__ */ new WeakMap(),
|
|
@@ -157,6 +156,5 @@ const fileUploadReducer = (previousState, action) => {
|
|
|
157
156
|
}
|
|
158
157
|
assertNever();
|
|
159
158
|
};
|
|
160
|
-
|
|
161
159
|
export { fileUploadReducer, initializeFileUploadState };
|
|
162
160
|
//# sourceMappingURL=fileUploadReducer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fileUploadReducer.js","sources":["../../../src/upload/fileUploadReducer.ts"],"sourcesContent":["import { FileUploadError } from '@contember/client'\nimport { assertNever } from '../utils'\nimport type { FileId } from './FileId'\nimport type { FileUploadAction } from './FileUploadAction'\nimport type { FileUploadMultiTemporalState } from './FileUploadMultiTemporalState'\nimport { toFileId } from './toFileId'\n\nexport const initializeFileUploadState = <Result = unknown, Metadata = undefined>(): FileUploadMultiTemporalState<\n\tResult,\n\tMetadata\n> => ({\n\tlastUpdateTime: 0,\n\tfileIdByFile: new WeakMap<File, FileId>(),\n\tliveState: new Map(),\n\tpublicState: new Map(),\n\tisLiveStateDirty: false,\n})\n\nexport const fileUploadReducer = <Result = unknown, Metadata = undefined>(\n\tpreviousState: FileUploadMultiTemporalState<Result, Metadata>,\n\taction: FileUploadAction<Result, Metadata>,\n): FileUploadMultiTemporalState<Result, Metadata> => {\n\tconst publishNewState = (): FileUploadMultiTemporalState<Result, Metadata> => ({\n\t\tpublicState: previousState.liveState,\n\t\tfileIdByFile: previousState.fileIdByFile,\n\t\tlastUpdateTime: previousState.lastUpdateTime,\n\t\tisLiveStateDirty: false,\n\n\t\t// Immediately make the live state referentially unequal so that this doesn't have to happen during each action\n\t\t// several times between two publishes.\n\t\tliveState: new Map(previousState.liveState),\n\t})\n\tconst getNewDirtyState = (): FileUploadMultiTemporalState<Result, Metadata> => ({\n\t\tfileIdByFile: previousState.fileIdByFile,\n\t\tliveState: previousState.liveState,\n\t\tpublicState: previousState.publicState,\n\t\tisLiveStateDirty: true,\n\t\tlastUpdateTime: Date.now(),\n\t})\n\tswitch (action.type) {\n\t\tcase 'publishNewestState': {\n\t\t\treturn publishNewState()\n\t\t}\n\t\tcase 'initialize': {\n\t\t\tfor (const [fileId, metadata] of action.files) {\n\t\t\t\t// Deliberately allowing starting a new upload with the same id\n\n\t\t\t\tpreviousState.liveState.set(fileId, {\n\t\t\t\t\treadyState: 'initializing',\n\t\t\t\t\tabortController: metadata.abortController,\n\t\t\t\t\tpreviewUrl: metadata.previewUrl,\n\t\t\t\t\tfile: metadata.file,\n\t\t\t\t})\n\t\t\t\tpreviousState.fileIdByFile.set(metadata.file, fileId)\n\t\t\t}\n\t\t\treturn publishNewState() /* Making the feedback about new files immediate*/\n\t\t}\n\t\tcase 'startUploading': {\n\t\t\tfor (const [fileOrId, metadata] of action.files) {\n\t\t\t\tconst fileId = toFileId(previousState, fileOrId)\n\t\t\t\tconst fileState = previousState.liveState.get(fileId)\n\n\t\t\t\tif (fileState === undefined || fileState.readyState !== 'initializing') {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tpreviousState.liveState.set(fileId, {\n\t\t\t\t\treadyState: 'uploading',\n\t\t\t\t\tabortController: fileState.abortController,\n\t\t\t\t\tfile: fileState.file,\n\t\t\t\t\tmetadata: metadata.metadata!, // If the user didn't supply the metadata, then that's on them.\n\t\t\t\t\tpreviewUrl: fileState.previewUrl,\n\t\t\t\t\tprogress: undefined,\n\t\t\t\t\tuploader: metadata.uploader,\n\t\t\t\t})\n\t\t\t}\n\t\t\treturn publishNewState() /* Making the feedback about started upload immediate*/\n\t\t}\n\t\tcase 'finishSuccessfully': {\n\t\t\tfor (const [fileOrId, result] of action.result) {\n\t\t\t\tconst fileId = toFileId(previousState, fileOrId)\n\t\t\t\tconst previousFileState = previousState.liveState.get(fileId)\n\t\t\t\tif (previousFileState === undefined || previousFileState.readyState !== 'uploading') {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tpreviousState.liveState.set(fileId, {\n\t\t\t\t\treadyState: 'success',\n\t\t\t\t\tfile: previousFileState.file,\n\t\t\t\t\tmetadata: previousFileState.metadata,\n\t\t\t\t\tpreviewUrl: previousFileState.previewUrl,\n\t\t\t\t\tresult,\n\t\t\t\t\tuploader: previousFileState.uploader,\n\t\t\t\t})\n\t\t\t}\n\t\t\t// return publishNewState() // Making the feedback about successful upload immediate.\n\t\t\treturn getNewDirtyState()\n\t\t}\n\t\tcase 'finishWithError': {\n\t\t\tfor (const errorSpec of action.error) {\n\t\t\t\tlet fileOrId: File | FileId\n\t\t\t\tlet rawError: unknown\n\n\t\t\t\tif (Array.isArray(errorSpec)) {\n\t\t\t\t\t[fileOrId, rawError] = errorSpec\n\t\t\t\t} else {\n\t\t\t\t\tfileOrId = errorSpec\n\t\t\t\t\trawError = undefined\n\t\t\t\t}\n\n\t\t\t\tconst errors: FileUploadError[] = []\n\n\t\t\t\tif (rawError instanceof FileUploadError) {\n\t\t\t\t\terrors.push(rawError)\n\t\t\t\t} else if (Array.isArray(rawError)) {\n\t\t\t\t\tfor (const error of rawError) {\n\t\t\t\t\t\tif (error instanceof FileUploadError) {\n\t\t\t\t\t\t\terrors.push(error)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst fileId = toFileId(previousState, fileOrId)\n\t\t\t\tconst previousFileState = previousState.liveState.get(fileId)\n\t\t\t\tif (\n\t\t\t\t\tpreviousFileState === undefined ||\n\t\t\t\t\t(previousFileState.readyState !== 'initializing' && previousFileState.readyState !== 'uploading')\n\t\t\t\t) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tconst uploader = previousFileState.readyState === 'uploading' ? previousFileState.uploader : undefined\n\t\t\t\tconst metadata = previousFileState.readyState === 'uploading' ? previousFileState.metadata : undefined\n\t\t\t\tpreviousState.liveState.set(fileId, {\n\t\t\t\t\treadyState: 'error',\n\t\t\t\t\terrors: errors.length ? errors : undefined,\n\t\t\t\t\trawError,\n\t\t\t\t\tfile: previousFileState.file,\n\t\t\t\t\tmetadata,\n\t\t\t\t\tpreviewUrl: previousFileState.previewUrl,\n\t\t\t\t\tuploader,\n\t\t\t\t})\n\t\t\t}\n\t\t\treturn getNewDirtyState() // Bad news can wait.\n\t\t}\n\t\tcase 'purge': {\n\t\t\tlet atLeastOnePurged = false\n\t\t\tfor (const fileOrId of action.files) {\n\t\t\t\tconst fileId = toFileId(previousState, fileOrId)\n\t\t\t\tconst fileState = previousState.liveState.get(fileId)\n\n\t\t\t\tif (fileState === undefined) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tatLeastOnePurged = true\n\t\t\t\tif (fileState.readyState === 'initializing' || fileState.readyState === 'uploading') {\n\t\t\t\t\tfileState.abortController.abort() // This is a bit naughty… We shouldn't do this from here.\n\t\t\t\t}\n\t\t\t\tpreviousState.liveState.delete(fileId)\n\t\t\t}\n\t\t\tif (atLeastOnePurged) {\n\t\t\t\treturn getNewDirtyState()\n\t\t\t}\n\t\t\treturn previousState\n\t\t}\n\t\tcase 'updateUploadProgress': {\n\t\t\tfor (const [fileOrId, { progress }] of action.progress) {\n\t\t\t\tconst fileId = toFileId(previousState, fileOrId)\n\t\t\t\tconst previousFileState = previousState.liveState.get(fileId)\n\t\t\t\tif (progress === undefined || previousFileState === undefined || previousFileState.readyState !== 'uploading') {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tpreviousState.liveState.set(fileId, {\n\t\t\t\t\treadyState: 'uploading',\n\t\t\t\t\tfile: previousFileState.file,\n\t\t\t\t\tuploader: previousFileState.uploader,\n\t\t\t\t\tabortController: previousFileState.abortController,\n\t\t\t\t\tpreviewUrl: previousFileState.previewUrl,\n\t\t\t\t\tmetadata: previousFileState.metadata,\n\t\t\t\t\tprogress,\n\t\t\t\t})\n\t\t\t}\n\t\t\treturn getNewDirtyState()\n\t\t}\n\t}\n\tassertNever(action)\n}\n"],"names":[],"mappings":";;;;MAOa,4BAA4B;AAGnC,EACL,gBAAgB;AAAA,EAChB,kCAAkB;AAAA,EAClB,+BAAe;AAAA,EACf,iCAAiB;AAAA,EACjB,kBAAkB;AAAA;MAGN,oBAAoB,CAChC,eACA,WACoD;AACpD,QAAM,kBAAkB;AAAuD,IAC9E,aAAa,cAAc;AAAA,IAC3B,cAAc,cAAc;AAAA,IAC5B,gBAAgB,cAAc;AAAA,IAC9B,kBAAkB;AAAA,IAIlB,WAAW,IAAI,IAAI,cAAc;AAAA;AAElC,QAAM,mBAAmB;AAAuD,IAC/E,cAAc,cAAc;AAAA,IAC5B,WAAW,cAAc;AAAA,IACzB,aAAa,cAAc;AAAA,IAC3B,kBAAkB;AAAA,IAClB,gBAAgB,KAAK;AAAA;AAEtB,UAAQ,OAAO;AAAA,SACT,sBAAsB;AAC1B,aAAO;AAAA;AAAA,SAEH,cAAc;AAClB,iBAAW,CAAC,QAAQ,aAAa,OAAO,OAAO;AAG9C,sBAAc,UAAU,IAAI,QAAQ;AAAA,UACnC,YAAY;AAAA,UACZ,iBAAiB,SAAS;AAAA,UAC1B,YAAY,SAAS;AAAA,UACrB,MAAM,SAAS;AAAA;AAEhB,sBAAc,aAAa,IAAI,SAAS,MAAM;AAAA;AAE/C,aAAO;AAAA;AAAA,SAEH,kBAAkB;AACtB,iBAAW,CAAC,UAAU,aAAa,OAAO,OAAO;AAChD,cAAM,SAAS,SAAS,eAAe;AACvC,cAAM,YAAY,cAAc,UAAU,IAAI;AAE9C,YAAI,cAAc,UAAa,UAAU,eAAe,gBAAgB;AACvE;AAAA;AAGD,sBAAc,UAAU,IAAI,QAAQ;AAAA,UACnC,YAAY;AAAA,UACZ,iBAAiB,UAAU;AAAA,UAC3B,MAAM,UAAU;AAAA,UAChB,UAAU,SAAS;AAAA,UACnB,YAAY,UAAU;AAAA,UACtB,UAAU;AAAA,UACV,UAAU,SAAS;AAAA;AAAA;AAGrB,aAAO;AAAA;AAAA,SAEH,sBAAsB;AAC1B,iBAAW,CAAC,UAAU,WAAW,OAAO,QAAQ;AAC/C,cAAM,SAAS,SAAS,eAAe;AACvC,cAAM,oBAAoB,cAAc,UAAU,IAAI;AACtD,YAAI,sBAAsB,UAAa,kBAAkB,eAAe,aAAa;AACpF;AAAA;AAED,sBAAc,UAAU,IAAI,QAAQ;AAAA,UACnC,YAAY;AAAA,UACZ,MAAM,kBAAkB;AAAA,UACxB,UAAU,kBAAkB;AAAA,UAC5B,YAAY,kBAAkB;AAAA,UAC9B;AAAA,UACA,UAAU,kBAAkB;AAAA;AAAA;AAI9B,aAAO;AAAA;AAAA,SAEH,mBAAmB;AACvB,iBAAW,aAAa,OAAO,OAAO;AACrC,YAAI;AACJ,YAAI;AAEJ,YAAI,MAAM,QAAQ,YAAY;AAC7B,WAAC,UAAU,YAAY;AAAA,eACjB;AACN,qBAAW;AACX,qBAAW;AAAA;AAGZ,cAAM,SAA4B;AAElC,YAAI,oBAAoB,iBAAiB;AACxC,iBAAO,KAAK;AAAA,mBACF,MAAM,QAAQ,WAAW;AACnC,qBAAW,SAAS,UAAU;AAC7B,gBAAI,iBAAiB,iBAAiB;AACrC,qBAAO,KAAK;AAAA;AAAA;AAAA;AAKf,cAAM,SAAS,SAAS,eAAe;AACvC,cAAM,oBAAoB,cAAc,UAAU,IAAI;AACtD,YACC,sBAAsB,UACrB,kBAAkB,eAAe,kBAAkB,kBAAkB,eAAe,aACpF;AACD;AAAA;AAED,cAAM,WAAW,kBAAkB,eAAe,cAAc,kBAAkB,WAAW;AAC7F,cAAM,WAAW,kBAAkB,eAAe,cAAc,kBAAkB,WAAW;AAC7F,sBAAc,UAAU,IAAI,QAAQ;AAAA,UACnC,YAAY;AAAA,UACZ,QAAQ,OAAO,SAAS,SAAS;AAAA,UACjC;AAAA,UACA,MAAM,kBAAkB;AAAA,UACxB;AAAA,UACA,YAAY,kBAAkB;AAAA,UAC9B;AAAA;AAAA;AAGF,aAAO;AAAA;AAAA,SAEH,SAAS;AACb,UAAI,mBAAmB;AACvB,iBAAW,YAAY,OAAO,OAAO;AACpC,cAAM,SAAS,SAAS,eAAe;AACvC,cAAM,YAAY,cAAc,UAAU,IAAI;AAE9C,YAAI,cAAc,QAAW;AAC5B;AAAA;AAED,2BAAmB;AACnB,YAAI,UAAU,eAAe,kBAAkB,UAAU,eAAe,aAAa;AACpF,oBAAU,gBAAgB;AAAA;AAE3B,sBAAc,UAAU,OAAO;AAAA;AAEhC,UAAI,kBAAkB;AACrB,eAAO;AAAA;AAER,aAAO;AAAA;AAAA,SAEH,wBAAwB;AAC5B,iBAAW,CAAC,UAAU,EAAE,eAAe,OAAO,UAAU;AACvD,cAAM,SAAS,SAAS,eAAe;AACvC,cAAM,oBAAoB,cAAc,UAAU,IAAI;AACtD,YAAI,aAAa,UAAa,sBAAsB,UAAa,kBAAkB,eAAe,aAAa;AAC9G;AAAA;AAED,sBAAc,UAAU,IAAI,QAAQ;AAAA,UACnC,YAAY;AAAA,UACZ,MAAM,kBAAkB;AAAA,UACxB,UAAU,kBAAkB;AAAA,UAC5B,iBAAiB,kBAAkB;AAAA,UACnC,YAAY,kBAAkB;AAAA,UAC9B,UAAU,kBAAkB;AAAA,UAC5B;AAAA;AAAA;AAGF,aAAO;AAAA;AAAA;AAGT;AAAY;;;;"}
|
|
1
|
+
{"version":3,"file":"fileUploadReducer.js","sources":["../../../src/upload/fileUploadReducer.ts"],"sourcesContent":["import { FileUploadError } from '@contember/client'\nimport { assertNever } from '../utils'\nimport type { FileId } from './FileId'\nimport type { FileUploadAction } from './FileUploadAction'\nimport type { FileUploadMultiTemporalState } from './FileUploadMultiTemporalState'\nimport { toFileId } from './toFileId'\n\nexport const initializeFileUploadState = <Result = unknown, Metadata = undefined>(): FileUploadMultiTemporalState<\n\tResult,\n\tMetadata\n> => ({\n\tlastUpdateTime: 0,\n\tfileIdByFile: new WeakMap<File, FileId>(),\n\tliveState: new Map(),\n\tpublicState: new Map(),\n\tisLiveStateDirty: false,\n})\n\nexport const fileUploadReducer = <Result = unknown, Metadata = undefined>(\n\tpreviousState: FileUploadMultiTemporalState<Result, Metadata>,\n\taction: FileUploadAction<Result, Metadata>,\n): FileUploadMultiTemporalState<Result, Metadata> => {\n\tconst publishNewState = (): FileUploadMultiTemporalState<Result, Metadata> => ({\n\t\tpublicState: previousState.liveState,\n\t\tfileIdByFile: previousState.fileIdByFile,\n\t\tlastUpdateTime: previousState.lastUpdateTime,\n\t\tisLiveStateDirty: false,\n\n\t\t// Immediately make the live state referentially unequal so that this doesn't have to happen during each action\n\t\t// several times between two publishes.\n\t\tliveState: new Map(previousState.liveState),\n\t})\n\tconst getNewDirtyState = (): FileUploadMultiTemporalState<Result, Metadata> => ({\n\t\tfileIdByFile: previousState.fileIdByFile,\n\t\tliveState: previousState.liveState,\n\t\tpublicState: previousState.publicState,\n\t\tisLiveStateDirty: true,\n\t\tlastUpdateTime: Date.now(),\n\t})\n\tswitch (action.type) {\n\t\tcase 'publishNewestState': {\n\t\t\treturn publishNewState()\n\t\t}\n\t\tcase 'initialize': {\n\t\t\tfor (const [fileId, metadata] of action.files) {\n\t\t\t\t// Deliberately allowing starting a new upload with the same id\n\n\t\t\t\tpreviousState.liveState.set(fileId, {\n\t\t\t\t\treadyState: 'initializing',\n\t\t\t\t\tabortController: metadata.abortController,\n\t\t\t\t\tpreviewUrl: metadata.previewUrl,\n\t\t\t\t\tfile: metadata.file,\n\t\t\t\t})\n\t\t\t\tpreviousState.fileIdByFile.set(metadata.file, fileId)\n\t\t\t}\n\t\t\treturn publishNewState() /* Making the feedback about new files immediate*/\n\t\t}\n\t\tcase 'startUploading': {\n\t\t\tfor (const [fileOrId, metadata] of action.files) {\n\t\t\t\tconst fileId = toFileId(previousState, fileOrId)\n\t\t\t\tconst fileState = previousState.liveState.get(fileId)\n\n\t\t\t\tif (fileState === undefined || fileState.readyState !== 'initializing') {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tpreviousState.liveState.set(fileId, {\n\t\t\t\t\treadyState: 'uploading',\n\t\t\t\t\tabortController: fileState.abortController,\n\t\t\t\t\tfile: fileState.file,\n\t\t\t\t\tmetadata: metadata.metadata!, // If the user didn't supply the metadata, then that's on them.\n\t\t\t\t\tpreviewUrl: fileState.previewUrl,\n\t\t\t\t\tprogress: undefined,\n\t\t\t\t\tuploader: metadata.uploader,\n\t\t\t\t})\n\t\t\t}\n\t\t\treturn publishNewState() /* Making the feedback about started upload immediate*/\n\t\t}\n\t\tcase 'finishSuccessfully': {\n\t\t\tfor (const [fileOrId, result] of action.result) {\n\t\t\t\tconst fileId = toFileId(previousState, fileOrId)\n\t\t\t\tconst previousFileState = previousState.liveState.get(fileId)\n\t\t\t\tif (previousFileState === undefined || previousFileState.readyState !== 'uploading') {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tpreviousState.liveState.set(fileId, {\n\t\t\t\t\treadyState: 'success',\n\t\t\t\t\tfile: previousFileState.file,\n\t\t\t\t\tmetadata: previousFileState.metadata,\n\t\t\t\t\tpreviewUrl: previousFileState.previewUrl,\n\t\t\t\t\tresult,\n\t\t\t\t\tuploader: previousFileState.uploader,\n\t\t\t\t})\n\t\t\t}\n\t\t\t// return publishNewState() // Making the feedback about successful upload immediate.\n\t\t\treturn getNewDirtyState()\n\t\t}\n\t\tcase 'finishWithError': {\n\t\t\tfor (const errorSpec of action.error) {\n\t\t\t\tlet fileOrId: File | FileId\n\t\t\t\tlet rawError: unknown\n\n\t\t\t\tif (Array.isArray(errorSpec)) {\n\t\t\t\t\t[fileOrId, rawError] = errorSpec\n\t\t\t\t} else {\n\t\t\t\t\tfileOrId = errorSpec\n\t\t\t\t\trawError = undefined\n\t\t\t\t}\n\n\t\t\t\tconst errors: FileUploadError[] = []\n\n\t\t\t\tif (rawError instanceof FileUploadError) {\n\t\t\t\t\terrors.push(rawError)\n\t\t\t\t} else if (Array.isArray(rawError)) {\n\t\t\t\t\tfor (const error of rawError) {\n\t\t\t\t\t\tif (error instanceof FileUploadError) {\n\t\t\t\t\t\t\terrors.push(error)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst fileId = toFileId(previousState, fileOrId)\n\t\t\t\tconst previousFileState = previousState.liveState.get(fileId)\n\t\t\t\tif (\n\t\t\t\t\tpreviousFileState === undefined ||\n\t\t\t\t\t(previousFileState.readyState !== 'initializing' && previousFileState.readyState !== 'uploading')\n\t\t\t\t) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tconst uploader = previousFileState.readyState === 'uploading' ? previousFileState.uploader : undefined\n\t\t\t\tconst metadata = previousFileState.readyState === 'uploading' ? previousFileState.metadata : undefined\n\t\t\t\tpreviousState.liveState.set(fileId, {\n\t\t\t\t\treadyState: 'error',\n\t\t\t\t\terrors: errors.length ? errors : undefined,\n\t\t\t\t\trawError,\n\t\t\t\t\tfile: previousFileState.file,\n\t\t\t\t\tmetadata,\n\t\t\t\t\tpreviewUrl: previousFileState.previewUrl,\n\t\t\t\t\tuploader,\n\t\t\t\t})\n\t\t\t}\n\t\t\treturn getNewDirtyState() // Bad news can wait.\n\t\t}\n\t\tcase 'purge': {\n\t\t\tlet atLeastOnePurged = false\n\t\t\tfor (const fileOrId of action.files) {\n\t\t\t\tconst fileId = toFileId(previousState, fileOrId)\n\t\t\t\tconst fileState = previousState.liveState.get(fileId)\n\n\t\t\t\tif (fileState === undefined) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tatLeastOnePurged = true\n\t\t\t\tif (fileState.readyState === 'initializing' || fileState.readyState === 'uploading') {\n\t\t\t\t\tfileState.abortController.abort() // This is a bit naughty… We shouldn't do this from here.\n\t\t\t\t}\n\t\t\t\tpreviousState.liveState.delete(fileId)\n\t\t\t}\n\t\t\tif (atLeastOnePurged) {\n\t\t\t\treturn getNewDirtyState()\n\t\t\t}\n\t\t\treturn previousState\n\t\t}\n\t\tcase 'updateUploadProgress': {\n\t\t\tfor (const [fileOrId, { progress }] of action.progress) {\n\t\t\t\tconst fileId = toFileId(previousState, fileOrId)\n\t\t\t\tconst previousFileState = previousState.liveState.get(fileId)\n\t\t\t\tif (progress === undefined || previousFileState === undefined || previousFileState.readyState !== 'uploading') {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tpreviousState.liveState.set(fileId, {\n\t\t\t\t\treadyState: 'uploading',\n\t\t\t\t\tfile: previousFileState.file,\n\t\t\t\t\tuploader: previousFileState.uploader,\n\t\t\t\t\tabortController: previousFileState.abortController,\n\t\t\t\t\tpreviewUrl: previousFileState.previewUrl,\n\t\t\t\t\tmetadata: previousFileState.metadata,\n\t\t\t\t\tprogress,\n\t\t\t\t})\n\t\t\t}\n\t\t\treturn getNewDirtyState()\n\t\t}\n\t}\n\tassertNever(action)\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toFileId.js","sources":["../../../src/upload/toFileId.ts"],"sourcesContent":["import type { FileId } from './FileId'\nimport type { FileUploadMultiTemporalState } from './FileUploadMultiTemporalState'\n\nexport const toFileId = <Result = unknown, Metadata = undefined>(\n\tstate: FileUploadMultiTemporalState<Result, Metadata>,\n\tfileOrId: File | FileId,\n) => {\n\tif (fileOrId instanceof File) {\n\t\treturn state.fileIdByFile.get(fileOrId)! // Should we throw instead of the yolo \"!\"?\n\t}\n\treturn fileOrId\n}\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"toFileId.js","sources":["../../../src/upload/toFileId.ts"],"sourcesContent":["import type { FileId } from './FileId'\nimport type { FileUploadMultiTemporalState } from './FileUploadMultiTemporalState'\n\nexport const toFileId = <Result = unknown, Metadata = undefined>(\n\tstate: FileUploadMultiTemporalState<Result, Metadata>,\n\tfileOrId: File | FileId,\n) => {\n\tif (fileOrId instanceof File) {\n\t\treturn state.fileIdByFile.get(fileOrId)! // Should we throw instead of the yolo \"!\"?\n\t}\n\treturn fileOrId\n}\n"],"names":[],"mappings":"AAGa,MAAA,WAAW,CACvB,OACA,aACI;AACJ,MAAI,oBAAoB,MAAM;AACtB,WAAA,MAAM,aAAa,IAAI,QAAQ;AAAA,EACvC;AACO,SAAA;AACR;;"}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import { S3FileUploader } from
|
|
2
|
-
import { useRef, useReducer, useMemo, useEffect, useCallback } from
|
|
3
|
-
import { fileUploadReducer, initializeFileUploadState } from
|
|
4
|
-
import { toFileId } from
|
|
5
|
-
import { useCurrentContentGraphQlClient } from
|
|
6
|
-
|
|
1
|
+
import { S3FileUploader } from "@contember/client";
|
|
2
|
+
import { useRef, useReducer, useMemo, useEffect, useCallback } from "react";
|
|
3
|
+
import { fileUploadReducer, initializeFileUploadState } from "./fileUploadReducer.js";
|
|
4
|
+
import { toFileId } from "./toFileId.js";
|
|
5
|
+
import { useCurrentContentGraphQlClient } from "../content/useCurrentContentGraphQlClient.js";
|
|
7
6
|
const useFileUpload = (options) => {
|
|
8
7
|
const maxUpdateFrequency = options?.maxUpdateFrequency ?? 100;
|
|
9
8
|
const contentApiClient = useCurrentContentGraphQlClient();
|
|
@@ -187,6 +186,5 @@ const useFileUpload = (options) => {
|
|
|
187
186
|
}, []);
|
|
188
187
|
return [multiTemporalState.publicState, operations];
|
|
189
188
|
};
|
|
190
|
-
|
|
191
189
|
export { useFileUpload };
|
|
192
190
|
//# 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":[],"mappings":"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"}
|
|
@@ -1,13 +1,11 @@
|
|
|
1
|
-
import { GraphQlClient } from
|
|
2
|
-
import { useMemo } from
|
|
3
|
-
import { useApiBaseUrl } from
|
|
4
|
-
import { useSessionToken } from
|
|
5
|
-
|
|
1
|
+
import { GraphQlClient } from "@contember/client";
|
|
2
|
+
import { useMemo } from "react";
|
|
3
|
+
import { useApiBaseUrl } from "./config/useApiBaseUrl.js";
|
|
4
|
+
import { useSessionToken } from "./auth/useSessionToken.js";
|
|
6
5
|
const useGraphQlClient = (path) => {
|
|
7
6
|
const apiBaseUrl = useApiBaseUrl();
|
|
8
7
|
const sessionToken = useSessionToken();
|
|
9
8
|
return useMemo(() => new GraphQlClient(`${apiBaseUrl}${path}`, sessionToken), [apiBaseUrl, path, sessionToken]);
|
|
10
9
|
};
|
|
11
|
-
|
|
12
10
|
export { useGraphQlClient };
|
|
13
11
|
//# 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":"
|
|
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 +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":"
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClientError.js","sources":["../../src/ClientError.ts"],"sourcesContent":["export class ClientError extends Error {}\n"],"names":[],"mappings":"
|
|
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 +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":[],"mappings":";;;;;;;AAaA,MAAM,kBAAkB;
|
|
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 +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":"
|
|
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 +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;
|
|
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;;"}
|