Add type restriction rule (monolocke)
Adds allowedTypes: string[] to NuzlockeRules. When set, the encounter selector hides non-matching Pokemon and the routes endpoint filters out routes with no matching encounters, so only eligible locations appear. Type picker UI in RulesConfiguration; active restriction shown in RuleBadges. Backend accepts allowed_types query param and joins through RouteEncounter.pokemon to filter by type. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
import type { NuzlockeRules } from '../types'
|
||||
import { RULE_DEFINITIONS } from '../types/rules'
|
||||
import { TypeBadge } from './TypeBadge'
|
||||
|
||||
interface RuleBadgesProps {
|
||||
rules: NuzlockeRules
|
||||
@@ -7,8 +8,9 @@ interface RuleBadgesProps {
|
||||
|
||||
export function RuleBadges({ rules }: RuleBadgesProps) {
|
||||
const enabledRules = RULE_DEFINITIONS.filter((def) => rules[def.key])
|
||||
const allowedTypes = rules.allowedTypes ?? []
|
||||
|
||||
if (enabledRules.length === 0) {
|
||||
if (enabledRules.length === 0 && allowedTypes.length === 0) {
|
||||
return <span className="text-sm text-text-tertiary">No rules enabled</span>
|
||||
}
|
||||
|
||||
@@ -29,6 +31,17 @@ export function RuleBadges({ rules }: RuleBadgesProps) {
|
||||
{def.name}
|
||||
</span>
|
||||
))}
|
||||
{allowedTypes.length > 0 && (
|
||||
<span
|
||||
title={`Type restriction: ${allowedTypes.map((t) => t.charAt(0).toUpperCase() + t.slice(1)).join(', ')}`}
|
||||
className="px-2 py-0.5 rounded-full text-xs font-medium bg-amber-900/40 text-amber-300 light:bg-amber-100 light:text-amber-700 flex items-center gap-1"
|
||||
>
|
||||
<span>Type Restriction</span>
|
||||
{allowedTypes.map((t) => (
|
||||
<TypeBadge key={t} type={t} size="sm" />
|
||||
))}
|
||||
</span>
|
||||
)}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user