UNPKG

es-grid-template

Version:

es-grid-template

224 lines (217 loc) 7.27 kB
import { Group } from "becoxy-icons"; import React, { useRef, useState } from "react"; import { Button, Popover } from "antd"; import { Select } from "rc-master-ui"; import styled from "styled-components"; import { customFilterOption } from "../../grid-component/hooks"; const BoxAction = styled.div.withConfig({ displayName: "BoxAction", componentId: "es-grid-template__sc-9e0ekv-0" })(["padding-top:.75rem;display:flex;justify-content:end;gap:10px;.btn-action{background:none !important;border:none !important;&.btn-action-submit{color:#df4318;&:disabled{background-color:#f0f0f0 !important;}&:hover{color:#df4318 !important;}}&:hover{background-color:#f0f0f0 !important;}}"]); export const ColumnsGroup = props => { const { id, tableLocal, columns, columnsGrouped, onSubmit, unClearableLevel, defaultGroupColumns, t } = props; const menuRef = useRef(); const [tempGroup, setTempGroup] = useState([]); const [clicked, setClicked] = useState(false); const rsCol = React.useMemo(() => { return columns.filter(it => it.visible !== false && !tempGroup.includes(it.field) && it.field !== '#' && it.field !== 'selection_column' && it.field !== 'command'); }, [columns, tempGroup]); const options = React.useMemo(() => { return rsCol.map(it => ({ ...it, value: it.field, label: t ? t(it?.columnGroupText ?? it?.headerText) : it?.columnGroupText ?? it?.headerText })); }, [rsCol, t]); // React.useEffect(() => { // if(columnsGrouped) { // setTempGroup([...columnsGrouped]) // } // // }, [!!columnsGrouped]) const onChangeGroupColumns = (option, index) => { // if (option) { // tempGroup[index] = option // } else { // tempGroup.splice(index, 1) // } // setTempGroup([...tempGroup]) const cloneTemp = [...tempGroup]; if (option) { cloneTemp[index] = option; } else { cloneTemp.splice(index, 1); } setTempGroup([...cloneTemp]); }; const handleGroup = () => { // setColumnsGrouped([...tempGroup]) setClicked(false); // const dt = ungroupArray(dataSource) // const rs = groupArrayByColumns(dt, [...tempGroup]) // setResource([...rs]) onSubmit([...tempGroup]); }; const handleClear = () => { // setColumnsGrouped([]) setTempGroup(defaultGroupColumns ? defaultGroupColumns : []); // setIsOpen(false) setClicked(false); // const dt = ungroupArray(dataSource) // const rs = groupArrayByColumns(dt, []) // setResource([...rs]) onSubmit(defaultGroupColumns ? defaultGroupColumns : []); }; const handleClickChange = open => { setClicked(open); if (open) { if (columnsGrouped) { setTempGroup([...columnsGrouped]); } } if (!open) { setTempGroup([]); } }; return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Popover, { placement: 'bottomLeft', content: /*#__PURE__*/React.createElement("div", { style: { minWidth: 250 } }, /*#__PURE__*/React.createElement("div", { ref: menuRef, style: { position: 'relative' } }, /*#__PURE__*/React.createElement("p", { className: 'fw-bold' }, "Nh\xF3m d\u1EEF li\u1EC7u theo c\u1ED9t"), /*#__PURE__*/React.createElement("div", { className: 'mb-1', style: { marginBottom: '1rem' } }, /*#__PURE__*/React.createElement("p", { className: 'm-0', style: { margin: 0 } }, "M\u1EE9c 1"), /*#__PURE__*/React.createElement(Select, { style: { width: '100%' }, showSearch: true // labelInValue={true} // options={columns.filter((it: any) => !tempGroup.includes(it.field))} // options={columns && columns.length > 0 ? options : []} , options: options, value: tempGroup?.[0], onChange: val => onChangeGroupColumns(val, 0), allowClear: !tempGroup?.[1] && !(unClearableLevel && unClearableLevel - 1 >= 0) // fieldNames={{ // value: 'field', // label: 'headerText' // }} , labelRender: labelProps => { const it = columns.find(col => col.field === labelProps.value); return t ? t(it?.columnGroupText ?? it?.headerText) : it?.columnGroupText ?? it?.headerText; }, filterOption: customFilterOption // hideSelectedOptions })), /*#__PURE__*/React.createElement("div", { className: 'mb-1', style: { marginBottom: '1rem' } }, /*#__PURE__*/React.createElement("p", { className: 'm-0', style: { margin: 0 } }, "M\u1EE9c 2"), /*#__PURE__*/React.createElement(Select, { showSearch: true, style: { width: '100%' }, options: options, value: tempGroup?.[1], onChange: val => onChangeGroupColumns(val, 1), allowClear: !tempGroup?.[2] && !(unClearableLevel && unClearableLevel - 2 >= 0) // hideSelectedOptions // fieldNames={{ // value: 'field', // label: 'headerText' // }} , labelRender: labelProps => { const it = columns.find(col => col.field === labelProps.value); return t ? t(it?.columnGroupText ?? it?.headerText) : it?.columnGroupText ?? it?.headerText; }, filterOption: customFilterOption })), /*#__PURE__*/React.createElement("div", { className: 'mb-1', style: { marginBottom: '1rem' } }, /*#__PURE__*/React.createElement("p", { className: 'm-0', style: { margin: 0 } }, "M\u1EE9c 3"), /*#__PURE__*/React.createElement(Select, { style: { width: '100%' }, options: options, showSearch: true, value: tempGroup?.[2], onChange: val => onChangeGroupColumns(val, 2), allowClear: !!tempGroup?.[2] && !(unClearableLevel && unClearableLevel - 3 >= 0) // fieldNames={{ // value: 'field', // label: 'headerText' // }} , labelRender: labelProps => { const it = columns.find(col => col.field === labelProps.value); return t ? t(it?.columnGroupText ?? it?.headerText) : it?.columnGroupText ?? it?.headerText; }, filterOption: customFilterOption }))), /*#__PURE__*/React.createElement(BoxAction, { className: 'px-1' }, /*#__PURE__*/React.createElement(Button // className={classnames('btn-action btn-action-submit', { // // disable: !columns.find((item) => item.visible !== false || item.visible) // })} , { onClick: handleGroup // disabled={!columns.find((item) => item.visible !== false || item.visible)} }, t ? t('Thực hiện') : 'Thực hiện'), /*#__PURE__*/React.createElement(Button, { className: 'btn-action btn-action-cancel', onClick: handleClear }, t ? t('Clear') : 'Clear'))), trigger: "click", open: clicked, onOpenChange: handleClickChange, arrow: false }, /*#__PURE__*/React.createElement(Group, { "data-tooltip-id": `${id}-tooltip-content`, "data-tooltip-content": tableLocal?.GroupData || 'Group Data', fontSize: 18, color: "#555555", style: { cursor: 'pointer' } }))); };