import ThingsFilter from '@/components/shared/ThingFilterModal'; import { DATE_TIME_FORMAT, DEFAULT_PAGE_SIZE, HTTPSTATUS } from '@/constants'; import { apiGetAlarms, apiUnconfirmAlarm, } from '@/services/master/AlarmController'; import { CloseOutlined, DeleteOutlined, FilterOutlined, } from '@ant-design/icons'; import { ActionType, ProColumns, ProTable } from '@ant-design/pro-components'; import { FormattedMessage, useIntl, useModel } from '@umijs/max'; import { Button, Flex, message, Popconfirm, Progress, Tooltip } from 'antd'; import moment from 'moment'; import { useRef, useState } from 'react'; import AlarmDescription from './components/AlarmDescription'; import AlarmFormConfirm from './components/AlarmFormConfirm'; const AlarmPage = () => { const tableRef = useRef(); const [selectedKey, setSelectedKey] = useState(); const [thingFilterVisible, setThingFilterVisible] = useState(false); const [thingFilterDatas, setThingFilterDatas] = useState([]); const intl = useIntl(); const [messageApi, contextHolder] = message.useMessage(); const { initialState } = useModel('@@initialState'); const { currentUserProfile } = initialState || {}; const columns: ProColumns[] = [ { title: intl.formatMessage({ id: 'common.name', defaultMessage: 'Name', }), dataIndex: 'name', key: 'name', copyable: true, }, { title: intl.formatMessage({ id: 'master.alarms.severity', defaultMessage: 'Severity', }), dataIndex: 'level', key: 'level', responsive: ['lg', 'md', 'sm'], filters: true, onFilter: true, valueType: 'select', valueEnum: { 0: { text: intl.formatMessage({ id: 'common.level.normal', defaultMessage: 'Normal', }), status: 'Success', }, 1: { text: intl.formatMessage({ id: 'common.level.warning', defaultMessage: 'Warning', }), status: 'Warning', }, 2: { text: intl.formatMessage({ id: 'common.level.critical', defaultMessage: 'Critical', }), status: 'Error', }, 3: { text: intl.formatMessage({ id: 'common.level.sos', defaultMessage: 'SOS', }), status: 'Error', }, }, }, { title: intl.formatMessage({ id: 'sgw.ship', defaultMessage: 'Source', }), dataIndex: 'thing_name', key: 'thing_name', responsive: ['lg', 'md', 'sm'], ellipsis: true, copyable: true, // render: (dom, row) => { // return ( // // { // const t = row?.thing_type; // const path = `/devices/${row?.thing_id}/${t}`; // history.push({ // pathname: path, // }); // }} // > // {dom} // // // ); // }, // render: (_, item) => { // return {item?.thing_name} // } }, { title: intl.formatMessage({ id: 'master.alarms.occurred_at', defaultMessage: 'Occured time', }), dataIndex: 'time', key: 'time', search: false, render: (_, item) => { return moment.unix(item.time!).format(DATE_TIME_FORMAT); }, }, { title: intl.formatMessage({ id: 'master.alarms.confirmed', defaultMessage: 'Confirmed', }), dataIndex: 'confirmed', responsive: ['lg', 'md'], align: 'center', width: '10%', search: false, render: (_, item) => { return item?.confirmed ? ( ) : null; }, }, ]; return ( <> { console.log('ThingIDs: ', thingIds); setThingFilterDatas(thingIds); tableRef.current?.reload(); }} /> {contextHolder} actionRef={tableRef} rowKey={(record) => `${record.thing_id}_${record.id}`} columns={columns} rowSelection={{ type: 'checkbox', selectedRowKeys: selectedKey ? [selectedKey] : [], onChange: (selectedKeys) => { // Checkbox with max 1 row selection - toggle behavior if (selectedKeys.length === 0) { setSelectedKey(undefined); } else { // Get the key that's different from current selection (the newly clicked row) const newKey = selectedKeys.find((key) => key !== selectedKey); setSelectedKey(newKey ?? selectedKeys[0]); } }, }} size="large" tableAlertRender={({ selectedRows }) => { const alarm = selectedRows[0]; return ; }} options={{ search: false, setting: false, density: false, reload: true, }} toolbar={{ actions: [ ) : ( { if (isReload && tableRef.current) { tableRef.current.reload(); } }} /> )}