import { BooleanField, Datagrid, DateField, EmailField, List, TextField, ShowButton, SearchInput, ImageField, Show, SimpleShowLayout, TopToolbar, useUpdate, useShowContext, useTranslate, EditButton, Edit, SimpleForm, TextInput, Labeled, } from 'react-admin'; import { DangerButton } from '../components/DangerButton'; import { ButtonWithConfirm } from '../components/ButtonWithConfirm'; import { PostListActionToolbar } from '../components/PostListActionToolbar'; export const UserList: React.FC = () => { const translate = useTranslate(); return ( <List filters={[ <SearchInput key="search" source="q" alwaysOn placeholder={translate('custom.users.search')} />, ]} > <Datagrid bulkActionButtons={false}> <TextField source="id" sortByOrder="DESC" /> <EmailField source="email" /> <TextField source="nickname" /> <TextField source="discriminator" /> <BooleanField source="temporary" /> <ImageField sx={{ '.RaImageField-image': { height: 40, width: 40 } }} source="avatar" /> <TextField source="type" /> <TextField source="settings" /> <DateField source="createdAt" /> <PostListActionToolbar> <EditButton /> <ShowButton /> </PostListActionToolbar> </Datagrid> </List> ); }; UserList.displayName = 'UserList'; const UserShowActions: React.FC = () => { const [update] = useUpdate(); const { record, refetch, resource } = useShowContext(); const translate = useTranslate(); return ( <TopToolbar> <EditButton /> <ButtonWithConfirm component={DangerButton} label={translate('custom.users.resetPassword')} confirmContent={translate('custom.users.resetPasswordTip')} onConfirm={async () => { await update(resource, { id: record.id, data: { password: '$2a$10$eSebpg0CEvsbDC7j1NxB2epMUkYwKhfT8vGdPQYkfeXYMqM8HjnpW', // 123456789 }, }); await refetch(); }} /> </TopToolbar> ); }; UserShowActions.displayName = 'UserShowActions'; export const UserShow: React.FC = () => ( <Show actions={<UserShowActions />}> <SimpleShowLayout> <TextField source="id" /> <EmailField source="email" /> <TextField source="password" /> <TextField source="nickname" /> <TextField source="discriminator" /> <BooleanField source="temporary" /> <TextField source="avatar" /> <TextField source="type" /> <BooleanField source="settings" /> </SimpleShowLayout> </Show> ); UserShow.displayName = 'UserShow'; export const UserEdit: React.FC = () => { const translate = useTranslate(); return ( <Edit mutationMode="optimistic"> <SimpleForm> <Labeled label={translate('resources.users.fields.id')}> <TextField source="id" fullWidth={true} /> </Labeled> <TextInput source="email" /> <TextInput source="nickname" /> <Labeled label={translate('resources.users.fields.temporary')}> <BooleanField source="temporary" /> </Labeled> <TextInput source="avatar" /> <Labeled label={translate('resources.users.fields.type')}> <TextField source="type" /> </Labeled> </SimpleForm> </Edit> ); }; UserEdit.displayName = 'UserEdit';