
Company News
AWS Security Hub Adds Socket for Supply Chain Security
Socket is now in the AWS Security Hub Extended plan. Adopt it through AWS, apply committed spend, and block malicious open source packages.
@abpjs/feature-management
Advanced tools
ABP Framework feature-management components for React - translated from @abp/ng.feature-management
Feature management UI components for ABP Framework in React
@abpjs/feature-management provides feature management capabilities for ABP-based React applications. It allows managing features for tenants and editions with support for toggle and free-text value types.
This package is a React translation of the original @abp/ng.feature-management Angular package.
# Using npm
npm install @abpjs/feature-management
# Using yarn
yarn add @abpjs/feature-management
# Using pnpm
pnpm add @abpjs/feature-management
This package requires the following peer dependencies:
npm install @abpjs/core @abpjs/theme-shared @chakra-ui/react @emotion/react
import { useState } from 'react';
import { FeatureManagementModal } from '@abpjs/feature-management';
function TenantFeatures({ tenantId }: { tenantId: string }) {
const [visible, setVisible] = useState(false);
return (
<>
<button onClick={() => setVisible(true)}>Manage Features</button>
<FeatureManagementModal
providerName="T"
providerKey={tenantId}
visible={visible}
onVisibleChange={setVisible}
onSave={() => console.log('Features saved!')}
/>
</>
);
}
import { useFeatureManagement } from '@abpjs/feature-management';
import { useEffect } from 'react';
function CustomFeaturePage({ tenantId }: { tenantId: string }) {
const {
features,
isLoading,
fetchFeatures,
saveFeatures,
updateFeatureValue,
isFeatureEnabled,
} = useFeatureManagement();
useEffect(() => {
fetchFeatures(tenantId, 'T');
}, [tenantId, fetchFeatures]);
const handleToggle = (featureName: string) => {
const newValue = isFeatureEnabled(featureName) ? 'false' : 'true';
updateFeatureValue(featureName, newValue);
};
const handleSave = async () => {
const result = await saveFeatures(tenantId, 'T');
if (result.success) {
console.log('Features saved!');
}
};
return (
<div>
{features.map(feature => (
<div key={feature.name}>
<span>{feature.name}</span>
{feature.valueType?.name === 'ToggleStringValueType' ? (
<input
type="checkbox"
checked={isFeatureEnabled(feature.name)}
onChange={() => handleToggle(feature.name)}
/>
) : (
<input
type="text"
value={feature.value}
onChange={(e) => updateFeatureValue(feature.name, e.target.value)}
/>
)}
</div>
))}
<button onClick={handleSave} disabled={isLoading}>
Save
</button>
</div>
);
}
Modal component for managing features of a provider.
import { FeatureManagementModal } from '@abpjs/feature-management';
<FeatureManagementModal
providerName="T"
providerKey={tenantId}
visible={visible}
onVisibleChange={setVisible}
onSave={() => console.log('Saved!')}
/>
Props:
| Prop | Type | Required | Description |
|---|---|---|---|
providerName | string | Yes | Provider type ("T" for tenant, "E" for edition) |
providerKey | string | Yes | Provider identifier (tenant ID or edition ID) |
visible | boolean | Yes | Whether the modal is visible |
onVisibleChange | (visible: boolean) => void | No | Callback when visibility changes |
onSave | () => void | No | Callback when features are saved |
Hook for managing feature state and operations.
import { useFeatureManagement } from '@abpjs/feature-management';
const {
features, // Array of features
featureValues, // Current values (form state)
isLoading, // Loading state
error, // Error message
fetchFeatures, // Fetch features for provider
saveFeatures, // Save changes to server
updateFeatureValue, // Update a feature value locally
getFeatureValue, // Get current feature value
isFeatureEnabled, // Check if toggle feature is enabled
reset, // Reset all state
} = useFeatureManagement();
Service class for direct API interaction.
import { FeatureManagementService } from '@abpjs/feature-management';
import { useRestService } from '@abpjs/core';
function MyComponent() {
const restService = useRestService();
const service = new FeatureManagementService(restService);
// Get features
const features = await service.getFeatures({
providerName: 'T',
providerKey: tenantId,
});
// Update features
await service.updateFeatures({
providerName: 'T',
providerKey: tenantId,
features: [
{ name: 'MyFeature', value: 'true' },
],
});
}
import { FeatureManagement } from '@abpjs/feature-management';
interface FeatureManagement.Feature {
name: string;
value: string;
description?: string;
valueType?: ValueType;
depth?: number;
parentName?: string;
}
interface FeatureManagement.ValueType {
name: string; // 'ToggleStringValueType' or 'FreeTextStringValueType'
properties: object;
validator: object;
}
interface FeatureManagement.Provider {
providerName: string; // 'T' for tenant, 'E' for edition
providerKey: string; // Provider ID
}
interface FeatureManagement.Features {
features: Feature[];
}
| Value Type | Description | UI Component |
|---|---|---|
ToggleStringValueType | Boolean toggle | Checkbox/Switch |
FreeTextStringValueType | Free text input | Text input |
| Method | Endpoint | Description |
|---|---|---|
GET | /api/abp/features | Fetch features for provider |
PUT | /api/abp/features | Update features for provider |
This package is part of the ABP React monorepo. Contributions are welcome!
LGPL-3.0 - See LICENSE for details.
FAQs
ABP Framework feature-management components for React - translated from @abp/ng.feature-management
We found that @abpjs/feature-management demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Company News
Socket is now in the AWS Security Hub Extended plan. Adopt it through AWS, apply committed spend, and block malicious open source packages.

Research
/Security News
Popular npm packages keyv and cacheable compromised.

Security News
A misconfiguration gave three Anthropic models internet access, and one, believing it was in a simulation, shipped a credential-stealing package to PyPI.