Skip to main content
Version: 2.0.0

useSettingManagement Hook

The useSettingManagement hook provides programmatic access to the setting management service for managing tabs.

Basic Usage

import { useSettingManagement } from '@abpjs/setting-management';

function MyComponent() {
const {
settings,
selected,
addSetting,
addSettings,
removeSetting,
setSelected,
selectByName,
selectByUrl,
clearSettings,
} = useSettingManagement();

return (
<div>
<p>Total tabs: {settings.length}</p>
<p>Selected: {selected?.name || 'None'}</p>
</div>
);
}

Return Value

PropertyTypeDescription
settingsSettingTab[]All registered tabs, sorted by order
selectedSettingTab | nullCurrently selected tab
addSetting(tab: SettingTab) => voidAdd a single tab
addSettings(tabs: SettingTab[]) => voidAdd multiple tabs
removeSetting(name: string) => voidRemove a tab by name
setSelected(tab: SettingTab | null) => voidSet the selected tab
selectByName(name: string) => voidSelect a tab by name
selectByUrl(url: string) => voidSelect a tab by URL
clearSettings() => voidRemove all tabs

Adding Tabs

Register tabs when your component mounts:

import { useSettingManagement } from '@abpjs/setting-management';
import { useEffect } from 'react';

function SettingsModule() {
const { addSettings } = useSettingManagement();

useEffect(() => {
addSettings([
{ name: 'Profile', order: 1, url: '/settings/profile' },
{ name: 'Preferences', order: 2, url: '/settings/preferences' },
{ name: 'Privacy', order: 3, url: '/settings/privacy' },
]);
}, [addSettings]);

return null;
}

Dynamic Tab Registration

Register tabs from different modules:

// In your identity module
function IdentitySettingsRegistrar() {
const { addSetting } = useSettingManagement();

useEffect(() => {
addSetting({
name: 'Users',
order: 10,
url: '/settings/identity/users',
requiredPolicy: 'AbpIdentity.Users',
});
}, [addSetting]);

return null;
}

// In your tenant module
function TenantSettingsRegistrar() {
const { addSetting } = useSettingManagement();

useEffect(() => {
addSetting({
name: 'Tenants',
order: 20,
url: '/settings/tenants',
requiredPolicy: 'AbpTenantManagement.Tenants',
});
}, [addSetting]);

return null;
}

Selecting Tabs Programmatically

function TabController() {
const { selectByName, selectByUrl } = useSettingManagement();

return (
<div>
<button onClick={() => selectByName('Profile')}>
Go to Profile
</button>
<button onClick={() => selectByUrl('/settings/privacy')}>
Go to Privacy
</button>
</div>
);
}

Cleanup on Unmount

Remove tabs when a module is unloaded:

function ModuleSettings() {
const { addSettings, removeSetting } = useSettingManagement();

useEffect(() => {
addSettings([
{ name: 'Module A', order: 1, url: '/settings/a' },
{ name: 'Module B', order: 2, url: '/settings/b' },
]);

return () => {
removeSetting('Module A');
removeSetting('Module B');
};
}, [addSettings, removeSetting]);

return null;
}

Building a Custom Tab List

import { useSettingManagement } from '@abpjs/setting-management';
import { useNavigate } from 'react-router-dom';

function CustomTabList() {
const { settings, selected, setSelected } = useSettingManagement();
const navigate = useNavigate();

const handleClick = (tab: SettingTab) => {
setSelected(tab);
if (tab.url) {
navigate(tab.url);
}
};

return (
<ul>
{settings.map((tab) => (
<li
key={tab.name}
onClick={() => handleClick(tab)}
style={{ fontWeight: selected?.name === tab.name ? 'bold' : 'normal' }}
>
{tab.name}
</li>
))}
</ul>
);
}