diff --git a/packages/others/EviewUI-docs/Button/demo/disabled.md b/packages/others/EviewUI-docs/Button/demo/disabled.md new file mode 100644 index 00000000..c678df9c --- /dev/null +++ b/packages/others/EviewUI-docs/Button/demo/disabled.md @@ -0,0 +1,81 @@ +--- +order: 2 +title: + zh-CN: 不可用状态 + en-US: Button Style with Title +--- + +## zh-CN + +添加 `disabled` 属性即可让按钮处于不可用状态,同时按钮样式也会改变。 + +## en-US + +```jsx +import Button from "eview-ui/Button"; +import LabelField from "eview-ui/LabelField"; +import create_default from "@images/create_default"; +import delete_disabled from "@images/delete_disabled"; +import collecte_disabled from "@images/collecte_disabled"; +import ConfigProvider from 'eview-ui/ConfigProvider'; +import { getDemoVersion } from 'eview-ui/ThemeProvider'; + +export default class IconButtonStyle extends React.Component { + render() { + const [version, theme] = getDemoVersion(); + let divStyle = { margin: "20px 0px 20px 20px" }; + let iconButtonStyle = { marginRight: "5px", width: "90px" }; + let labelStyle = { + display: "block", + fontSize: "14px", + marginBottom: "10px", + paddingLeft: "0px" + }; + return ( + // 【重要】业务中使用当前组件不需要添加引用ConfigProvider组件的代码(ConfigProvider是全局组件,当前demo引用ConfigProvider仅用作ICT 3.0 组件样式演示使用) + +
+
+
+
+
+ ); + } +} + +ReactDOM.render(, mountNode); +``` diff --git a/packages/others/EviewUI-docs/Button/demo/focus.md b/packages/others/EviewUI-docs/Button/demo/focus.md new file mode 100644 index 00000000..08313e85 --- /dev/null +++ b/packages/others/EviewUI-docs/Button/demo/focus.md @@ -0,0 +1,32 @@ +--- +order: 6 +title: + zh-CN: 自动聚焦 + en-US: Button Style with Title +--- + +## zh-CN + +`focused`属性可以让页面渲染完成后进行自动聚焦到按钮上 + +## en-US + +```jsx +import Button from "eview-ui/Button"; +import ConfigProvider from 'eview-ui/ConfigProvider'; +import { getDemoVersion } from 'eview-ui/ThemeProvider'; + +export default class IconButtonStyle extends React.Component { + render() { + const [version, theme] = getDemoVersion(); + return ( + // 【重要】业务中使用当前组件不需要添加引用ConfigProvider组件的代码(ConfigProvider是全局组件,当前demo引用ConfigProvider仅用作ICT 3.0 组件样式演示使用) + + + + + {this.state.msg ? + : ''} + + + + ) + } +} + +ReactDOM.render(, mountNode); + +``` diff --git a/packages/others/EviewUI-docs/InputSelect/index.zh-CN.md b/packages/others/EviewUI-docs/InputSelect/index.zh-CN.md new file mode 100644 index 00000000..e8805975 --- /dev/null +++ b/packages/others/EviewUI-docs/InputSelect/index.zh-CN.md @@ -0,0 +1,47 @@ +--- +category: Components +type: 数据录入 +title: InputSelect +subtitle: 可输可选组件 +cols: 1 +--- + +该组件用来设置可输入的下拉框,需设置文本显示值text和数据库存取值value,同时可设置初始化选中项,同时可在输入框中过滤下拉选项,当下拉列表中只有一个选项时,可回车选中。 + +## API + +|方法名|描述|参数|返回值| +|---|---|---|---| +|getValue|用来获取下拉框中被选中项的value值|无|下拉框选中项的值| +|validate|用来校验下拉选项是否被选中,返回是否通过校验|无|校验结果,bool类型| +|focus|用来设置下拉框聚焦|无|无| + +### 属性 + +| 属性名称 | 描述 | 输入 | 默认 | +|:-----|:-----|:-----|:-----| +| options | 设置传入数据let options = [{ text: "111", value: 1 }, {text: "222", value: 2}, {text: "333",value: 2}];
其中text是页面展示值,value是数据库存取值 | array | | +| id | 设置InputSelect的id | string | | +| style | 通过自定义style来改变InputSelect的整体样式 例如:边缘边距宽度 | object | | +| className | 通过自定义class来改变InputSelect的整体样式 例如:边缘边距宽度 | string | | +| labelClassName | 通过添加class的方式自定义下拉框的名称的样式 | string | | +| labelStyle | 通过添加style的方式自定义下拉框的名称的样式 | object | | +| selectClassName | 通过自定义class来改变input的样式 例如:边框颜色背景 | string | | +| selectStyle | 通过自定义style来改变input的样式 例如:边框颜色背景 | object | | +| optionClassName | 通过自定class来改变option的样式 | string | | +| optionStyle | 通过自定style来改变option的样式, *set optionStyle={{width:'300px'}} for setting the width of the dropdown width | object | | +| label | 设置下拉框的名称文字 | string | | +| labelPosition | 设置输入框的名称文字的位置 before代表名称文字在输入框的左边,after代表名称文字在输入框的右边 | enum:
 "before"
 "after"
| "before" | +| value | 设置默认的value值,若同时设置了selectedIndex则以value为准 | number | | +| selectedIndex | 设置默认的index,此处为数据属性options中对应的index | number | | +| disabled | 设置inputSelect的灰化 | bool | false | +| enablHorzScroll | 是否为弹出窗口设置水平滚动条 | bool | false | +| showSearchTip | 是否启用“未找到”提示 | bool | true | +| required | 设置组件是否为必填项 | bool | false | +| zIndex | InputSelect Popup zIndex can be override by the user | number | 9999 | +| popupDirection | 下拉框弹出方向(注:当弹出方向空间不够时会自动切换到其他方向) | "top"
"bottom" | "bottom" | +| onChange | 设置inputSelect的onChange事件,监听inputSelect选中值得变化

**签名:**
`function(value: any, oldValue: any) => void`
*value:* 当前选中的选项的value值
*oldValue:* 组件上一次算中值 | function | | +| onFocus | 设置inputSelect的onFocus事件

**签名:**
`function(e: object) => void`
*e:* 原生dom事件 | function | | +| onBlur | 设置inputSelect的onBlur事件

**签名:**
`function(e: object) => void`
*e:* 原生dom事件 | function | | +| onInputEnter | return the value of input on Enter press.

**Signature:**
`function(e: object, value) => void`
*e:* Primary dom events`
*value:* value entered| function | | +| onInputKeyUp | inputSelect on inputbox keyUp event should fire this call back.

**Signature:**
`function(value) => void`
*value:* value entered | function | | diff --git a/packages/others/EviewUI-docs/Select/demo/basic.md b/packages/others/EviewUI-docs/Select/demo/basic.md new file mode 100644 index 00000000..1763726b --- /dev/null +++ b/packages/others/EviewUI-docs/Select/demo/basic.md @@ -0,0 +1,123 @@ +--- +order: 0 +title: + zh-CN: 基本属性设置 + en-US: Basic Setting +--- + +## zh-CN + + + +## en-US + + + +```jsx +import Select from 'eview-ui/Select'; +import navForm from "@images/nav_form"; +import navFormActive from "@images/nav_form_active"; +import navMsg from "@images/nav_msg"; +import navMsgActive from "@images/nav_msg_active"; +import navHeart from "@images/nav_heart"; +import navHeartActive from "@images/nav_heart_active"; +import ConfigProvider from 'eview-ui/ConfigProvider'; +import { getDemoVersion } from 'eview-ui/ThemeProvider'; +export default class SelectExample extends React.Component { + + render() { + let compStyle = { marginRight: "40px", marginLeft: "20px" }; + let style = { width: '250px' } + let labelStyle = { display: "block", paddingLeft: "0px" }; + + let options = [{ text: "China is big country", value: 1 }, + { text: "UK is small country", value: 2 }, + { text: "USA", value: 3 }, + { text: "USAB", value: 4 }, + { text: "USAC", value: 5 }, + { text: "USAD", value: 6 }, + { text: "USAE", value: 7 }, + { text: "USAF", value: 8 }, + { text: "USAG", value: 9 }]; + + let optionsWithIcon = [{ text: "Create", value: 1, icon: navForm, iconActive: navFormActive }, + { text: "Export", value: 2, icon: navMsg, iconActive: navMsgActive }, + { text: "Delete", value: 3, icon: navHeart, iconActive: navHeartActive }]; + + let options1 = [{ text: "Beijing", value: 1 }, + { text: "London", value: 2 }, + { text: "Washington DC", value: 3 }]; + + let options2 = [{ text: "Label 1:", value: 1, label: true }, + { text: "A quick brown fox jumps over the white lazy dog", value: 2 }, + { text: "China", value: 3}, + { text: "USA", value: 4 }, + { text: "Label 2:", value: 5, label: true }, + { text: "USAB", value: 6 }, + { text: "USAC", value: 7 }, + { text: "USAD", value: 8 }, + { text: "USAE", value: 9 }]; + + let options3 = [{ text: "China is big country", value: 1 }, + { text: "UK is small country", value: 2 }, + { text: "USA", value: 3 }, + { text: "USAB", value: 4 }, + { text: "USAC", value: 5 }, + { text: "USAD", value: 6 }, + { text: "USAE", value: 7 }, + { text: "USAF", value: 8 }, + { text: "USAG", value: 9 }, + { text: "...", value: 10 ,tipData: 'options' }]; + + let options4 = [{ text: "China is big country", value: 1 ,disabled:true }, + { text: "UK is small country", value: 2 ,disabled:true}, + { text: "USA", value: 3 , disabled:true}, + { text: "USAB", value: 4 ,disabled:true}, + { text: "USAC", value: 5 ,disabled:true }, + { text: "USAD", value: 6 ,disabled:true}, + { text: "USAE", value: 7 ,disabled:true}, + { text: "USAF", value: 8 ,disabled:true}, + { text: "USAG", value: 9 ,disabled:true}]; + + let options5 = [{ text: "China is big country", value: 1 ,disabled:true }, + { text: "UK is small country", value: 2 ,disabled:true}, + { text: "Label 1:", value: 3 , label: true, disabled:true}, + { text: "USAB", value: 4 ,disabled:true}, + { text: "USAC", value: 5 ,disabled:true }, + { text: "USAD", value: 6 ,disabled:true}, + { text: "Label 2:", value: 7 ,label: true ,disabled:true}, + { text: "USAF", value: 8 ,disabled:true}, + { text: "USAG", value: 9 ,disabled:true}]; + const [version, theme] = getDemoVersion(); + return ( + // 【重要】业务中使用当前组件不需要添加引用ConfigProvider组件的代码(ConfigProvider是全局组件,当前demo引用ConfigProvider仅用作ICT 3.0 组件样式演示使用) + +
+
+ + + +

+
+
+
All Disable item Options
+ +
+
+
+ + ) + } +} + +ReactDOM.render(, mountNode); + +``` diff --git a/packages/others/EviewUI-docs/Select/demo/event.md b/packages/others/EviewUI-docs/Select/demo/event.md new file mode 100644 index 00000000..c0e5a457 --- /dev/null +++ b/packages/others/EviewUI-docs/Select/demo/event.md @@ -0,0 +1,79 @@ +--- +order: 1 +title: + zh-CN: 事件处理 + en-US: Event Handling +--- + +## zh-CN + + + +## en-US + + + +```jsx +import Select from 'eview-ui/Select'; +import Button from 'eview-ui/Button'; +import DivMessage from 'eview-ui/DivMessage'; +import ConfigProvider from 'eview-ui/ConfigProvider'; +import { getDemoVersion } from 'eview-ui/ThemeProvider'; + +export default class SelectEventExample extends React.Component { + + state = { + msg: '', + selectedValue: undefined, + }; + + handleChange = (value) => { + this.setState({ msg: "OnChange Event Callback, Selected Value: " + value, selectedValue: value }); + }; + + handleInputChange = (value) => { + this.setState({ msg: "OnChange Event Callback, Selected Value: " + value.value, selectedValue: value }); + }; + + handleClick = () => { + this.setState({ msg: "getValue API: current Value:" + this.select.getValue() }); + }; + + handleClickValidate = (result) => { + if (this.select.validate()) { + this.setState({ msg: "Validate API Passed", selectedValue: this.select.getValue() }); + } + }; + + handleClickFocus = () => { + this.select.focus(); + }; + + render() { + const [version, theme] = getDemoVersion(); + let options = [{ text: "China", value: 1 }, { text: "UK", value: 2 }, { text: "USA", value: 3 }]; + let options1 = [{ text: "China", value: { value: 'China' } }, { text: "UK", value: { timeDim: "custom", value: 'UK' } }, + { text: "USA", value: { interval: "message", value: 'USA' } }]; + let buttonStyle = { marginLeft: "20px" }; + return ( + // 【重要】业务中使用当前组件不需要添加引用ConfigProvider组件的代码(ConfigProvider是全局组件,当前demo引用ConfigProvider仅用作ICT 3.0 组件样式演示使用) + +
+ + {this.state.msg ? : ''} +
+
+ ) + } +} + +ReactDOM.render(, mountNode); + +``` diff --git a/packages/others/EviewUI-docs/Select/demo/lazySelect.md b/packages/others/EviewUI-docs/Select/demo/lazySelect.md new file mode 100644 index 00000000..afdc9d55 --- /dev/null +++ b/packages/others/EviewUI-docs/Select/demo/lazySelect.md @@ -0,0 +1,181 @@ +--- +order: 2 +title: + zh-CN: 懒加载选择 + en-US: Lazy Select +--- + +## zh-CN + + + +## en-US + + + +```jsx +import Select from 'eview-ui/Select'; +import ConfigProvider from 'eview-ui/ConfigProvider'; +import { getDemoVersion } from 'eview-ui/ThemeProvider'; + +export default class LazySelectExample extends React.Component { + + handleLoadOptions = (index) => { + console.log("handleLoadOptions index: ", index); + const newOptions = OPTIONS_DB.slice(index, index + 10); + this.setState(() => ({ + options: newOptions, + })); + return 20; + } + + state = { + lazyOptions: { totalRecords: 119, onLoadRecords: this.handleLoadOptions }, + options: OPTIONS_DB.slice(0, 10), + }; + + render() { + console.log("lazyOptions : ", this.state.lazyOptions); + const [version, theme] = getDemoVersion(); + return ( + // 【重要】业务中使用当前组件不需要添加引用ConfigProvider组件的代码(ConfigProvider是全局组件,当前demo引用ConfigProvider仅用作ICT 3.0 组件样式演示使用) + +
+ , + '28 dfgdfg_' + c, + , + Math.floor((Math.random() * 100) + 1) //Return a random number between 1 and 100 + ]); + } + const [version, theme] = getDemoVersion(); + + return ( + // 【重要】业务中使用当前组件不需要添加引用ConfigProvider组件的代码(ConfigProvider是全局组件,当前demo引用ConfigProvider仅用作ICT 3.0 组件样式演示使用) + + { this.table = table; }} + className="tableColor" + height={310} + onEdit={this.handleCellEdit} + onEditingCellBlur={this.handleEditingCellBlur} + useCustomToolTip={false} + /> + + + ); + } +} + +ReactDOM.render(, mountNode); + +``` diff --git a/packages/others/EviewUI-docs/Table/demo/arrayOfObj.md b/packages/others/EviewUI-docs/Table/demo/arrayOfObj.md new file mode 100644 index 00000000..36f3d1ec --- /dev/null +++ b/packages/others/EviewUI-docs/Table/demo/arrayOfObj.md @@ -0,0 +1,148 @@ +--- +order: 3 +title: + zh-CN: 数据作为对象数组 + en-US: Data as Array of Objects +--- + +## zh-CN + + + +## en-US + + + +```jsx +import Table from 'eview-ui/Table'; +import img1 from "@images/table_1"; +import img2 from "@images/table_2"; +import expend from "@images/expend"; +import Button from "eview-ui/Button"; +import ConfigProvider from 'eview-ui/ConfigProvider'; +import { getDemoVersion } from 'eview-ui/ThemeProvider'; + +export default class TableDemo extends React.Component { + + onRowRightClick = (e, row) => { + console.log(row); + }; + + handleRowClick = (event, row) => { + console.log("RowClick event...", row); + }; + + render() { + const [version, theme] = getDemoVersion(); + const columns = [ + { + title: "VPN Name", + width: 160, + allowSort: false, + key: "hideV" + }, + { + title: "State", + render: cell => { + if (cell === 'TO BE') { + return ( +
+ TO BE + {' '} + TO BE +
+ ); + } + return ( +
+ Active + {' '} + Active +
+ ); + }, + ellipsis: true, + width: 230, + sort: "asc", + getCompareValue: v => v.age, + key: "hideX" + }, + { + title: "Site", + RenderType: Table.ColumnRenderType.TEXT, + ellipsis: true, + selected: true, + key: "hideY" + }, + { + title: "Alarm", + RenderType: Table.ColumnRenderType.TEXT, + ellipsis: true, + key: "hideZ" + } + ]; + const rows = []; + rows.push({ + hideV: "R&D VPN2 YHHHHHHHHHHHHHHHHHHHHHHHHH", + hideX: "TO BE", + hideY: "3", + hideZ: "ICMP Echo", + hideM: "ICMP Echo" + }); + rows.push({ + hideV: "Shop Storage", + hideX: "Active", + hideY: "3", + hideZ: "ICMP Echo XXXXXXXXXXXXXkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk" + }); + rows.push({ + hideV: "IT Link XXXXXXXXXXXXXkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk bbb", + hideX: "TO BE", + hideY: "7", + hideZ: "ICMP Echo" + }); + rows.push({ + hideV: "R&D VPN1", + hideX: "Active", + hideY: "3", + hideZ: "ICMP Echo" + }); + rows.push({ + hideV: "R&D VPN6", + hideX: "Active", + hideY: "5", + hideZ: "ICMP Echo" + }); + rows.push({ + hideV: "R&D VPN2", + hideX: "TO BE", + hideY: "7", + hideZ: "ICMP Echo" + }); + + return ( + // 【重要】业务中使用当前组件不需要添加引用ConfigProvider组件的代码(ConfigProvider是全局组件,当前demo引用ConfigProvider仅用作ICT 3.0 组件样式演示使用) + + +

+ This demo takes row data as an array of objects(against the above demo which takes array of arrays). +
+ Please note that each column key values should be unique for this data structure to work properly. +

+ +
+ + ); + } +} + +ReactDOM.render(, mountNode); + +``` diff --git a/packages/others/EviewUI-docs/Table/demo/basic.md b/packages/others/EviewUI-docs/Table/demo/basic.md new file mode 100644 index 00000000..36f703bc --- /dev/null +++ b/packages/others/EviewUI-docs/Table/demo/basic.md @@ -0,0 +1,171 @@ +--- +order: 0 +title: + zh-CN: 基本属性设置 + en-US: Basic Setting +--- + +## zh-CN + + + +## en-US + + + +```jsx +import Table from 'eview-ui/Table'; +import img1 from '@images/table_1'; +import img2 from '@images/table_2'; +import ConfigProvider from 'eview-ui/ConfigProvider'; +import { getDemoVersion } from 'eview-ui/ThemeProvider'; + +const rows = []; +rows.push(['R&D VPN2', 'TO BE', 3, 'ICMP Echo']); +rows.push(['Shop Storage', 'Active', 3, 'ICMP Echo']); +rows.push(['IT Link', 'Active', 7, 'Critical']); +rows.push(['R&D VPN1', 'Active', 3, 'Major']); +rows.push(['R&D VPN6', 'TO BE', 5, 'ICMP Echo']); + +const childTableRowCheckRecord = {}; +export default class TableBasic extends React.Component { + + state = { + checkedRows: [] + }; + handleHeaderCheck = (row, checkedRows, e) => { + console.log("header checked...") + }; + handleRowCheckForChildTable = (selects, curParentRowIndex) => { + childTableRowCheckRecord[curParentRowIndex] = selects; + }; + + handleRowExpend = (row) => { + let columns = [ + { + title: 'VPN Name', + width: 300, + key: 'col_1', + }, + { + title: 'State', + width: 300, + key: 'col_2', + }, + { + title: 'Site', + width: 300, + key: 'col_3', + }, + { + title: 'Alarm', + allowSort: false, + key: 'col_4', + }, + ]; + const rowsdata = []; + + for (let i = 0; i < 5; i++) { + rowsdata.push([`R&D VPN2${i}`, 'Active', i, 'ICMP Echo']); + } + return (
+
this.handleRowCheckForChildTable(rows, row.rowIndex)} + ref={innerTable => { this.innerTable = innerTable; }} />); + } + handleItemClick1 = (item) => { + let res = []; + if (item.value === 1) { + rows.forEach((_, index) => res.push(index)); + } else if (item.value === 2) { + rows.forEach((_, index) => { + (index + 1) % 2 !== 0 && res.push(index); + }); + } else if (item.value === 3) { + rows.forEach((_, index) => { + (index + 1) % 2 === 0 && res.push(index); + }); + } + this.setState({ checkedRows: res}) + }; + renderStateColumn(cell) { + if (cell === 'TO BE') { + return ( +
+ TO BE + {' '} + TO BE +
+ ); + } + return ( +
+ Active + {' '} + Active +
+ ); + } + + + render() { + const [version, theme] = getDemoVersion(); + const columns = [ + { + title: 'VPN Name', + key: 'c_1', + id: "col_1", + }, + { + title: 'State', + key: 'c_2', + render: cell => this.renderStateColumn(cell), + allowSort: false, + id: "col_2", + }, + { + title: 'Site', + display: true, // Hide column, + id: "col_3", + key: 'c_3', + }, + { + title: 'Alarm', + key: 'c_4', + }, + ]; + + let options = [{ text: "Select All Data", value: 1 }, + { text: "Select Odd Rows", value: 2 }, + { text: "Select Even Rows", value: 3 }]; + + return ( + // 【重要】业务中使用当前组件不需要添加引用ConfigProvider组件的代码(ConfigProvider是全局组件,当前demo引用ConfigProvider仅用作ICT 3.0 组件样式演示使用) + +
+ + ); + } +} + +ReactDOM.render(, mountNode); + +``` diff --git a/packages/others/EviewUI-docs/Table/demo/basic_list.md b/packages/others/EviewUI-docs/Table/demo/basic_list.md new file mode 100644 index 00000000..e6552716 --- /dev/null +++ b/packages/others/EviewUI-docs/Table/demo/basic_list.md @@ -0,0 +1,281 @@ +--- +order: 5 +title: + zh-CN: 基本属性设置(list) + en-US: Table Paging (list default) with Fixed Column' +--- + +## zh-CN + + + +## en-US + + + +```jsx +import Table from 'eview-ui/Table'; +import Button from 'eview-ui/Button'; +import DivMessage from 'eview-ui/DivMessage'; +import ConfigProvider from 'eview-ui/ConfigProvider'; +import { getDemoVersion } from 'eview-ui/ThemeProvider'; + +export default class TableMultiCheck extends React.Component { + + handlePaging = (currentPage) => { + let checkedRows = this.table1.getCheckedRowsIndexes(); + let start = (this.state.currentPage - 1) * this.state.pageSize; + //选中 + for (let position = start; position < start + this.state.pageSize; position++) { + let rowId = position - start; + if (checkedRows.indexOf(rowId) != -1) { + this.state.rows[position].check = true; + } else { + this.state.rows[position].check = false; + } + } + this.setState({currentPage}); + }; + + handlePageSize = (pageSize) => { + + let checkedRows = this.table1.getCheckedRowsIndexes(); + let start = (this.state.currentPage - 1) * this.state.pageSize; + //选中 + for (let position = start; position < start + this.state.pageSize; position++) { + let rowId = position - start; + if (checkedRows.indexOf(rowId) != -1) { + this.state.rows[position].check = true; + } else { + this.state.rows[position].check = false; + } + } + this.setState({pageSize}); + }; + + onFilterOkClick = (leftItems, rightItems) => { + console.log("leftItems:", leftItems); + console.log("rightItems:", rightItems); + }; + + handleRowCHeckClick = (row, checkedRows, e) => { + let start = (this.state.currentPage - 1) * this.state.pageSize; + let position = start + row.id; + //选中 + if (checkedRows.indexOf(row.id) != -1) { + this.state.rows[position].check = true; + } else { + this.state.rows[position].check = false; + } + }; + + onHeaderClick = (checkedRowsRef) => { + console.log("call back"); + let start = (this.state.currentPage - 1) * this.state.pageSize; + let toIndex = this.state.currentPage * this.state.pageSize; + + if (toIndex > this.state.recordCount) { + toIndex = this.state.recordCount; + } + for (let i = start; i < toIndex; i++) { + //去勾选 + if (checkedRowsRef.length == 0) { + this.state.rows[i].check = false; + } else { + this.state.rows[i].check = true; + } + } + }; + + onrowClick = (row, e) => { + let checkedRows = this.table1.getCheckedRowsIndexes(); + let start = (this.state.currentPage - 1) * this.state.pageSize; + let position = start + row.id; + if (this.rowClickFlag) { + //选中 + if (checkedRows.indexOf(row.id) != -1) { + this.state.rows[position].check = false; + } else { + this.state.rows[position].check = true; + } + this.setState({selectedRowIndex: row.id}); + } + }; + + handleOnMouseUpOnRowForDrag = (startRow, endRow, checkedRows, e) => { + console.log("check rows: " + checkedRows); + console.log("start row: " + startRow); + console.log("end row: " + endRow); + }; + + constructor(props, context) { + super(props); + + let columns = [ + { + title: 'VPN Name', + width: 300, + freezeCol: true, + key: 'col_1', + }, + { + title: 'State', + width: 300, + key: 'col_2', + }, + { + title: 'Site', + width: 300, + key: 'col_3', + }, + { + title: 'Alarm', + allowSort: false, + freezeCol: true, + key: 'col_4', + }, + ]; + + const rows = []; + for (let i = 0; i < 100; i++) { + rows.push([`R&D VPN2${i}`, 'Active', i, 'ICMP Echo']); + } + + this.state = { + columns: columns, + rows: rows, + currentPage: 1, + pageSize: 10, + recordCount: 100, + msg: '', + slidingMultipleSelected: false, + selectedRowIndex: undefined + }; + + this.rowClickFlag = false; + } + + handleGetCheckedRow = () => { + const rows = this.table1.getCheckedRowsData(); + let checkedRows = this.table1.getCheckedRowsIndexes(); + let start = (this.state.currentPage - 1) * this.state.pageSize; + //选中 + for (let position = start; position < start + this.state.pageSize; position++) { + let rowId = position - start; + if (checkedRows.indexOf(rowId) != -1) { + this.state.rows[position].check = true; + } else { + this.state.rows[position].check = false; + } + } + this.setState({ + msg: ( +
+ GetCheckedRowsData: +
+ {rows + .map(row => `[${row.map(v => v.toString()).join(',')}]`) + .join(',')} +
+ ), + }); + }; + handleRowTrigerCHeckBox = () => { + this.rowClickFlag = !this.rowClickFlag; + }; + handleMouseMoveTrigerCHeckBox = () => { + if (this.state.slidingMultipleSelected) { + this.setState({slidingMultipleSelected: false}); + } else { + this.setState({slidingMultipleSelected: true}); + } + let checkedRows = this.table1.getCheckedRowsIndexes(); + let start = (this.state.currentPage - 1) * this.state.pageSize; + //选中 + for (let position = start; position < start + this.state.pageSize; position++) { + let rowId = position - start; + if (checkedRows.indexOf(rowId) != -1) { + this.state.rows[position].check = true; + } else { + this.state.rows[position].check = false; + } + } + }; + onHeaderColumnSortFunc = (e, sort) => { + console.log("sort type: " + sort); + }; + + render() { + const [version, theme] = getDemoVersion(); + let buttonStyle = {marginRight: "5px"}; + const rowsdata = []; + let toIndex = this.state.currentPage * this.state.pageSize; + + if (toIndex > this.state.recordCount) { + toIndex = this.state.recordCount; + } + + let start = (this.state.currentPage - 1) * this.state.pageSize; + + if (start > toIndex) { + start = toIndex - this.state.pageSize; + this.setState({currentPage: this.state.recordCount / this.state.pageSize}); + } + + let checkedRows = []; + for (let i = start; i < toIndex; i++) { + rowsdata.push(this.state.rows[i]); + if (this.state.rows[i].check) { + checkedRows.push(i - start); + } + } + return ( + // 【重要】业务中使用当前组件不需要添加引用ConfigProvider组件的代码(ConfigProvider是全局组件,当前demo引用ConfigProvider仅用作ICT 3.0 组件样式演示使用) + +
+
+
+
{ + this.table1 = table1; + }} + /> + + +
+ + + ); + } +} + +ReactDOM.render(, mountNode); + +``` diff --git a/packages/others/EviewUI-docs/Table/demo/basic_select.md b/packages/others/EviewUI-docs/Table/demo/basic_select.md new file mode 100644 index 00000000..7d0ed601 --- /dev/null +++ b/packages/others/EviewUI-docs/Table/demo/basic_select.md @@ -0,0 +1,119 @@ +--- +order: 6 +title: + zh-CN: 基本属性设置(select) + en-US: Table Paging (select) +--- + +## zh-CN + + + +## en-US + + + +```jsx +import Table from 'eview-ui/Table'; +import img1 from '@images/table_1'; +import img2 from '@images/table_2'; +import ConfigProvider from 'eview-ui/ConfigProvider'; +import { getDemoVersion } from 'eview-ui/ThemeProvider'; +export default class TablePaging extends React.Component { + state = { + currentPage: 1, + pageSize: 10, + recordCount: 100, + }; + + handlePaging = (currentPage) => { + this.setState({ currentPage }); + }; + + handlePageSize = (pageSize) => { + this.setState({ pageSize }); + }; + + render() { + const [version, theme] = getDemoVersion(); + const columns = [ + { + title: 'VPN Name', + width: '25%', + enableRowMoveUpDown: true, + key: 'col_1', + }, + { + title: 'State', + width: '25%', + key: 'col_2', + render: cell => { + if (cell === 'TO BE') { + return ( +
+ TO BE + {' '} + TO BE +
+ ); + } + return ( +
+ Active + {' '} + Active +
+ ); + }, + allowSort: false, + }, + { + title: 'Site', + width: '25%', + key: 'col_3', + }, + { + title: 'Alarm', + width: '25%', + key: 'col_4', + }, + ]; + const rows = []; + let toIndex = this.state.currentPage * this.state.pageSize; + if (toIndex > this.state.recordCount) { + toIndex = this.state.recordCount; + } + for (let i = (this.state.currentPage - 1) * this.state.pageSize; i < toIndex; i++) { + rows.push([`R&D VPN2${i}`, 'Active', i, 'ICMP Echo']); + } + return ( + // 【重要】业务中使用当前组件不需要添加引用ConfigProvider组件的代码(ConfigProvider是全局组件,当前demo引用ConfigProvider仅用作ICT 3.0 组件样式演示使用) + +
+
+ + + ); + } +} + +ReactDOM.render(, mountNode); +``` diff --git a/packages/others/EviewUI-docs/Table/demo/className&Focus.md b/packages/others/EviewUI-docs/Table/demo/className&Focus.md new file mode 100644 index 00000000..e15196d8 --- /dev/null +++ b/packages/others/EviewUI-docs/Table/demo/className&Focus.md @@ -0,0 +1,409 @@ +--- +order: 2 +title: + zh-CN: 基本属性设置 + en-US: TableCell ClassName Update and set Focus to column +--- + +## zh-CN + +TableCell ClassName Update and set Focus to column + +## en-US + + + +```jsx +import Table from 'eview-ui/Table'; +import Dialog from 'eview-ui/Dialog'; +import Select from 'eview-ui/Select'; +import Button from 'eview-ui/Button'; +import PopUpMenu from 'eview-ui/PopUpMenu'; +import PropTypes from 'prop-types'; +import ReactDOM from 'react-dom'; +import ConfigProvider from 'eview-ui/ConfigProvider'; +import { getDemoVersion } from 'eview-ui/ThemeProvider'; + +const events = { + once(el, type, callback) { + const typeArray = type ? type.split(' ') : []; + const recursiveFunction = (event) => { + event.target.removeEventListener(event.type, recursiveFunction); + return callback(event); + }; + + for (let i = typeArray.length - 1; i >= 0; i--) { + this.on(el, typeArray[i], recursiveFunction); + } + }, + + on(el, type, callback) { + if (el.addEventListener) { + el.addEventListener(type, callback); + } else { + // IE8+ Support + el.attachEvent(`on${type}`, () => { + callback.call(el); + }); + } + }, + + off(el, type, callback) { + if (el.removeEventListener) { + el.removeEventListener(type, callback); + } else { + // IE8+ Support + el.detachEvent(`on${type}`, callback); + } + }, + + isKeyboard(event) { + return [ + 'keydown', + 'keypress', + 'keyup', + ].indexOf(event.type) !== -1; + }, +}; + + +const isDescendant = (el, target) => { + if (target !== null) { + return el === target || isDescendant(el, target.parentNode); + } + return false; +}; + +const bind = (eventTypes, callback) => eventTypes.forEach((event) => events.on(document, event, callback)); +const unbind = (eventTypes, callback) => eventTypes.forEach((event) => events.off(document, event, callback)); + +const bindOnwindow = (eventTypes, callback) => eventTypes.forEach((event) => events.on(window, event, callback)); +const unbindOnwindow = (eventTypes, callback) => eventTypes.forEach((event) => events.off(window, event, callback)); + +class ClickAwayListener extends React.Component { + static propTypes = { + children: PropTypes.element, + onClickAway: PropTypes.func, + eventTypes: PropTypes.array, + eventTypesOnWindow: PropTypes.array, + }; + + static defaultProps = { + eventTypes: ['mousedown'], + eventTypesOnWindow: [], + }; + + + componentDidMount() { + this.isCurrentlyMounted = true; + if (this.props.onClickAway) { + bind(this.props.eventTypes, this.handleClickAway); + bindOnwindow(this.props.eventTypesOnWindow, this.handleClickAway); + } + } + + componentDidUpdate(prevProps) { + if (prevProps.onClickAway !== this.props.onClickAway) { + unbind(this.props.eventTypes, this.handleClickAway); + unbindOnwindow(this.props.eventTypesOnWindow, this.handleClickAway); + if (this.props.onClickAway) { + bind(this.props.eventTypes, this.handleClickAway); + bindOnwindow(this.props.eventTypesOnWindow, this.handleClickAway); + } + } + } + + componentWillUnmount() { + this.isCurrentlyMounted = false; + unbind(this.props.eventTypes, this.handleClickAway); + unbindOnwindow(this.props.eventTypesOnWindow, this.handleClickAway); + } + + isWindow(obj) { + return typeof obj.closed !== 'undefined'; + } + + handleClickAway = (event) => { + + if (event.defaultPrevented) { + return; + } + + // IE11 support, which trigger the handleClickAway even after the unbind + if (this.isCurrentlyMounted) { + + if (this.isWindow(event.target)) { + this.props.onClickAway(event); + return; + } + const el = ReactDOM.findDOMNode(this); + if (document.documentElement.contains(event.target) && !isDescendant(el, event.target)) { + this.props.onClickAway(event); + } + } + }; + + render() { + return this.props.children; + } +} + +const columns = [ + { + title: 'VPN Name', + dataType: Table.ColumnRenderType.TEXT_FIELD, + key: 'VPN_ID', + width: '120', + customSort: true, + render: cell => { + return
{cell.value}
; + }, + }, + { + title: 'Site', + dataType: Table.ColumnRenderType.TEXT_FIELD, + key: 'Site_ID', + width: '120', + }, + { + title: 'Alarm', + dataType: Table.ColumnRenderType.TEXT_FIELD, + key: 'Alarm_ID', + width: '120', + }, + { + title: 'Error', + dataType: Table.ColumnRenderType.TEXT_FIELD, + key: 'Error_ID', + width: '120', + }, + { + title: 'Information', + dataType: Table.ColumnRenderType.TEXT_FIELD, + key: 'Information_ID', + width: '120', + }, + { + title: 'Warn', + dataType: Table.ColumnRenderType.TEXT_FIELD, + key: 'Warn_ID', + width: '120', + }, + { + title: 'CreateTime', + dataType: Table.ColumnRenderType.TEXT_FIELD, + key: 'CreateTime_ID', + width: '120', + }, + { + title: 'DeleteTime', + dataType: Table.ColumnRenderType.TEXT_FIELD, + key: 'DeleteTime_ID', + width: '220', + }, + { + title: 'ModifyTime', + dataType: Table.ColumnRenderType.TEXT_FIELD, + key: 'ModifyTime_ID', + width: '220', + }, + { + title: 'MaxVal', + dataType: Table.ColumnRenderType.TEXT_FIELD, + key: 'MaxVal_ID', + width: '240', + }, + { + title: 'MinVal', + dataType: Table.ColumnRenderType.TEXT_FIELD, + key: 'MinVal_ID', + width: '240', + }, + { + title: 'ClearenceMaxval', + dataType: Table.ColumnRenderType.TEXT_FIELD, + key: 'ClearenceMaxval_ID', + width: '240', + }, + { + title: 'ClearenceMinval', + dataType: Table.ColumnRenderType.TEXT_FIELD, + key: 'ClearenceMinval_ID', + width: '240', + }, + { + title: 'ThresholdMaxVal', + dataType: Table.ColumnRenderType.TEXT_FIELD, + key: 'ThresholdMaxVal_ID', + width: '240', + }, + { + title: 'ThresholdMinVal', + dataType: Table.ColumnRenderType.TEXT_FIELD, + key: 'ThresholdMinVal_ID', + width: '240', + }, + { + title: 'Remark', + dataType: Table.ColumnRenderType.TEXT_FIELD, + key: 'Remark_ID', + width: '200', + }, + +]; + +export default class TableCellUpdate extends React.Component { + constructor(props) { + super(props); + this.state = { + columns:[], + } + } + componentDidMount(){ + setTimeout(()=>{ + this.setState({columns:[...columns]}); // 模拟接口请求columns,初始值columns为空 ,渲染子table组件 + }) + } + + render() { + return + } +} + +class MainTable extends React.Component { + constructor(props) { + super(props); + this.selectedName = ''; + } + state = { + isMenuOpen: false, + X: 100, + Y: 100, + offset: { + X: 100, + Y: 100 + }, + parentId: "", + selectOptions: [], + columnName: '', + isOpen: false, + value: undefined, + } + + handleCustomSort = (key, aValue, bValue) => { + console.log("handleCustomSort: ", key, aValue, bValue); + if(typeof(aValue) === "object") { + aValue = aValue.value; + } + if(typeof(bValue) === "object") { + bValue = bValue.value; + } + if (aValue > bValue) { + return -1; + } else if (aValue < bValue) { + return 1; + } + return 0; + }; + + onRowRightClick = (e, cbData) => { + console.log("Table onRowRightClick cbData : ", cbData, e); + + this.setState({ + isMenuOpen: true, + X: e.pageX, + Y: e.pageY, + offset: { + X: e.offsetX, Y: e.offsetY + }, + parentId: cbData.id, + columnName: this.selectedName, + }) + } + + handleMenuClick = (evt) => { + console.log("Popup menu onClick : ", evt); + } + handleToSetFocus = (e) => { + let columnsIfo = this.props.columns; + let columnOptions = []; + for (let i = 0; i < columnsIfo.length; i++) { + columnOptions.push({ text: columnsIfo[i].title, value: i + 1, key: { i } }) + } + this.setState({ iframeOpen: true, selectOptions: columnOptions, isMenuOpen: false }); + } + hanleIframeClose = (e) => { + this.setState({ iframeOpen: false, isMenuOpen: false }); + } + handleSelectChange = (value, oldValue, text, oldText) => { + this.selectedName = text; + } + handleClickOkButton = (e) => { + + if (this.table) { + this.table.setScrollPositionToColumn(this.selectedName); + } + this.setState({ iframeOpen: false, isMenuOpen: false }); + + } + + handleCellClick = (cell, row, e) => { + const cellValue = cell.value; + this.setState({ isOpen: true, value: cellValue instanceof Object ? cellValue.value : cellValue }); + } + + handleClick = ()=>{ + this.setState({isOpen:false}); + } + + render() { + + const [version, theme] = getDemoVersion(); + const rows = []; + rows.push([{ value: "AV&Pn", cellClassName: 'eui_cell_table_bgColor0', key: '0' }, '3', 'ICMP Echo', '1', 'info', 'warn', '08/07/2019', '08/07/2019', '08/07/2019', 1000, 0, 100, 0, 50, 20, "Remark"]); + rows.push([{ value: "Shop Storage", cellClassName: 'eui_cell_table_bgColor1', key: '1' }, '3', 'ICMP Echo ', '1', 'info', 'warn', '08/07/2019', '08/07/2019', '08/07/2019', 1000, 0, 100, 0, 50, 20, "Remark"]); + rows.push([{ value: "ITLink", cellClassName: 'eui_cell_table_bgColor2', key: '2' }, '7', 'ICMP Echo', '1', 'info', 'warn', '08/07/2019', '08/07/2019', '08/07/2019', 1000, 0, 100, 0, 50, 20, "Remark"]); + rows.push([{ value: "R&D VPN4", cellClassName: 'eui_cell_table_bgColor3', key: '3' }, '3', 'ICMP Echo', '1', 'info', 'warn', '08/07/2019', '08/07/2019', '08/07/2019', 1000, 0, 100, 0, 50, 20, "Remark"]); + rows.push([{ value: "R&D VPN6", cellClassName: 'eui_cell_table_bgColor4', key: '4' }, '5', 'ICMP Echo', '1', 'info', 'warn', '08/07/2019', '08/07/2019', '08/07/2019', 1000, 0, 100, 0, 50, 20, "Remark"]); + rows.push([{ value: "R&D VPN2", cellClassName: 'eui_cell_table_bgColor2', key: '5' }, '7', 'ICMP Echo', '1', 'info', 'warn', '08/07/2019', '08/07/2019', '08/07/2019', 1000, 0, 100, 0, 50, 20, "Remark"]); + + let PopUpMenuOptions = [ + { + text: "FocusToSelectedColumn", serialno: 1, onClick: this.handleToSetFocus, + }, + + ]; + + return ( + +
{ this.table = table; }} + onCellClick={this.handleCellClick} + key={this.props.columns} + /> + + +
{ this.table = table; }} + /> + + ); + } +} + +ReactDOM.render(, mountNode); + +``` diff --git a/packages/others/EviewUI-docs/Table/demo/columnEdit.md b/packages/others/EviewUI-docs/Table/demo/columnEdit.md new file mode 100644 index 00000000..222b58aa --- /dev/null +++ b/packages/others/EviewUI-docs/Table/demo/columnEdit.md @@ -0,0 +1,509 @@ +--- +order: 7 +title: + zh-CN: 开启列编辑 + en-US: Column Edit +--- + +## zh-CN + + + +## en-US + + + +```jsx +import Table from 'eview-ui/Table'; +import Button from 'eview-ui/Button'; +import DivMessage from 'eview-ui/DivMessage'; +import ConfigProvider from 'eview-ui/ConfigProvider'; +import { getDemoVersion } from 'eview-ui/ThemeProvider'; + +import img1 from '@images/table_1'; +import img2 from '@images/table_2'; + +let clientTimezoneRule = (year, id) => { + + let ruleForYear = { + dstEndTime: "2017-10-29 04:00:00", + dstStartTime: "2017-03-26 03:00:00", + endDuration: "-3600", + startDuration: "3600" + } + return ruleForYear; +} + +let onEnterPress = () => { + console.log("On Enter key press CallBack!!"); +} + +const optionStyle = { + items: 2 +}; +const customProps = { + optionStyle: optionStyle, +}; +const columns = [ + { + title: 'VPN data Name', + titleTipShow: 'never', + renderType: Table.ColumnRenderType.TEXT_FIELD, + width: 150, + key: 'vpndata', + customSort: true, + options: { isFocus: true }, + tipFormatter: (v) => { + console.log("hello: ", v); + return ''; + } + }, + { + title: 'SelectSite', + titleTipShow: 'always', + titleTipData: "Custom Title for this header", + renderType: Table.ColumnRenderType.SELECT, + options: [ + { text: 'China', value: 1 }, + { text: 'UK', value: 2 }, + { text: 'USA', value: 3 }, + ], + width: 100, + isShowPopup: true, + key: 'site', + customProps: customProps, + render: (v, row, options, rowdata) => { + if (v === 1) { + return 'China'; + } else if (v === 2) { + return 'UK'; + } + else if (v === 3) { + return 'USA'; + } + return 'Others'; + }, + tipFormatter: (v) => { + console.log("v: ", v); + if (v === 1) { + return 'China'; + } else if (v === 2) { + return 'UK'; + } + else if (v === 3) { + return 'USA'; + } + return 'Others'; + } + }, + + { + title: 'Time', + renderType: Table.ColumnRenderType.TIME_SELECTOR, + width: 200, + render: v => { + let renderVal = ''; + if (v && v.length == 3) { + renderVal = v[0] + ':' + v[1] + ':' + v[2]; + } + if (v && v.length == 2) { + renderVal = v[0] + ':' + v[1]; + } + return renderVal; + }, + options: { format: 'hh:mm:ss' }, + key: 'time' + }, + { + title: 'gender', + width: 150, + renderType: Table.ColumnRenderType.RADIO_GROUP, + render: v => { + if (v === 1) { + return 'Male'; + } else if (v === 0) { + return 'Female'; + } + return 'Others'; + }, + options: [ + { text: 'Male', value: 1 }, + { text: 'Female', value: 0 }, + { text: 'Others', value: 2 }, + ], + key: 'gender' + }, + { + title: 'Hobbies', + width: 200, + renderType: Table.ColumnRenderType.CHECK_BOX_GROUP, + render: v => { + if (v && v.length) { + //Conctruct the value to be displayed + var value = ''; + for (var i = 0; i < v.length; i++) { + if (v[i] === 1) { + value = value + 'Singing'; + } else if (v[i] === 2) { + value = value + 'Swimming'; + } + else if (v[i] === 3) { + value = value + 'Movies'; + } + else if (v[i] === 4) { + value = value + 'Play'; + } + value = value + ' '; + } + return value; + } + return ''; + }, + options: [ + { text: 'Singing', value: 1 }, + { text: 'Swimming', value: 2 }, + { text: 'Movies', value: 3 }, + { text: 'Play', value: 4 }, + ], + + key: 'hobbies' + }, + { + title: 'Stamina', + width: 150, + options: { + format: 'percent', + }, + customSort: true + }, + { + title: 'Acitve', + width: 100, + renderType: Table.ColumnRenderType.CHECK_BOX, + options: { + label: 'Acitve', + }, + render: v => { + if (v) { + return 'Active'; + } + return 'DeActive'; + }, + }, + { + title: 'InputSelectSite', + width: 200, + renderType: Table.ColumnRenderType.INPUT_SELECT, + options: [ + { text: 'China', value: 1 }, + { text: 'UK', value: 2 }, + { text: 'USA', value: 3 }, + ], + onEnterCallBack: onEnterPress, + key: 'inputsite', + render: v => { + if (v === 1) { + return 'China'; + } else if (v === 2) { + return 'UK'; + } + else if (v === 3) { + return 'USA'; + } + return 'Others'; + }, + }, + { + + title: 'Date', + renderType: Table.ColumnRenderType.DATE_PICKER, + width: 200, + options: { type: 'datetime', format: 'yyyy-MM-dd HH:mm:ss', callBack: clientTimezoneRule }, + render: (value, rowData, options, row) => { + return options ? options.updateValue : value ? typeof value == 'string' ? value : value.toDateString() : ""; + }, + key: 'date' + + }, +]; + +var rows = []; +rows.push(['R&D VPN2', 1, [10, 20, 20], 1, [1, 2], 12, true, 3, '2017-10-11 11:57:11']); +rows.push(['Shop Storage', 2, [10, 20, 20], 1, [4], 28, true, 3, '2017-10-11 11:57:11']); +rows.push(['IT Link', 3, [10, 20, 20], 1, [3, 4], 97, false, 2, '2017-10-11 11:57:11']); +rows.push(['Long text example Long text example Long text example Long text example', 3, [10, 20, 20], 0, [2, 3], 66, true, 1, '2017-10-11 11:57:11']); +rows.push(['R&D VPN6', 1, [10, 20, 20], 0, [2], 89, false, 1, '2017-10-11 11:57:11']); +rows.push(['R&D VPN2', 2, [10, 20, 20], 0, [3], 91, false, 2, '2017-10-11 11:57:11']); + +const cellstyl = { + 0: { + 'hobbies': 'testcellgreen', + 'site': 'testcellgreen', + }, + 1: { + 'hobbies': 'testcellgreen', + 'site': 'testcellblue', + 'gender': 'testcellpink' + }, + 2: { + 'hobbies': 'testcellgreen', + 'site': 'testcellblue', + }, + 3: { + 'hobbies': 'testcellgreen', + 'site': 'testcellred', + }, + 4: { + 'hobbies': 'testcellgreen', + 'site': 'testcellblue', + }, + 5: { + 'hobbies': 'testcellgreen', + 'site': 'testcellblue', + }, +}; + + + +export default class TableEdit extends React.Component { + + constructor(props) { + super(props); + this.state = { + msg: null, + showEmptyImage: true, + disableRowIds: [], + checkType: "multi", + selectedIndex: [3] + }; + } + + handleCellEdit = (old, newVal, cell, row, e) => { + console.log(`Editing the cell value ... Old Value:- ${old}, New Value:- ${newVal}, Edited Cell:- ${cell}, Edited Row:- ${row}`); + } + + handleEditingCellBlur = (cell, row) => { + console.log('handleEditingCellBlur .. ', cell, row); + } + + handleRowCheck = (row, data) => { + this.setState({ checkedRows: data , isRequiredToUpdateColumns: true}) + /* Get the state and order of the table save */ + console.log(this.table.state.columns) + }; + + handleEditClick = () => { + this.table.setRowEditable(2); + }; + + hanldeChangeLastTwoColumns = () => { + rows = [['R&D VPN2', 1, [10, 20, 20], 1, [1, 2], 12, true, '2017-10-11 11:57:11', 3]]; + this.setState({ selectedIndex: [2]}) + } + + handleEditOtherOneClick = () => { + this.table.setRowEditable(4); + }; + + handleClearEdit = () => { + this.table.setRowEditable(); + }; + + handleGetRow = () => { + const row = this.table.getEditData(); + if (!row) { + this.setState({ + msg: ( +
+ getEditData:
+ null +
+ ), + }); + return; + } + this.setState({ + msg: ( +
+ getEditData:
+ [{row.map(v => v.toString()).join(',')}] +
+ ), + }); + }; + + handleGetSelectedRow = () => { + const row = this.table.getSelectedRowData(); + this.setState({ + msg: ( +
+ getSelectedRowData
+ [{row.map(v => v.toString()).join(',')}] +
+ ), + }); + }; + + handleGetAllRow = () => { + const rows = this.table.getDataset(); + this.setState({ + msg: ( +
+ getDataset: +
+ [ +
+ {rows + .map(row => `[${row.map(v => v.toString()).join(',')}]`) + .join(',')} +
+ ] +
+ ), + }); + }; + + handleGetCheckedRow = () => { + const rows = this.table.getCheckedRowsData(); + this.setState({ + msg: ( +
+ getCheckedRowsData: +
+ [ +
+ {rows + .map(row => `[${row.map(v => v.toString()).join(',')}]`) + .join(',')} +
+ ] +
+ ), + }); + }; + + onRowRightClick = (e, row) => { + console.log(row); + } + + handleAutoFit = () => { + this.table.setSizeColumnFit(0); + }; + + onRClick = () => { + this.table.reSetcolumnSize(); + }; + + onEmptyDataClick = () => { + rows = []; + this.setState({ showEmptyImage: true }) + }; + hanldeDisableRows = () => { + this.setState({ disableRowIds: [0, 1, 2], checkedRows: this.table.getCheckedRowsIndexes(), selectedIndex: this.table.getSelectedRowIndex() }); + } + hanldeEnableRows = () => { + this.setState({ disableRowIds: [], checkedRows: this.table.getCheckedRowsIndexes(), selectedIndex: this.table.getSelectedRowIndex() }); + } + + hanldeCheckType = () => { + if (this.state.checkType === "single") { + this.setState({ checkType: "multi" }); + } + else { + this.setState({ checkType: "single" }); + } + } + + onEmptyDataNoImageClick = () => { + rows = []; + this.setState({ showEmptyImage: false }) + }; + + handleCustomSort = (key, aValue, bValue) => { + console.log("handleCustomSort: ", key, aValue, bValue); + if (aValue > bValue) { + return -1; + } else if (aValue < bValue) { + return 1; + } + return 0; + }; + + onColumnSizeChange = (columnD) => { + console.log(columnD); + } + + onDoubleClickHandle = (row, cell, event) => { + console.log("On double click", row, cell, event); + } + + GetColumnOrder = () => { + console.log(this.table.state.columns) + } + + render() { + let buttonStyle = { margin: "2px 2px" }; + const [version, theme] = getDemoVersion(); + return ( + // 【重要】业务中使用当前组件不需要添加引用ConfigProvider组件的代码(ConfigProvider是全局组件,当前demo引用ConfigProvider仅用作ICT 3.0 组件样式演示使用) + +
+
+ +
{ this.table = table; }} + useCustomToolTip={true} + customToolTipStyle={{ maxWidth: '12rem' }} + itemOrderChanger={true} + /> + + {this.state.msg && } + +
+
+ + ); + } +} + +ReactDOM.render(, mountNode); + +``` diff --git a/packages/others/EviewUI-docs/Table/demo/customColumns.md b/packages/others/EviewUI-docs/Table/demo/customColumns.md new file mode 100644 index 00000000..08d7be75 --- /dev/null +++ b/packages/others/EviewUI-docs/Table/demo/customColumns.md @@ -0,0 +1,296 @@ +--- +order: 12 +title: + zh-CN: 列自定义 + en-US: Custom Columns +--- + +## zh-CN + + + +## en-US + + + +```jsx +import Table from 'eview-ui/Table'; +import { TextField, Button, Radio, Select, Checkbox, ButtonMenu, DatePicker, FileUpload, ProgressBar, SearchInput, LinkField, TextArea } from 'eview-ui'; +import createDefaultImg from '@images/create_default'; +import deleteDefaultImg from '@images/delete_default'; +import exportDefaultImg from '@images/export_default'; +import ConfigProvider from 'eview-ui/ConfigProvider'; +import { getDemoVersion } from 'eview-ui/ThemeProvider'; + +export default class TableMultiComponents extends React.Component { + state = { + msg: null, + checkedRows: [], + enableProgress: false, + fileUploadStatus: 'loading', + }; + constructor(props) { + super(props); + this.state = { value: {}, fileUploadStatus: {}, disable: false }; + } + + handleRowCheck = (row, data) => { + this.setState({ checkedRows: data }) + }; + + handleEditClick = () => { + this.table.setRowEditable(2); + }; + + handleEditOtherOneClick = () => { + this.table.setRowEditable(4); + }; + + uploadCallback = (obj) => { + console.log(this.fileupload.getValue()); + if (obj) { + let fileName = obj.data[0].name + setTimeout(() => this.setState(this.getNameAndVal(fileName, 10)), 500); + setTimeout(() => this.setState(this.getNameAndVal(fileName, 40)), 2000); + setTimeout(() => this.setState(this.getNameAndVal(fileName, 100)), 6000); + } + } + + getNameAndVal = (fileName, progress, loadingStatus) => { + + let createVal = { value: {}, fileUploadStatus: {} }; + createVal.value[fileName] = progress; + if (progress < 100 && loadingStatus != 'fail' && this.state.fileUploadStatus[fileName] != 'fail') { + createVal.fileUploadStatus[fileName] = "loading"; + } + else if (progress == 100 && this.state.fileUploadStatus[fileName] != "fail") { + createVal.fileUploadStatus[fileName] = "success"; + } + else if (progress != 100 || this.state.fileUploadStatus[fileName] == 'fail') { + createVal.fileUploadStatus[fileName] = "fail"; + createVal.value[fileName] = 100; + } + return createVal; + } + handleCancelUpload = (event) => { + console.log('cancel CallBack'); + } + + onRowRightClick = (e, row) => { + console.log(row); + } + + render() { + const [version, theme] = getDemoVersion(); + const progressBarParam = { + format: "percent", + current: 10 + }; + const columns = [ + { + title: 'TextField', + renderType: Table.ColumnRenderType.CUSTOM, + width: 200, + key: 'key_1', + align: 'center', + allowSort: true, + display: true, + isMovable: true, + tipFormatter: 'custom_NO_TIP', + }, + + { + title: 'Button', + renderType: Table.ColumnRenderType.CUSTOM, + width: 200, + key: 'key_2', + align: 'center', + allowSort: true, + display: true, + isMovable: true, + tipFormatter: (cellValue) => { + // ???title?????? + return cellValue.props && cellValue.props.text + ? cellValue.props.text + : ''; + }, + }, + { + title: 'Radio', + renderType: Table.ColumnRenderType.CUSTOM, + width: 100, + key: 'key_3', + align: 'center', + allowSort: true, + display: true, + isMovable: true, + tipFormatter: 'custom_NO_TIP', + }, + { + title: 'CheckBox', + renderType: Table.ColumnRenderType.CUSTOM, + width: 100, + key: 'key_4', + align: 'center', + allowSort: true, + display: true, + isMovable: true, + tipFormatter: 'custom_NO_TIP', + }, + { + title: 'ButtonMenu', + renderType: Table.ColumnRenderType.CUSTOM, + width: 200, + key: 'key_5', + align: 'center', + allowSort: true, + display: true, + isMovable: true, + tipFormatter: 'custom_NO_TIP', + }, + { + title: 'DatePicker', + renderType: Table.ColumnRenderType.CUSTOM, + width: 300, + key: 'key_6', + align: 'center', + allowSort: true, + display: true, + isMovable: true, + tipFormatter: 'custom_NO_TIP', + }, + { + title: 'Select', + renderType: Table.ColumnRenderType.CUSTOM, + width: 250, + key: 'key_7', + align: 'center', + allowSort: true, + display: true, + isMovable: true, + tipFormatter: 'custom_NO_TIP', + }, + { + title: 'Upload Single', + renderType: Table.ColumnRenderType.CUSTOM, + width: 600, + key: 'key_8', + align: 'center', + allowSort: true, + display: true, + isMovable: true, + tipFormatter: 'custom_NO_TIP', + }, + { + title: 'ProgressBar', + renderType: Table.ColumnRenderType.CUSTOM, + width: 400, + key: 'key_9', + align: 'center', + allowSort: true, + display: true, + isMovable: true, + tipFormatter: 'custom_NO_TIP', + }, + { + title: 'Search Input', + renderType: Table.ColumnRenderType.CUSTOM, + width: 300, + key: 'key_10', + align: 'center', + allowSort: true, + display: true, + isMovable: true, + tipFormatter: 'custom_NO_TIP', + }, + { + title: 'Link', + renderType: Table.ColumnRenderType.CUSTOM, + width: 300, + key: 'key_11', + align: 'center', + allowSort: true, + display: true, + isMovable: true, + tipFormatter: 'custom_NO_TIP', + }, + { + title: 'TextArea', + renderType: Table.ColumnRenderType.CUSTOM, + width: 300, + key: 'key_12', + align: 'center', + allowSort: true, + display: true, + isMovable: true, + tipFormatter: 'custom_NO_TIP', + }, + + ]; + + let dateStyle = { position: "absolute", margin: "-18px 0px 0px -100px" }; + + const rows = []; + rows.push([ + , +