217 lines
5.8 KiB
TypeScript
217 lines
5.8 KiB
TypeScript
import React from 'react';
|
||
import BaseIcon from '../BaseIcon';
|
||
import { mdiEye, mdiTrashCan, mdiPencilOutline } from '@mdi/js';
|
||
import axios from 'axios';
|
||
import {
|
||
GridActionsCellItem,
|
||
GridRowParams,
|
||
GridValueGetterParams,
|
||
} 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_EVENT_GUESTS')
|
||
|
||
return [
|
||
|
||
{
|
||
field: 'full_name',
|
||
headerName: 'Ad Soyad',
|
||
flex: 1,
|
||
minWidth: 120,
|
||
filterable: false,
|
||
headerClassName: 'datagrid--header',
|
||
cellClassName: 'datagrid--cell',
|
||
|
||
|
||
editable: hasUpdatePermission,
|
||
|
||
|
||
},
|
||
|
||
{
|
||
field: 'email',
|
||
headerName: 'E-posta',
|
||
flex: 1,
|
||
minWidth: 120,
|
||
filterable: false,
|
||
headerClassName: 'datagrid--header',
|
||
cellClassName: 'datagrid--cell',
|
||
|
||
|
||
editable: hasUpdatePermission,
|
||
|
||
|
||
},
|
||
|
||
{
|
||
field: 'phone',
|
||
headerName: 'Telefon',
|
||
flex: 1,
|
||
minWidth: 120,
|
||
filterable: false,
|
||
headerClassName: 'datagrid--header',
|
||
cellClassName: 'datagrid--cell',
|
||
|
||
|
||
editable: hasUpdatePermission,
|
||
|
||
|
||
},
|
||
|
||
{
|
||
field: 'rsvp_status',
|
||
headerName: 'Katılım Durumu',
|
||
flex: 1,
|
||
minWidth: 120,
|
||
filterable: false,
|
||
headerClassName: 'datagrid--header',
|
||
cellClassName: 'datagrid--cell',
|
||
|
||
|
||
editable: hasUpdatePermission,
|
||
|
||
|
||
},
|
||
|
||
{
|
||
field: 'guest_type',
|
||
headerName: 'Davetli Türü',
|
||
flex: 1,
|
||
minWidth: 120,
|
||
filterable: false,
|
||
headerClassName: 'datagrid--header',
|
||
cellClassName: 'datagrid--cell',
|
||
|
||
|
||
editable: hasUpdatePermission,
|
||
|
||
|
||
},
|
||
|
||
{
|
||
field: 'invited_at',
|
||
headerName: 'Davet Tarihi',
|
||
flex: 1,
|
||
minWidth: 120,
|
||
filterable: false,
|
||
headerClassName: 'datagrid--header',
|
||
cellClassName: 'datagrid--cell',
|
||
|
||
|
||
editable: hasUpdatePermission,
|
||
|
||
type: 'dateTime',
|
||
valueGetter: (params: GridValueGetterParams) =>
|
||
new Date(params.row.invited_at),
|
||
|
||
},
|
||
|
||
{
|
||
field: 'checked_in_at',
|
||
headerName: 'Giriş Tarihi',
|
||
flex: 1,
|
||
minWidth: 120,
|
||
filterable: false,
|
||
headerClassName: 'datagrid--header',
|
||
cellClassName: 'datagrid--cell',
|
||
|
||
|
||
editable: hasUpdatePermission,
|
||
|
||
type: 'dateTime',
|
||
valueGetter: (params: GridValueGetterParams) =>
|
||
new Date(params.row.checked_in_at),
|
||
|
||
},
|
||
|
||
{
|
||
field: 'event',
|
||
headerName: 'Etkinlik',
|
||
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('events'),
|
||
valueGetter: (params: GridValueGetterParams) =>
|
||
params?.value?.id ?? params?.value,
|
||
|
||
},
|
||
|
||
{
|
||
field: 'notes',
|
||
headerName: 'Notlar',
|
||
flex: 1,
|
||
minWidth: 120,
|
||
filterable: false,
|
||
headerClassName: 'datagrid--header',
|
||
cellClassName: 'datagrid--cell',
|
||
|
||
|
||
editable: hasUpdatePermission,
|
||
|
||
|
||
},
|
||
|
||
{
|
||
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={`/event_guests/event_guests-edit/?id=${params?.row?.id}`}
|
||
pathView={`/event_guests/event_guests-view/?id=${params?.row?.id}`}
|
||
|
||
hasUpdatePermission={hasUpdatePermission}
|
||
|
||
/>
|
||
</div>,
|
||
]
|
||
},
|
||
},
|
||
];
|
||
};
|