Skip to main content
Version: 0.8.0

Tenants

The @abpjs/tenant-management package provides components and hooks for tenant management.

useTenantManagement Hook

The useTenantManagement hook provides full tenant management capabilities:

import { useTenantManagement } from '@abpjs/tenant-management';

function TenantList() {
const {
tenants,
totalCount,
loading,
page,
pageSize,
setPage,
createTenant,
updateTenant,
deleteTenant,
refresh,
} = useTenantManagement();

if (loading) return <p>Loading...</p>;

return (
<div>
<table>
<thead>
<tr>
<th>Name</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
{tenants.map((tenant) => (
<tr key={tenant.id}>
<td>{tenant.name}</td>
<td>
<button onClick={() => deleteTenant(tenant.id)}>
Delete
</button>
</td>
</tr>
))}
</tbody>
</table>
<p>Total: {totalCount}</p>
</div>
);
}

API Reference

useTenantManagement Returns

PropertyTypeDescription
tenantsTenant[]List of tenants
totalCountnumberTotal number of tenants
loadingbooleanLoading state
pagenumberCurrent page
pageSizenumberItems per page
setPage(page: number) => voidSet current page
createTenant(input: CreateTenantInput) => Promise<void>Create a tenant
updateTenant(id: string, input: UpdateTenantInput) => Promise<void>Update a tenant
deleteTenant(id: string) => Promise<void>Delete a tenant
refresh() => voidRefresh the tenant list

Tenant Type

interface Tenant {
id: string;
name: string;
concurrencyStamp?: string;
}

CreateTenantInput Type

interface CreateTenantInput {
name: string;
adminEmailAddress: string;
adminPassword: string;
}

TenantManagementModal

The modal component for creating and editing tenants:

import { TenantManagementModal } from '@abpjs/tenant-management';
import { useState } from 'react';

function TenantManager() {
const [isOpen, setIsOpen] = useState(false);
const [editingTenant, setEditingTenant] = useState<Tenant | null>(null);

return (
<>
<button onClick={() => setIsOpen(true)}>Create Tenant</button>

<TenantManagementModal
isOpen={isOpen}
onClose={() => {
setIsOpen(false);
setEditingTenant(null);
}}
tenant={editingTenant}
onSave={() => {
setIsOpen(false);
setEditingTenant(null);
}}
/>
</>
);
}
PropTypeRequiredDescription
isOpenbooleanYesWhether the modal is open
onClose() => voidYesCalled when modal closes
tenantTenant | nullNoTenant to edit (null for create)
onSave() => voidNoCalled after save

Creating a Tenant

import { useTenantManagement } from '@abpjs/tenant-management';
import { useToaster } from '@abpjs/theme-shared';

function CreateTenantForm() {
const { createTenant } = useTenantManagement();
const toaster = useToaster();

const handleCreate = async () => {
try {
await createTenant({
name: 'NewTenant',
adminEmailAddress: 'admin@newtenant.com',
adminPassword: 'Password123!',
});
toaster.success('Tenant created successfully!');
} catch (error) {
toaster.error('Failed to create tenant');
}
};

// ...
}

Using TenantManagementService

For direct API access:

import { TenantManagementService } from '@abpjs/tenant-management';

// Get all tenants
const result = await TenantManagementService.getTenants({
skipCount: 0,
maxResultCount: 10,
});

// Get a single tenant
const tenant = await TenantManagementService.getTenant('tenant-id');

// Create a tenant
await TenantManagementService.createTenant({
name: 'NewTenant',
adminEmailAddress: 'admin@newtenant.com',
adminPassword: 'Password123!',
});

// Delete a tenant
await TenantManagementService.deleteTenant('tenant-id');