Skip to content

Commit

Permalink
feat(core): deprecate @remirror/extension-base-keymap
Browse files Browse the repository at this point in the history
- Move all keymap functionality to `KeymapExtension` from `@remirror/core`.
- Remove all references to `@remirror/extension-base-keymap`.
  • Loading branch information
ifiokjr committed Jul 31, 2020
1 parent 982a6b1 commit be9a9c1
Show file tree
Hide file tree
Showing 27 changed files with 684 additions and 465 deletions.
1 change: 0 additions & 1 deletion .changeset/config.json
Expand Up @@ -23,7 +23,6 @@
"@remirror/dom",
"@remirror/extension-annotation",
"@remirror/extension-auto-link",
"@remirror/extension-base-keymap",
"@remirror/extension-bidi",
"@remirror/extension-blockquote",
"@remirror/extension-bold",
Expand Down
1 change: 0 additions & 1 deletion .changeset/eleven-papayas-poke.md
Expand Up @@ -8,7 +8,6 @@
'@remirror/dev': major
'@remirror/dom': major
'@remirror/extension-auto-link': major
'@remirror/extension-base-keymap': major
'@remirror/extension-bidi': major
'@remirror/extension-blockquote': major
'@remirror/extension-bold': major
Expand Down
5 changes: 5 additions & 0 deletions .changeset/fluffy-peas-search.md
@@ -0,0 +1,5 @@
---
'@remirror/extension-base-keymap': major
---

Deprecated - this functionality is now one of the `builtin` extensions. Everything should work as before if you're on the latest version of `remirror`.
1 change: 0 additions & 1 deletion .changeset/honest-apes-exist.md
Expand Up @@ -8,7 +8,6 @@
'@remirror/dev': patch
'@remirror/dom': patch
'@remirror/extension-auto-link': patch
'@remirror/extension-base-keymap': patch
'@remirror/extension-bidi': patch
'@remirror/extension-blockquote': patch
'@remirror/extension-bold': patch
Expand Down
1 change: 0 additions & 1 deletion .changeset/ninety-ducks-laugh.md
Expand Up @@ -8,7 +8,6 @@
'@remirror/dev': patch
'@remirror/dom': patch
'@remirror/extension-auto-link': patch
'@remirror/extension-base-keymap': patch
'@remirror/extension-bidi': patch
'@remirror/extension-blockquote': patch
'@remirror/extension-bold': patch
Expand Down
1 change: 0 additions & 1 deletion .changeset/pre.json
Expand Up @@ -11,7 +11,6 @@
"@remirror/dev": "0.13.2",
"@remirror/dom": "0.0.0",
"@remirror/extension-auto-link": "0.0.0",
"@remirror/extension-base-keymap": "0.0.0",
"@remirror/extension-bidi": "0.0.0",
"@remirror/extension-blockquote": "0.0.0",
"@remirror/extension-bold": "0.0.0",
Expand Down
7 changes: 7 additions & 0 deletions .changeset/twelve-mice-look.md
@@ -0,0 +1,7 @@
---
'remirror': major
'@remirror/core': minor
'@remirror/preset-core': patch
---

Move all keymap functionality to `KeymapExtension` from `@remirror/core`. Remove all references to `@remirror/extension-base-keymap`.
@@ -1,7 +1,73 @@
import { renderEditor } from 'jest-remirror';

import { isExtensionValid } from '@remirror/testing';

import { KeymapExtension } from '..';
import { BuiltinPreset } from '../builtin-preset';

test('`KeymapExtension`: is valid', () => {
expect(isExtensionValid(KeymapExtension)).toBeTrue();
});

test('supports custom keymaps', () => {
const mock = jest.fn();
const {
manager,
add,
nodes: { p, doc },
} = renderEditor([]);

manager.getPreset(BuiltinPreset).addCustomHandler('keymap', { a: mock });

add(doc(p('Start<cursor>')))
.press('a')
.callback(() => {
expect(mock).toHaveBeenCalled();
});
});

test('supports the default keymap', () => {
const {
add,
nodes: { p, doc },
} = renderEditor([]);

add(doc(p('Start<cursor>')))
.press('Enter')
.callback((content) => {
expect(content.state.doc).toEqualRemirrorDocument(doc(p('Start'), p('')));
});
});

