import * as React from 'react'; import { observer } from 'mobx-react'; import { observable, action, runInAction, IReactionDisposer, reaction } from 'mobx'; import "./SearchBox.scss"; import "./IconButton.scss"; import { faSearch, faFilePdf, faFilm, faImage, faObjectGroup, faStickyNote, faMusic, faLink, faChartBar, faGlobeAsia, faBan, faVideo, faCaretDown } from '@fortawesome/free-solid-svg-icons'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import { library, icon } from '@fortawesome/fontawesome-svg-core'; import { DocumentType } from '../../documents/Documents'; import '../globalCssVariables.scss'; import * as _ from "lodash"; import { IconBar } from './IconBar'; import { props } from 'bluebird'; import { FilterBox } from './FilterBox'; import { Search } from '../../../server/Search'; library.add(faSearch); library.add(faObjectGroup); library.add(faImage); library.add(faStickyNote); library.add(faFilePdf); library.add(faFilm); library.add(faMusic); library.add(faLink); library.add(faChartBar); library.add(faGlobeAsia); library.add(faBan); interface IconButtonProps { type: string; } @observer export class IconButton extends React.Component{ @observable private _isSelected: boolean = FilterBox.Instance.getIcons().indexOf(this.props.type) !== -1; @observable private _hover = false; private _resetReaction?: IReactionDisposer; private _selectAllReaction?: IReactionDisposer; static Instance: IconButton; constructor(props: IconButtonProps) { super(props); IconButton.Instance = this; } componentDidMount = () => { this._resetReaction = reaction( () => IconBar.Instance._resetClicked, () => { if (IconBar.Instance._resetClicked) { runInAction(() => { this.reset(); IconBar.Instance._reset++; if (IconBar.Instance._reset === 9) { IconBar.Instance._reset = 0; IconBar.Instance._resetClicked = false; } }); } }, ); this._selectAllReaction = reaction( () => IconBar.Instance._selectAllClicked, () => { if (IconBar.Instance._selectAllClicked) { runInAction(() => { this.select(); IconBar.Instance._select++; if (IconBar.Instance._select === 9) { IconBar.Instance._select = 0; IconBar.Instance._selectAllClicked = false; } }); } }, ); } @action.bound getIcon() { switch (this.props.type) { case (DocumentType.NONE): return faBan; case (DocumentType.AUDIO): return faMusic; case (DocumentType.COL): return faObjectGroup; case (DocumentType.HIST): return faChartBar; case (DocumentType.IMG): return faImage; case (DocumentType.LINK): return faLink; case (DocumentType.PDF): return faFilePdf; case (DocumentType.TEXT): return faStickyNote; case (DocumentType.VID): return faVideo; case (DocumentType.WEB): return faGlobeAsia; default: return faCaretDown; } } @action.bound onClick = () => { let newList: string[] = FilterBox.Instance.getIcons(); if (!this._isSelected) { this._isSelected = true; newList.push(this.props.type); } else { this._isSelected = false; _.pull(newList, this.props.type); } FilterBox.Instance.updateIcon(newList); } selected = { opacity: 1, backgroundColor: "#c2c2c5" //$alt-accent }; notSelected = { opacity: 0.6, }; hoverStyle = { opacity: 1, backgroundColor: "rgb(178, 206, 248)" //$darker-alt-accent }; @action.bound public reset() { this._isSelected = false; } @action.bound public select() { this._isSelected = true; } @action onMouseLeave = () => { this._hover = false; } @action onMouseEnter = () => { this._hover = true; } getFA = () => { switch (this.props.type) { case (DocumentType.NONE): return (); case (DocumentType.AUDIO): return (); case (DocumentType.COL): return (); case (DocumentType.HIST): return (); case (DocumentType.IMG): return (); case (DocumentType.LINK): return (); case (DocumentType.PDF): return (); case (DocumentType.TEXT): return (); case (DocumentType.VID): return (); case (DocumentType.WEB): return (); default: return (); } } render() { return (
{this.getFA()}
{this.props.type}
); } }