@alicloud/console-components-search 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. package/README.md +193 -0
  2. package/config/breezr.docs.config.ts +28 -0
  3. package/config/components-with-style.tsx +2 -0
  4. package/config/config.ts +14 -0
  5. package/config/demoOpts.ts +12 -0
  6. package/demos/demo1.demo.tsx +143 -0
  7. package/demos/demo2.demo.tsx +110 -0
  8. package/demos/demo3.demo.tsx +115 -0
  9. package/demos/demo4.demo.tsx +144 -0
  10. package/dist/index.css +1 -0
  11. package/dist/index.js +60 -0
  12. package/doc-dist/0.js +27 -0
  13. package/doc-dist/1.js +1928 -0
  14. package/doc-dist/10.js +6 -0
  15. package/doc-dist/11.js +6 -0
  16. package/doc-dist/12.js +6 -0
  17. package/doc-dist/13.js +6 -0
  18. package/doc-dist/14.js +6 -0
  19. package/doc-dist/15.js +6 -0
  20. package/doc-dist/16.js +6 -0
  21. package/doc-dist/17.js +6 -0
  22. package/doc-dist/18.js +6 -0
  23. package/doc-dist/19.js +6 -0
  24. package/doc-dist/20.js +6 -0
  25. package/doc-dist/3.js +104 -0
  26. package/doc-dist/4.js +6 -0
  27. package/doc-dist/5.js +13 -0
  28. package/doc-dist/6.css +1 -0
  29. package/doc-dist/6.js +6 -0
  30. package/doc-dist/6.os.css +1 -0
  31. package/doc-dist/7.js +6 -0
  32. package/doc-dist/8.js +6 -0
  33. package/doc-dist/9.js +6 -0
  34. package/doc-dist/console-fe-test-rc-search-doc.manifest.json +18 -0
  35. package/doc-dist/deps/console-fe-test-rc-search-doc-deps.manifest.json +18 -0
  36. package/doc-dist/deps/index.html +14 -0
  37. package/doc-dist/deps/main.css +1 -0
  38. package/doc-dist/deps/main.js +66 -0
  39. package/doc-dist/deps/main.os.css +1 -0
  40. package/doc-dist/index.css +1 -0
  41. package/doc-dist/index.html +14 -0
  42. package/doc-dist/index.js +19 -0
  43. package/doc-dist/index.os.css +1 -0
  44. package/doc-dist/log-deps-build.log +16 -0
  45. package/docs/markdown-render.doc.md +21 -0
  46. package/docs/test.doc.md +8 -0
  47. package/es/constants.js +6 -0
  48. package/es/index.js +7 -0
  49. package/es/modeSingleMulti/index.js +862 -0
  50. package/es/modeSingleSingle/index.js +213 -0
  51. package/es/provider/LoggerProvider.js +37 -0
  52. package/es/search.js +23 -0
  53. package/es/searchTagList/index.js +58 -0
  54. package/es/style.js +14 -0
  55. package/es/types/IRcSearchOptions.type.js +1 -0
  56. package/es/types/IRcSearchProps.type.js +1 -0
  57. package/es/types/IRcSearchTagItemProps.type.js +1 -0
  58. package/es/types/IRcSearchTagListProps.type.js +1 -0
  59. package/es/utils.js +149 -0
  60. package/lib/constants.d.ts +2 -0
  61. package/lib/constants.js +15 -0
  62. package/lib/index.d.ts +7 -0
  63. package/lib/index.js +55 -0
  64. package/lib/modeSingleMulti/index.d.ts +4 -0
  65. package/lib/modeSingleMulti/index.js +883 -0
  66. package/lib/modeSingleSingle/index.d.ts +4 -0
  67. package/lib/modeSingleSingle/index.js +237 -0
  68. package/lib/provider/LoggerProvider.d.ts +8 -0
  69. package/lib/provider/LoggerProvider.js +47 -0
  70. package/lib/search.d.ts +4 -0
  71. package/lib/search.js +42 -0
  72. package/lib/searchTagList/index.d.ts +4 -0
  73. package/lib/searchTagList/index.js +75 -0
  74. package/lib/style.d.ts +5 -0
  75. package/lib/style.js +34 -0
  76. package/lib/types/IRcSearchOptions.type.d.ts +26 -0
  77. package/lib/types/IRcSearchOptions.type.js +5 -0
  78. package/lib/types/IRcSearchProps.type.d.ts +76 -0
  79. package/lib/types/IRcSearchProps.type.js +5 -0
  80. package/lib/types/IRcSearchTagItemProps.type.d.ts +23 -0
  81. package/lib/types/IRcSearchTagItemProps.type.js +5 -0
  82. package/lib/types/IRcSearchTagListProps.type.d.ts +32 -0
  83. package/lib/types/IRcSearchTagListProps.type.js +5 -0
  84. package/lib/utils.d.ts +14 -0
  85. package/lib/utils.js +177 -0
  86. package/package.json +41 -0
