import { BaseDataFacadeService } from '@farris/ui-common'; import { Injectable } from '@angular/core'; import { Observable } from 'rxjs'; import { ComboState, ComboPanelState } from './combo-types'; import { distinctUntilChanged, map } from 'rxjs/operators'; @Injectable() export class ComboFacadeService extends BaseDataFacadeService { isDisabled: Observable = this.state$.pipe(map( (state: ComboState) => state.disabled ), distinctUntilChanged()); isReadonly: Observable = this.state$.pipe(map( (state: ComboState) => state.readonly ), distinctUntilChanged()); isEditable: Observable = this.state$.pipe(map( (state: ComboState) => state.editable ), distinctUntilChanged()); panel$: Observable = this.state$.pipe(map( (state: ComboState) => state.panel ), distinctUntilChanged()); isOpenChange: Observable = this.panel$.pipe( map((panelState: ComboPanelState) => panelState.open), distinctUntilChanged()); data$: Observable = this.state$.pipe(map((state: ComboState) => state.data)); selections$: Observable = this.state$.pipe(map((state: ComboState) => state.selections), distinctUntilChanged()); constructor(initState: ComboState) { super(initState); } // ---------------------------- 状态控制 ------------------------------- initControlState(ctrlInitState: Partial) { const newState = Object.assign({}, this._state, ctrlInitState); // console.log(newState); this.updateState(newState); } showPanel() { this.updatePanelState({ open: true }); } hidePanel() { this.updatePanelState({ open: false }); } updatePanelState(opts: Partial) { const panel = { ...this._state.panel, ...opts }; this.updateState({ panel}); } disable() { this.updateState({ disabled: true }); } enable() { this.updateState({ disabled: false }); } editable(canEdit: boolean = true) { this.updateState({ editable: canEdit }); } readonly(val: boolean = true) { this.updateState({ readonly: val}); } }