@atlaskit/editor-synced-block-provider 2.8.0 → 2.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/cjs/hooks/useFetchSyncBlockData.js +3 -2
  3. package/dist/cjs/index.js +30 -0
  4. package/dist/cjs/providers/block-service/blockServiceAPI.js +14 -8
  5. package/dist/cjs/providers/confluence/confluenceContentAPI.js +5 -0
  6. package/dist/cjs/providers/syncBlockProvider.js +79 -7
  7. package/dist/cjs/store-manager/referenceSyncBlockStoreManager.js +26 -0
  8. package/dist/cjs/store-manager/sourceSyncBlockStoreManager.js +2 -5
  9. package/dist/cjs/store-manager/syncBlockStoreManager.js +5 -0
  10. package/dist/cjs/utils/ari.js +32 -4
  11. package/dist/es2019/hooks/useFetchSyncBlockData.js +3 -2
  12. package/dist/es2019/index.js +1 -1
  13. package/dist/es2019/providers/block-service/blockServiceAPI.js +12 -8
  14. package/dist/es2019/providers/confluence/confluenceContentAPI.js +4 -1
  15. package/dist/es2019/providers/syncBlockProvider.js +73 -5
  16. package/dist/es2019/store-manager/referenceSyncBlockStoreManager.js +25 -0
  17. package/dist/es2019/store-manager/sourceSyncBlockStoreManager.js +2 -5
  18. package/dist/es2019/store-manager/syncBlockStoreManager.js +3 -0
  19. package/dist/es2019/utils/ari.js +31 -1
  20. package/dist/esm/hooks/useFetchSyncBlockData.js +3 -2
  21. package/dist/esm/index.js +1 -1
  22. package/dist/esm/providers/block-service/blockServiceAPI.js +15 -9
  23. package/dist/esm/providers/confluence/confluenceContentAPI.js +6 -1
  24. package/dist/esm/providers/syncBlockProvider.js +79 -7
  25. package/dist/esm/store-manager/referenceSyncBlockStoreManager.js +26 -0
  26. package/dist/esm/store-manager/sourceSyncBlockStoreManager.js +2 -5
  27. package/dist/esm/store-manager/syncBlockStoreManager.js +5 -0
  28. package/dist/esm/utils/ari.js +31 -3
  29. package/dist/types/hooks/useFetchSyncBlockData.d.ts +2 -0
  30. package/dist/types/index.d.ts +1 -1
  31. package/dist/types/providers/block-service/blockServiceAPI.d.ts +1 -0
  32. package/dist/types/providers/confluence/confluenceContentAPI.d.ts +1 -0
  33. package/dist/types/providers/syncBlockProvider.d.ts +60 -3
  34. package/dist/types/providers/types.d.ts +23 -0
  35. package/dist/types/store-manager/referenceSyncBlockStoreManager.d.ts +3 -0
  36. package/dist/types/store-manager/syncBlockStoreManager.d.ts +2 -0
  37. package/dist/types/utils/ari.d.ts +15 -1
  38. package/dist/types/utils/blockService.d.ts +1 -1
  39. package/dist/types-ts4.5/hooks/useFetchSyncBlockData.d.ts +2 -0
  40. package/dist/types-ts4.5/index.d.ts +1 -1
  41. package/dist/types-ts4.5/providers/block-service/blockServiceAPI.d.ts +1 -0
  42. package/dist/types-ts4.5/providers/confluence/confluenceContentAPI.d.ts +1 -0
  43. package/dist/types-ts4.5/providers/syncBlockProvider.d.ts +60 -3
  44. package/dist/types-ts4.5/providers/types.d.ts +23 -0
  45. package/dist/types-ts4.5/store-manager/referenceSyncBlockStoreManager.d.ts +3 -0
  46. package/dist/types-ts4.5/store-manager/syncBlockStoreManager.d.ts +2 -0
  47. package/dist/types-ts4.5/utils/ari.d.ts +15 -1
  48. package/dist/types-ts4.5/utils/blockService.d.ts +1 -1
  49. package/package.json +8 -1
@@ -1,7 +1,9 @@
1
+ import type { ProviderFactory } from '@atlaskit/editor-common/provider-factory';
1
2
  import type { SyncBlockInstance } from '../providers/types';
2
3
  import type { SyncBlockStoreManager } from '../store-manager/syncBlockStoreManager';
