@atlaskit/editor-core
Version:
A package contains Atlassian editor core functionality
32 lines • 1.25 kB
JavaScript
import { useLayoutEffect, useState } from 'react';
import { usePreviousState } from '@atlaskit/editor-common/hooks';
import { createUniversalPreset } from '../create-editor/create-universal-preset';
import { shouldRecreatePreset } from '../create-editor/preset-utils';
export default function useUniversalPreset({
props,
initialPluginConfiguration
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Required for --isolatedDeclarations; preset builder return type is too complex to spell out here.
}) {
const previousEditorProps = usePreviousState(props);
const [preset, setPreset] = useState(() => createUniversalPreset({
props,
prevProps: previousEditorProps,
initialPluginConfiguration
}));
useLayoutEffect(() => {
if (!previousEditorProps) {
return;
}
const recreate = shouldRecreatePreset(previousEditorProps, props);
if (!recreate) {
return;
}
// we are not comparing the previous initialPluginConfiguration to the new one assuming that it never changes
setPreset(createUniversalPreset({
props,
prevProps: previousEditorProps,
initialPluginConfiguration
}));
}, [props, previousEditorProps, initialPluginConfiguration]);
return preset;
}