* @internal
(
keyOrInputOrSlice$:
| Key
| Observable<Partial<State> | Value>
| Signal<Partial<State> | Value>,
projectOrSlices$?:
| ProjectStateReducer<State, Value>
| Observable<State[Key] | Value>
| Signal<State[Key] | Value>,
projectValueFn?: ProjectValueReducer<State, Key, Value>,
)
| 540 | * @internal |
| 541 | */ |
| 542 | connect<Key extends keyof State, Value extends Partial<State>>( |
| 543 | keyOrInputOrSlice$: |
| 544 | | Key |
| 545 | | Observable<Partial<State> | Value> |
| 546 | | Signal<Partial<State> | Value>, |
| 547 | projectOrSlices$?: |
| 548 | | ProjectStateReducer<State, Value> |
| 549 | | Observable<State[Key] | Value> |
| 550 | | Signal<State[Key] | Value>, |
| 551 | projectValueFn?: ProjectValueReducer<State, Key, Value>, |
| 552 | ): void { |
| 553 | /** |
| 554 | * From top to bottom the overloads are handled. |
| 555 | */ |
| 556 | if ( |
| 557 | isObservable(keyOrInputOrSlice$) && |
| 558 | !projectOrSlices$ && |
| 559 | !projectValueFn |
| 560 | ) { |
| 561 | this.accumulator.nextSliceObservable(keyOrInputOrSlice$); |
| 562 | return; |
| 563 | } |
| 564 | |
| 565 | if (isSignal(keyOrInputOrSlice$) && !projectOrSlices$ && !projectValueFn) { |
| 566 | this.accumulator.nextSliceObservable( |
| 567 | toObservableMicrotaskInternal(keyOrInputOrSlice$, { |
| 568 | injector: this.injector, |
| 569 | }), |
| 570 | ); |
| 571 | return; |
| 572 | } |
| 573 | |
| 574 | if ( |
| 575 | isObservable(keyOrInputOrSlice$) && |
| 576 | projectOrSlices$ && |
| 577 | typeof projectOrSlices$ === 'function' && |
| 578 | !projectValueFn |
| 579 | ) { |
| 580 | const projectionStateFn = projectOrSlices$; |
| 581 | const slice$ = keyOrInputOrSlice$.pipe( |
| 582 | map((v) => projectionStateFn(this.accumulator.state, v as Value)), |
| 583 | ); |
| 584 | this.accumulator.nextSliceObservable(slice$ as Observable<Value>); |
| 585 | return; |
| 586 | } |
| 587 | |
| 588 | if ( |
| 589 | isSignal(keyOrInputOrSlice$) && |
| 590 | projectOrSlices$ && |
| 591 | typeof projectOrSlices$ === 'function' && |
| 592 | !projectValueFn |
| 593 | ) { |
| 594 | const projectionStateFn = projectOrSlices$; |
| 595 | const slice$ = toObservableMicrotaskInternal(keyOrInputOrSlice$, { |
| 596 | injector: this.injector, |
| 597 | }).pipe( |
| 598 | map((v) => projectionStateFn(this.accumulator.state, v as Value)), |
| 599 | ); |