This commit is contained in:
dklimpel 2021-10-15 18:32:19 +02:00
parent 96942a698b
commit adeb855fcf
2 changed files with 132 additions and 138 deletions

View File

@ -1,130 +1,130 @@
import React from "react"; import React from "react";
import { import {
BooleanInput, BooleanInput,
Create, Create,
Datagrid, Datagrid,
DateField, DateField,
DateTimeInput, DateTimeInput,
Edit, Edit,
Filter, Filter,
List, List,
maxValue, maxValue,
number, number,
NumberField, NumberField,
NumberInput, NumberInput,
regex, regex,
SimpleForm, SimpleForm,
TextInput, TextInput,
TextField, TextField,
Toolbar, Toolbar,
} from "react-admin"; } from "react-admin";
const validateToken = [regex(/^[A-Za-z0-9._~-]{0,64}$/)]; const validateToken = [regex(/^[A-Za-z0-9._~-]{0,64}$/)];
const validateUsesAllowed = [number()]; const validateUsesAllowed = [number()];
const validateLength = [number(), maxValue(64)]; const validateLength = [number(), maxValue(64)];
const dateParser = v => { const dateParser = v => {
const d = new Date(v); const d = new Date(v);
if (isNaN(d)) return 0; if (isNaN(d)) return 0;
return d.getTime(); return d.getTime();
}; };
const dateFormatter = v => { const dateFormatter = v => {
if (v === undefined || v === null) return; if (v === undefined || v === null) return;
const d = new Date(v); const d = new Date(v);
const pad = "00"; const pad = "00";
const year = d.getFullYear().toString(); const year = d.getFullYear().toString();
const month = (pad + (d.getMonth() + 1).toString()).slice(-2); const month = (pad + (d.getMonth() + 1).toString()).slice(-2);
const day = (pad + d.getDate().toString()).slice(-2); const day = (pad + d.getDate().toString()).slice(-2);
const hour = (pad + d.getHours().toString()).slice(-2); const hour = (pad + d.getHours().toString()).slice(-2);
const minute = (pad + d.getMinutes().toString()).slice(-2); const minute = (pad + d.getMinutes().toString()).slice(-2);
// target format yyyy-MM-ddThh:mm // target format yyyy-MM-ddThh:mm
return `${year}-${month}-${day}T${hour}:${minute}`; return `${year}-${month}-${day}T${hour}:${minute}`;
}; };
const RegistrationTokenFilter = props => ( const RegistrationTokenFilter = props => (
<Filter {...props}> <Filter {...props}>
<BooleanInput source="valid" alwaysOn /> <BooleanInput source="valid" alwaysOn />
</Filter> </Filter>
); );
export const RegistrationTokenList = props => { export const RegistrationTokenList = props => {
return ( return (
<List <List
{...props} {...props}
filters={<RegistrationTokenFilter />} filters={<RegistrationTokenFilter />}
filterDefaultValues={{ valid: true }} filterDefaultValues={{ valid: true }}
pagination={false} pagination={false}
perPage={500} perPage={500}
> >
<Datagrid rowClick="edit"> <Datagrid rowClick="edit">
<TextField source="token" sortable={false} /> <TextField source="token" sortable={false} />
<NumberField source="uses_allowed" sortable={false} /> <NumberField source="uses_allowed" sortable={false} />
<NumberField source="pending" sortable={false} /> <NumberField source="pending" sortable={false} />
<NumberField source="completed" sortable={false} /> <NumberField source="completed" sortable={false} />
<DateField <DateField
source="expiry_time" source="expiry_time"
showTime showTime
options={{ options={{
year: "numeric", year: "numeric",
month: "2-digit", month: "2-digit",
day: "2-digit", day: "2-digit",
hour: "2-digit", hour: "2-digit",
minute: "2-digit", minute: "2-digit",
second: "2-digit", second: "2-digit",
}} }}
sortable={false} sortable={false}
/> />
</Datagrid> </Datagrid>
</List> </List>
); );
}; };
export const RegistrationTokenCreate = props => ( export const RegistrationTokenCreate = props => (
<Create {...props}> <Create {...props}>
<SimpleForm redirect="list" toolbar={<Toolbar alwaysEnableSaveButton />}> <SimpleForm redirect="list" toolbar={<Toolbar alwaysEnableSaveButton />}>
<TextInput <TextInput
source="token" source="token"
autoComplete="off" autoComplete="off"
validate={validateToken} validate={validateToken}
resettable resettable
/> />
<NumberInput <NumberInput
source="length" source="length"
validate={validateLength} validate={validateLength}
helperText="resources.registration_tokens.helper.length" helperText="resources.registration_tokens.helper.length"
step={1} step={1}
/> />
<NumberInput <NumberInput
source="uses_allowed" source="uses_allowed"
validate={validateUsesAllowed} validate={validateUsesAllowed}
step={1} step={1}
/> />
<DateTimeInput source="expiry_time" parse={dateParser} /> <DateTimeInput source="expiry_time" parse={dateParser} />
</SimpleForm> </SimpleForm>
</Create> </Create>
); );
export const RegistrationTokenEdit = props => { export const RegistrationTokenEdit = props => {
return ( return (
<Edit {...props}> <Edit {...props}>
<SimpleForm> <SimpleForm>
<TextInput source="token" disabled /> <TextInput source="token" disabled />
<NumberInput source="pending" disabled /> <NumberInput source="pending" disabled />
<NumberInput source="completed" disabled /> <NumberInput source="completed" disabled />
<NumberInput <NumberInput
source="uses_allowed" source="uses_allowed"
validate={validateUsesAllowed} validate={validateUsesAllowed}
step={1} step={1}
/> />
<DateTimeInput <DateTimeInput
source="expiry_time" source="expiry_time"
parse={dateParser} parse={dateParser}
format={dateFormatter} format={dateFormatter}
/> />
</SimpleForm> </SimpleForm>
</Edit> </Edit>
); );
}; };

View File

@ -313,14 +313,8 @@ function getSearchOrder(order) {
const dataProvider = { const dataProvider = {
getList: (resource, params) => { getList: (resource, params) => {
console.log("getList " + resource); console.log("getList " + resource);
const { const { user_id, name, guests, deactivated, search_term, valid } =
user_id, params.filter;
name,
guests,
deactivated,
search_term,
valid,
} = params.filter;
const { page, perPage } = params.pagination; const { page, perPage } = params.pagination;
const { field, order } = params.sort; const { field, order } = params.sort;
const from = (page - 1) * perPage; const from = (page - 1) * perPage;