mirror of
https://github.com/infiniflow/ragflow.git
synced 2025-12-19 03:56:42 +08:00
### What problem does this PR solve? Feat: Add VariablePickerMenuPlugin to select variables in the prompt text box by menu #4764 ### Type of change - [x] New Feature (non-breaking change which adds functionality)
71 lines
1.6 KiB
TypeScript
71 lines
1.6 KiB
TypeScript
import i18n from '@/locales/config';
|
|
import { BeginId } from '@/pages/flow/constant';
|
|
import { DecoratorNode, LexicalNode, NodeKey } from 'lexical';
|
|
import { ReactNode } from 'react';
|
|
const prefix = BeginId + '@';
|
|
|
|
export class VariableNode extends DecoratorNode<ReactNode> {
|
|
__value: string;
|
|
__label: string;
|
|
|
|
static getType(): string {
|
|
return 'variable';
|
|
}
|
|
|
|
static clone(node: VariableNode): VariableNode {
|
|
return new VariableNode(node.__value, node.__label, node.__key);
|
|
}
|
|
|
|
constructor(value: string, label: string, key?: NodeKey) {
|
|
super(key);
|
|
this.__value = value;
|
|
this.__label = label;
|
|
}
|
|
|
|
createDOM(): HTMLElement {
|
|
const dom = document.createElement('span');
|
|
dom.className = 'mr-1';
|
|
|
|
return dom;
|
|
}
|
|
|
|
updateDOM(): false {
|
|
return false;
|
|
}
|
|
|
|
decorate(): ReactNode {
|
|
let content: ReactNode = (
|
|
<span className="text-blue-600">{this.__label}</span>
|
|
);
|
|
if (this.__value.startsWith(prefix)) {
|
|
content = (
|
|
<div>
|
|
<span>{i18n.t(`flow.begin`)}</span> / {content}
|
|
</div>
|
|
);
|
|
}
|
|
return (
|
|
<div className="bg-gray-200 dark:bg-gray-400 text-primary inline-flex items-center rounded-md px-2 py-0">
|
|
{content}
|
|
</div>
|
|
);
|
|
}
|
|
|
|
getTextContent(): string {
|
|
return `{${this.__value}}`;
|
|
}
|
|
}
|
|
|
|
export function $createVariableNode(
|
|
value: string,
|
|
label: string,
|
|
): VariableNode {
|
|
return new VariableNode(value, label);
|
|
}
|
|
|
|
export function $isVariableNode(
|
|
node: LexicalNode | null | undefined,
|
|
): node is VariableNode {
|
|
return node instanceof VariableNode;
|
|
}
|