|
@@ -203,12 +203,23 @@ export function setFragmentFallback(
|
|
|
fragment: VaporFragment,
|
|
fragment: VaporFragment,
|
|
|
fallback: BlockFn,
|
|
fallback: BlockFn,
|
|
|
): void {
|
|
): void {
|
|
|
- // stop recursion if fragment has its own fallback
|
|
|
|
|
- if (fragment.fallback) return
|
|
|
|
|
|
|
+ if (fragment.fallback) {
|
|
|
|
|
+ const originalFallback = fragment.fallback
|
|
|
|
|
+ // if the original fallback also renders invalid blocks,
|
|
|
|
|
+ // this ensures proper fallback chaining
|
|
|
|
|
+ fragment.fallback = () => {
|
|
|
|
|
+ const fallbackNodes = originalFallback()
|
|
|
|
|
+ if (isValidBlock(fallbackNodes)) {
|
|
|
|
|
+ return fallbackNodes
|
|
|
|
|
+ }
|
|
|
|
|
+ return fallback()
|
|
|
|
|
+ }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ fragment.fallback = fallback
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- fragment.fallback = fallback
|
|
|
|
|
if (isFragment(fragment.nodes)) {
|
|
if (isFragment(fragment.nodes)) {
|
|
|
- setFragmentFallback(fragment.nodes, fallback)
|
|
|
|
|
|
|
+ setFragmentFallback(fragment.nodes, fragment.fallback)
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|