feat(subscription): gate insurance pages behind "insurance" plan feature
Wrap InsurancePricingPage and ClaimsPage in <FeatureGate feature="insurance"> so direct-URL access is blocked without an active subscription that enables the feature. Add feature: "insurance" to the sidebar links (doctor/clinic/ secretary sections) so the menu items hide when the plan lacks it. Make AdminSubscriptionPage feature controls dynamic: derive the plan feature checkboxes from FEATURE_LABELS (now including "insurance") and switch the Zod schema to z.record, so adding a feature only touches the label map. No backend/migration change: plan.features is free-form JSON; existing plans default to insurance:false and admins enable it per plan. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -7,6 +7,7 @@ import { formatRial, formatNumber } from '../lib/utils';
|
||||
import PageHeader from '../components/ui/PageHeader';
|
||||
import Modal from '../components/ui/Modal';
|
||||
import SearchableSelect from '../components/ui/SearchableSelect';
|
||||
import FeatureGate from '../components/ui/FeatureGate';
|
||||
|
||||
interface ClaimItem {
|
||||
invoice_item_id: number;
|
||||
@@ -80,6 +81,7 @@ export default function ClaimsPage() {
|
||||
});
|
||||
|
||||
return (
|
||||
<FeatureGate feature="insurance">
|
||||
<div className="fade-in">
|
||||
<PageHeader title="مطالبات بیمه" description="پیگیری مطالبات و بدهی بیمهها" />
|
||||
|
||||
@@ -189,5 +191,6 @@ export default function ClaimsPage() {
|
||||
</div>
|
||||
</Modal>
|
||||
</div>
|
||||
</FeatureGate>
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user