import React from 'react'; import ng from 'core/services/ng'; import {IDesk} from 'superdesk-api'; import {CheckButtonGroup, RadioButton, Switch} from 'superdesk-ui-framework/react'; import {IMasterDeskTab, getLabelForMasterDeskTab, USER_PREFERENCE_SETTINGS} from '../MasterDesk'; import {gettext} from 'core/utils'; interface IProps { desks: Array; activeTab: string; isFilterAllowed?: boolean; isFilterOpened: boolean; isPlaningActive?: boolean; onTabChange(tab: IMasterDeskTab): void; onUpdateDeskList(desks: Array, showAllDesks: boolean): void; onFilterOpen(filter: boolean): void; } interface IState { openDeskDropdown: boolean; availableDesks: Array; activeDesks: Array; showAllDesks: boolean; } export class HeaderComponent extends React.Component { services: any; constructor(props: IProps) { super(props); this.state = { openDeskDropdown: false, activeDesks: [], availableDesks: [], showAllDesks: true, }; this.services = { desks: ng.get('desks'), preferences: ng.get('preferencesService'), }; this.changeTab.bind(this); this.openFilter.bind(this); } componentDidMount() { Promise.all([ this.services.preferences.get(USER_PREFERENCE_SETTINGS), this.services.desks.initialize(), ]).then((res) => { const [preferences] = res; this.setState({availableDesks: this.services.desks.desks._items}); if (preferences) { this.setState({ activeDesks: preferences.items || [], showAllDesks: preferences.showAllDesks === undefined ? true : preferences.showAllDesks, }); } }); } changeTab(tab: IMasterDeskTab) { this.props.onTabChange(tab); } openFilter() { this.props.onFilterOpen(!this.props.isFilterOpened); } toggleDesk(desk: IDesk) { if (this.state.activeDesks.includes(desk._id)) { let index = this.state.activeDesks.indexOf(desk._id); this.setState({ activeDesks: [ ...this.state.activeDesks.slice(0, index), ...this.state.activeDesks.slice(index + 1), ], showAllDesks: false, }, this.saveDeskPreferences); } else { this.setState({ activeDesks: this.state.activeDesks.concat(desk._id), showAllDesks: false, }, this.saveDeskPreferences); } } toggleShowAll() { this.setState({ showAllDesks: !this.state.showAllDesks, activeDesks: [], }, this.saveDeskPreferences); } saveDeskPreferences() { let update = []; update[USER_PREFERENCE_SETTINGS] = { items: this.state.activeDesks, showAllDesks: this.state.showAllDesks, }; this.services.preferences.update(update).then(() => { this.props.onUpdateDeskList(this.state.activeDesks, this.state.showAllDesks); }); } isDeskActive(desk: IDesk) { return this.state.activeDesks.includes(desk._id); } render() { const planningComponents = [IMasterDeskTab.assignments]; const tabs = Object.values(IMasterDeskTab).filter((tab) => this.props.isPlaningActive ? tab : !planningComponents.includes(tab), ).map((tab) => ( {value: tab, label: getLabelForMasterDeskTab(tab)} )); return (
{this.props.isFilterAllowed ? ( ) : null}
this.changeTab(value)} />
  • {gettext('Select desks')}
  • this.toggleShowAll()} />
  • {this.state.availableDesks.map((item, key) => (
  • this.toggleDesk(item)} />
  • ), )}
); } }