feat(web): add parameter-extractor、if-else、var-aggregator Node
This commit is contained in:
@@ -20,7 +20,7 @@ interface LexicalEditorProps {
|
||||
placeholder?: string;
|
||||
value?: string;
|
||||
onChange?: (value: string) => void;
|
||||
suggestions: Suggestion[];
|
||||
options: Suggestion[];
|
||||
}
|
||||
|
||||
const theme = {
|
||||
@@ -35,7 +35,7 @@ const Editor: FC<LexicalEditorProps> =({
|
||||
placeholder = "请输入内容...",
|
||||
value = "",
|
||||
onChange,
|
||||
suggestions,
|
||||
options,
|
||||
}) => {
|
||||
const [_count, setCount] = useState(0);
|
||||
const initialConfig = {
|
||||
@@ -91,9 +91,9 @@ const Editor: FC<LexicalEditorProps> =({
|
||||
/>
|
||||
<HistoryPlugin />
|
||||
<CommandPlugin />
|
||||
<AutocompletePlugin suggestions={suggestions} />
|
||||
<AutocompletePlugin options={options} />
|
||||
<CharacterCountPlugin setCount={(count) => { setCount(count) }} onChange={onChange} />
|
||||
<InitialValuePlugin value={value} suggestions={suggestions} />
|
||||
<InitialValuePlugin value={value} options={options} />
|
||||
</div>
|
||||
</LexicalComposer>
|
||||
);
|
||||
|
||||
@@ -14,7 +14,7 @@ export interface Suggestion {
|
||||
nodeData: NodeProperties
|
||||
}
|
||||
|
||||
const AutocompletePlugin: FC<{ suggestions: Suggestion[] }> = ({ suggestions }) => {
|
||||
const AutocompletePlugin: FC<{ options: Suggestion[] }> = ({ options }) => {
|
||||
const [editor] = useLexicalComposerContext();
|
||||
const [showSuggestions, setShowSuggestions] = useState(false);
|
||||
const [selectedIndex, setSelectedIndex] = useState(0);
|
||||
@@ -73,8 +73,8 @@ const AutocompletePlugin: FC<{ suggestions: Suggestion[] }> = ({ suggestions })
|
||||
|
||||
if (!showSuggestions) return null;
|
||||
|
||||
// Group suggestions by node id
|
||||
const groupedSuggestions = suggestions.reduce((groups: Record<string, any[]>, suggestion) => {
|
||||
// Group options by node id
|
||||
const groupedSuggestions = options.reduce((groups: Record<string, any[]>, suggestion) => {
|
||||
const { nodeData } = suggestion
|
||||
const nodeId = nodeData.id as string;
|
||||
if (!groups[nodeId]) {
|
||||
@@ -84,6 +84,9 @@ const AutocompletePlugin: FC<{ suggestions: Suggestion[] }> = ({ suggestions })
|
||||
return groups;
|
||||
}, {});
|
||||
|
||||
if (Object.entries(groupedSuggestions).length === 0) {
|
||||
return null
|
||||
}
|
||||
return (
|
||||
<div
|
||||
style={{
|
||||
|
||||
@@ -7,10 +7,10 @@ import { type Suggestion } from '../plugin/AutocompletePlugin'
|
||||
|
||||
interface InitialValuePluginProps {
|
||||
value: string;
|
||||
suggestions?: Suggestion[];
|
||||
options?: Suggestion[];
|
||||
}
|
||||
|
||||
const InitialValuePlugin: React.FC<InitialValuePluginProps> = ({ value, suggestions = [] }) => {
|
||||
const InitialValuePlugin: React.FC<InitialValuePluginProps> = ({ value, options = [] }) => {
|
||||
const [editor] = useLexicalComposerContext();
|
||||
const initializedRef = useRef(false);
|
||||
|
||||
@@ -29,7 +29,7 @@ const InitialValuePlugin: React.FC<InitialValuePluginProps> = ({ value, suggesti
|
||||
if (match) {
|
||||
const [_, nodeId, label] = match;
|
||||
|
||||
const suggestion = suggestions.find(s => {
|
||||
const suggestion = options.find(s => {
|
||||
if (nodeId === 'sys') {
|
||||
return s.nodeData.type === 'start' && s.label === `sys.${label}`
|
||||
}
|
||||
@@ -51,7 +51,7 @@ const InitialValuePlugin: React.FC<InitialValuePluginProps> = ({ value, suggesti
|
||||
|
||||
initializedRef.current = true;
|
||||
}
|
||||
}, [suggestions]);
|
||||
}, [options]);
|
||||
|
||||
return null;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user