Add TenantCustomTier system and fix BusinessEditModal feature loading
Backend: - Add TenantCustomTier model for per-tenant feature overrides - Update EntitlementService to check custom tier before plan features - Add custom_tier action on TenantViewSet (GET/PUT/DELETE) - Add Celery task for grace period management (30-day expiry) Frontend: - Add DynamicFeaturesEditor component for dynamic feature management - Fix BusinessEditModal to load features from plan defaults when no custom tier - Update limits (max_users, max_resources, etc.) to use featureValues - Remove outdated canonical feature check from FeaturePicker (removes warning icons) - Add useBillingPlans hook for accessing billing system data - Add custom tier API functions to platform.ts Features now follow consistent rules: - Load from plan defaults when no custom tier exists - Load from custom tier when one exists - Reset to plan defaults when plan changes - Save to custom tier on edit 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -11,6 +11,7 @@ import {
|
||||
updateBusiness,
|
||||
createBusiness,
|
||||
deleteBusiness,
|
||||
changeBusinessPlan,
|
||||
PlatformBusinessUpdate,
|
||||
PlatformBusinessCreate,
|
||||
getTenantInvitations,
|
||||
@@ -73,6 +74,22 @@ export const useUpdateBusiness = () => {
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Hook to change a business's subscription plan (platform admin only)
|
||||
*/
|
||||
export const useChangeBusinessPlan = () => {
|
||||
const queryClient = useQueryClient();
|
||||
|
||||
return useMutation({
|
||||
mutationFn: ({ businessId, planCode }: { businessId: number; planCode: string }) =>
|
||||
changeBusinessPlan(businessId, planCode),
|
||||
onSuccess: () => {
|
||||
// Invalidate and refetch businesses list
|
||||
queryClient.invalidateQueries({ queryKey: ['platform', 'businesses'] });
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Hook to create a new business (platform admin only)
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user