Conditional Route
Conditional Routes render different routes based on conditions. This is useful for scenarios like showing different pages based on user authentication status or user preferences.
Schema Configuration
Section titled “Schema Configuration”Sanity Schema
Section titled “Sanity Schema”// In your feature descriptorimport { FeatureDescriptor } from '@vyuh/sanity-schema-core';import { ConditionalRouteDescriptor } from '@vyuh/sanity-schema-system';
export const myFeature = new FeatureDescriptor({ name: 'myFeature', title: 'My Feature',
contents: [new ConditionalRouteDescriptor()],
// Define custom conditions conditions: [myCustomCondition],});
Content Structure
Section titled “Content Structure”// Conditional Route object structureinterface ConditionalRoute { _type: 'vyuh.conditionalRoute'; condition: { _type: 'vyuh.condition'; configuration: { _type: string; // Condition-specific properties }; }; cases: { value: string; item: { _ref: string; // Reference to a route document }; }[]; defaultCase?: string;}
When adding custom layouts to a content block, always make sure to include them in the corresponding descriptor’s layouts
property as shown in the schema configuration example above.
Extensibility
Section titled “Extensibility”Schema Descriptors
Section titled “Schema Descriptors”The ConditionalRouteDescriptor
in the schema system provides the following extensibility points:
- routes: Define which route types can be used in conditional cases
Additionally, at the feature level (same as regular conditional content):
- conditions: Register custom condition types that can be used for decision logic
// Schema-side descriptornew ConditionalRouteDescriptor({ routes: [{ type: 'vyuh.route' }]})
// Feature-level conditions registrationnew FeatureDescriptor({ conditions: [userSubscriptionCondition, deviceTypeCondition]})
React Descriptors
Section titled “React Descriptors”In the React system, conditional route content is configured using the ConditionalRouteDescriptor:
// React-side registrationimport { ConditionalRouteDescriptor } from '@vyuh/react-feature-system';import { ContentExtensionDescriptor } from '@vyuh/react-extension-content';import { FeatureDescriptor } from '@vyuh/react-core';
new FeatureDescriptor({ name: 'myFeature', extensions: [ new ContentExtensionDescriptor({ contents: [ new ConditionalRouteDescriptor(), ], }), ],});