mirror of
https://github.com/makeplane/plane
synced 2024-06-14 14:31:34 +00:00
64 lines
2.0 KiB
TypeScript
64 lines
2.0 KiB
TypeScript
|
import { ReactRenderer } from '@tiptap/react'
|
||
|
import { Editor } from "@tiptap/core";
|
||
|
import tippy from 'tippy.js'
|
||
|
|
||
|
import { MentionList } from './MentionList'
|
||
|
|
||
|
|
||
|
const Suggestion = {
|
||
|
items: ({ query }: { query: string }) =>
|
||
|
[
|
||
|
'Lea Thompson', 'Cyndi Lauper', 'Tom Cruise', 'Madonna', 'Jerry Hall', 'Joan Collins', 'Winona Ryder', 'Christina Applegate', 'Alyssa Milano', 'Molly Ringwald', 'Ally Sheedy', 'Debbie Harry', 'Olivia Newton-John', 'Elton John', 'Michael J. Fox', 'Axl Rose', 'Emilio Estevez', 'Ralph Macchio', 'Rob Lowe', 'Jennifer Grey', 'Mickey Rourke', 'John Cusack', 'Matthew Broderick', 'Justine Bateman', 'Lisa Bonet',
|
||
|
].filter(item => item.toLowerCase().startsWith(query.toLowerCase())).slice(0, 5)
|
||
|
,
|
||
|
render: () => {
|
||
|
let reactRenderer: ReactRenderer | null = null;
|
||
|
let popup: any | null = null;
|
||
|
|
||
|
return {
|
||
|
onStart: (props: { editor: Editor; clientRect: DOMRect }) => {
|
||
|
reactRenderer = new ReactRenderer(MentionList, {
|
||
|
props,
|
||
|
editor: props.editor,
|
||
|
})
|
||
|
|
||
|
// @ts-ignore
|
||
|
popup = tippy('body', {
|
||
|
getReferenceClientRect: () => props.clientRect as DOMRect,
|
||
|
appendTo: () => document.querySelector("#tiptap-container"),
|
||
|
content: reactRenderer?.element,
|
||
|
showOnCreate: true,
|
||
|
interactive: true,
|
||
|
trigger: 'manual',
|
||
|
placement: 'bottom-start',
|
||
|
})
|
||
|
},
|
||
|
|
||
|
onUpdate: (props: { editor: Editor; clientRect: DOMRect }) => {
|
||
|
reactRenderer?.updateProps(props)
|
||
|
|
||
|
popup &&
|
||
|
popup[0].setProps({
|
||
|
getReferenceClientRect: props.clientRect,
|
||
|
});
|
||
|
},
|
||
|
onKeyDown: (props: { event: KeyboardEvent }) => {
|
||
|
if (props.event.key === "Escape") {
|
||
|
popup?.[0].hide();
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
// @ts-ignore
|
||
|
return reactRenderer?.ref?.onKeyDown(props);
|
||
|
},
|
||
|
onExit: () => {
|
||
|
popup?.[0].destroy();
|
||
|
reactRenderer?.destroy()
|
||
|
},
|
||
|
}
|
||
|
},
|
||
|
}
|
||
|
|
||
|
export default Suggestion;
|