@atlaskit/editor-core
Version:
A package contains Atlassian editor core functionality
69 lines • 3.3 kB
JavaScript
import { useEffect } from 'react';
/**
* This hook is used to replace the old approach of using the `providerFactory`.
*
* Because plugins can't update their initial configuration, this hook listens to changes
* and calls a command to push the update to the plugins shared state.
*
* In the future ideally consumers implement this behaviour themselves.
*/
export const useProviders = ({
editorApi,
contextIdentifierProvider,
mediaProvider,
mentionProvider,
cardProvider,
emojiProvider,
autoformattingProvider,
taskDecisionProvider
}) => {
useEffect(() => {
async function setProvider() {
var _editorApi$core, _editorApi$contextIde;
if (!contextIdentifierProvider) {
return;
}
const provider = await contextIdentifierProvider;
editorApi === null || editorApi === void 0 ? void 0 : (_editorApi$core = editorApi.core) === null || _editorApi$core === void 0 ? void 0 : _editorApi$core.actions.execute(editorApi === null || editorApi === void 0 ? void 0 : (_editorApi$contextIde = editorApi.contextIdentifier) === null || _editorApi$contextIde === void 0 ? void 0 : _editorApi$contextIde.commands.setProvider({
contextIdentifierProvider: provider
}));
}
setProvider();
}, [contextIdentifierProvider, editorApi]);
useEffect(() => {
if (mediaProvider) {
var _editorApi$media;
editorApi === null || editorApi === void 0 ? void 0 : (_editorApi$media = editorApi.media) === null || _editorApi$media === void 0 ? void 0 : _editorApi$media.actions.setProvider(mediaProvider);
}
}, [mediaProvider, editorApi]);
useEffect(() => {
if (mentionProvider) {
var _editorApi$mention;
editorApi === null || editorApi === void 0 ? void 0 : (_editorApi$mention = editorApi.mention) === null || _editorApi$mention === void 0 ? void 0 : _editorApi$mention.actions.setProvider(mentionProvider);
}
}, [mentionProvider, editorApi]);
useEffect(() => {
if (cardProvider) {
var _editorApi$card;
editorApi === null || editorApi === void 0 ? void 0 : (_editorApi$card = editorApi.card) === null || _editorApi$card === void 0 ? void 0 : _editorApi$card.actions.setProvider(cardProvider);
}
}, [cardProvider, editorApi]);
useEffect(() => {
if (emojiProvider) {
var _editorApi$emoji;
editorApi === null || editorApi === void 0 ? void 0 : (_editorApi$emoji = editorApi.emoji) === null || _editorApi$emoji === void 0 ? void 0 : _editorApi$emoji.actions.setProvider(emojiProvider);
}
}, [emojiProvider, editorApi]);
useEffect(() => {
if (autoformattingProvider) {
var _editorApi$customAuto;
editorApi === null || editorApi === void 0 ? void 0 : (_editorApi$customAuto = editorApi.customAutoformat) === null || _editorApi$customAuto === void 0 ? void 0 : _editorApi$customAuto.actions.setProvider(autoformattingProvider);
}
}, [autoformattingProvider, editorApi]);
useEffect(() => {
if (taskDecisionProvider) {
var _editorApi$taskDecisi;
editorApi === null || editorApi === void 0 ? void 0 : (_editorApi$taskDecisi = editorApi.taskDecision) === null || _editorApi$taskDecisi === void 0 ? void 0 : _editorApi$taskDecisi.actions.setProvider(taskDecisionProvider);
}
}, [taskDecisionProvider, editorApi]);
};