@atlaskit/editor-plugin-user-preferences
Version:
UserPreferences plugin for @atlaskit/editor-core
87 lines (86 loc) • 3.05 kB
JavaScript
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);
}
};
};