160 lines
4.0 KiB
TypeScript
160 lines
4.0 KiB
TypeScript
import React from 'react';
|
|
import BaseIcon from '../BaseIcon';
|
|
import { mdiEye, mdiTrashCan, mdiPencilOutline } from '@mdi/js';
|
|
import axios from 'axios';
|
|
import { GridActionsCellItem, GridRowParams } from '@mui/x-data-grid';
|
|
import ImageField from '../ImageField';
|
|
import { saveFile } from '../../helpers/fileSaver';
|
|
import dataFormatter from '../../helpers/dataFormatter';
|
|
import DataGridMultiSelect from '../DataGridMultiSelect';
|
|
import ListActionsPopover from '../ListActionsPopover';
|
|
|
|
import { hasPermission } from '../../helpers/userPermissions';
|
|
|
|
type Params = (id: string) => void;
|
|
|
|
export const loadColumns = async (
|
|
onDelete: Params,
|
|
entityName: string,
|
|
|
|
user,
|
|
) => {
|
|
async function callOptionsApi(entityName: string) {
|
|
if (!hasPermission(user, 'READ_' + entityName.toUpperCase())) return [];
|
|
|
|
try {
|
|
const data = await axios(`/${entityName}/autocomplete?limit=100`);
|
|
return data.data;
|
|
} catch (error) {
|
|
console.log(error);
|
|
return [];
|
|
}
|
|
}
|
|
|
|
const hasUpdatePermission = hasPermission(user, 'UPDATE_ACCESS_LOGS');
|
|
|
|
return [
|
|
{
|
|
field: 'project',
|
|
headerName: 'Project',
|
|
flex: 1,
|
|
minWidth: 120,
|
|
filterable: false,
|
|
headerClassName: 'datagrid--header',
|
|
cellClassName: 'datagrid--cell',
|
|
|
|
editable: hasUpdatePermission,
|
|
|
|
sortable: false,
|
|
type: 'singleSelect',
|
|
getOptionValue: (value: any) => value?.id,
|
|
getOptionLabel: (value: any) => value?.label,
|
|
valueOptions: await callOptionsApi('projects'),
|
|
valueGetter: (value) => value?.id ?? value,
|
|
},
|
|
|
|
{
|
|
field: 'environment',
|
|
headerName: 'Environment',
|
|
flex: 1,
|
|
minWidth: 120,
|
|
filterable: false,
|
|
headerClassName: 'datagrid--header',
|
|
cellClassName: 'datagrid--cell',
|
|
|
|
editable: hasUpdatePermission,
|
|
},
|
|
|
|
{
|
|
field: 'user',
|
|
headerName: 'User',
|
|
flex: 1,
|
|
minWidth: 120,
|
|
filterable: false,
|
|
headerClassName: 'datagrid--header',
|
|
cellClassName: 'datagrid--cell',
|
|
|
|
editable: hasUpdatePermission,
|
|
|
|
sortable: false,
|
|
type: 'singleSelect',
|
|
getOptionValue: (value: any) => value?.id,
|
|
getOptionLabel: (value: any) => value?.label,
|
|
valueOptions: await callOptionsApi('users'),
|
|
valueGetter: (value) => value?.id ?? value,
|
|
},
|
|
|
|
{
|
|
field: 'path',
|
|
headerName: 'Path',
|
|
flex: 1,
|
|
minWidth: 120,
|
|
filterable: false,
|
|
headerClassName: 'datagrid--header',
|
|
cellClassName: 'datagrid--cell',
|
|
|
|
editable: hasUpdatePermission,
|
|
},
|
|
|
|
{
|
|
field: 'ip_address',
|
|
headerName: 'IPaddress',
|
|
flex: 1,
|
|
minWidth: 120,
|
|
filterable: false,
|
|
headerClassName: 'datagrid--header',
|
|
cellClassName: 'datagrid--cell',
|
|
|
|
editable: hasUpdatePermission,
|
|
},
|
|
|
|
{
|
|
field: 'user_agent',
|
|
headerName: 'Useragent',
|
|
flex: 1,
|
|
minWidth: 120,
|
|
filterable: false,
|
|
headerClassName: 'datagrid--header',
|
|
cellClassName: 'datagrid--cell',
|
|
|
|
editable: hasUpdatePermission,
|
|
},
|
|
|
|
{
|
|
field: 'accessed_at',
|
|
headerName: 'Accessedat',
|
|
flex: 1,
|
|
minWidth: 120,
|
|
filterable: false,
|
|
headerClassName: 'datagrid--header',
|
|
cellClassName: 'datagrid--cell',
|
|
|
|
editable: hasUpdatePermission,
|
|
|
|
type: 'dateTime',
|
|
valueGetter: (_value, row) => new Date(row.accessed_at),
|
|
},
|
|
|
|
{
|
|
field: 'actions',
|
|
type: 'actions',
|
|
minWidth: 30,
|
|
headerClassName: 'datagrid--header',
|
|
cellClassName: 'datagrid--cell',
|
|
getActions: (params: GridRowParams) => {
|
|
return [
|
|
<div key={params?.row?.id}>
|
|
<ListActionsPopover
|
|
onDelete={onDelete}
|
|
itemId={params?.row?.id}
|
|
pathEdit={`/access_logs/access_logs-edit/?id=${params?.row?.id}`}
|
|
pathView={`/access_logs/access_logs-view/?id=${params?.row?.id}`}
|
|
hasUpdatePermission={hasUpdatePermission}
|
|
/>
|
|
</div>,
|
|
];
|
|
},
|
|
},
|
|
];
|
|
};
|