2
0
mirror of https://github.com/inventree/InvenTree.git synced 2025-06-14 19:15:41 +00:00

Re-use UserTable

This commit is contained in:
Oliver Walters
2025-04-07 14:15:18 +00:00
parent 1fca4b1abd
commit c9967e6374
4 changed files with 16 additions and 94 deletions

View File

@ -8,8 +8,8 @@ import { PageDetail } from '../../components/nav/PageDetail';
import { PanelGroup } from '../../components/panels/PanelGroup';
import { useUserState } from '../../states/UserState';
import { ContactTable } from '../../tables/company/ContactTable';
import { UserTable } from '../../tables/core/UserTable';
import { GroupTable } from '../../tables/settings/GroupTable';
import { UserTable } from '../../tables/settings/UserTable';
export default function CoreIndex() {
const user = useUserState();

View File

@ -1,88 +0,0 @@
import { t } from '@lingui/core/macro';
import { useMemo } from 'react';
import { ApiEndpoints } from '../../enums/ApiEndpoints';
import { ModelType } from '../../enums/ModelType';
import {} from '../../hooks/UseFilter';
import { useTable } from '../../hooks/UseTable';
import { apiUrl } from '../../states/ApiState';
import { BooleanColumn } from '../ColumnRenderers';
import type { TableFilter } from '../Filter';
import { InvenTreeTable } from '../InvenTreeTable';
export function UserTable() {
const table = useTable('users-index');
const tableFilters: TableFilter[] = useMemo(() => {
const filters: TableFilter[] = [
{
name: 'is_active',
label: t`Active`,
description: t`Show active users`
},
{
name: 'is_staff',
label: t`Staff`,
description: t`Show staff users`
},
{
name: 'is_superuser',
label: t`Superuser`,
description: t`Show superusers`
}
];
return filters;
}, []);
const tableColumns = useMemo(() => {
return [
{
accessor: 'username',
sortable: true,
switchable: false
},
{
accessor: 'first_name',
sortable: true
},
{
accessor: 'last_name',
sortable: true
},
{
accessor: 'email',
sortable: true
},
{
accessor: 'groups',
title: t`Groups`,
sortable: true,
switchable: true,
render: (record: any) => {
return record.groups.length;
}
},
BooleanColumn({
accessor: 'is_staff'
}),
BooleanColumn({
accessor: 'is_superuser'
}),
BooleanColumn({
accessor: 'is_active'
})
];
}, []);
return (
<InvenTreeTable
url={apiUrl(ApiEndpoints.user_list)}
tableState={table}
columns={tableColumns}
props={{
tableFilters: tableFilters,
modelType: ModelType.user
}}
/>
);
}

View File

@ -103,7 +103,10 @@ export function GroupDrawer({
url: ApiEndpoints.group_list,
pk: id,
fields: {
name: {}
name: {
label: t`Name`,
description: t`Name of the user group`
}
},
onFormSuccess: () => {
refreshTable();
@ -185,8 +188,13 @@ export function GroupTable({
const newGroup = useCreateApiFormModal({
url: ApiEndpoints.group_list,
title: t`Add group`,
fields: { name: {} },
title: t`Add Group`,
fields: {
name: {
label: t`Name`,
description: t`Name of the user group`
}
},
table: table
});
@ -210,7 +218,7 @@ export function GroupTable({
{newGroup.modal}
{deleteGroup.modal}
<DetailDrawer
title={t`Edit group`}
title={t`Edit Group`}
renderContent={(id) => {
if (!id || !id.startsWith('group-')) return false;
return (

View File

@ -265,6 +265,8 @@ export function UserTable() {
const tableActions = useMemo(() => {
const actions = [];
console.log('tableActions:', user.hasAddPermission(ModelType.user));
actions.push(
<AddItemButton
key='add-user'
@ -302,7 +304,7 @@ export function UserTable() {
{newUser.modal}
{deleteUser.modal}
<DetailDrawer
title={t`Edit user`}
title={t`Edit User`}
renderContent={(id) => {
if (!id || !id.startsWith('user-')) return false;
return (