UNPKG

@atlaskit/editor-plugin-user-preferences

Version:

UserPreferences plugin for @atlaskit/editor-core

87 lines (86 loc) 3.05 kB
import { useResolvedUserPreferences } from '@atlaskit/editor-common/user-preferences'; import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals'; import { clearOverrideUserPreference, overrideUserPreference, updateUserPreference } from './pm-plugins/commands'; import { createPlugin, userPreferencesPluginKey } from './pm-plugins/main'; import { useDocumentVisibilityWatcher } from './ui/useDocumentVisibilityWatcher'; import { useUserPreferencesInitListener } from './ui/useUserPreferencesInitListener'; import { useUserPreferencesUpdateListener } from './ui/useUserPreferencesUpdateListener'; export const userPreferencesPlugin = ({ config, api }) => { const userPreferencesProvider = config.userPreferencesProvider; return { name: 'userPreferences', pmPlugins() { return [{ name: 'userPreferencesPlugin', plugin: () => { return createPlugin(config, api); } }]; }, actions: { updateUserPreference: (key, value) => { var _api$analytics; return updateUserPreference({ key, value, userPreferencesProvider, editorAnalyticsApi: api === null || api === void 0 ? void 0 : (_api$analytics = api.analytics) === null || _api$analytics === void 0 ? void 0 : _api$analytics.actions }); }, getUserPreferences: () => { if (!userPreferencesProvider) { return config.initialUserPreferences; } return userPreferencesProvider.getPreferences(); } }, commands: { overrideUserPreference: (key, value) => { return overrideUserPreference({ key, value }); }, clearOverrideUserPreference: key => { return clearOverrideUserPreference({ key }); } }, getSharedState(editorState) { if (!editorState) { return null; } if (expValEquals('platform_editor_user_preference_override', 'isEnabled', true)) { const state = userPreferencesPluginKey.getState(editorState); // state can return undefined if the plugin hasn't been registered if (!state) { return null; } else if (!state.overrides || Object.keys(state.overrides).length === 0) { return state; } return { ...state, preferences: { ...state.preferences, ...state.overrides } }; } return userPreferencesPluginKey.getState(editorState); }, usePluginHook({ editorView }) { const { resolvedUserPreferences } = useResolvedUserPreferences(userPreferencesProvider); useUserPreferencesUpdateListener(editorView, resolvedUserPreferences); useDocumentVisibilityWatcher(userPreferencesProvider); useUserPreferencesInitListener(Boolean(userPreferencesProvider === null || userPreferencesProvider === void 0 ? void 0 : userPreferencesProvider.isInitialized), resolvedUserPreferences, api); } }; };