test('supports turning the keymap off', () => {
const builtin = { excludeBaseKeymap: true };
const {
add,
nodes: { p, doc },
} = renderEditor([], { builtin });

add(doc(p('Start<cursor>')))
.press('Enter')
.callback((content) => {
expect(content.state.doc).toEqualRemirrorDocument(doc(p('Start')));
});
});

test('it supports updating options at runtime', () => {
const {
manager,
add,
nodes: { p, doc },
} = renderEditor([], { builtin: { excludeBaseKeymap: true } });

add(doc(p('Start<cursor>')))
.press('Enter')
.callback((content) => {
expect(content.state.doc).toEqualRemirrorDocument(doc(p('Start')));
manager.getPreset(BuiltinPreset).setOptions({ excludeBaseKeymap: false });
})
.press('Enter')
.callback((content) => {
expect(content.state.doc).toEqualRemirrorDocument(doc(p('Start'), p('')));
});
});
68 changes: 44 additions & 24 deletions packages/@remirror/core/src/builtins/builtin-preset.ts
@@ -1,35 +1,22 @@
import { isEmptyObject, noop, pick } from '@remirror/core-helpers';
import { GetStaticAndDynamic } from '@remirror/core-types';

import { AddCustomHandler } from '../extension/base-class';
import { Preset } from '../preset';
import { OnSetOptionsParameter } from '../types';
import { AttributesExtension } from './attributes-extension';
import { CommandsExtension } from './commands-extension';
import { HelpersExtension } from './helpers-extension';
import { InputRulesExtension } from './input-rules-extension';
import { KeymapExtension } from './keymap-extension';
import { KeymapExtension, KeymapOptions } from './keymap-extension';
import { NodeViewsExtension } from './node-views-extension';
import { PasteRulesExtension } from './paste-rules-extension';
import { PluginsExtension } from './plugins-extension';
import { SchemaExtension } from './schema-extension';
import { SuggesterExtension, SuggesterOptions } from './suggester-extension';
import { TagsExtension } from './tags-extension';

/** A list of all the builtIn extensions. */
export const builtInExtensions = [
SchemaExtension,
TagsExtension,
AttributesExtension,
PluginsExtension,
InputRulesExtension,
PasteRulesExtension,
NodeViewsExtension,
SuggesterExtension,
CommandsExtension,
HelpersExtension,
KeymapExtension,
] as const;

export interface BuiltinOptions extends SuggesterOptions {}
export interface BuiltinOptions extends SuggesterOptions, KeymapOptions {}

/**
* Provides all the builtin extensions to the editor.
Expand All @@ -48,20 +35,53 @@ export class BuiltinPreset extends Preset<BuiltinOptions> {
return 'builtin' as const;
}

protected onSetOptions(): void {
return;
protected onSetOptions(parameter: OnSetOptionsParameter<BuiltinOptions>): void {
const { pickChanged } = parameter;
const changedKeymapOptions = pickChanged([
'selectParentNodeOnEscape',
'excludeBaseKeymap',
'undoInputRuleOnBackspace',
]);

if (!isEmptyObject(changedKeymapOptions)) {
this.getExtension(KeymapExtension).setOptions(changedKeymapOptions);
}
}

protected onAddCustomHandler: AddCustomHandler<BuiltinOptions> = ({ suggester }) => {
if (!suggester) {
return;
protected onAddCustomHandler: AddCustomHandler<BuiltinOptions> = (handlers) => {
const { suggester, keymap } = handlers;

if (suggester) {
return this.getExtension(SuggesterExtension).addCustomHandler('suggester', suggester);
}

return this.getExtension(SuggesterExtension).addCustomHandler('suggester', suggester);
if (keymap) {
return this.getExtension(KeymapExtension).addCustomHandler('keymap', keymap);
}

return noop;
};

createExtensions() {
return builtInExtensions.map((Extension) => new Extension());
const keymapOptions = pick(this.options, [
'excludeBaseKeymap',
'selectParentNodeOnEscape',
'undoInputRuleOnBackspace',
]);

return [
new SchemaExtension(),
new TagsExtension(),
new AttributesExtension(),
new PluginsExtension(),
new InputRulesExtension(),
new PasteRulesExtension(),
new NodeViewsExtension(),
new SuggesterExtension(),
new CommandsExtension(),
new HelpersExtension(),
new KeymapExtension(keymapOptions),
];
}
}

Expand Down

0 comments on commit be9a9c1

Please sign in to comment.