@atlaskit/editor-synced-block-provider 2.10.5 → 2.11.0
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/CHANGELOG.md +21 -0
- package/dist/cjs/clients/block-service/blockService.js +5 -4
- package/dist/cjs/clients/confluence/sourceInfo.js +20 -17
- package/dist/cjs/hooks/useFetchSyncBlockData.js +20 -11
- package/dist/cjs/hooks/useHandleContentChanges.js +1 -5
- package/dist/cjs/index.js +2 -2
- package/dist/cjs/providers/block-service/blockServiceAPI.js +17 -26
- package/dist/cjs/providers/confluence/confluenceContentAPI.js +0 -15
- package/dist/cjs/providers/syncBlockProvider.js +31 -41
- package/dist/cjs/store-manager/referenceSyncBlockStoreManager.js +138 -63
- package/dist/cjs/store-manager/sourceSyncBlockStoreManager.js +93 -43
- package/dist/cjs/store-manager/syncBlockStoreManager.js +3 -3
- package/dist/cjs/utils/errorHandling.js +31 -1
- package/dist/es2019/clients/block-service/blockService.js +5 -4
- package/dist/es2019/clients/confluence/sourceInfo.js +13 -8
- package/dist/es2019/hooks/useFetchSyncBlockData.js +15 -7
- package/dist/es2019/hooks/useHandleContentChanges.js +1 -5
- package/dist/es2019/index.js +1 -1
- package/dist/es2019/providers/block-service/blockServiceAPI.js +13 -20
- package/dist/es2019/providers/confluence/confluenceContentAPI.js +1 -14
- package/dist/es2019/providers/syncBlockProvider.js +31 -45
- package/dist/es2019/store-manager/referenceSyncBlockStoreManager.js +124 -49
- package/dist/es2019/store-manager/sourceSyncBlockStoreManager.js +65 -24
- package/dist/es2019/store-manager/syncBlockStoreManager.js +3 -3
- package/dist/es2019/utils/errorHandling.js +17 -1
- package/dist/esm/clients/block-service/blockService.js +5 -4
- package/dist/esm/clients/confluence/sourceInfo.js +19 -16
- package/dist/esm/hooks/useFetchSyncBlockData.js +20 -11
- package/dist/esm/hooks/useHandleContentChanges.js +1 -5
- package/dist/esm/index.js +1 -1
- package/dist/esm/providers/block-service/blockServiceAPI.js +17 -26
- package/dist/esm/providers/confluence/confluenceContentAPI.js +1 -16
- package/dist/esm/providers/syncBlockProvider.js +32 -42
- package/dist/esm/store-manager/referenceSyncBlockStoreManager.js +138 -63
- package/dist/esm/store-manager/sourceSyncBlockStoreManager.js +93 -43
- package/dist/esm/store-manager/syncBlockStoreManager.js +3 -3
- package/dist/esm/utils/errorHandling.js +30 -0
- package/dist/types/clients/block-service/blockService.d.ts +0 -2
- package/dist/types/clients/confluence/sourceInfo.d.ts +2 -1
- package/dist/types/hooks/useFetchSyncBlockData.d.ts +2 -1
- package/dist/types/index.d.ts +2 -2
- package/dist/types/providers/block-service/blockServiceAPI.d.ts +7 -5
- package/dist/types/providers/confluence/confluenceContentAPI.d.ts +2 -3
- package/dist/types/providers/syncBlockProvider.d.ts +12 -9
- package/dist/types/providers/types.d.ts +9 -9
- package/dist/types/store-manager/referenceSyncBlockStoreManager.d.ts +6 -2
- package/dist/types/store-manager/sourceSyncBlockStoreManager.d.ts +3 -1
- package/dist/types/store-manager/syncBlockStoreManager.d.ts +2 -1
- package/dist/types/utils/errorHandling.d.ts +10 -0
- package/dist/types-ts4.5/clients/block-service/blockService.d.ts +0 -2
- package/dist/types-ts4.5/clients/confluence/sourceInfo.d.ts +2 -1
- package/dist/types-ts4.5/hooks/useFetchSyncBlockData.d.ts +2 -1
- package/dist/types-ts4.5/index.d.ts +2 -2
- package/dist/types-ts4.5/providers/block-service/blockServiceAPI.d.ts +7 -5
- package/dist/types-ts4.5/providers/confluence/confluenceContentAPI.d.ts +2 -3
- package/dist/types-ts4.5/providers/syncBlockProvider.d.ts +12 -9
- package/dist/types-ts4.5/providers/types.d.ts +9 -9
- package/dist/types-ts4.5/store-manager/referenceSyncBlockStoreManager.d.ts +6 -2
- package/dist/types-ts4.5/store-manager/sourceSyncBlockStoreManager.d.ts +3 -1
- package/dist/types-ts4.5/store-manager/syncBlockStoreManager.d.ts +2 -1
- package/dist/types-ts4.5/utils/errorHandling.d.ts +10 -0
- package/package.json +2 -8
|
@@ -3,11 +3,41 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.stringifyError = void 0;
|
|
6
|
+
exports.updateErrorPayload = exports.updateCacheErrorPayload = exports.stringifyError = exports.getSourceInfoErrorPayload = exports.getErrorPayload = exports.fetchErrorPayload = exports.deleteErrorPayload = exports.createErrorPayload = void 0;
|
|
7
|
+
var _analytics = require("@atlaskit/editor-common/analytics");
|
|
7
8
|
var stringifyError = exports.stringifyError = function stringifyError(error) {
|
|
8
9
|
try {
|
|
9
10
|
return JSON.stringify(error);
|
|
10
11
|
} catch (_unused) {
|
|
11
12
|
return undefined;
|
|
12
13
|
}
|
|
14
|
+
};
|
|
15
|
+
var getErrorPayload = exports.getErrorPayload = function getErrorPayload(actionSubjectId, error) {
|
|
16
|
+
return {
|
|
17
|
+
action: _analytics.ACTION.ERROR,
|
|
18
|
+
actionSubject: _analytics.ACTION_SUBJECT.SYNCED_BLOCK,
|
|
19
|
+
actionSubjectId: actionSubjectId,
|
|
20
|
+
eventType: _analytics.EVENT_TYPE.OPERATIONAL,
|
|
21
|
+
attributes: {
|
|
22
|
+
error: error
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
var fetchErrorPayload = exports.fetchErrorPayload = function fetchErrorPayload(error) {
|
|
27
|
+
return getErrorPayload(_analytics.ACTION_SUBJECT_ID.SYNCED_BLOCK_FETCH, error);
|
|
28
|
+
};
|
|
29
|
+
var getSourceInfoErrorPayload = exports.getSourceInfoErrorPayload = function getSourceInfoErrorPayload(error) {
|
|
30
|
+
return getErrorPayload(_analytics.ACTION_SUBJECT_ID.SYNCED_BLOCK_GET_SOURCE_INFO, error);
|
|
31
|
+
};
|
|
32
|
+
var updateErrorPayload = exports.updateErrorPayload = function updateErrorPayload(error) {
|
|
33
|
+
return getErrorPayload(_analytics.ACTION_SUBJECT_ID.SYNCED_BLOCK_UPDATE, error);
|
|
34
|
+
};
|
|
35
|
+
var createErrorPayload = exports.createErrorPayload = function createErrorPayload(error) {
|
|
36
|
+
return getErrorPayload(_analytics.ACTION_SUBJECT_ID.SYNCED_BLOCK_CREATE, error);
|
|
37
|
+
};
|
|
38
|
+
var deleteErrorPayload = exports.deleteErrorPayload = function deleteErrorPayload(error) {
|
|
39
|
+
return getErrorPayload(_analytics.ACTION_SUBJECT_ID.SYNCED_BLOCK_DELETE, error);
|
|
40
|
+
};
|
|
41
|
+
var updateCacheErrorPayload = exports.updateCacheErrorPayload = function updateCacheErrorPayload(error) {
|
|
42
|
+
return getErrorPayload(_analytics.ACTION_SUBJECT_ID.SYNCED_BLOCK_UPDATE_CACHE, error);
|
|
13
43
|
};
|
|
@@ -12,7 +12,7 @@ export class BlockError extends Error {
|
|
|
12
12
|
export const getSyncedBlockContent = async ({
|
|
13
13
|
blockAri
|
|
14
14
|
}) => {
|
|
15
|
-
const response = await fetch(`${BLOCK_SERVICE_API_URL}/block/${blockAri}`, {
|
|
15
|
+
const response = await fetch(`${BLOCK_SERVICE_API_URL}/block/${encodeURIComponent(blockAri)}`, {
|
|
16
16
|
method: 'GET',
|
|
17
17
|
headers: COMMON_HEADERS
|
|
18
18
|
});
|
|
@@ -24,7 +24,7 @@ export const getSyncedBlockContent = async ({
|
|
|
24
24
|
export const deleteSyncedBlock = async ({
|
|
25
25
|
blockAri
|
|
26
26
|
}) => {
|
|
27
|
-
const response = await fetch(`${BLOCK_SERVICE_API_URL}/block/${blockAri}`, {
|
|
27
|
+
const response = await fetch(`${BLOCK_SERVICE_API_URL}/block/${encodeURIComponent(blockAri)}`, {
|
|
28
28
|
method: 'DELETE',
|
|
29
29
|
headers: COMMON_HEADERS
|
|
30
30
|
});
|
|
@@ -36,7 +36,7 @@ export const updateSyncedBlock = async ({
|
|
|
36
36
|
blockAri,
|
|
37
37
|
content
|
|
38
38
|
}) => {
|
|
39
|
-
const response = await fetch(`${BLOCK_SERVICE_API_URL}/block/${blockAri}`, {
|
|
39
|
+
const response = await fetch(`${BLOCK_SERVICE_API_URL}/block/${encodeURIComponent(blockAri)}`, {
|
|
40
40
|
method: 'PUT',
|
|
41
41
|
headers: COMMON_HEADERS,
|
|
42
42
|
body: JSON.stringify({
|
|
@@ -54,10 +54,11 @@ export const createSyncedBlock = async ({
|
|
|
54
54
|
product,
|
|
55
55
|
content
|
|
56
56
|
}) => {
|
|
57
|
-
const response = await fetch(`${BLOCK_SERVICE_API_URL}/block
|
|
57
|
+
const response = await fetch(`${BLOCK_SERVICE_API_URL}/block`, {
|
|
58
58
|
method: 'POST',
|
|
59
59
|
headers: COMMON_HEADERS,
|
|
60
60
|
body: JSON.stringify({
|
|
61
|
+
blockAri,
|
|
61
62
|
blockInstanceId,
|
|
62
63
|
sourceAri,
|
|
63
64
|
product,
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
/* eslint-disable require-unicode-regexp */
|
|
2
2
|
|
|
3
|
+
import { logException } from '@atlaskit/editor-common/monitoring';
|
|
4
|
+
import { getSourceInfoErrorPayload } from '../../utils/errorHandling';
|
|
3
5
|
import { getPageIdAndTypeFromConfluencePageAri } from './ari';
|
|
4
6
|
import { isBlogPageType } from './utils';
|
|
5
7
|
const COMMON_HEADERS = {
|
|
@@ -52,7 +54,7 @@ const getConfluenceSourceInfo = async ari => {
|
|
|
52
54
|
}
|
|
53
55
|
return await response.json();
|
|
54
56
|
};
|
|
55
|
-
export const
|
|
57
|
+
export const fetchConfluencePageInfo = async (pageAri, localId, fireAnalyticsEvent) => {
|
|
56
58
|
try {
|
|
57
59
|
var _response$data, _response$data$conten, _response$data$conten2, _contentData$space;
|
|
58
60
|
const {
|
|
@@ -60,15 +62,12 @@ export const fetchConfluenceSourceInfo = async (pageAri, localId) => {
|
|
|
60
62
|
} = getPageIdAndTypeFromConfluencePageAri(pageAri);
|
|
61
63
|
const response = await getConfluenceSourceInfo(pageAri);
|
|
62
64
|
const contentData = (_response$data = response.data) === null || _response$data === void 0 ? void 0 : (_response$data$conten = _response$data.content) === null || _response$data$conten === void 0 ? void 0 : (_response$data$conten2 = _response$data$conten.nodes) === null || _response$data$conten2 === void 0 ? void 0 : _response$data$conten2[0];
|
|
63
|
-
|
|
64
|
-
throw new Error(`Failed to get content data`);
|
|
65
|
-
}
|
|
66
|
-
const title = contentData.title;
|
|
65
|
+
const title = contentData === null || contentData === void 0 ? void 0 : contentData.title;
|
|
67
66
|
let url;
|
|
68
67
|
const {
|
|
69
68
|
base
|
|
70
|
-
} = contentData.links || {};
|
|
71
|
-
if (base && (_contentData$space = contentData.space) !== null && _contentData$space !== void 0 && _contentData$space.key && contentData.id) {
|
|
69
|
+
} = (contentData === null || contentData === void 0 ? void 0 : contentData.links) || {};
|
|
70
|
+
if (base && contentData !== null && contentData !== void 0 && (_contentData$space = contentData.space) !== null && _contentData$space !== void 0 && _contentData$space.key && contentData !== null && contentData !== void 0 && contentData.id) {
|
|
72
71
|
if (isBlogPageType(pageType)) {
|
|
73
72
|
url = `${base}/spaces/${contentData.space.key}/blog/edit-v2/${contentData.id}`;
|
|
74
73
|
} else if (contentData.subType === 'live') {
|
|
@@ -78,12 +77,18 @@ export const fetchConfluenceSourceInfo = async (pageAri, localId) => {
|
|
|
78
77
|
}
|
|
79
78
|
}
|
|
80
79
|
url = url && localId ? `${url}#block-${localId}` : url;
|
|
80
|
+
if (!title || !url) {
|
|
81
|
+
fireAnalyticsEvent === null || fireAnalyticsEvent === void 0 ? void 0 : fireAnalyticsEvent(getSourceInfoErrorPayload('Failed to get confluence page source info'));
|
|
82
|
+
}
|
|
81
83
|
return Promise.resolve({
|
|
82
84
|
title,
|
|
83
85
|
url
|
|
84
86
|
});
|
|
85
87
|
} catch (error) {
|
|
86
|
-
|
|
88
|
+
logException(error, {
|
|
89
|
+
location: 'editor-synced-block-provider/sourceInfo'
|
|
90
|
+
});
|
|
91
|
+
fireAnalyticsEvent === null || fireAnalyticsEvent === void 0 ? void 0 : fireAnalyticsEvent(getSourceInfoErrorPayload(error.message));
|
|
87
92
|
return Promise.resolve(undefined);
|
|
88
93
|
}
|
|
89
94
|
};
|
|
@@ -1,22 +1,30 @@
|
|
|
1
1
|
import { useCallback, useEffect, useState } from 'react';
|
|
2
|
+
import { logException } from '@atlaskit/editor-common/monitoring';
|
|
2
3
|
import { SyncBlockError } from '../common/types';
|
|
4
|
+
import { fetchErrorPayload } from '../utils/errorHandling';
|
|
3
5
|
import { createSyncBlockNode } from '../utils/utils';
|
|
4
|
-
export const useFetchSyncBlockData = (manager, resourceId, localId) => {
|
|
6
|
+
export const useFetchSyncBlockData = (manager, resourceId, localId, fireAnalyticsEvent) => {
|
|
5
7
|
const [syncBlockInstance, setSyncBlockInstance] = useState(null);
|
|
6
8
|
const [isLoading, setIsLoading] = useState(true);
|
|
7
9
|
const reloadData = useCallback(async () => {
|
|
8
10
|
if (isLoading) {
|
|
9
11
|
return;
|
|
10
12
|
}
|
|
11
|
-
const syncBlockNode = resourceId && localId ? createSyncBlockNode(localId, resourceId) : null;
|
|
12
|
-
if (!syncBlockNode) {
|
|
13
|
-
return;
|
|
14
|
-
}
|
|
15
|
-
setIsLoading(true);
|
|
16
13
|
try {
|
|
14
|
+
const syncBlockNode = resourceId && localId ? createSyncBlockNode(localId, resourceId) : null;
|
|
15
|
+
if (!syncBlockNode) {
|
|
16
|
+
throw new Error('Failed to create sync block node from resourceid and localid');
|
|
17
|
+
}
|
|
18
|
+
setIsLoading(true);
|
|
19
|
+
|
|
17
20
|
// Fetch sync block data, the `subscribeToSyncBlock` will update the state once data is fetched
|
|
18
21
|
await manager.referenceManager.fetchSyncBlocksData([syncBlockNode]);
|
|
19
22
|
} catch (error) {
|
|
23
|
+
logException(error, {
|
|
24
|
+
location: 'editor-synced-block-provider/useFetchSyncBlockData'
|
|
25
|
+
});
|
|
26
|
+
fireAnalyticsEvent === null || fireAnalyticsEvent === void 0 ? void 0 : fireAnalyticsEvent(fetchErrorPayload(error.message));
|
|
27
|
+
|
|
20
28
|
// Set error state if fetching fails
|
|
21
29
|
setSyncBlockInstance({
|
|
22
30
|
resourceId: resourceId || '',
|
|
@@ -24,7 +32,7 @@ export const useFetchSyncBlockData = (manager, resourceId, localId) => {
|
|
|
24
32
|
});
|
|
25
33
|
}
|
|
26
34
|
setIsLoading(false);
|
|
27
|
-
}, [isLoading, localId, manager.referenceManager, resourceId]);
|
|
35
|
+
}, [isLoading, localId, manager.referenceManager, resourceId, fireAnalyticsEvent]);
|
|
28
36
|
useEffect(() => {
|
|
29
37
|
const unsubscribe = manager.referenceManager.subscribeToSyncBlock(resourceId || '', localId || '', data => {
|
|
30
38
|
setSyncBlockInstance(data);
|
|
@@ -1,10 +1,6 @@
|
|
|
1
1
|
import { useEffect } from 'react';
|
|
2
2
|
export const useHandleContentChanges = (manager, syncBlockNode) => {
|
|
3
3
|
useEffect(() => {
|
|
4
|
-
|
|
5
|
-
manager.sourceManager.updateSyncBlockData(syncBlockNode);
|
|
6
|
-
} catch {
|
|
7
|
-
//TODO: EDITOR-1921 - add error analytics
|
|
8
|
-
}
|
|
4
|
+
manager.sourceManager.updateSyncBlockData(syncBlockNode);
|
|
9
5
|
}, [manager, syncBlockNode]);
|
|
10
6
|
};
|
package/dist/es2019/index.js
CHANGED
|
@@ -15,7 +15,7 @@ export { getConfluencePageAri, getLocalIdFromConfluencePageAri, getPageARIFromCo
|
|
|
15
15
|
// providers
|
|
16
16
|
export { useMemoizedBlockServiceAPIProviders } from './providers/block-service/blockServiceAPI';
|
|
17
17
|
export { createContentAPIProvidersWithDefaultKey, useMemoizedContentAPIProviders } from './providers/confluence/confluenceContentAPI';
|
|
18
|
-
export {
|
|
18
|
+
export { fetchConfluencePageInfo } from './clients/confluence/sourceInfo';
|
|
19
19
|
export { SyncBlockProvider as SyncedBlockProvider, useMemoizedSyncedBlockProvider } from './providers/syncBlockProvider';
|
|
20
20
|
// store managers
|
|
21
21
|
export { ReferenceSyncBlockStoreManager } from './store-manager/referenceSyncBlockStoreManager';
|
|
@@ -56,24 +56,17 @@ class BlockServiceADFFetchProvider {
|
|
|
56
56
|
};
|
|
57
57
|
}
|
|
58
58
|
}
|
|
59
|
-
retrieveSourceInfoFetchData(resourceId, pageARI) {
|
|
60
|
-
let sourceLocalId;
|
|
61
|
-
try {
|
|
62
|
-
sourceLocalId = getLocalIdFromBlockResourceId(resourceId);
|
|
63
|
-
} catch (error) {
|
|
64
|
-
// EDITOR-1921: log analytic here, safe to continue
|
|
65
|
-
}
|
|
66
|
-
return {
|
|
67
|
-
pageARI,
|
|
68
|
-
sourceLocalId
|
|
69
|
-
};
|
|
70
|
-
}
|
|
71
59
|
}
|
|
72
60
|
|
|
73
61
|
/**
|
|
74
62
|
* ADFWriteProvider implementation that writes synced block data to Block Service API
|
|
75
63
|
*/
|
|
76
64
|
class BlockServiceADFWriteProvider {
|
|
65
|
+
constructor(sourceAri, product) {
|
|
66
|
+
this.sourceAri = sourceAri;
|
|
67
|
+
this.product = product;
|
|
68
|
+
}
|
|
69
|
+
|
|
77
70
|
// it will first try to update and if it can't (404) then it will try to create
|
|
78
71
|
async writeData(data) {
|
|
79
72
|
const {
|
|
@@ -95,8 +88,8 @@ class BlockServiceADFWriteProvider {
|
|
|
95
88
|
await createSyncedBlock({
|
|
96
89
|
blockAri: resourceId,
|
|
97
90
|
blockInstanceId: data.blockInstanceId,
|
|
98
|
-
sourceAri:
|
|
99
|
-
product:
|
|
91
|
+
sourceAri: this.sourceAri,
|
|
92
|
+
product: this.product,
|
|
100
93
|
content: JSON.stringify(data.content)
|
|
101
94
|
});
|
|
102
95
|
} else {
|
|
@@ -139,22 +132,22 @@ class BlockServiceADFWriteProvider {
|
|
|
139
132
|
};
|
|
140
133
|
}
|
|
141
134
|
}
|
|
142
|
-
generateResourceId(
|
|
143
|
-
return blockResourceIdFromSourceAndLocalId(
|
|
135
|
+
generateResourceId(sourceAri, localId) {
|
|
136
|
+
return blockResourceIdFromSourceAndLocalId(sourceAri, localId);
|
|
144
137
|
}
|
|
145
138
|
}
|
|
146
139
|
|
|
147
140
|
/**
|
|
148
141
|
* Factory function to create both providers with shared configuration
|
|
149
142
|
*/
|
|
150
|
-
const createBlockServiceAPIProviders = () => {
|
|
143
|
+
const createBlockServiceAPIProviders = (sourceAri, product) => {
|
|
151
144
|
const fetchProvider = new BlockServiceADFFetchProvider();
|
|
152
|
-
const writeProvider = new BlockServiceADFWriteProvider();
|
|
145
|
+
const writeProvider = new BlockServiceADFWriteProvider(sourceAri, product);
|
|
153
146
|
return {
|
|
154
147
|
fetchProvider,
|
|
155
148
|
writeProvider
|
|
156
149
|
};
|
|
157
150
|
};
|
|
158
|
-
export const useMemoizedBlockServiceAPIProviders = () => {
|
|
159
|
-
return useMemo(createBlockServiceAPIProviders, []);
|
|
151
|
+
export const useMemoizedBlockServiceAPIProviders = (sourceAri, product) => {
|
|
152
|
+
return useMemo(() => createBlockServiceAPIProviders(sourceAri, product), [sourceAri, product]);
|
|
160
153
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
2
|
import { useMemo } from 'react';
|
|
3
|
-
import { getConfluencePageAri,
|
|
3
|
+
import { getConfluencePageAri, getLocalIdFromConfluencePageAri, getPageIdAndTypeFromConfluencePageAri, resourceIdFromConfluencePageSourceIdAndLocalId } from '../../clients/confluence/ari';
|
|
4
4
|
import { getContentProperty, createContentProperty, updateContentProperty, deleteContentProperty } from '../../clients/confluence/contentProperty';
|
|
5
5
|
import { isBlogPageType } from '../../clients/confluence/utils';
|
|
6
6
|
import { SyncBlockError } from '../../common/types';
|
|
@@ -108,19 +108,6 @@ class ConfluenceADFFetchProvider {
|
|
|
108
108
|
};
|
|
109
109
|
}
|
|
110
110
|
}
|
|
111
|
-
retrieveSourceInfoFetchData(resourceId) {
|
|
112
|
-
const pageARI = getPageARIFromContentPropertyResourceId(resourceId);
|
|
113
|
-
let sourceLocalId;
|
|
114
|
-
try {
|
|
115
|
-
sourceLocalId = getLocalIdFromConfluencePageAri(resourceId);
|
|
116
|
-
} catch (error) {
|
|
117
|
-
// EDITOR-1921: log analytic here, safe to continue
|
|
118
|
-
}
|
|
119
|
-
return {
|
|
120
|
-
pageARI,
|
|
121
|
-
sourceLocalId
|
|
122
|
-
};
|
|
123
|
-
}
|
|
124
111
|
}
|
|
125
112
|
|
|
126
113
|
/**
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
2
|
import { useMemo } from 'react';
|
|
3
3
|
import { getPageIdAndTypeFromConfluencePageAri } from '../clients/confluence/ari';
|
|
4
|
-
import {
|
|
4
|
+
import { fetchConfluencePageInfo } from '../clients/confluence/sourceInfo';
|
|
5
5
|
import { SyncBlockError } from '../common/types';
|
|
6
6
|
import { SyncBlockDataProvider } from '../providers/types';
|
|
7
7
|
export class SyncBlockProvider extends SyncBlockDataProvider {
|
|
@@ -61,7 +61,7 @@ export class SyncBlockProvider extends SyncBlockDataProvider {
|
|
|
61
61
|
return data;
|
|
62
62
|
}, () => {
|
|
63
63
|
return {
|
|
64
|
-
|
|
64
|
+
error: SyncBlockError.Errored,
|
|
65
65
|
resourceId
|
|
66
66
|
};
|
|
67
67
|
});
|
|
@@ -131,34 +131,26 @@ export class SyncBlockProvider extends SyncBlockDataProvider {
|
|
|
131
131
|
}
|
|
132
132
|
|
|
133
133
|
/**
|
|
134
|
-
*
|
|
134
|
+
* Fetch the source info from the source id
|
|
135
135
|
*
|
|
136
|
-
* @param
|
|
136
|
+
* @param params
|
|
137
|
+
* @param params.sourceAri - The source ARI
|
|
138
|
+
* @param params.sourceProduct - The source product. e.g. 'confluence-page', 'jira-work-item'
|
|
137
139
|
*
|
|
138
140
|
* @returns The source info
|
|
139
141
|
*/
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
const fetchData = this.fetchProvider.retrieveSourceInfoFetchData(resourceId, this.sourceId);
|
|
152
|
-
pageARI = fetchData.pageARI;
|
|
153
|
-
sourceLocalId = fetchData.sourceLocalId;
|
|
154
|
-
} catch (error) {
|
|
155
|
-
return Promise.reject(error);
|
|
156
|
-
}
|
|
142
|
+
fetchSyncBlockSourceInfo(localId, sourceAri, sourceProduct, fireAnalyticsEvent) {
|
|
143
|
+
if (!sourceAri || !sourceProduct) {
|
|
144
|
+
return Promise.reject(new Error('Source ari or source product is undefined'));
|
|
145
|
+
}
|
|
146
|
+
switch (sourceProduct) {
|
|
147
|
+
case 'confluence-page':
|
|
148
|
+
return fetchConfluencePageInfo(sourceAri, localId, fireAnalyticsEvent);
|
|
149
|
+
case 'jira-work-item':
|
|
150
|
+
return Promise.reject(new Error('Jira work item source product not supported'));
|
|
151
|
+
default:
|
|
152
|
+
return Promise.reject(new Error(`${sourceProduct} source product not supported`));
|
|
157
153
|
}
|
|
158
|
-
|
|
159
|
-
// TODO: EDITOR-3312 - based on the source sync block product,
|
|
160
|
-
// execute fetchConfluenceSourceInfo or fetchJiraItemSourceInfo or similar...
|
|
161
|
-
return pageARI ? fetchConfluenceSourceInfo(pageARI, sourceLocalId) : Promise.resolve(undefined);
|
|
162
154
|
}
|
|
163
155
|
generateResourceId(sourceId, localId) {
|
|
164
156
|
return this.writeProvider.generateResourceId(sourceId, localId);
|
|
@@ -176,32 +168,26 @@ export class SyncBlockProvider extends SyncBlockDataProvider {
|
|
|
176
168
|
/**
|
|
177
169
|
* Retrieve the parent info for the sync block
|
|
178
170
|
*
|
|
179
|
-
* @param
|
|
180
|
-
* @param
|
|
171
|
+
* @param sourceAri - The source ARI
|
|
172
|
+
* @param sourceProduct - The source product. e.g. 'confluence-page', 'jira-work-item'
|
|
181
173
|
*
|
|
182
174
|
* @returns The parent info for the sync block
|
|
183
175
|
*/
|
|
184
|
-
retrieveSyncBlockParentInfo(
|
|
185
|
-
if (!
|
|
176
|
+
retrieveSyncBlockParentInfo(sourceAri, sourceProduct) {
|
|
177
|
+
if (!sourceAri || !sourceProduct) {
|
|
186
178
|
return undefined;
|
|
187
179
|
}
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
180
|
+
switch (sourceProduct) {
|
|
181
|
+
case 'confluence-page':
|
|
182
|
+
return {
|
|
183
|
+
contentId: getPageIdAndTypeFromConfluencePageAri(sourceAri).id,
|
|
184
|
+
contentProduct: sourceProduct
|
|
185
|
+
};
|
|
186
|
+
case 'jira-work-item':
|
|
187
|
+
throw new Error('Jira work item source product not supported');
|
|
188
|
+
default:
|
|
189
|
+
throw new Error(`${sourceProduct} source product not supported`);
|
|
194
190
|
}
|
|
195
|
-
|
|
196
|
-
// TODO: EDITOR-3312 - based on the source sync block product,
|
|
197
|
-
// execute getPageIdAndTypeFromConfluencePageAri or getJiraItemIdAndTypeFromJiraItemAri or similar...
|
|
198
|
-
const {
|
|
199
|
-
id: contentId
|
|
200
|
-
} = getPageIdAndTypeFromConfluencePageAri(sourceAri);
|
|
201
|
-
return {
|
|
202
|
-
contentId,
|
|
203
|
-
contentProduct: product
|
|
204
|
-
};
|
|
205
191
|
}
|
|
206
192
|
}
|
|
207
193
|
export const useMemoizedSyncedBlockProvider = (fetchProvider, writeProvider, sourceId, providerOptions) => {
|