import React, { useMemo, useState } from "react";
|
import {
|
List,
|
DatagridConfigurable,
|
SearchInput,
|
TopToolbar,
|
SelectColumnsButton,
|
EditButton,
|
FilterButton,
|
TextField,
|
FunctionField,
|
SelectInput,
|
WrapperField,
|
DeleteButton,
|
useTranslate,
|
} from 'react-admin';
|
import { Box } from '@mui/material';
|
import { styled } from '@mui/material/styles';
|
import HttpAuditRuleCreate from "./HttpAuditRuleCreate";
|
import EmptyData from "@/page/components/EmptyData";
|
import MyCreateButton from "@/page/components/MyCreateButton";
|
import { OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting';
|
|
const StyledDatagrid = styled(DatagridConfigurable)(() => ({
|
'& .RaDatagrid-row': { cursor: 'auto' },
|
'& .opt': { width: 140 },
|
}));
|
|
const HttpAuditRuleList = () => {
|
const [createDialog, setCreateDialog] = useState(false);
|
const translate = useTranslate();
|
|
const filters = useMemo(() => [
|
<SearchInput source="condition" alwaysOn />,
|
<SelectInput
|
source="ruleType"
|
label="table.field.httpAuditRule.ruleTypeLabel"
|
choices={[
|
{ id: 'URI', name: translate('table.field.httpAuditRule.ruleType.URI') },
|
{ id: 'IP', name: translate('table.field.httpAuditRule.ruleType.IP') },
|
{ id: 'REQUEST_BODY', name: translate('table.field.httpAuditRule.ruleType.REQUEST_BODY') },
|
]}
|
/>,
|
<SelectInput
|
source="enabled"
|
label="table.field.httpAuditRule.enabled"
|
choices={[
|
{ id: 1, name: translate('table.field.httpAuditRule.enabledOn') },
|
{ id: 0, name: translate('table.field.httpAuditRule.enabledOff') },
|
]}
|
/>,
|
], [translate]);
|
|
return (
|
<Box display="flex">
|
<List
|
title="menu.httpAuditRule"
|
empty={<EmptyData onClick={() => setCreateDialog(true)} />}
|
filters={filters}
|
sort={{ field: "sortOrder", order: "asc" }}
|
actions={(
|
<TopToolbar>
|
<FilterButton />
|
<MyCreateButton onClick={() => setCreateDialog(true)} />
|
<SelectColumnsButton preferenceKey="httpAuditRule" />
|
</TopToolbar>
|
)}
|
perPage={DEFAULT_PAGE_SIZE}
|
>
|
<StyledDatagrid
|
preferenceKey="httpAuditRule"
|
bulkActionButtons={() => <DeleteButton mutationMode={OPERATE_MODE} />}
|
rowClick={false}
|
>
|
<TextField source="id" label="common.field.id" />
|
<FunctionField
|
source="ruleType"
|
label="table.field.httpAuditRule.ruleTypeLabel"
|
render={(r) => translate(`table.field.httpAuditRule.ruleType.${r.ruleType}`)}
|
/>
|
<FunctionField
|
source="matchMode"
|
label="table.field.httpAuditRule.matchModeLabel"
|
render={(r) => translate(`table.field.httpAuditRule.matchMode.${r.matchMode}`)}
|
/>
|
<TextField source="pattern" label="table.field.httpAuditRule.pattern" />
|
<FunctionField
|
source="direction"
|
label="table.field.httpAuditRule.directionLabel"
|
render={(r) => translate(`table.field.httpAuditRule.direction.${r.direction || 'IN'}`)}
|
/>
|
<FunctionField
|
source="recordAll"
|
label="table.field.httpAuditRule.recordAll"
|
render={(r) => (r.recordAll === 1
|
? translate('table.field.httpAuditRule.recordAllOn')
|
: translate('table.field.httpAuditRule.recordAllOff'))}
|
/>
|
<TextField source="requestMaxChars" label="table.field.httpAuditRule.requestMaxChars" />
|
<TextField source="responseMaxChars" label="table.field.httpAuditRule.responseMaxChars" />
|
<FunctionField
|
source="enabled"
|
label="table.field.httpAuditRule.enabled"
|
render={(r) => (r.enabled === 1
|
? translate('table.field.httpAuditRule.enabledOn')
|
: translate('table.field.httpAuditRule.enabledOff'))}
|
/>
|
<TextField source="sortOrder" label="table.field.httpAuditRule.sortOrder" />
|
<TextField source="remark" label="table.field.httpAuditRule.remark" />
|
<WrapperField cellClassName="opt" label="common.field.opt">
|
<EditButton sx={{ padding: '1px', fontSize: '.75rem' }} />
|
<DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} />
|
</WrapperField>
|
</StyledDatagrid>
|
</List>
|
<HttpAuditRuleCreate open={createDialog} setOpen={setCreateDialog} />
|
</Box>
|
);
|
};
|
|
export default HttpAuditRuleList;
|