package/README.md ADDED
@@ -0,0 +1,193 @@
1
+ # @alicloud/console-components-search
2
+
3
+ 基础搜索组件: 当前控制台的基础搜索主要针对列表页的搜索场景,此次基础搜索组件主要通过一个简约通用的框架满足控制台针对列表页不同场景下的搜索需求
4
+ 按照使用场景分为三种使用场景
5
+ - 场景一:单维度单类别单选 (eg:该功能模块下只支持“实例名称”这唯一类别的搜索);
6
+ - 场景二:单维度多类别单选(eg:该功能模块下只支持“实例名称”这唯一类别的搜索网络类型包括多个子类别);
7
+ - 场景三:多维度多类别(eg:该功能模块下支持“网络类型”这一类别和其他同等类别的交集搜索);
8
+
9
+ ### SearchTagList
10
+ 场景二、三需结合SearchTagList使用, SearchTagList用与展示Search已选的筛选条件(以tag的形式),分成两个组件可以更灵活的定位SearchTagList的位置(比如表格场景)
11
+
12
+ ## install
13
+
14
+ ```bash
15
+ tnpm i @alicloud/xconsole-components-search --save-dev
16
+ ```
17
+
18
+ ## Usage
19
+
20
+ ```js
21
+ import { Search, IRcSearchProps } from "@alicloud/console-components-search";
22
+ let options = [
23
+ {
24
+ label: '实例名称',
25
+ dataIndex: 'name',
26
+ template: 'input',
27
+ templateProps: {
28
+ placeholder: '默认按实例名称搜索',
29
+ dataSource: []
30
+ }
31
+ }
32
+ ]
33
+
34
+ let options2 = [
35
+ {
36
+ label: '网络类型',
37
+ dataIndex: 'type',
38
+ template: 'select',
39
+ templateProps: {
40
+ placeholder: '请选择网络类型',
41
+ dataSource: [
42
+ {label: 'A', value: 'a'},
43
+ {label: 'B', value: 'b'},
44
+ {label: 'C', value: 'c'},
45
+ {label: 'D', value: 'd'},
46
+ ]
47
+ }
48
+ }
49
+ ]
50
+ async function onSuggestAsync (value: string, dataIndex: string) {
51
+ if (!value) {
52
+ return [];
53
+ }
54
+ return [
55
+ // {label: value, value: `${dataIndex}-${value}`}
56
+ `${value}-1`,
57
+ `${value}-2`,
58
+ `${value}-3`,
59
+ `${value}-4`,
60
+ `${value}-5`,
61
+ ]
62
+ }
63
+ function onSuggestPromise (value: string, dataIndex: string) {
64
+ let rtList = [];
65
+ if (!value) {
66
+ rtList = [];
67
+ }
68
+ rtList = [
69
+ // {label: value, value: `${dataIndex}-${value}`}
70
+ `${value}-1`,
71
+ `${value}-2`,
72
+ `${value}-3`,
73
+ `${value}-4`,
74
+ `${value}-5`,
75
+ ]
76
+ return Promise.resolve(rtList)
77
+ }
78
+
79
+ async function onChange1 (changedFileds:any, allFileds:any) {
80
+ console.log(`changedFileds:`, changedFileds, 'allFileds', allFileds)
81
+ }
82
+
83
+ async function onSearch (allFileds:any) {
84
+ console.log(`onSearch:`, 'allFileds', allFileds)
85
+ alert(`提交搜索: ${JSON.stringify(allFileds)}`)
86
+ }
87
+ <div>
88
+ 搜索类型:(async 调用)<br />
89
+ <Search
90
+ mode="single-single"
91
+ regionId="demo"
92
+ resourceType="demo"
93
+ options={options}
94
+ onSuggest={onSuggestAsync}
95
+ onChange={onChange1}
96
+ onSearch={onSearch}
97
+ />
98
+ <br /><br /><br /> 搜索类型:(promise调用)<br />
99
+ <Search
100
+ mode="single-single"
101
+ regionId="demo"
102
+ resourceType="demo"
103
+ options={options}
104
+ onSuggest={onSuggestPromise}
105
+ onChange={onChange1}
106
+ onSearch={onSearch}
107
+ />
108
+ <br /><br /><br /> 单选类型:<br />
109
+ <Search
110
+ mode="single-single"
111
+ regionId="demo"
112
+ resourceType="demo"
113
+ options={options2}
114
+ onChange={onChange1}
115
+ onSearch={onSearch}
116
+ />
117
+ <br /> 单维度单类别,暂不支持多选
118
+ </div>
119
+
120
+ ```
121
+
122
+ ## 使用场景
123
+
124
+ ### 场景一:单维度单类别单选 (eg:该功能模块下只支持“实例名称”这唯一类别的搜索);
125
+
126
+ 1、用户点击输入框直接输入要搜索的内容;<br>
127
+ 2、场景一只提供‘input’类型和‘select’类型;<br>
128
+ 3、模糊搜索的回调函数支持async 和 promise 调用;<br>
129
+
130
+ [$XView](http://localhost:3333/?entryKey=demo1&consoleOSId=console-fe-test-rc-search-doc)
131
+
132
+ > 场景一的已选值在基础搜索组件上展示, 无需引用“searchTagList”组件
133
+ <br>
134
+
135
+ ### 场景二:单维度多类别单选(eg:该功能模块下只支持“实例名称”这唯一类别的搜索网络类型包括多个子类别);
136
+
137
+ 1、用户点击输入框激活下拉类别列表<br>
138
+ 2、当用户直接输入内容的时候,列表消失<br>
139
+ 3、用户点击类别后,在搜索框内生成类别Tag<br>
140
+ 4、如果该类别有子类别/推荐项,顺次自动下拉展开<br>
141
+ 5、当用户完成该类别搜索后,搜索框默认保留该类别Tag<br>
142
+ 6、用户点击类别后,在搜索框内生成类别Tag<br>
143
+ 7、如果该类别有子类别/推荐项,顺次自动下拉展开<br>
144
+ 8、当用户完成该类别搜索后,搜索框默认保留该类别Tag<br>
145
+
146
+ [$XView](http://localhost:3333/?entryKey=demo2&consoleOSId=console-fe-test-rc-search-doc)
147
+
148
+ > 场景二:单维度单类别单选,同一类别下,用户切换子类别内容筛选条件区域的Tag直接被替换。当内容为空时点击输入框里面的叉, 可清除当前类别,回到初始状态。场景三的已选值在基础搜索组件外展示, 需引用“searchTagList”组件
149
+
150
+ <br>
151
+
152
+ ### 场景三:多维度多类别(eg:该功能模块下支持“网络类型”这一类别和其他同等类别的交集搜索);
153
+
154
+ 1、多维度单类别单选,同一类别下,用户切换子类别内容<br>
155
+ 2、筛选条件区域的Tag直接被替换;用户选择不同类别会<br>
156
+ 3、生成新的筛选Tag出现在筛选区<br>
157
+
158
+ [$XView](http://localhost:3333/?entryKey=demo3&consoleOSId=console-fe-test-rc-search-doc)
159
+
160
+ > 场景三的已选值在基础搜索组件外展示, 需引用“searchTagList”组件
161
+
162
+ <br>
163
+
164
+ ### 无默认分类, 默认多类别搜索;
165
+
166
+ 1、当开发者没有指定默认类别且用户没有选择类别的时候;<br>
167
+ 2、模糊搜索的回调函数将使用onSuggestNoDataIndex,返回<br>
168
+ 3、开发者可返回多组类别的模糊搜索结果
169
+ [$XView](http://localhost:3333/?entryKey=demo4&consoleOSId=console-fe-test-rc-search-doc)
170
+
171
+
172
+ ## API
173
+
174
+ ## rc-search
175
+
176
+ 基础搜索组件的参数
177
+ [$XView](http://localhost:3333/?entryKey=types%2FIRcSearchProps&consoleOSId=console-fe-test-rc-search-doc)
178
+
179
+ ## options
180
+
181
+ 配置组件类别的options
182
+ [$XView](http://localhost:3333/?entryKey=types%2FIRcSearchOptions&consoleOSId=console-fe-test-rc-search-doc)
183
+
184
+ ## tags
185
+
186
+ 场景二、三, 需要与SearchTagList共同使用时的参数
187
+ [$XView](http://localhost:3333/?entryKey=types%2FIRcSearchTagItemProps&consoleOSId=console-fe-test-rc-search-doc)
188
+
189
+ ## SearchTagList
190
+
191
+ 场景二、三, 需要与Search共同使用时的参数
192
+ [$XView](http://localhost:3333/?entryKey=types%2FIRcSearchTagListProps&consoleOSId=console-fe-test-rc-search-doc)
193
+
@@ -0,0 +1,28 @@
1
+ import type { IParams } from "@alicloud/console-toolkit-preset-docs";
2
+ import path from "path";
3
+
4
+ module.exports = {
5
+ presets: [
6
+ [
7
+ require.resolve("@alicloud/console-toolkit-preset-docs"),
8
+ {
9
+ consoleOSId: "console-fe-test-rc-search-doc",
10
+ externals: [
11
+ {
12
+ moduleName: "@alicloud/console-components-search",
13
+ usePathInDev: path.resolve(__dirname, "../src/index.ts"),
14
+ },
15
+ {
16
+ moduleName: '@alicloud/console-components',
17
+ usePathInDev: path.resolve(
18
+ __dirname,
19
+ './components-with-style.tsx'
20
+ ),
21
+ },
22
+ "styled-components",
23
+ ],
24
+ demoOptsPath: path.resolve(__dirname, "./demoOpts"),
25
+ } as IParams,
26
+ ],
27
+ ],
28
+ };
@@ -0,0 +1,2 @@
1
+ export * from '@alicloud/console-components'
2
+ import '@alicloud/console-components/dist/xconsole.css'
@@ -0,0 +1,14 @@
1
+ module.exports = {
2
+ presets: [
3
+ [
4
+ "@alicloud/console-toolkit-preset-component",
5
+ {
6
+ moduleName: "@alicloud/console-components-search",
7
+ useTypescript: true,
8
+ externals: {
9
+ "styled-components": "styled-components",
10
+ },
11
+ },
12
+ ],
13
+ ],
14
+ };
@@ -0,0 +1,12 @@
1
+ import { IDemoOpts } from "@alicloud/console-toolkit-preset-docs";
2
+
3
+ export default {
4
+ // 可以自定义demo容器的类名和样式
5
+ // containerClassName: "testContainerClassName",
6
+ // containerStyle: {
7
+ // width: "1200px",
8
+ // },
9
+
10
+ // canFullScreen为true时,demo容器默认宽度会增加,并且用户可以全屏查看demo
11
+ // canFullScreen: true,
12
+ } as IDemoOpts;
@@ -0,0 +1,143 @@
1
+ /**
2
+ * @title 场景一
3
+ * @describe 场景一:single-single:单维度单类别单选.
4
+ */
5
+
6
+ import React from "react";
7
+ import { Search, IRcSearchProps } from "@alicloud/console-components-search";
8
+
9
+ // interface IProps {}
10
+
11
+ let options = [
12
+ {
13
+ label: '实例名称',
14
+ dataIndex: 'name',
15
+ template: 'input',
16
+ templateProps: {
17
+ placeholder: '默认按实例名称搜索',
18
+ dataSource: []
19
+ }
20
+ }
21
+ ]
22
+
23
+ let noFuzzyoptions = [
24
+ {
25
+ label: '实例名称',
26
+ dataIndex: 'name',
27
+ template: 'input',
28
+ templateProps: {
29
+ placeholder: '默认按实例名称搜索',
30
+ dataSource: [],
31
+ fuzzyDisable: true // 不支持模糊搜索
32
+ }
33
+ }
34
+ ]
35
+
36
+ let options2 = [
37
+ {
38
+ label: '网络类型',
39
+ dataIndex: 'type',
40
+ template: 'select',
41
+ templateProps: {
42
+ placeholder: '请选择网络类型',
43
+ dataSource: [
44
+ {label: 'A', value: 'a'},
45
+ {label: 'B', value: 'b'},
46
+ {label: 'C', value: 'c'},
47
+ {label: 'D', value: 'd'},
48
+ ]
49
+ }
50
+ }
51
+ ]
52
+
53
+ const Demo1: React.FC<IRcSearchProps> = (props) => {
54
+
55
+ async function onSuggestAsync (value: string, dataIndex: string) {
56
+ if (!value) {
57
+ return [];
58
+ }
59
+ return [
60
+ // {label: value, value: `${dataIndex}-${value}`}
61
+ `${value}-1`,
62
+ `${value}-2`,
63
+ `${value}-3`,
64
+ `${value}-4`,
65
+ `${value}-5`,
66
+ ]
67
+ }
68
+ function onSuggestPromise (value: string, dataIndex: string) {
69
+ let rtList = [];
70
+ if (!value) {
71
+ rtList = [];
72
+ }
73
+ rtList = [
74
+ // {label: value, value: `${dataIndex}-${value}`}
75
+ `${value}-1`,
76
+ `${value}-2`,
77
+ `${value}-3`,
78
+ `${value}-4`,
79
+ `${value}-5`,
80
+ ]
81
+ return Promise.resolve(rtList)
82
+ }
83
+
84
+ async function onChange1 (changedFileds:any, allFileds:any) {
85
+ console.log(`changedFileds:`, changedFileds, 'allFileds', allFileds)
86
+ }
87
+
88
+ async function onSearch (allFileds:any) {
89
+ console.log(`onSearch:`, 'allFileds', allFileds)
90
+ console.log(`提交搜索: ${JSON.stringify(allFileds)}`)
91
+ }
92
+
93
+ return (
94
+ <div>
95
+ 搜索类型:(async 调用)<br />
96
+ <Search
97
+ mode="single-single"
98
+ regionId="demo"
99
+ resourceType="demo"
100
+ options={options}
101
+ onSuggest={onSuggestAsync}
102
+ onChange={onChange1}
103
+ onSearch={onSearch}
104
+ />
105
+ <br /><br /><br />
106
+ 搜索类型:(promise调用)<br />
107
+ <Search
108
+ mode="single-single"
109
+ regionId="demo"
110
+ resourceType="demo"
111
+ options={options}
112
+ onSuggest={onSuggestPromise}
113
+ onChange={onChange1}
114
+ onSearch={onSearch}
115
+ />
116
+ <br /><br /><br />
117
+ 搜索类型:(不支持模糊搜索 fuzzyDisable: true)<br />
118
+ <Search
119
+ mode="single-single"
120
+ regionId="demo"
121
+ resourceType="demo"
122
+ options={noFuzzyoptions}
123
+ onSuggest={onSuggestPromise}
124
+ onChange={onChange1}
125
+ onSearch={onSearch}
126
+ />
127
+ <br /><br /><br />
128
+ 单选类型:<br />
129
+ <Search
130
+ mode="single-single"
131
+ regionId="demo"
132
+ resourceType="demo"
133
+ options={options2}
134
+ onChange={onChange1}
135
+ onSearch={onSearch}
136
+ />
137
+ <br />
138
+ 单维度单类别,暂不支持多选
139
+ </div>
140
+ );
141
+ };
142
+
143
+ export default Demo1;
@@ -0,0 +1,110 @@
1
+ /**
2
+ * @title 场景二 + 结合SearchTagList使用
3
+ * @describe 场景二:single-multi:单维度多类别单选
4
+ * @canFullScreen
5
+ */
6
+
7
+ import React, {useState} from "react";
8
+ import { Search, IRcSearchProps, SearchTagList } from "@alicloud/console-components-search";
9
+
10
+ // interface IProps {}
11
+ let options = [
12
+ {
13
+ label: '实例名称',
14
+ dataIndex: 'name',
15
+ template: 'input',
16
+ templateProps: {
17
+ placeholder: '按实例名称搜索',
18
+ dataSource: []
19
+ }
20
+ },
21
+ {
22
+ label: '网络类型',
23
+ dataIndex: 'type',
24
+ template: 'select',
25
+ templateProps: {
26
+ placeholder: '请选择网络类型',
27
+ dataSource: [
28
+ {label: 'A', value: 'a'},
29
+ {label: 'B', value: 'b'},
30
+ {label: 'C', value: 'c'},
31
+ {label: 'D', value: 'd'},
32
+ ]
33
+ }
34
+ },
35
+ {
36
+ label: '付费类型',
37
+ dataIndex: 'pay',
38
+ template: 'multiple',
39
+ templateProps: {
40
+ placeholder: '请选择付费类型',
41
+ dataSource: [
42
+ {label: 'A', value: 'a'},
43
+ {label: 'B', value: 'b'},
44
+ {label: 'C', value: 'c'},
45
+ {label: 'D', value: 'd'},
46
+ ]
47
+ }
48
+ }
49
+ ]
50
+
51
+ const Demo2: React.FC<IRcSearchProps> = (props) => {
52
+ const [tagList, setTagList] = useState<any>([]);
53
+
54
+ async function onSuggest (value: string, dataIndex: string) {
55
+ if (!value) {
56
+ return [];
57
+ }
58
+ return [
59
+ // {label: value, value: `${dataIndex}-${value}`}
60
+ `${value}-1`,
61
+ `${value}-2`,
62
+ `${value}-3`,
63
+ `${value}-4`,
64
+ `${value}-5`,
65
+ ]
66
+ }
67
+
68
+ async function onChange (changedFileds:any, allFileds:any) {
69
+ console.log(`changedFileds:`, changedFileds, 'allFileds', allFileds)
70
+ }
71
+
72
+ function onTagChange(newTags: any) {
73
+ console.log(`onTagChange:`, newTags);
74
+ setTagList(newTags);
75
+ }
76
+
77
+ function onTagChangeByTagList (newTags: any) {
78
+ console.log(`onTagChange:`, newTags);
79
+ setTagList(newTags);
80
+
81
+ }
82
+
83
+ async function onSearch (allFileds:any) {
84
+ console.log(`onSearch:`, 'allFileds', allFileds)
85
+ console.log(`提交搜索: ${JSON.stringify(allFileds)}`)
86
+ }
87
+
88
+
89
+ return (
90
+ <div>
91
+ <Search
92
+ mode="single-multi"
93
+ defaultDataIndex="name"
94
+ regionId="demo"
95
+ resourceType="demo"
96
+ options={options}
97
+ onChange={onChange}
98
+ onSuggest={onSuggest}
99
+ onTagChange={onTagChange}
100
+ onSearch={onSearch}
101
+ tags={tagList}
102
+ />
103
+ <SearchTagList regionId="demo" resourceType="demo" style={{marginTop: '8px'}} tagList={tagList} onChange={onTagChangeByTagList} />
104
+
105
+ </div>
106
+
107
+ )
108
+ };
109
+
110
+ export default Demo2;
@@ -0,0 +1,115 @@
1
+ /**
2
+ * @title 场景三 + 结合表格使用
3
+ * @describe 场景三:multi-multi:多维度多类别单选
4
+ * @canFullScreen
5
+ */
6
+
7
+ import React, {useState} from "react";
8
+ import { Search, IRcSearchProps, SearchTagList } from "@alicloud/console-components-search";
9
+ import { Button, Table } from '@alicloud/console-components'
10
+ // interface IProps {}
11
+ let options = [
12
+ {
13
+ label: '实例名称',
14
+ dataIndex: 'name',
15
+ template: 'input',
16
+ templateProps: {
17
+ placeholder: '按实例名称搜索',
18
+ dataSource: []
19
+ }
20
+ },
21
+ {
22
+ label: '网络类型',
23
+ dataIndex: 'type',
24
+ template: 'select',
25
+ templateProps: {
26
+ placeholder: '请选择网络类型',
27
+ dataSource: [
28
+ {label: 'A', value: 'a'},
29
+ {label: 'B', value: 'b'},
30
+ {label: 'C', value: 'c'},
31
+ {label: 'D', value: 'd'},
32
+ ]
33
+ }
34
+ },
35
+ {
36
+ label: '付费类型',
37
+ dataIndex: 'pay',
38
+ template: 'multiple',
39
+ templateProps: {
40
+ placeholder: '请选择付费类型',
41
+ dataSource: [
42
+ {label: 'A', value: 'a'},
43
+ {label: 'B', value: 'b'},
44
+ {label: 'C', value: 'c'},
45
+ {label: 'D', value: 'd'},
46
+ ]
47
+ }
48
+ }
49
+ ]
50
+
51
+ const Demo3: React.FC<IRcSearchProps> = (props) => {
52
+ const [tagList, setTagList] = useState<any>([]);
53
+
54
+ async function onSuggest (value: string, dataIndex: string) {
55
+ if (!value) {
56
+ return [];
57
+ }
58
+ return [
59
+ // {label: value, value: `${dataIndex}-${value}`}
60
+ `${value}-1`,
61
+ `${value}-2`,
62
+ `${value}-3`,
63
+ `${value}-4`,
64
+ `${value}-5`,
65
+ ]
66
+ }
67
+
68
+ async function onChange (changedFileds:any, allFileds:any) {
69
+ console.log(`changedFileds:`, changedFileds, 'allFileds', allFileds)
70
+ }
71
+
72
+ function onTagChange(newTags: any) {
73
+ console.log(`onTagChange:`, newTags);
74
+ setTagList(newTags);
75
+ }
76
+
77
+ async function onSearch (allFileds:any) {
78
+ console.log(`onSearch:`, 'allFileds', allFileds)
79
+ console.log(`提交搜索: ${JSON.stringify(allFileds)}`)
80
+ }
81
+
82
+ return (
83
+ <div>
84
+ <p>有默认分类: 实例名称</p>
85
+ <div>
86
+ <Button type="primary" style={{marginRight: '10px'}}>主按钮</Button>
87
+ <Search
88
+ mode="multi-multi"
89
+ defaultDataIndex="name"
90
+ regionId="demo"
91
+ resourceType="demo"
92
+ options={options}
93
+ onChange={onChange}
94
+ onSuggest={onSuggest}
95
+ onTagChange={onTagChange}
96
+ onSearch={onSearch}
97
+ tags={tagList}
98
+ style={{marginRight: '10px', width: '500px'}}
99
+ />
100
+ <Button type="normal">普通按钮</Button>
101
+
102
+ </div>
103
+
104
+ <SearchTagList regionId="demo" resourceType="demo" style={{marginTop: '8px'}} tagList={tagList} onChange={onTagChange} />
105
+ <Table>
106
+ <Table.Column title="Key" dataIndex="key" />
107
+ <Table.Column title="实例ID/名称" dataIndex="id" />
108
+ <Table.Column title="状态" dataIndex="status" />
109
+ </Table>
110
+ </div>
111
+
112
+ )
113
+ };
114
+
115
+ export default Demo3;