3
4
  export interface UseFetchSyncBlockDataResult {
4
5
  isLoading: boolean;
6
+ providerFactory: ProviderFactory | undefined;
5
7
  reloadData: () => Promise<void>;
6
8
  syncBlockInstance: SyncBlockInstance | null;
7
9
  }
@@ -10,6 +10,6 @@ export { SyncBlockProvider as SyncedBlockProvider, useMemoizedSyncedBlockProvide
10
10
  export type { ADFFetchProvider, ADFWriteProvider, SyncBlockDataProvider, SyncBlockInstance, } from './providers/types';
11
11
  export { ReferenceSyncBlockStoreManager } from './store-manager/referenceSyncBlockStoreManager';
12
12
  export { SyncBlockStoreManager } from './store-manager/syncBlockStoreManager';
13
- export { getConfluencePageAri, getPageIdAndTypeFromAri } from './utils/ari';
13
+ export { blockResourceIdFromSourceAndLocalId, getConfluencePageAri, getLocalIdFromAri, getLocalIdFromResourceId, getPageARIFromResourceId, getPageIdAndTypeFromAri, resourceIdFromSourceAndLocalId, } from './utils/ari';
14
14
  export { createSyncBlockNode, convertSyncBlockPMNodeToSyncBlockData, convertSyncBlockJSONNodeToSyncBlockNode, } from './utils/utils';
15
15
  export { resolveSyncBlockInstance } from './utils/resolveSyncBlockInstance';
@@ -12,6 +12,7 @@ declare class BlockServiceADFFetchProvider implements ADFFetchProvider {
12
12
  declare class BlockServiceADFWriteProvider implements ADFWriteProvider {
13
13
  writeData(data: SyncBlockData): Promise<WriteSyncBlockResult>;
14
14
  deleteData(resourceId: string): Promise<DeleteSyncBlockResult>;
15
+ generateResourceId(sourceId: string, localId: string): string;
15
16
  }
16
17
  export declare const useMemoizedBlockServiceAPIProviders: () => {
17
18
  fetchProvider: BlockServiceADFFetchProvider;
@@ -24,6 +24,7 @@ declare class ConfluenceADFWriteProvider implements ADFWriteProvider {
24
24
  private createNewContentProperty;
25
25
  writeData(data: SyncBlockData): Promise<WriteSyncBlockResult>;
26
26
  deleteData(resourceId: string): Promise<DeleteSyncBlockResult>;
27
+ generateResourceId(sourceId: string, localId: string): string;
27
28
  }
28
29
  /**
29
30
  * Convenience function to create providers with default content property key
@@ -1,16 +1,47 @@
1
1
  import type { JSONNode } from '@atlaskit/editor-json-transformer/types';
2
2
  import { type SyncBlockData, type SyncBlockNode } from '../common/types';
3
- import { SyncBlockDataProvider, type ADFFetchProvider, type ADFWriteProvider, type DeleteSyncBlockResult, type SyncBlockInstance, type SyncBlockSourceInfo, type WriteSyncBlockResult } from '../providers/types';
3
+ import { SyncBlockDataProvider, type ADFFetchProvider, type ADFWriteProvider, type DeleteSyncBlockResult, type SyncBlockInstance, type SyncBlockSourceInfo, type SyncedBlockRendererProviderOptions, type WriteSyncBlockResult } from '../providers/types';
4
4
  export declare class SyncBlockProvider extends SyncBlockDataProvider {
5
5
  name: string;
6
6
  private fetchProvider;
7
7
  private writeProvider;
8
8
  private sourceId;
9
- constructor(fetchProvider: ADFFetchProvider, writeProvider: ADFWriteProvider, sourceId: string);
9
+ private providerOptions;
10
+ /**
11
+ * Constructor for the SyncBlockProvider
12
+ *
13
+ * @param fetchProvider
14
+ * @param writeProvider
15
+ * @param sourceId
16
+ * @param nestedRendererDataProviders
17
+ */
18
+ constructor(fetchProvider: ADFFetchProvider, writeProvider: ADFWriteProvider, sourceId: string, providerOptions: SyncedBlockRendererProviderOptions);
19
+ /**
20
+ * Check if the node is supported by the provider
21
+ *
22
+ * @param node
23
+ *
24
+ * @returns True if the node is supported, false otherwise
25
+ */
10
26
  isNodeSupported(node: JSONNode): node is SyncBlockNode;
27
+ /**
28
+ * Get the data key for the node
29
+ *
30
+ * @param node
31
+ *
32
+ * @returns The data key
33
+ */
11
34
  nodeDataKey(node: SyncBlockNode): string;
35
+ /**
36
+ * Fetch the data from the fetch provider
37
+ *
38
+ * @param nodes
39
+ *
40
+ * @returns Array of {resourceId?: string, error?: string}.
41
+ */
12
42
  fetchNodesData(nodes: SyncBlockNode[]): Promise<SyncBlockInstance[]>;
13
43
  /**
44
+ * Write the data to the write provider
14
45
  *
15
46
  * @param nodes
16
47
  * @param data
@@ -19,8 +50,34 @@ export declare class SyncBlockProvider extends SyncBlockDataProvider {
19
50
  * resourceId: resource id of the node if write successfully , error: reason for when write failed
20
51
  */
21
52
  writeNodesData(nodes: SyncBlockNode[], data: SyncBlockData[]): Promise<Array<WriteSyncBlockResult>>;
53
+ /**
54
+ * Delete the data from the write provider
55
+ *
56
+ * @param resourceIds
57
+ *
58
+ * @returns Array of {resourceId?: string, error?: string}.
59
+ */
22
60
  deleteNodesData(resourceIds: string[]): Promise<Array<DeleteSyncBlockResult>>;
61
+ /**
62
+ * Get the source id
63
+ *
64
+ * @returns The source id
65
+ */
23
66
  getSourceId(): string;
67
+ /**
68
+ * Retrieve the source info from the source id
69
+ *
70
+ * @param node
71
+ *
72
+ * @returns The source info
73
+ */
24
74
  retrieveSyncBlockSourceInfo(node: SyncBlockNode): Promise<SyncBlockSourceInfo | undefined>;
75
+ generateResourceId(sourceId: string, localId: string): string;
76
+ /**
77
+ * Get the synced block renderer provider options
78
+ *
79
+ * @returns The synced block renderer provider options
80
+ */
81
+ getSyncedBlockRendererProviderOptions(): SyncedBlockRendererProviderOptions;
25
82
  }
26
- export declare const useMemoizedSyncedBlockProvider: (fetchProvider: ADFFetchProvider, writeProvider: ADFWriteProvider, sourceId: string) => SyncBlockProvider;
83
+ export declare const useMemoizedSyncedBlockProvider: (fetchProvider: ADFFetchProvider, writeProvider: ADFWriteProvider, sourceId: string, providerOptions: SyncedBlockRendererProviderOptions) => SyncBlockProvider;
@@ -1,3 +1,5 @@
1
+ import type { SyncedBlockRendererDataProviders, MediaProvider } from '@atlaskit/editor-common/provider-factory';
2
+ import type { EmojiProvider } from '@atlaskit/emoji';
1
3
  import { NodeDataProvider } from '@atlaskit/node-data-provider';
2
4
  import type { SyncBlockData, ResourceId, SyncBlockError, SyncBlockNode } from '../common/types';
3
5
  /**
@@ -28,13 +30,34 @@ export interface ADFFetchProvider {
28
30
  }
29
31
  export interface ADFWriteProvider {
30
32
  deleteData: (resourceId: string) => Promise<DeleteSyncBlockResult>;
33
+ generateResourceId: (sourceId: string, localId: string) => ResourceId;
31
34
  writeData: (data: SyncBlockData) => Promise<WriteSyncBlockResult>;
32
35
  }
36
+ export type MediaEmojiProviderOptions = {
37
+ contentId: string;
38
+ contentType: string;
39
+ spaceKey?: string | null;
40
+ };
41
+ export type SyncedBlockRendererProviderOptions = {
42
+ parentDataProviders?: SyncedBlockRendererDataProviders;
43
+ providerCreator?: {
44
+ createEmojiProvider: ((options: MediaEmojiProviderOptions) => Promise<EmojiProvider>) | undefined;
45
+ createMediaProvider: ((options: MediaEmojiProviderOptions) => Promise<MediaProvider>) | undefined;
46
+ };
47
+ };
33
48
  export declare abstract class SyncBlockDataProvider extends NodeDataProvider<SyncBlockNode, SyncBlockInstance> {
34
49
  abstract writeNodesData(nodes: SyncBlockNode[], data: SyncBlockData[]): Promise<Array<WriteSyncBlockResult>>;
35
50
  abstract deleteNodesData(resourceIds: string[]): Promise<Array<DeleteSyncBlockResult>>;
36
51
  abstract getSourceId(): ResourceId;
37
52
  abstract retrieveSyncBlockSourceInfo(node: SyncBlockNode): Promise<SyncBlockSourceInfo | undefined>;
53
+ abstract getSyncedBlockRendererProviderOptions(): SyncedBlockRendererProviderOptions;
54
+ /**
55
+ * Generates a resource ID from a source ID and local ID.
56
+ * @param sourceId - The source document ID (e.g., page ARI)
57
+ * @param localId - The local block ID (usually a UUID)
58
+ * @returns The generated resource ID
59
+ */
60
+ abstract generateResourceId(sourceId: ResourceId, localId: string): ResourceId;
38
61
  }
39
62
  export type SubscriptionCallback = (data: SyncBlockInstance) => void;
40
63
  export type TitleSubscriptionCallback = (title: string) => void;
@@ -1,3 +1,4 @@
1
+ import { ProviderFactory } from '@atlaskit/editor-common/provider-factory';
1
2
  import { type Node as PMNode } from '@atlaskit/editor-prosemirror/model';
2
3
  import { type ResourceId, type SyncBlockNode } from '../common/types';
3
4
  import type { SyncBlockInstance, SubscriptionCallback, SyncBlockDataProvider, TitleSubscriptionCallback } from '../providers/types';
@@ -6,6 +7,7 @@ export declare class ReferenceSyncBlockStoreManager {
6
7
  private syncBlockCache;
7
8
  private subscriptions;
8
9
  private titleSubscriptions;
10
+ private providerFactories;
9
11
  private syncBlockURLRequests;
10
12
  private isRefreshingSubscriptions;
11
13
  constructor(dataProvider?: SyncBlockDataProvider);
@@ -29,5 +31,6 @@ export declare class ReferenceSyncBlockStoreManager {
29
31
  * @returns
30
32
  */
31
33
  getSyncBlockURL(resourceId: ResourceId): string | undefined;
34
+ getProviderFactory(resourceId: ResourceId): ProviderFactory | undefined;
32
35
  destroy(): void;
33
36
  }
@@ -1,3 +1,4 @@
1
+ import type { ProviderFactory } from '@atlaskit/editor-common/provider-factory';
1
2
  import type { EditorView } from '@atlaskit/editor-prosemirror/dist/types/view';
2
3
  import { type Node as PMNode } from '@atlaskit/editor-prosemirror/model';
3
4
  import type { EditorState, Transaction } from '@atlaskit/editor-prosemirror/state';
@@ -60,5 +61,6 @@ export declare class SyncBlockStoreManager {
60
61
  refreshSubscriptions(): void;
61
62
  deleteSyncBlocksWithConfirmation(tr: Transaction, syncBlockIds: SyncBlockAttrs[]): Promise<void>;
62
63
  rebaseTransaction(incomingTr: Transaction, state: EditorState): void;
64
+ getReferenceSyncBlockProviderFactory(resourceId: ResourceId): ProviderFactory | undefined;
63
65
  destroy(): void;
64
66
  }
@@ -6,5 +6,19 @@ export declare const getPageIdAndTypeFromAri: (ari: string) => {
6
6
  };
7
7
  export declare const getLocalIdFromAri: (ari: string) => string;
8
8
  export declare const getPageARIFromResourceId: (resourceId: string) => string;
9
- export declare const getContentPropertyAri: (contentPropertyId: string, cloudId: string) => string;
10
9
  export declare const resourceIdFromSourceAndLocalId: (sourceId: string, localId: string) => string;
10
+ /**
11
+ * For the following functions, they are used for the block service API provider.
12
+ * The resourceId/blockResourceId always refers to the block ARI.
13
+ */
14
+ /**
15
+ * @param sourceId - the ARI of the document. E.G ari:cloud:confluence:cloudId:page/pageId
16
+ * @param localId - the localId of the block node. A randomly generated UUID
17
+ * @returns the block ARI. E.G ari:cloud:blocks:cloudId:synced-block/localId
18
+ */
19
+ export declare const blockResourceIdFromSourceAndLocalId: (sourceId: string, localId: string) => string;
20
+ /**
21
+ * @param ari - the block ARI. E.G ari:cloud:blocks:cloudId:synced-block/localId
22
+ * @returns the localId of the block node. A randomly generated UUID
23
+ */
24
+ export declare const getLocalIdFromResourceId: (ari: string) => string;
@@ -34,6 +34,6 @@ export declare class BlockError extends Error {
34
34
  constructor(status: number);
35
35
  }
36
36
  export declare const getSyncedBlockContent: ({ blockAri, }: GetSyncedBlockContentRequest) => Promise<BlockContentResponse>;
37
- export declare const deleteSyncedBlock: ({ blockAri, }: DeleteSyncedBlockRequest) => Promise<void>;
37
+ export declare const deleteSyncedBlock: ({ blockAri }: DeleteSyncedBlockRequest) => Promise<void>;
38
38
  export declare const updateSyncedBlock: ({ blockAri, content, }: UpdateSyncedBlockRequest) => Promise<void>;
39
39
  export declare const createSyncedBlock: ({ blockAri, blockInstanceId, sourceAri, product, content, }: CreateSyncedBlockRequest) => Promise<BlockContentResponse>;
@@ -1,7 +1,9 @@
1
+ import type { ProviderFactory } from '@atlaskit/editor-common/provider-factory';
1
2
  import type { SyncBlockInstance } from '../providers/types';
2
3
  import type { SyncBlockStoreManager } from '../store-manager/syncBlockStoreManager';
3
4
  export interface UseFetchSyncBlockDataResult {
4
5
  isLoading: boolean;
6
+ providerFactory: ProviderFactory | undefined;
5
7
  reloadData: () => Promise<void>;
6
8
  syncBlockInstance: SyncBlockInstance | null;
7
9
  }
@@ -10,6 +10,6 @@ export { SyncBlockProvider as SyncedBlockProvider, useMemoizedSyncedBlockProvide
10
10
  export type { ADFFetchProvider, ADFWriteProvider, SyncBlockDataProvider, SyncBlockInstance, } from './providers/types';
11
11
  export { ReferenceSyncBlockStoreManager } from './store-manager/referenceSyncBlockStoreManager';
12
12
  export { SyncBlockStoreManager } from './store-manager/syncBlockStoreManager';
13
- export { getConfluencePageAri, getPageIdAndTypeFromAri } from './utils/ari';
13
+ export { blockResourceIdFromSourceAndLocalId, getConfluencePageAri, getLocalIdFromAri, getLocalIdFromResourceId, getPageARIFromResourceId, getPageIdAndTypeFromAri, resourceIdFromSourceAndLocalId, } from './utils/ari';
14
14
  export { createSyncBlockNode, convertSyncBlockPMNodeToSyncBlockData, convertSyncBlockJSONNodeToSyncBlockNode, } from './utils/utils';
15
15
  export { resolveSyncBlockInstance } from './utils/resolveSyncBlockInstance';
@@ -12,6 +12,7 @@ declare class BlockServiceADFFetchProvider implements ADFFetchProvider {
12
12
  declare class BlockServiceADFWriteProvider implements ADFWriteProvider {
13
13
  writeData(data: SyncBlockData): Promise<WriteSyncBlockResult>;
14
14
  deleteData(resourceId: string): Promise<DeleteSyncBlockResult>;
15
+ generateResourceId(sourceId: string, localId: string): string;
15
16
  }
16
17
  export declare const useMemoizedBlockServiceAPIProviders: () => {
17
18
  fetchProvider: BlockServiceADFFetchProvider;
@@ -24,6 +24,7 @@ declare class ConfluenceADFWriteProvider implements ADFWriteProvider {
24
24
  private createNewContentProperty;
25
25
  writeData(data: SyncBlockData): Promise<WriteSyncBlockResult>;
26
26
  deleteData(resourceId: string): Promise<DeleteSyncBlockResult>;
27
+ generateResourceId(sourceId: string, localId: string): string;
27
28
  }
28
29
  /**
29
30
  * Convenience function to create providers with default content property key
@@ -1,16 +1,47 @@
1
1
  import type { JSONNode } from '@atlaskit/editor-json-transformer/types';
2
2
  import { type SyncBlockData, type SyncBlockNode } from '../common/types';
3
- import { SyncBlockDataProvider, type ADFFetchProvider, type ADFWriteProvider, type DeleteSyncBlockResult, type SyncBlockInstance, type SyncBlockSourceInfo, type WriteSyncBlockResult } from '../providers/types';
3
+ import { SyncBlockDataProvider, type ADFFetchProvider, type ADFWriteProvider, type DeleteSyncBlockResult, type SyncBlockInstance, type SyncBlockSourceInfo, type SyncedBlockRendererProviderOptions, type WriteSyncBlockResult } from '../providers/types';
4
4
  export declare class SyncBlockProvider extends SyncBlockDataProvider {
5
5
  name: string;
6
6
  private fetchProvider;
7
7
  private writeProvider;
8
8
  private sourceId;
9
- constructor(fetchProvider: ADFFetchProvider, writeProvider: ADFWriteProvider, sourceId: string);
9
+ private providerOptions;
10
+ /**
11
+ * Constructor for the SyncBlockProvider
12
+ *
13
+ * @param fetchProvider
14
+ * @param writeProvider
15
+ * @param sourceId
16
+ * @param nestedRendererDataProviders
17
+ */
18
+ constructor(fetchProvider: ADFFetchProvider, writeProvider: ADFWriteProvider, sourceId: string, providerOptions: SyncedBlockRendererProviderOptions);
19
+ /**
20
+ * Check if the node is supported by the provider
21
+ *
22
+ * @param node
23
+ *
24
+ * @returns True if the node is supported, false otherwise
25
+ */
10
26
  isNodeSupported(node: JSONNode): node is SyncBlockNode;
27
+ /**
28
+ * Get the data key for the node
29
+ *
30
+ * @param node
31
+ *
32
+ * @returns The data key
33
+ */
11
34
  nodeDataKey(node: SyncBlockNode): string;
35
+ /**
36
+ * Fetch the data from the fetch provider
37
+ *
38
+ * @param nodes
39
+ *
40
+ * @returns Array of {resourceId?: string, error?: string}.
41
+ */
12
42
  fetchNodesData(nodes: SyncBlockNode[]): Promise<SyncBlockInstance[]>;
13
43
  /**
44
+ * Write the data to the write provider
14
45
  *
15
46
  * @param nodes
16
47
  * @param data
@@ -19,8 +50,34 @@ export declare class SyncBlockProvider extends SyncBlockDataProvider {
19
50
  * resourceId: resource id of the node if write successfully , error: reason for when write failed
20
51
  */
21
52
  writeNodesData(nodes: SyncBlockNode[], data: SyncBlockData[]): Promise<Array<WriteSyncBlockResult>>;
53
+ /**
54
+ * Delete the data from the write provider
55
+ *
56
+ * @param resourceIds
57
+ *
58
+ * @returns Array of {resourceId?: string, error?: string}.
59
+ */
22
60
  deleteNodesData(resourceIds: string[]): Promise<Array<DeleteSyncBlockResult>>;
61
+ /**
62
+ * Get the source id
63
+ *
64
+ * @returns The source id
65
+ */
23
66
  getSourceId(): string;
67
+ /**
68
+ * Retrieve the source info from the source id
69
+ *
70
+ * @param node
71
+ *
72
+ * @returns The source info
73
+ */
24
74
  retrieveSyncBlockSourceInfo(node: SyncBlockNode): Promise<SyncBlockSourceInfo | undefined>;
75
+ generateResourceId(sourceId: string, localId: string): string;
76
+ /**
77
+ * Get the synced block renderer provider options
78
+ *
79
+ * @returns The synced block renderer provider options
80
+ */
81
+ getSyncedBlockRendererProviderOptions(): SyncedBlockRendererProviderOptions;
25
82
  }
26
- export declare const useMemoizedSyncedBlockProvider: (fetchProvider: ADFFetchProvider, writeProvider: ADFWriteProvider, sourceId: string) => SyncBlockProvider;
83
+ export declare const useMemoizedSyncedBlockProvider: (fetchProvider: ADFFetchProvider, writeProvider: ADFWriteProvider, sourceId: string, providerOptions: SyncedBlockRendererProviderOptions) => SyncBlockProvider;
@@ -1,3 +1,5 @@
1
+ import type { SyncedBlockRendererDataProviders, MediaProvider } from '@atlaskit/editor-common/provider-factory';
2
+ import type { EmojiProvider } from '@atlaskit/emoji';
1
3
  import { NodeDataProvider } from '@atlaskit/node-data-provider';
2
4
  import type { SyncBlockData, ResourceId, SyncBlockError, SyncBlockNode } from '../common/types';
3
5
  /**
@@ -28,13 +30,34 @@ export interface ADFFetchProvider {
28
30
  }
29
31
  export interface ADFWriteProvider {
30
32
  deleteData: (resourceId: string) => Promise<DeleteSyncBlockResult>;
33
+ generateResourceId: (sourceId: string, localId: string) => ResourceId;
31
34
  writeData: (data: SyncBlockData) => Promise<WriteSyncBlockResult>;
32
35
  }
36
+ export type MediaEmojiProviderOptions = {
37
+ contentId: string;
38
+ contentType: string;
39
+ spaceKey?: string | null;
40
+ };
41
+ export type SyncedBlockRendererProviderOptions = {
42
+ parentDataProviders?: SyncedBlockRendererDataProviders;
43
+ providerCreator?: {
44
+ createEmojiProvider: ((options: MediaEmojiProviderOptions) => Promise<EmojiProvider>) | undefined;
45
+ createMediaProvider: ((options: MediaEmojiProviderOptions) => Promise<MediaProvider>) | undefined;
46
+ };
47
+ };
33
48
  export declare abstract class SyncBlockDataProvider extends NodeDataProvider<SyncBlockNode, SyncBlockInstance> {
34
49
  abstract writeNodesData(nodes: SyncBlockNode[], data: SyncBlockData[]): Promise<Array<WriteSyncBlockResult>>;
35
50
  abstract deleteNodesData(resourceIds: string[]): Promise<Array<DeleteSyncBlockResult>>;
36
51
  abstract getSourceId(): ResourceId;
37
52
  abstract retrieveSyncBlockSourceInfo(node: SyncBlockNode): Promise<SyncBlockSourceInfo | undefined>;
53
+ abstract getSyncedBlockRendererProviderOptions(): SyncedBlockRendererProviderOptions;
54
+ /**
55
+ * Generates a resource ID from a source ID and local ID.
56
+ * @param sourceId - The source document ID (e.g., page ARI)
57
+ * @param localId - The local block ID (usually a UUID)
58
+ * @returns The generated resource ID
59
+ */
60
+ abstract generateResourceId(sourceId: ResourceId, localId: string): ResourceId;
38
61
  }
39
62
  export type SubscriptionCallback = (data: SyncBlockInstance) => void;
40
63
  export type TitleSubscriptionCallback = (title: string) => void;
@@ -1,3 +1,4 @@
1
+ import { ProviderFactory } from '@atlaskit/editor-common/provider-factory';
1
2
  import { type Node as PMNode } from '@atlaskit/editor-prosemirror/model';
2
3
  import { type ResourceId, type SyncBlockNode } from '../common/types';
3
4
  import type { SyncBlockInstance, SubscriptionCallback, SyncBlockDataProvider, TitleSubscriptionCallback } from '../providers/types';
@@ -6,6 +7,7 @@ export declare class ReferenceSyncBlockStoreManager {
6
7
  private syncBlockCache;
7
8
  private subscriptions;
8
9
  private titleSubscriptions;
10
+ private providerFactories;
9
11
  private syncBlockURLRequests;
10
12
  private isRefreshingSubscriptions;
11
13
  constructor(dataProvider?: SyncBlockDataProvider);
@@ -29,5 +31,6 @@ export declare class ReferenceSyncBlockStoreManager {
29
31
  * @returns
30
32
  */
31
33
  getSyncBlockURL(resourceId: ResourceId): string | undefined;
34
+ getProviderFactory(resourceId: ResourceId): ProviderFactory | undefined;
32
35
  destroy(): void;
33
36
  }
@@ -1,3 +1,4 @@
1
+ import type { ProviderFactory } from '@atlaskit/editor-common/provider-factory';
1
2
  import type { EditorView } from '@atlaskit/editor-prosemirror/dist/types/view';
2
3
  import { type Node as PMNode } from '@atlaskit/editor-prosemirror/model';
3
4
  import type { EditorState, Transaction } from '@atlaskit/editor-prosemirror/state';
@@ -60,5 +61,6 @@ export declare class SyncBlockStoreManager {
60
61
  refreshSubscriptions(): void;
61
62
  deleteSyncBlocksWithConfirmation(tr: Transaction, syncBlockIds: SyncBlockAttrs[]): Promise<void>;
62
63
  rebaseTransaction(incomingTr: Transaction, state: EditorState): void;
64
+ getReferenceSyncBlockProviderFactory(resourceId: ResourceId): ProviderFactory | undefined;
63
65
  destroy(): void;
64
66
  }
@@ -6,5 +6,19 @@ export declare const getPageIdAndTypeFromAri: (ari: string) => {
6
6
  };
7
7
  export declare const getLocalIdFromAri: (ari: string) => string;
8
8
  export declare const getPageARIFromResourceId: (resourceId: string) => string;
9
- export declare const getContentPropertyAri: (contentPropertyId: string, cloudId: string) => string;
10
9
  export declare const resourceIdFromSourceAndLocalId: (sourceId: string, localId: string) => string;
10
+ /**
11
+ * For the following functions, they are used for the block service API provider.
12
+ * The resourceId/blockResourceId always refers to the block ARI.
13
+ */
14
+ /**
15
+ * @param sourceId - the ARI of the document. E.G ari:cloud:confluence:cloudId:page/pageId
16
+ * @param localId - the localId of the block node. A randomly generated UUID
17
+ * @returns the block ARI. E.G ari:cloud:blocks:cloudId:synced-block/localId
18
+ */
19
+ export declare const blockResourceIdFromSourceAndLocalId: (sourceId: string, localId: string) => string;
20
+ /**
21
+ * @param ari - the block ARI. E.G ari:cloud:blocks:cloudId:synced-block/localId
22
+ * @returns the localId of the block node. A randomly generated UUID
23
+ */
24
+ export declare const getLocalIdFromResourceId: (ari: string) => string;
@@ -34,6 +34,6 @@ export declare class BlockError extends Error {
34
34
  constructor(status: number);
35
35
  }
36
36
  export declare const getSyncedBlockContent: ({ blockAri, }: GetSyncedBlockContentRequest) => Promise<BlockContentResponse>;
37
- export declare const deleteSyncedBlock: ({ blockAri, }: DeleteSyncedBlockRequest) => Promise<void>;
37
+ export declare const deleteSyncedBlock: ({ blockAri }: DeleteSyncedBlockRequest) => Promise<void>;
38
38
  export declare const updateSyncedBlock: ({ blockAri, content, }: UpdateSyncedBlockRequest) => Promise<void>;
39
39
  export declare const createSyncedBlock: ({ blockAri, blockInstanceId, sourceAri, product, content, }: CreateSyncedBlockRequest) => Promise<BlockContentResponse>;
package/package.json CHANGED
@@ -30,6 +30,7 @@
30
30
  "@atlaskit/editor-json-transformer": "^8.31.0",
31
31
  "@atlaskit/editor-prosemirror": "7.0.0",
32
32
  "@atlaskit/node-data-provider": "^7.5.0",
33
+ "@atlaskit/platform-feature-flags": "^1.1.0",
33
34
  "@atlaskit/primitives": "^16.1.0",
34
35
  "@atlaskit/tokens": "^8.0.0",
35
36
  "@babel/runtime": "^7.0.0",
@@ -37,6 +38,7 @@
37
38
  "uuid": "^3.1.0"
38
39
  },
39
40
  "peerDependencies": {
41
+ "@atlaskit/editor-common": "^110.30.0",
40
42
  "react": "^18.2.0"
41
43
  },
42
44
  "devDependencies": {
@@ -82,11 +84,16 @@
82
84
  }
83
85
  },
84
86
  "name": "@atlaskit/editor-synced-block-provider",
85
- "version": "2.8.0",
87
+ "version": "2.9.1",
86
88
  "description": "Synced Block Provider for @atlaskit/editor-plugin-synced-block",
87
89
  "author": "Atlassian Pty Ltd",
88
90
  "license": "Apache-2.0",
89
91
  "publishConfig": {
90
92
  "registry": "https://registry.npmjs.org/"
93
+ },
94
+ "platform-feature-flags": {
95
+ "platform_editor_synced_block_provider_use_block_service": {
96
+ "type": "boolean"
97
+ }
91
98
  }
92
99
  }