import { Checkbox, Input, Popconfirm, Space, Typography } from 'antd';
import { ConfigProvider, Table } from 'antd5';
import { cloneDeep } from 'lodash';
import { memo, useMemo } from 'react';
import { FormattedMessage } from 'umi';
import CityModal from '../../CityModal';
import ExpandIcon from '../../ExpandIcon';
import PermissionParentShow from '../../PermissionParentShow';
import { leafBuildTree, tree2FlatArray } from '../../utils/array';
import { requestBatchUnbind } from '../api';
import style from './index.less';
const { Text } = Typography;
export interface Feature {
isOptShow?: boolean;
DataSensitiveMap?: any;
DataSensitiveLevelMap?: any;
setOpenObj?: any;
params?: any;
setParams?: any;
setExpandedAll?: any;
expandedAll?: any;
formatMessage?: any;
moment?: any;
appId?: any;
setRenewalParams?: any;
currentUser?: any;
batchParams?: any;
setBatchParams?: any;
data?: any;
permission?: any;
run?: any;
showSelected?: boolean;
}
const FeatureTable = (props: Feature) => {
const {
isOptShow,
DataSensitiveMap,
DataSensitiveLevelMap,
setOpenObj,
params,
setParams,
setExpandedAll,
expandedAll,
formatMessage,
moment,
appId,
setRenewalParams,
currentUser,
batchParams,
setBatchParams,
data,
permission,
run,
showSelected,
} = props;
const { featureTree, featureCityIds } = data || {};
const { featureTree: filterFeatureTree } = permission || {};
const featureTreeColumn = [
{
title: ,
dataIndex: 'name',
width: 300,
// ellipsis: true,
render: (__: any, record: any) => {
const { id, isAllowApply, isBind, name, isReport, type } = record;
const { cityIds } = featureCityIds?.find((v: any) => v.featureId === id) ?? {};
return (
<>
{isAllowApply == 0 && isBind == false
? formatMessage({ id: 'component.PermissionParentShow.unapprovalapply' })
: name}
{isReport === 1 && type === 3 && Array.isArray(cityIds) && Boolean(cityIds.length) && (
String(k))} view />
)}
>
);
},
},
{
title: ,
dataIndex: 'dataSensitive',
ellipsis: true,
render: (__: any, record: any) => {
return (
{DataSensitiveLevelMap[record?.dataSensitive]?.text}
);
},
},
{
title: ,
dataIndex: 'sensitiveLevel',
ellipsis: true,
render: (__: any, record: any) => {
return (
{DataSensitiveMap[record.sensitiveLevel]?.text}
);
},
},
{
title: ,
dataIndex: 'expiredAt',
ellipsis: true,
render: (__: any, record: any) => {
return record.hasOwnProperty('expiredAt') ? (
{record.expiredAt == 0
? formatMessage({ id: 'pages.setting.base.defaultExpirationTime.forever' })
: record.expiredAt < 0
? '-'
: moment().valueOf() < record.expiredAt * 1000
? moment(record.expiredAt * 1000).format('YYYY-MM-DD HH:mm:ss')
: `${moment(record.expiredAt * 1000).format('YYYY-MM-DD HH:mm:ss')}(${formatMessage({
id: 'base.expiredAted',
})})`}
) : null;
},
},
{
title: (
),
dataIndex: 'permissionOption',
fixed: 'right',
hidden: !isOptShow,
render: (__: any, record: any) => [
<>
{record?.isBind ? (
{
try {
const allSettledPromise = requestBatchUnbind(
{ featureTree: [record.id] },
currentUser,
appId,
formatMessage,
);
if (allSettledPromise) {
allSettledPromise.then(() => {
run();
});
}
} catch (error) {}
}}
>
) : null}
{record?.expiredAt < 0 || record?.isAllowApply === 0 || !record?.isBind ? null : (
{
setRenewalParams({ featureTree: [record.id] });
setOpenObj({ open: true, reload: false });
}}
>
)}
>,
],
},
];
const dataSource = useMemo(() => {
const list = filterFeatureTree ?? featureTree ?? [];
if (!showSelected) return list;
const leaf = tree2FlatArray(list)
?.filter((v: any) => v.isBind)
.map((v: any) => v.id);
return leafBuildTree(leaf, list);
}, [featureTree, filterFeatureTree, showSelected]);
if (!data?.featureTree?.length) return null;
return (
{Boolean(isOptShow) && (
{
setParams({ ...params, featureTree: val.target.value });
}}
style={{ width: 200 }}
/>
{
setExpandedAll({ ...expandedAll, featureTreeKey: true });
}}
>
{formatMessage({ id: 'base.expandedall.true' })}
{
setExpandedAll({ ...expandedAll, featureTreeKey: false });
}}
>
{formatMessage({ id: 'base.expandedall.false' })}
)}
{
setBatchParams((key) => {
return { ...key, featureTree: rowKey };
});
},
getCheckboxProps: (record: any) => ({
disabled:
record?.expiredAt < 0 || record?.isAllowApply === 0 || !record?.isBind,
}),
}
: {
columnWidth: 50,
hideSelectAll: true,
renderCell: (checked, record: any) => {
return ;
},
}
}
columns={featureTreeColumn as any}
pagination={false}
expandable={{
expandIcon: (p) => ,
expandedRowKeys: expandedAll?.featureTree ?? [],
onExpand: (expanded, record) => {
const temp = cloneDeep(expandedAll?.featureTree) ?? [];
if (!expanded) {
const arr = temp?.filter((key) => record.id !== key);
setExpandedAll({ ...expandedAll, featureTree: arr });
} else {
temp?.push(record.id);
setExpandedAll({ ...expandedAll, featureTree: temp });
}
},
}}
dataSource={dataSource}
/>
);
};
export default memo(FeatureTable);