
Security News
pnpm 12’s Rust Rewrite Cuts Install Times by Up to 90%
pnpm 12 rewrites the package manager in Rust, cutting install times by up to 90% while preserving pnpm 11 workflows and lockfiles.
@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
The npm package @abpjs/feature-management receives a total of 17 weekly downloads. As such, @abpjs/feature-management popularity was classified as not popular.
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.

Security News
pnpm 12 rewrites the package manager in Rust, cutting install times by up to 90% while preserving pnpm 11 workflows and lockfiles.

Security News
Socket CTO Ahmad Nassri joins AppSec leaders at Black Hat to discuss active malware, package manager risks, and software supply chain defense.

Research
/Security News
Thirteen malicious Packagist themes expose visitors on unpatched iPhones to a WebKit-to-kernel exploit chain that steals device data and wallet seeds.