(rawValue: unknown)
| 229 | * @codeGenApi |
| 230 | */ |
| 231 | export function ɵɵdeferWhen(rawValue: unknown) { |
| 232 | const lView = getLView(); |
| 233 | const tNode = getSelectedTNode(); |
| 234 | |
| 235 | if (ngDevMode) { |
| 236 | trackTriggerForDebugging(lView[TVIEW], tNode, 'when <expression>'); |
| 237 | } |
| 238 | |
| 239 | if (!shouldAttachTrigger(TriggerType.Regular, lView, tNode)) return; |
| 240 | |
| 241 | const bindingIndex = nextBindingIndex(); |
| 242 | if (bindingUpdated(lView, bindingIndex, rawValue)) { |
| 243 | const prevConsumer = setActiveConsumer(null); |
| 244 | try { |
| 245 | const value = Boolean(rawValue); // handle truthy or falsy values |
| 246 | const lDetails = getLDeferBlockDetails(lView, tNode); |
| 247 | const renderedState = lDetails[DEFER_BLOCK_STATE]; |
| 248 | if (value === false && renderedState === DeferBlockInternalState.Initial) { |
| 249 | // If nothing is rendered yet, render a placeholder (if defined). |
| 250 | renderPlaceholder(lView, tNode); |
| 251 | } else if ( |
| 252 | value === true && |
| 253 | (renderedState === DeferBlockInternalState.Initial || |
| 254 | renderedState === DeferBlockState.Placeholder) |
| 255 | ) { |
| 256 | triggerDeferBlock(TriggerType.Regular, lView, tNode); |
| 257 | } |
| 258 | } finally { |
| 259 | setActiveConsumer(prevConsumer); |
| 260 | } |
| 261 | } |
| 262 | } |
| 263 | |
| 264 | /** |
| 265 | * Prefetches the deferred content when a value becomes truthy. |
nothing calls this directly
no test coverage detected