@contember/react-client 1.0.0-alpha.8 → 1.0.0-rc.4
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/types/ClientError.d.ts +3 -0
- package/dist/types/ClientError.d.ts.map +1 -0
- package/dist/types/ContemberClient.d.ts +12 -0
- package/dist/types/ContemberClient.d.ts.map +1 -0
- package/dist/types/apiRequest/ApiRequestAction.d.ts +13 -0
- package/dist/types/apiRequest/ApiRequestAction.d.ts.map +1 -0
- package/dist/types/apiRequest/ApiRequestState.d.ts +21 -0
- package/dist/types/apiRequest/ApiRequestState.d.ts.map +1 -0
- package/dist/types/apiRequest/apiRequestReducer.d.ts +5 -0
- package/dist/types/apiRequest/apiRequestReducer.d.ts.map +1 -0
- package/dist/types/apiRequest/index.d.ts +5 -0
- package/dist/types/apiRequest/index.d.ts.map +1 -0
- package/dist/types/apiRequest/useApiRequest.d.ts +8 -0
- package/dist/types/apiRequest/useApiRequest.d.ts.map +1 -0
- package/dist/types/auth/SessionTokenContext.d.ts +3 -0
- package/dist/types/auth/SessionTokenContext.d.ts.map +1 -0
- package/dist/types/auth/SetSessionTokenContext.d.ts +3 -0
- package/dist/types/auth/SetSessionTokenContext.d.ts.map +1 -0
- package/dist/types/auth/index.d.ts +5 -0
- package/dist/types/auth/index.d.ts.map +1 -0
- package/dist/types/auth/useSessionToken.d.ts +2 -0
- package/dist/types/auth/useSessionToken.d.ts.map +1 -0
- package/dist/types/auth/useSetSessionToken.d.ts +2 -0
- package/dist/types/auth/useSetSessionToken.d.ts.map +1 -0
- package/dist/types/components/RichTextRenderer/BuiltinElements.d.ts +49 -0
- package/dist/types/components/RichTextRenderer/BuiltinElements.d.ts.map +1 -0
- package/dist/types/components/RichTextRenderer/BuiltinLeaves.d.ts +21 -0
- package/dist/types/components/RichTextRenderer/BuiltinLeaves.d.ts.map +1 -0
- package/dist/types/components/RichTextRenderer/ElementRenderer.d.ts +22 -0
- package/dist/types/components/RichTextRenderer/ElementRenderer.d.ts.map +1 -0
- package/dist/types/components/RichTextRenderer/LeafRenderer.d.ts +14 -0
- package/dist/types/components/RichTextRenderer/LeafRenderer.d.ts.map +1 -0
- package/dist/types/components/RichTextRenderer/NormalizedRichTextBlock.d.ts +14 -0
- package/dist/types/components/RichTextRenderer/NormalizedRichTextBlock.d.ts.map +1 -0
- package/dist/types/components/RichTextRenderer/ReferenceRenderer.d.ts +14 -0
- package/dist/types/components/RichTextRenderer/ReferenceRenderer.d.ts.map +1 -0
- package/dist/types/components/RichTextRenderer/RenderElementFallback.d.ts +12 -0
- package/dist/types/components/RichTextRenderer/RenderElementFallback.d.ts.map +1 -0
- package/dist/types/components/RichTextRenderer/RenderLeafFallback.d.ts +7 -0
- package/dist/types/components/RichTextRenderer/RenderLeafFallback.d.ts.map +1 -0
- package/dist/types/components/RichTextRenderer/RichTextBlock.d.ts +2 -0
- package/dist/types/components/RichTextRenderer/RichTextBlock.d.ts.map +1 -0
- package/dist/types/components/RichTextRenderer/RichTextElement.d.ts +7 -0
- package/dist/types/components/RichTextRenderer/RichTextElement.d.ts.map +1 -0
- package/dist/types/components/RichTextRenderer/RichTextElementMetadata.d.ts +11 -0
- package/dist/types/components/RichTextRenderer/RichTextElementMetadata.d.ts.map +1 -0
- package/dist/types/components/RichTextRenderer/RichTextLeaf.d.ts +4 -0
- package/dist/types/components/RichTextRenderer/RichTextLeaf.d.ts.map +1 -0
- package/dist/types/components/RichTextRenderer/RichTextLeafMetadata.d.ts +4 -0
- package/dist/types/components/RichTextRenderer/RichTextLeafMetadata.d.ts.map +1 -0
- package/dist/types/components/RichTextRenderer/RichTextReference.d.ts +4 -0
- package/dist/types/components/RichTextRenderer/RichTextReference.d.ts.map +1 -0
- package/dist/types/components/RichTextRenderer/RichTextRenderMetadata.d.ts +12 -0
- package/dist/types/components/RichTextRenderer/RichTextRenderMetadata.d.ts.map +1 -0
- package/dist/types/components/RichTextRenderer/RichTextRenderMetadataContext.d.ts +8 -0
- package/dist/types/components/RichTextRenderer/RichTextRenderMetadataContext.d.ts.map +1 -0
- package/dist/types/components/RichTextRenderer/RichTextRenderer.d.ts +29 -0
- package/dist/types/components/RichTextRenderer/RichTextRenderer.d.ts.map +1 -0
- package/dist/types/components/RichTextRenderer/RichTextRendererError.d.ts +3 -0
- package/dist/types/components/RichTextRenderer/RichTextRendererError.d.ts.map +1 -0
- package/dist/types/components/RichTextRenderer/RootEditorNode.d.ts +9 -0
- package/dist/types/components/RichTextRenderer/RootEditorNode.d.ts.map +1 -0
- package/dist/types/components/RichTextRenderer/defaultDeserialize.d.ts +5 -0
- package/dist/types/components/RichTextRenderer/defaultDeserialize.d.ts.map +1 -0
- package/dist/types/components/RichTextRenderer/index.d.ts +16 -0
- package/dist/types/components/RichTextRenderer/index.d.ts.map +1 -0
- package/dist/types/components/RichTextRenderer/renderChildren.d.ts +14 -0
- package/dist/types/components/RichTextRenderer/renderChildren.d.ts.map +1 -0
- package/dist/types/components/RichTextRenderer/resolveRichTextElementMetadata.d.ts +8 -0
- package/dist/types/components/RichTextRenderer/resolveRichTextElementMetadata.d.ts.map +1 -0
- package/dist/types/components/index.d.ts +2 -0
- package/dist/types/components/index.d.ts.map +1 -0
- package/dist/types/config/ApiBaseUrlContext.d.ts +3 -0
- package/dist/types/config/ApiBaseUrlContext.d.ts.map +1 -0
- package/dist/types/config/LoginTokenContext.d.ts +3 -0
- package/dist/types/config/LoginTokenContext.d.ts.map +1 -0
- package/dist/types/config/index.d.ts +5 -0
- package/dist/types/config/index.d.ts.map +1 -0
- package/dist/types/config/useApiBaseUrl.d.ts +2 -0
- package/dist/types/config/useApiBaseUrl.d.ts.map +1 -0
- package/dist/types/config/useLoginToken.d.ts +2 -0
- package/dist/types/config/useLoginToken.d.ts.map +1 -0
- package/dist/types/content/index.d.ts +4 -0
- package/dist/types/content/index.d.ts.map +1 -0
- package/dist/types/content/useContentApiRequest.d.ts +3 -0
- package/dist/types/content/useContentApiRequest.d.ts.map +1 -0
- package/dist/types/content/useContentGraphQlClient.d.ts +3 -0
- package/dist/types/content/useContentGraphQlClient.d.ts.map +1 -0
- package/dist/types/content/useCurrentContentGraphQlClient.d.ts +3 -0
- package/dist/types/content/useCurrentContentGraphQlClient.d.ts.map +1 -0
- package/dist/types/index.d.ts +14 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/project/ProjectSlugContext.d.ts +3 -0
- package/dist/types/project/ProjectSlugContext.d.ts.map +1 -0
- package/dist/types/project/StageSlugContext.d.ts +3 -0
- package/dist/types/project/StageSlugContext.d.ts.map +1 -0
- package/dist/types/project/index.d.ts +5 -0
- package/dist/types/project/index.d.ts.map +1 -0
- package/dist/types/project/useProjectSlug.d.ts +2 -0
- package/dist/types/project/useProjectSlug.d.ts.map +1 -0
- package/dist/types/project/useStageSlug.d.ts +2 -0
- package/dist/types/project/useStageSlug.d.ts.map +1 -0
- package/dist/types/system/index.d.ts +4 -0
- package/dist/types/system/index.d.ts.map +1 -0
- package/dist/types/system/useCurrentSystemGraphQlClient.d.ts +3 -0
- package/dist/types/system/useCurrentSystemGraphQlClient.d.ts.map +1 -0
- package/dist/types/system/useSystemApiRequest.d.ts +3 -0
- package/dist/types/system/useSystemApiRequest.d.ts.map +1 -0
- package/dist/types/system/useSystemGraphQlClient.d.ts +2 -0
- package/dist/types/system/useSystemGraphQlClient.d.ts.map +1 -0
- package/dist/types/tenant/index.d.ts +3 -0
- package/dist/types/tenant/index.d.ts.map +1 -0
- package/dist/types/tenant/useTenantApiRequest.d.ts +3 -0
- package/dist/types/tenant/useTenantApiRequest.d.ts.map +1 -0
- package/dist/types/tenant/useTenantGraphQlClient.d.ts +2 -0
- package/dist/types/tenant/useTenantGraphQlClient.d.ts.map +1 -0
- package/dist/types/tsconfig.tsbuildinfo +1 -0
- package/dist/types/upload/FileId.d.ts +2 -0
- package/dist/types/upload/FileId.d.ts.map +1 -0
- package/dist/types/upload/FileUploadAction.d.ts +26 -0
- package/dist/types/upload/FileUploadAction.d.ts.map +1 -0
- package/dist/types/upload/FileUploadCompoundState.d.ts +4 -0
- package/dist/types/upload/FileUploadCompoundState.d.ts.map +1 -0
- package/dist/types/upload/FileUploadMetadata.d.ts +6 -0
- package/dist/types/upload/FileUploadMetadata.d.ts.map +1 -0
- package/dist/types/upload/FileUploadMultiTemporalState.d.ts +10 -0
- package/dist/types/upload/FileUploadMultiTemporalState.d.ts.map +1 -0
- package/dist/types/upload/FileUploadOperations.d.ts +18 -0
- package/dist/types/upload/FileUploadOperations.d.ts.map +1 -0
- package/dist/types/upload/FileWithMetadata.d.ts +8 -0
- package/dist/types/upload/FileWithMetadata.d.ts.map +1 -0
- package/dist/types/upload/SingleFileUploadState.d.ts +31 -0
- package/dist/types/upload/SingleFileUploadState.d.ts.map +1 -0
- package/dist/types/upload/fileUploadReducer.d.ts +5 -0
- package/dist/types/upload/fileUploadReducer.d.ts.map +1 -0
- package/dist/types/upload/index.d.ts +8 -0
- package/dist/types/upload/index.d.ts.map +1 -0
- package/dist/types/upload/toFileId.d.ts +4 -0
- package/dist/types/upload/toFileId.d.ts.map +1 -0
- package/dist/types/upload/useFileUpload.d.ts +11 -0
- package/dist/types/upload/useFileUpload.d.ts.map +1 -0
- package/dist/types/useGraphQlClient.d.ts +3 -0
- package/dist/types/useGraphQlClient.d.ts.map +1 -0
- package/dist/types/utils/assertNever.d.ts +2 -0
- package/dist/types/utils/assertNever.d.ts.map +1 -0
- package/dist/types/utils/index.d.ts +2 -0
- package/dist/types/utils/index.d.ts.map +1 -0
- package/package.json +6 -7
- package/src/ClientError.ts +1 -0
- package/src/ContemberClient.tsx +48 -0
- package/src/ambient.d.ts +1 -0
- package/src/apiRequest/ApiRequestAction.ts +17 -0
- package/src/apiRequest/ApiRequestState.ts +25 -0
- package/src/apiRequest/apiRequestReducer.ts +41 -0
- package/src/apiRequest/index.ts +4 -0
- package/src/apiRequest/useApiRequest.ts +73 -0
- package/src/auth/SessionTokenContext.ts +3 -0
- package/src/auth/SetSessionTokenContext.ts +5 -0
- package/src/auth/index.ts +4 -0
- package/src/auth/useSessionToken.ts +4 -0
- package/src/auth/useSetSessionToken.ts +4 -0
- package/src/components/RichTextRenderer/BuiltinElements.ts +112 -0
- package/src/components/RichTextRenderer/BuiltinLeaves.ts +32 -0
- package/src/components/RichTextRenderer/ElementRenderer.tsx +71 -0
- package/src/components/RichTextRenderer/LeafRenderer.tsx +39 -0
- package/src/components/RichTextRenderer/NormalizedRichTextBlock.ts +17 -0
- package/src/components/RichTextRenderer/ReferenceRenderer.ts +26 -0
- package/src/components/RichTextRenderer/RenderElementFallback.tsx +147 -0
- package/src/components/RichTextRenderer/RenderLeafFallback.tsx +43 -0
- package/src/components/RichTextRenderer/RichTextBlock.ts +1 -0
- package/src/components/RichTextRenderer/RichTextElement.ts +10 -0
- package/src/components/RichTextRenderer/RichTextElementMetadata.ts +15 -0
- package/src/components/RichTextRenderer/RichTextLeaf.ts +3 -0
- package/src/components/RichTextRenderer/RichTextLeafMetadata.ts +3 -0
- package/src/components/RichTextRenderer/RichTextReference.ts +3 -0
- package/src/components/RichTextRenderer/RichTextRenderMetadata.ts +16 -0
- package/src/components/RichTextRenderer/RichTextRenderMetadataContext.ts +20 -0
- package/src/components/RichTextRenderer/RichTextRenderer.tsx +165 -0
- package/src/components/RichTextRenderer/RichTextRendererError.ts +1 -0
- package/src/components/RichTextRenderer/RootEditorNode.ts +12 -0
- package/src/components/RichTextRenderer/defaultDeserialize.ts +19 -0
- package/src/components/RichTextRenderer/index.ts +15 -0
- package/src/components/RichTextRenderer/renderChildren.tsx +50 -0
- package/src/components/RichTextRenderer/resolveRichTextElementMetadata.ts +50 -0
- package/src/components/index.ts +1 -0
- package/src/config/ApiBaseUrlContext.ts +3 -0
- package/src/config/LoginTokenContext.ts +3 -0
- package/src/config/index.ts +4 -0
- package/src/config/useApiBaseUrl.ts +4 -0
- package/src/config/useLoginToken.ts +4 -0
- package/src/content/index.ts +3 -0
- package/src/content/useContentApiRequest.ts +6 -0
- package/src/content/useContentGraphQlClient.ts +6 -0
- package/src/content/useCurrentContentGraphQlClient.ts +17 -0
- package/src/index.ts +15 -0
- package/src/project/ProjectSlugContext.ts +3 -0
- package/src/project/StageSlugContext.ts +3 -0
- package/src/project/index.ts +4 -0
- package/src/project/useProjectSlug.ts +4 -0
- package/src/project/useStageSlug.ts +4 -0
- package/src/system/index.ts +3 -0
- package/src/system/useCurrentSystemGraphQlClient.ts +13 -0
- package/src/system/useSystemApiRequest.ts +6 -0
- package/src/system/useSystemGraphQlClient.ts +4 -0
- package/src/tenant/index.ts +2 -0
- package/src/tenant/useTenantApiRequest.ts +6 -0
- package/src/tenant/useTenantGraphQlClient.ts +4 -0
- package/src/tsconfig.json +9 -0
- package/src/upload/FileId.ts +1 -0
- package/src/upload/FileUploadAction.ts +33 -0
- package/src/upload/FileUploadCompoundState.ts +7 -0
- package/src/upload/FileUploadMetadata.ts +6 -0
- package/src/upload/FileUploadMultiTemporalState.ts +10 -0
- package/src/upload/FileUploadOperations.ts +22 -0
- package/src/upload/FileWithMetadata.ts +8 -0
- package/src/upload/SingleFileUploadState.ts +35 -0
- package/src/upload/fileUploadReducer.ts +185 -0
- package/src/upload/index.ts +15 -0
- package/src/upload/toFileId.ts +12 -0
- package/src/upload/useFileUpload.ts +262 -0
- package/src/useGraphQlClient.ts +10 -0
- package/src/utils/assertNever.ts +3 -0
- package/src/utils/index.ts +1 -0
- package/dist/react-client.d.ts +0 -367
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { FileUploader, FileUploadError } from '@contember/client';
|
|
2
|
+
export declare type SingleFileUploadState<Result = unknown, Metadata = undefined> = {
|
|
3
|
+
readyState: 'initializing';
|
|
4
|
+
abortController: AbortController;
|
|
5
|
+
file: File;
|
|
6
|
+
previewUrl: string;
|
|
7
|
+
} | {
|
|
8
|
+
readyState: 'uploading';
|
|
9
|
+
abortController: AbortController;
|
|
10
|
+
file: File;
|
|
11
|
+
metadata: Metadata;
|
|
12
|
+
previewUrl: string;
|
|
13
|
+
progress: number | undefined;
|
|
14
|
+
uploader: FileUploader;
|
|
15
|
+
} | {
|
|
16
|
+
readyState: 'success';
|
|
17
|
+
file: File;
|
|
18
|
+
metadata: Metadata;
|
|
19
|
+
previewUrl: string;
|
|
20
|
+
result: Result;
|
|
21
|
+
uploader: FileUploader;
|
|
22
|
+
} | {
|
|
23
|
+
readyState: 'error';
|
|
24
|
+
errors: FileUploadError[] | undefined;
|
|
25
|
+
rawError: any;
|
|
26
|
+
file: File;
|
|
27
|
+
metadata: Metadata | undefined;
|
|
28
|
+
previewUrl: string;
|
|
29
|
+
uploader: FileUploader | undefined;
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=SingleFileUploadState.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SingleFileUploadState.d.ts","sourceRoot":"","sources":["../../../src/upload/SingleFileUploadState.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAEtE,oBAAY,qBAAqB,CAAC,MAAM,GAAG,OAAO,EAAE,QAAQ,GAAG,SAAS,IACrE;IACA,UAAU,EAAE,cAAc,CAAA;IAC1B,eAAe,EAAE,eAAe,CAAA;IAChC,IAAI,EAAE,IAAI,CAAA;IACV,UAAU,EAAE,MAAM,CAAA;CACjB,GACD;IACA,UAAU,EAAE,WAAW,CAAA;IACvB,eAAe,EAAE,eAAe,CAAA;IAChC,IAAI,EAAE,IAAI,CAAA;IACV,QAAQ,EAAE,QAAQ,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAA;IAC5B,QAAQ,EAAE,YAAY,CAAA;CACrB,GACD;IACA,UAAU,EAAE,SAAS,CAAA;IACrB,IAAI,EAAE,IAAI,CAAA;IACV,QAAQ,EAAE,QAAQ,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,YAAY,CAAA;CACrB,GACD;IACA,UAAU,EAAE,OAAO,CAAA;IACnB,MAAM,EAAE,eAAe,EAAE,GAAG,SAAS,CAAA;IACrC,QAAQ,EAAE,GAAG,CAAA;IACb,IAAI,EAAE,IAAI,CAAA;IACV,QAAQ,EAAE,QAAQ,GAAG,SAAS,CAAA;IAC9B,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,YAAY,GAAG,SAAS,CAAA;CACjC,CAAA"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { FileUploadAction } from './FileUploadAction';
|
|
2
|
+
import type { FileUploadMultiTemporalState } from './FileUploadMultiTemporalState';
|
|
3
|
+
export declare const initializeFileUploadState: <Result = unknown, Metadata = undefined>() => FileUploadMultiTemporalState<Result, Metadata>;
|
|
4
|
+
export declare const fileUploadReducer: <Result = unknown, Metadata = undefined>(previousState: FileUploadMultiTemporalState<Result, Metadata>, action: FileUploadAction<Result, Metadata>) => FileUploadMultiTemporalState<Result, Metadata>;
|
|
5
|
+
//# sourceMappingURL=fileUploadReducer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fileUploadReducer.d.ts","sourceRoot":"","sources":["../../../src/upload/fileUploadReducer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAC1D,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAA;AAGlF,eAAO,MAAM,yBAAyB,8FASpC,CAAA;AAEF,eAAO,MAAM,iBAAiB,uMAsK7B,CAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export * from './useFileUpload';
|
|
2
|
+
export type { FileId } from './FileId';
|
|
3
|
+
export type { FileUploadCompoundState } from './FileUploadCompoundState';
|
|
4
|
+
export type { FileUploadMetadata } from './FileUploadMetadata';
|
|
5
|
+
export type { StartUploadFileOptions, StartUpload, FileUploadOperations, InitializeUpload, PurgeUpload, FailUpload, } from './FileUploadOperations';
|
|
6
|
+
export type { FileWithMetadata } from './FileWithMetadata';
|
|
7
|
+
export type { SingleFileUploadState } from './SingleFileUploadState';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/upload/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAE/B,YAAY,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACtC,YAAY,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAA;AACxE,YAAY,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAC9D,YAAY,EACX,sBAAsB,EACtB,WAAW,EACX,oBAAoB,EACpB,gBAAgB,EAChB,WAAW,EACX,UAAU,GACV,MAAM,wBAAwB,CAAA;AAC/B,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAC1D,YAAY,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { FileId } from './FileId';
|
|
2
|
+
import type { FileUploadMultiTemporalState } from './FileUploadMultiTemporalState';
|
|
3
|
+
export declare const toFileId: <Result = unknown, Metadata = undefined>(state: FileUploadMultiTemporalState<Result, Metadata>, fileOrId: File | FileId) => FileId;
|
|
4
|
+
//# sourceMappingURL=toFileId.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toFileId.d.ts","sourceRoot":"","sources":["../../../src/upload/toFileId.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACtC,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAA;AAElF,eAAO,MAAM,QAAQ,4GAEV,IAAI,GAAG,MAAM,WAMvB,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { FileUploadCompoundState } from './FileUploadCompoundState';
|
|
2
|
+
import type { FileUploadOperations } from './FileUploadOperations';
|
|
3
|
+
export declare type FileUpload<Result = unknown, Metadata = undefined> = [
|
|
4
|
+
FileUploadCompoundState<Result, Metadata>,
|
|
5
|
+
FileUploadOperations<Metadata>
|
|
6
|
+
];
|
|
7
|
+
export interface FileUploadOptions {
|
|
8
|
+
maxUpdateFrequency?: number;
|
|
9
|
+
}
|
|
10
|
+
export declare const useFileUpload: <Result = unknown, Metadata = undefined>(options?: FileUploadOptions | undefined) => FileUpload<Result, Metadata>;
|
|
11
|
+
//# sourceMappingURL=useFileUpload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFileUpload.d.ts","sourceRoot":"","sources":["../../../src/upload/useFileUpload.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAA;AAGxE,OAAO,KAAK,EAEX,oBAAoB,EAKpB,MAAM,wBAAwB,CAAA;AAK/B,oBAAY,UAAU,CAAC,MAAM,GAAG,OAAO,EAAE,QAAQ,GAAG,SAAS,IAAI;IAChE,uBAAuB,CAAC,MAAM,EAAE,QAAQ,CAAC;IACzC,oBAAoB,CAAC,QAAQ,CAAC;CAC9B,CAAA;AAED,MAAM,WAAW,iBAAiB;IACjC,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED,eAAO,MAAM,aAAa,mHAwOzB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useGraphQlClient.d.ts","sourceRoot":"","sources":["../../src/useGraphQlClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAKjD,eAAO,MAAM,gBAAgB,SAAU,MAAM,KAAG,aAI/C,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assertNever.d.ts","sourceRoot":"","sources":["../../../src/utils/assertNever.ts"],"names":[],"mappings":"AAAA,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,CAAC,IAAI,KAAK,CAExD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@contember/react-client",
|
|
3
3
|
"license": "Apache-2.0",
|
|
4
|
-
"version": "1.0.0-
|
|
4
|
+
"version": "1.0.0-rc.4",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
7
7
|
"main": "./dist/production/index.js",
|
|
@@ -14,19 +14,18 @@
|
|
|
14
14
|
}
|
|
15
15
|
},
|
|
16
16
|
"files": [
|
|
17
|
-
"dist/"
|
|
17
|
+
"dist/",
|
|
18
|
+
"src/"
|
|
18
19
|
],
|
|
19
|
-
"typings": "./dist/
|
|
20
|
+
"typings": "./dist/types/index.d.ts",
|
|
20
21
|
"dependencies": {
|
|
21
|
-
"@contember/client": "1.0.0-
|
|
22
|
+
"@contember/client": "1.0.0-rc.4"
|
|
22
23
|
},
|
|
23
24
|
"peerDependencies": {
|
|
24
25
|
"react": "^17"
|
|
25
26
|
},
|
|
26
27
|
"scripts": {
|
|
27
|
-
"build": "vite build --mode development && vite build --mode production"
|
|
28
|
-
"build:api:dev": "api-extractor run --local",
|
|
29
|
-
"build:api:prod": "api-extractor run"
|
|
28
|
+
"build": "vite build --mode development && vite build --mode production"
|
|
30
29
|
},
|
|
31
30
|
"readme": "# `@contember/react-client`\n\n## Usage\nIf you wish to communicate with any Contember API, wrap your code with the `ContemberClient` component:\n```tsx\nimport { ContemberClient } from '@contember/react-client'\n\n<ContemberClient\n\tapiBaseUrl=\"https://api.example.com\"\n\tproject=\"PROJECT-SLUG\"\n\tsessionToken=\"SESSION-TOKEN\"\n\tstage=\"STAGE-SLUG\"\n>\n ...\n</ContemberClient>\n```\n\n## Notable APIs\nYou'll have to look at the code for now, sorry.\n- `<RichTextRenderer />`\n- `useFileUpload`\n- `useContentApiRequest` / `useTenantApiRequest` / `useSystemApiRequest`\n"
|
|
32
31
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export class ClientError extends Error {}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { memo, useCallback, useEffect, useState } from 'react'
|
|
2
|
+
import { SessionTokenContext, SetSessionTokenContext } from './auth'
|
|
3
|
+
import { ApiBaseUrlContext, LoginTokenContext } from './config'
|
|
4
|
+
import { ProjectSlugContext, StageSlugContext } from './project'
|
|
5
|
+
|
|
6
|
+
export interface ContemberClientProps {
|
|
7
|
+
apiBaseUrl: string
|
|
8
|
+
sessionToken?: string
|
|
9
|
+
loginToken?: string
|
|
10
|
+
project?: string
|
|
11
|
+
stage?: string
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const sessionTokenKey = 'contember_session_token'
|
|
15
|
+
|
|
16
|
+
export const ContemberClient = memo<ContemberClientProps & { children: React.ReactNode }>(function ContemberClient({
|
|
17
|
+
apiBaseUrl,
|
|
18
|
+
children,
|
|
19
|
+
loginToken,
|
|
20
|
+
project,
|
|
21
|
+
sessionToken,
|
|
22
|
+
stage,
|
|
23
|
+
}) {
|
|
24
|
+
const [sessionTokenInner, setSessionTokenInner] = useState(() => localStorage.getItem(sessionTokenKey) ?? sessionToken ?? undefined)
|
|
25
|
+
|
|
26
|
+
const setSessionToken = useCallback((token: string | undefined) => {
|
|
27
|
+
if (token !== undefined) {
|
|
28
|
+
localStorage.setItem(sessionTokenKey, token)
|
|
29
|
+
} else {
|
|
30
|
+
localStorage.removeItem(sessionTokenKey)
|
|
31
|
+
}
|
|
32
|
+
setSessionTokenInner(token)
|
|
33
|
+
}, [])
|
|
34
|
+
|
|
35
|
+
return (
|
|
36
|
+
<ApiBaseUrlContext.Provider value={apiBaseUrl}>
|
|
37
|
+
<LoginTokenContext.Provider value={loginToken}>
|
|
38
|
+
<SetSessionTokenContext.Provider value={setSessionToken}>
|
|
39
|
+
<SessionTokenContext.Provider value={sessionTokenInner}>
|
|
40
|
+
<ProjectSlugContext.Provider value={project}>
|
|
41
|
+
<StageSlugContext.Provider value={stage}>{children}</StageSlugContext.Provider>
|
|
42
|
+
</ProjectSlugContext.Provider>
|
|
43
|
+
</SessionTokenContext.Provider>
|
|
44
|
+
</SetSessionTokenContext.Provider>
|
|
45
|
+
</LoginTokenContext.Provider>
|
|
46
|
+
</ApiBaseUrlContext.Provider>
|
|
47
|
+
)
|
|
48
|
+
})
|
package/src/ambient.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
/// <reference types="vite/client" />
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { GraphQlClientFailedRequestMetadata } from '@contember/client'
|
|
2
|
+
|
|
3
|
+
export type ApiRequestAction<SuccessData> =
|
|
4
|
+
| {
|
|
5
|
+
type: 'uninitialize'
|
|
6
|
+
}
|
|
7
|
+
| {
|
|
8
|
+
type: 'initialize'
|
|
9
|
+
}
|
|
10
|
+
| {
|
|
11
|
+
type: 'resolveSuccessfully'
|
|
12
|
+
data: SuccessData
|
|
13
|
+
}
|
|
14
|
+
| {
|
|
15
|
+
type: 'resolveWithError'
|
|
16
|
+
error: GraphQlClientFailedRequestMetadata
|
|
17
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { GraphQlClientFailedRequestMetadata } from '@contember/client'
|
|
2
|
+
|
|
3
|
+
export type ApiRequestState<SuccessData> =
|
|
4
|
+
| {
|
|
5
|
+
isLoading: false
|
|
6
|
+
isFinished: false
|
|
7
|
+
readyState: 'uninitialized'
|
|
8
|
+
}
|
|
9
|
+
| {
|
|
10
|
+
isLoading: true
|
|
11
|
+
isFinished: false
|
|
12
|
+
readyState: 'pending'
|
|
13
|
+
}
|
|
14
|
+
| {
|
|
15
|
+
isLoading: false
|
|
16
|
+
isFinished: true
|
|
17
|
+
readyState: 'networkSuccess'
|
|
18
|
+
data: SuccessData
|
|
19
|
+
}
|
|
20
|
+
| {
|
|
21
|
+
isLoading: false
|
|
22
|
+
isFinished: true
|
|
23
|
+
readyState: 'networkError'
|
|
24
|
+
data: GraphQlClientFailedRequestMetadata
|
|
25
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { ApiRequestAction } from './ApiRequestAction'
|
|
2
|
+
import type { ApiRequestState } from './ApiRequestState'
|
|
3
|
+
|
|
4
|
+
export type ApiRequestReducer<SuccessData> = (
|
|
5
|
+
previousState: ApiRequestState<SuccessData>,
|
|
6
|
+
action: ApiRequestAction<SuccessData>,
|
|
7
|
+
) => ApiRequestState<SuccessData>
|
|
8
|
+
|
|
9
|
+
export const apiRequestReducer = <SuccessData>(
|
|
10
|
+
previousState: ApiRequestState<SuccessData>,
|
|
11
|
+
action: ApiRequestAction<SuccessData>,
|
|
12
|
+
): ApiRequestState<SuccessData> => {
|
|
13
|
+
switch (action.type) {
|
|
14
|
+
case 'uninitialize':
|
|
15
|
+
return {
|
|
16
|
+
readyState: 'uninitialized',
|
|
17
|
+
isFinished: false,
|
|
18
|
+
isLoading: false,
|
|
19
|
+
}
|
|
20
|
+
case 'initialize':
|
|
21
|
+
return {
|
|
22
|
+
readyState: 'pending',
|
|
23
|
+
isFinished: false,
|
|
24
|
+
isLoading: true,
|
|
25
|
+
}
|
|
26
|
+
case 'resolveSuccessfully':
|
|
27
|
+
return {
|
|
28
|
+
readyState: 'networkSuccess',
|
|
29
|
+
data: action.data,
|
|
30
|
+
isFinished: true,
|
|
31
|
+
isLoading: false,
|
|
32
|
+
}
|
|
33
|
+
case 'resolveWithError':
|
|
34
|
+
return {
|
|
35
|
+
readyState: 'networkError',
|
|
36
|
+
data: action.error,
|
|
37
|
+
isFinished: true,
|
|
38
|
+
isLoading: false,
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
GraphQlClient,
|
|
3
|
+
GraphQlClientFailedRequestMetadata,
|
|
4
|
+
GraphQlClientRequestOptions,
|
|
5
|
+
GraphQlClientVariables,
|
|
6
|
+
} from '@contember/client'
|
|
7
|
+
import { useCallback, useEffect, useReducer, useRef } from 'react'
|
|
8
|
+
import { ApiRequestReducer, apiRequestReducer } from './apiRequestReducer'
|
|
9
|
+
import type { ApiRequestState } from './ApiRequestState'
|
|
10
|
+
|
|
11
|
+
const initialState: ApiRequestState<any> = {
|
|
12
|
+
isLoading: false,
|
|
13
|
+
isFinished: false,
|
|
14
|
+
readyState: 'uninitialized',
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export type UseApiRequestResult<SuccessData> = [
|
|
18
|
+
ApiRequestState<SuccessData>,
|
|
19
|
+
(
|
|
20
|
+
query: string,
|
|
21
|
+
variables?: GraphQlClientVariables,
|
|
22
|
+
options?: Omit<GraphQlClientRequestOptions, 'variables'>,
|
|
23
|
+
) => Promise<SuccessData>,
|
|
24
|
+
]
|
|
25
|
+
|
|
26
|
+
export const useApiRequest = <SuccessData>(client: GraphQlClient): UseApiRequestResult<SuccessData> => {
|
|
27
|
+
const [state, dispatch] = useReducer(apiRequestReducer as ApiRequestReducer<SuccessData>, initialState)
|
|
28
|
+
|
|
29
|
+
const isUnmountedRef = useRef(false)
|
|
30
|
+
const sendRequest = useCallback(
|
|
31
|
+
async (
|
|
32
|
+
query: string,
|
|
33
|
+
variables: GraphQlClientVariables = {},
|
|
34
|
+
options?: Omit<GraphQlClientRequestOptions, 'variables'>,
|
|
35
|
+
): Promise<SuccessData> => {
|
|
36
|
+
if (isUnmountedRef.current) {
|
|
37
|
+
return Promise.reject()
|
|
38
|
+
}
|
|
39
|
+
dispatch({
|
|
40
|
+
type: 'initialize',
|
|
41
|
+
})
|
|
42
|
+
return client
|
|
43
|
+
.sendRequest<SuccessData>(query, {
|
|
44
|
+
...options,
|
|
45
|
+
variables,
|
|
46
|
+
})
|
|
47
|
+
.then(data => {
|
|
48
|
+
dispatch({
|
|
49
|
+
type: 'resolveSuccessfully',
|
|
50
|
+
data,
|
|
51
|
+
})
|
|
52
|
+
return Promise.resolve(data)
|
|
53
|
+
})
|
|
54
|
+
.catch((error: GraphQlClientFailedRequestMetadata) => {
|
|
55
|
+
dispatch({
|
|
56
|
+
type: 'resolveWithError',
|
|
57
|
+
error,
|
|
58
|
+
})
|
|
59
|
+
return Promise.reject(error)
|
|
60
|
+
})
|
|
61
|
+
},
|
|
62
|
+
[client],
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
useEffect(
|
|
66
|
+
() => () => {
|
|
67
|
+
isUnmountedRef.current = true
|
|
68
|
+
},
|
|
69
|
+
[], // This empty array is crucial! Otherwise it will first "unmount" before second render no matter what.
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
return [state, sendRequest]
|
|
73
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import type { RichTextElement } from './RichTextElement'
|
|
2
|
+
import type { RichTextLeaf } from './RichTextLeaf'
|
|
3
|
+
|
|
4
|
+
export type BuiltinElements<
|
|
5
|
+
CustomElements extends RichTextElement = never,
|
|
6
|
+
CustomLeaves extends RichTextLeaf = never,
|
|
7
|
+
> =
|
|
8
|
+
| RichTextAnchorElement<CustomElements, CustomLeaves>
|
|
9
|
+
| RichTextHeadingElement<CustomElements, CustomLeaves>
|
|
10
|
+
| RichTextHorizontalRuleElement<CustomElements, CustomLeaves>
|
|
11
|
+
| RichTextListItemElement<CustomElements, CustomLeaves>
|
|
12
|
+
| RichTextOrderedListElement<CustomElements, CustomLeaves>
|
|
13
|
+
| RichTextParagraphElement<CustomElements, CustomLeaves>
|
|
14
|
+
| RichTextReferenceElement<CustomElements, CustomLeaves>
|
|
15
|
+
| RichTextScrollTargetElement<CustomElements, CustomLeaves>
|
|
16
|
+
| RichTextTableCellElement<CustomElements, CustomLeaves>
|
|
17
|
+
| RichTextTableElement<CustomElements, CustomLeaves>
|
|
18
|
+
| RichTextTableRowElement<CustomElements, CustomLeaves>
|
|
19
|
+
| RichTextUnorderedListElement<CustomElements, CustomLeaves>
|
|
20
|
+
|
|
21
|
+
export interface RichTextAnchorElement<
|
|
22
|
+
CustomElements extends RichTextElement = never,
|
|
23
|
+
CustomLeaves extends RichTextLeaf = never,
|
|
24
|
+
> extends RichTextElement<CustomElements, CustomLeaves> {
|
|
25
|
+
type: 'anchor'
|
|
26
|
+
href: string
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export interface RichTextHeadingElement<
|
|
30
|
+
CustomElements extends RichTextElement = never,
|
|
31
|
+
CustomLeaves extends RichTextLeaf = never,
|
|
32
|
+
> extends RichTextElement<CustomElements, CustomLeaves> {
|
|
33
|
+
type: 'heading'
|
|
34
|
+
level: 1 | 2 | 3 | 4 | 5 | 6
|
|
35
|
+
isNumbered?: boolean
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export interface RichTextOrderedListElement<
|
|
39
|
+
CustomElements extends RichTextElement = never,
|
|
40
|
+
CustomLeaves extends RichTextLeaf = never,
|
|
41
|
+
> extends RichTextElement<CustomElements, CustomLeaves> {
|
|
42
|
+
type: 'orderedList'
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export interface RichTextUnorderedListElement<
|
|
46
|
+
CustomElements extends RichTextElement = never,
|
|
47
|
+
CustomLeaves extends RichTextLeaf = never,
|
|
48
|
+
> extends RichTextElement<CustomElements, CustomLeaves> {
|
|
49
|
+
type: 'unorderedList'
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export interface RichTextListItemElement<
|
|
53
|
+
CustomElements extends RichTextElement = never,
|
|
54
|
+
CustomLeaves extends RichTextLeaf = never,
|
|
55
|
+
> extends RichTextElement<CustomElements, CustomLeaves> {
|
|
56
|
+
type: 'listItem'
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export interface RichTextHorizontalRuleElement<
|
|
60
|
+
CustomElements extends RichTextElement = never,
|
|
61
|
+
CustomLeaves extends RichTextLeaf = never,
|
|
62
|
+
> extends RichTextElement<CustomElements, CustomLeaves> {
|
|
63
|
+
type: 'horizontalRule'
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export interface RichTextParagraphElement<
|
|
67
|
+
CustomElements extends RichTextElement = never,
|
|
68
|
+
CustomLeaves extends RichTextLeaf = never,
|
|
69
|
+
> extends RichTextElement<CustomElements, CustomLeaves> {
|
|
70
|
+
type: 'paragraph'
|
|
71
|
+
isNumbered?: boolean
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export interface RichTextReferenceElement<
|
|
75
|
+
CustomElements extends RichTextElement = never,
|
|
76
|
+
CustomLeaves extends RichTextLeaf = never,
|
|
77
|
+
> extends RichTextElement<CustomElements, CustomLeaves> {
|
|
78
|
+
type: 'reference'
|
|
79
|
+
referenceId: string
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export interface RichTextScrollTargetElement<
|
|
83
|
+
CustomElements extends RichTextElement = never,
|
|
84
|
+
CustomLeaves extends RichTextLeaf = never,
|
|
85
|
+
> extends RichTextElement<CustomElements, CustomLeaves> {
|
|
86
|
+
type: 'scrollTarget'
|
|
87
|
+
identifier: string
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export interface RichTextTableElement<
|
|
91
|
+
CustomElements extends RichTextElement = never,
|
|
92
|
+
CustomLeaves extends RichTextLeaf = never,
|
|
93
|
+
> extends RichTextElement<CustomElements, CustomLeaves> {
|
|
94
|
+
type: 'table'
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
export interface RichTextTableCellElement<
|
|
98
|
+
CustomElements extends RichTextElement = never,
|
|
99
|
+
CustomLeaves extends RichTextLeaf = never,
|
|
100
|
+
> extends RichTextElement<CustomElements, CustomLeaves> {
|
|
101
|
+
type: 'tableCell'
|
|
102
|
+
headerScope?: 'row'
|
|
103
|
+
justify?: 'start' | 'center' | 'end'
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
export interface RichTextTableRowElement<
|
|
107
|
+
CustomElements extends RichTextElement = never,
|
|
108
|
+
CustomLeaves extends RichTextLeaf = never,
|
|
109
|
+
> extends RichTextElement<CustomElements, CustomLeaves> {
|
|
110
|
+
type: 'tableRow'
|
|
111
|
+
headerScope?: 'table'
|
|
112
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { RichTextLeaf } from './RichTextLeaf'
|
|
2
|
+
|
|
3
|
+
export type BuiltinLeaves = RichTextBoldLeaf &
|
|
4
|
+
RichTextCodeLeaf &
|
|
5
|
+
RichTextHighlightLeaf &
|
|
6
|
+
RichTextItalicLeaf &
|
|
7
|
+
RichTextStrikeThroughLeaf &
|
|
8
|
+
RichTextUnderlineLeaf
|
|
9
|
+
|
|
10
|
+
export interface RichTextBoldLeaf extends RichTextLeaf {
|
|
11
|
+
isBold?: boolean
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export interface RichTextCodeLeaf extends RichTextLeaf {
|
|
15
|
+
isCode?: boolean
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export interface RichTextHighlightLeaf extends RichTextLeaf {
|
|
19
|
+
isHighlighted?: boolean
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export interface RichTextItalicLeaf extends RichTextLeaf {
|
|
23
|
+
isItalic?: boolean
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export interface RichTextStrikeThroughLeaf extends RichTextLeaf {
|
|
27
|
+
isStruckThrough?: boolean
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export interface RichTextUnderlineLeaf extends RichTextLeaf {
|
|
31
|
+
isUnderlined?: boolean
|
|
32
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import type { ComponentType, ReactElement } from 'react'
|
|
2
|
+
import { createElement } from 'react'
|
|
3
|
+
import type { BuiltinElements } from './BuiltinElements'
|
|
4
|
+
import type { BuiltinLeaves } from './BuiltinLeaves'
|
|
5
|
+
import type { RenderChildrenOptions } from './renderChildren'
|
|
6
|
+
import { renderChildren } from './renderChildren'
|
|
7
|
+
import { RenderElementFallback } from './RenderElementFallback'
|
|
8
|
+
import { resolveRichTextElementMetadata } from './resolveRichTextElementMetadata'
|
|
9
|
+
import type { RichTextElement } from './RichTextElement'
|
|
10
|
+
import type { RichTextElementMetadata } from './RichTextElementMetadata'
|
|
11
|
+
import type { RichTextLeaf } from './RichTextLeaf'
|
|
12
|
+
import type { RichTextReference } from './RichTextReference'
|
|
13
|
+
import { useRichTextRenderMetadata } from './RichTextRenderMetadataContext'
|
|
14
|
+
|
|
15
|
+
export type RenderElement<
|
|
16
|
+
CustomElements extends RichTextElement = never,
|
|
17
|
+
CustomLeaves extends RichTextLeaf = never,
|
|
18
|
+
Reference extends RichTextReference = RichTextReference,
|
|
19
|
+
> = ComponentType<
|
|
20
|
+
{
|
|
21
|
+
element: CustomElements | BuiltinElements<CustomElements, CustomLeaves>
|
|
22
|
+
children: ReactElement
|
|
23
|
+
|
|
24
|
+
fallback: ReactElement
|
|
25
|
+
|
|
26
|
+
renderChildren: (
|
|
27
|
+
children:
|
|
28
|
+
| CustomElements
|
|
29
|
+
| BuiltinElements<CustomElements, CustomLeaves>
|
|
30
|
+
| CustomLeaves
|
|
31
|
+
| BuiltinLeaves
|
|
32
|
+
| Array<CustomElements | BuiltinElements<CustomElements, CustomLeaves> | CustomLeaves | BuiltinLeaves>,
|
|
33
|
+
options: RenderChildrenOptions<CustomElements, CustomLeaves>,
|
|
34
|
+
) => ReactElement
|
|
35
|
+
renderChildrenOptions: RenderChildrenOptions<CustomElements, CustomLeaves>
|
|
36
|
+
} & RichTextElementMetadata<CustomElements, CustomLeaves, Reference>
|
|
37
|
+
>
|
|
38
|
+
|
|
39
|
+
export interface ElementRendererProps<
|
|
40
|
+
CustomElements extends RichTextElement = never,
|
|
41
|
+
CustomLeaves extends RichTextLeaf = never,
|
|
42
|
+
> {
|
|
43
|
+
element: CustomElements | BuiltinElements<CustomElements, CustomLeaves>
|
|
44
|
+
children: ReactElement
|
|
45
|
+
options: RenderChildrenOptions<CustomElements, CustomLeaves>
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export function ElementRenderer<
|
|
49
|
+
CustomElements extends RichTextElement = never,
|
|
50
|
+
CustomLeaves extends RichTextLeaf = never,
|
|
51
|
+
>({ element, children, options }: ElementRendererProps<CustomElements, CustomLeaves>) {
|
|
52
|
+
const metadata = useRichTextRenderMetadata<CustomElements, CustomLeaves>()
|
|
53
|
+
const elementMetadata = resolveRichTextElementMetadata<CustomElements, CustomLeaves>(element, metadata)
|
|
54
|
+
|
|
55
|
+
const fallback = (
|
|
56
|
+
<RenderElementFallback element={element as BuiltinElements} options={options}>
|
|
57
|
+
{children}
|
|
58
|
+
</RenderElementFallback>
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
return options.renderElement
|
|
62
|
+
? createElement(options.renderElement, {
|
|
63
|
+
...elementMetadata,
|
|
64
|
+
element,
|
|
65
|
+
fallback,
|
|
66
|
+
children,
|
|
67
|
+
renderChildren,
|
|
68
|
+
renderChildrenOptions: options,
|
|
69
|
+
})
|
|
70
|
+
: fallback
|
|
71
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { ComponentType, ReactElement } from 'react'
|
|
2
|
+
import { createElement } from 'react'
|
|
3
|
+
import type { BuiltinLeaves } from './BuiltinLeaves'
|
|
4
|
+
import { RenderLeafFallback } from './RenderLeafFallback'
|
|
5
|
+
import type { RichTextLeaf } from './RichTextLeaf'
|
|
6
|
+
import type { RichTextLeafMetadata } from './RichTextLeafMetadata'
|
|
7
|
+
import { useRichTextRenderMetadata } from './RichTextRenderMetadataContext'
|
|
8
|
+
|
|
9
|
+
export type RenderLeaf<CustomLeaves extends RichTextLeaf> = ComponentType<
|
|
10
|
+
{
|
|
11
|
+
leaf: CustomLeaves | BuiltinLeaves
|
|
12
|
+
fallback: ReactElement
|
|
13
|
+
} & RichTextLeafMetadata
|
|
14
|
+
>
|
|
15
|
+
|
|
16
|
+
export interface LeafRendererProps<CustomLeaves extends RichTextLeaf = never> {
|
|
17
|
+
renderLeaf?: RenderLeaf<CustomLeaves>
|
|
18
|
+
leaf: CustomLeaves | BuiltinLeaves
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export function LeafRenderer<CustomLeaves extends RichTextLeaf = never>({
|
|
22
|
+
leaf,
|
|
23
|
+
renderLeaf,
|
|
24
|
+
}: LeafRendererProps<CustomLeaves>) {
|
|
25
|
+
const formatVersion = useRichTextRenderMetadata().formatVersion
|
|
26
|
+
const fallback = <RenderLeafFallback leaf={leaf} />
|
|
27
|
+
|
|
28
|
+
return renderLeaf
|
|
29
|
+
? createElement(
|
|
30
|
+
renderLeaf,
|
|
31
|
+
{
|
|
32
|
+
formatVersion,
|
|
33
|
+
leaf,
|
|
34
|
+
fallback,
|
|
35
|
+
},
|
|
36
|
+
leaf.text,
|
|
37
|
+
)
|
|
38
|
+
: fallback
|
|
39
|
+
}
|