@@ -9,11 +9,98 @@ import { getPromiseAfterDispatch } from "util/promiseUtils";
9
9
import { trans } from "i18n" ;
10
10
import { keyValueListControl , keyValueListToSearchStr , withDefault } from "lowcoder-sdk" ;
11
11
import { KeyValue } from "@lowcoder-ee/types/common" ;
12
+ import { useCallback , useContext , useEffect , useMemo } from "react" ;
12
13
14
+ const ExecuteQueryPropertyView = ( {
15
+ comp,
16
+ placement,
17
+ } : {
18
+ comp : any ,
19
+ placement ?: "query" | "table"
20
+ } ) => {
21
+ const getQueryOptions = useCallback ( ( editorState ?: EditorState ) => {
22
+ const options : { label : string ; value : string ; variable ?: Record < string , string > } [ ] =
23
+ editorState
24
+ ?. queryCompInfoList ( )
25
+ . map ( ( info ) => {
26
+ return {
27
+ label : info . name ,
28
+ value : info . name ,
29
+ variable : info . data . variable ,
30
+ }
31
+ } )
32
+ . filter (
33
+ // Filter out the current query under query
34
+ ( option ) => {
35
+ if (
36
+ placement === "query" &&
37
+ editorState . selectedBottomResType === BottomResTypeEnum . Query
38
+ ) {
39
+ return option . value !== editorState . selectedBottomResName ;
40
+ }
41
+ return true ;
42
+ }
43
+ ) || [ ] ;
44
+
45
+ // input queries
46
+ editorState
47
+ ?. getModuleLayoutComp ( )
48
+ ?. getInputs ( )
49
+ . forEach ( ( i ) => {
50
+ const { name, type } = i . getView ( ) ;
51
+ if ( type === InputTypeEnum . Query ) {
52
+ options . push ( { label : name , value : name } ) ;
53
+ }
54
+ } ) ;
55
+ return options ;
56
+ } , [ placement ] ) ;
57
+
58
+ const getVariableOptions = useCallback ( ( editorState ?: EditorState ) => {
59
+ return comp . children . queryVariables . propertyView ( {
60
+ label : trans ( "eventHandler.queryParams" ) ,
61
+ layout : "vertical" ,
62
+ isStatic : true ,
63
+ keyFixed : true ,
64
+ } ) ;
65
+ } , [ comp . children . queryVariables . getView ( ) ] )
66
+
67
+ return (
68
+ < >
69
+ < BranchDiv $type = { "inline" } >
70
+ < EditorContext . Consumer >
71
+ { ( editorState ) => (
72
+ < >
73
+ < Dropdown
74
+ showSearch = { true }
75
+ value = { comp . children . queryName . getView ( ) }
76
+ options = { getQueryOptions ( editorState ) }
77
+ label = { trans ( "eventHandler.selectQuery" ) }
78
+ onChange = { ( value ) => {
79
+ const options = getQueryOptions ( editorState ) ;
80
+ const selectedQuery = options . find ( option => option . value === value ) ;
81
+ const variables = selectedQuery ? Object . keys ( selectedQuery . variable || { } ) : [ ] ;
82
+ comp . dispatchChangeValueAction ( {
83
+ queryName : value ,
84
+ queryVariables : variables . map ( ( variable ) => ( { key : variable , value : '' } ) ) ,
85
+ } ) ;
86
+ } }
87
+ />
88
+ </ >
89
+ ) }
90
+ </ EditorContext . Consumer >
91
+ </ BranchDiv >
92
+ < BranchDiv >
93
+ < EditorContext . Consumer >
94
+ { ( editorState ) => getVariableOptions ( editorState ) }
95
+ </ EditorContext . Consumer >
96
+ </ BranchDiv >
97
+ </ >
98
+ ) ;
99
+ }
13
100
const ExecuteQueryTmpAction = ( function ( ) {
14
101
const childrenMap = {
15
102
queryName : SimpleNameComp ,
16
- query : withDefault ( keyValueListControl ( false , [ ] , "string" ) , [ { key : "" , value : "" } ] )
103
+ queryVariables : withDefault ( keyValueListControl ( false , [ ] , "string" ) , [ ] )
17
104
} ;
18
105
return new MultiCompBuilder ( childrenMap , ( ) => {
19
106
return ( ) => Promise . resolve ( undefined as unknown ) ;
@@ -26,7 +113,7 @@ export class ExecuteQueryAction extends ExecuteQueryTmpAction {
26
113
override getView ( ) {
27
114
const queryName = this . children . queryName . getView ( ) ;
28
115
// const queryParams = keyValueListToSearchStr(Array.isArray(this?.children?.query) ? (this.children.query as unknown as any[]).map((i: any) => i.getView() as KeyValue) : []);
29
- const result = Object . values ( this . children . query . children as Record < string , {
116
+ const result = Object . values ( this . children . queryVariables . children as Record < string , {
30
117
children : {
31
118
key : { unevaledValue : string } ,
32
119
value : { unevaledValue : string }
@@ -56,80 +143,11 @@ export class ExecuteQueryAction extends ExecuteQueryTmpAction {
56
143
}
57
144
58
145
propertyView ( { placement } : { placement ?: "query" | "table" } ) {
59
- const getQueryOptions = ( editorState ?: EditorState ) => {
60
- const options : { label : string ; value : string } [ ] =
61
- editorState
62
- ?. queryCompInfoList ( )
63
- . map ( ( info ) => ( {
64
- label : info . name ,
65
- value : info . name ,
66
- } ) )
67
- . filter (
68
- // Filter out the current query under query
69
- ( option ) => {
70
- if (
71
- placement === "query" &&
72
- editorState . selectedBottomResType === BottomResTypeEnum . Query
73
- ) {
74
- return option . value !== editorState . selectedBottomResName ;
75
- }
76
- return true ;
77
- }
78
- ) || [ ] ;
79
-
80
- // input queries
81
- editorState
82
- ?. getModuleLayoutComp ( )
83
- ?. getInputs ( )
84
- . forEach ( ( i ) => {
85
- const { name, type } = i . getView ( ) ;
86
- if ( type === InputTypeEnum . Query ) {
87
- options . push ( { label : name , value : name } ) ;
88
- }
89
- } ) ;
90
- return options ;
91
- } ;
92
- const getVariableOptions = ( editorState ?: EditorState ) => {
93
- const options =
94
- editorState
95
- ?. getQueriesComp ( )
96
- . getView ( )
97
- . filter (
98
- // Filter out the current query under query
99
- ( option ) => {
100
- return option . children . name . getView ( ) === this . children . queryName . getView ( ) ;
101
- }
102
- ) || [ ] ;
103
- return this . children . query . propertyView ( {
104
- label : trans ( "eventHandler.queryParams" ) ,
105
- layout : "vertical" ,
106
- isStatic : true ,
107
- keyFixed : true ,
108
- } ) ;
109
- }
110
146
return (
111
- < >
112
- < BranchDiv $type = { "inline" } >
113
- < EditorContext . Consumer >
114
- { ( editorState ) => (
115
- < >
116
- < Dropdown
117
- showSearch = { true }
118
- value = { this . children . queryName . getView ( ) }
119
- options = { getQueryOptions ( editorState ) }
120
- label = { trans ( "eventHandler.selectQuery" ) }
121
- onChange = { ( value ) => this . dispatchChangeValueAction ( { queryName : value } ) }
122
- />
123
- </ >
124
- ) }
125
- </ EditorContext . Consumer >
126
- </ BranchDiv >
127
- < BranchDiv >
128
- < EditorContext . Consumer >
129
- { ( editorState ) => getVariableOptions ( editorState ) }
130
- </ EditorContext . Consumer >
131
- </ BranchDiv >
132
- </ >
133
- ) ;
147
+ < ExecuteQueryPropertyView
148
+ comp = { this }
149
+ placement = { placement }
150
+ />
151
+ )
134
152
}
135
153
}
0 commit comments