Mailspring/internal_packages/message-templates/lib/template-picker.cjsx
Ben Gotow a26b8d4bc4 fix(*): Resolve a variety of small and simple bugs
Summary:
Fix T1822 - saving templates not working, not showing template

Fix T1800 - give composers a minimum size

Fix the bottom bar of the composer so the gray bar goes all the way across in popout mode.

Fix T1825 - switch to a more attractive "June 4, 2015 at 3:10 PM" styling for expanded dates

Remove, rather than hide, react components for text fields in composer. Fixes T1147

Fix specs

Switch to 999+ instead of infinity. Fixes T1768

Fix broken TemplateStore specs

Test Plan: Run tests

Reviewers: evan

Reviewed By: evan

Maniphest Tasks: T1147, T1768, T1822, T1800, T1825

Differential Revision: https://phab.nylas.com/D1601
2015-06-05 11:02:44 -07:00

87 lines
2.4 KiB
CoffeeScript

_ = require 'underscore'
React = require 'react'
TemplateStore = require './template-store'
{Actions, Message, DatabaseStore} = require 'nylas-exports'
{Popover, Menu, RetinaImg} = require 'nylas-component-kit'
class TemplatePicker extends React.Component
@displayName: 'TemplatePicker'
@containerStyles:
order:2
constructor: (@props) ->
@state =
searchValue: ""
templates: TemplateStore.items()
componentDidMount: =>
@unsubscribe = TemplateStore.listen @_onStoreChange
componentWillUnmount: =>
@unsubscribe() if @unsubscribe
render: =>
button = <button className="btn btn-toolbar">
<RetinaImg name="toolbar-templates.png"/>
<RetinaImg name="toolbar-chevron.png"/>
</button>
headerComponents = [
<input type="text"
tabIndex="1"
key="textfield"
className="search"
value={@state.searchValue}
onChange={@_onSearchValueChange}/>
]
footerComponents = [
<div className="item" key="new" onMouseDown={@_onNewTemplate}>Save Draft as Template...</div>
<div className="item" key="manage" onMouseDown={@_onManageTemplates}>Open Templates Folder...</div>
]
<Popover ref="popover" className="template-picker pull-right" buttonComponent={button}>
<Menu ref="menu"
headerComponents={headerComponents}
footerComponents={footerComponents}
items={@state.templates}
itemKey={ (item) -> item.id }
itemContent={ (item) -> item.name }
onSelect={@_onChooseTemplate}
/>
</Popover>
_filteredTemplates: (search) =>
search ?= @state.searchValue
items = TemplateStore.items()
return items unless search.length
_.filter items, (t) ->
t.name.toLowerCase().indexOf(search.toLowerCase()) == 0
_onStoreChange: =>
@setState
templates: @_filteredTemplates()
_onSearchValueChange: =>
newSearch = event.target.value
@setState
searchValue: newSearch
templates: @_filteredTemplates(newSearch)
_onChooseTemplate: (template) =>
Actions.insertTemplateId({templateId:template.id, draftLocalId: @props.draftLocalId})
@refs.popover.close()
_onManageTemplates: =>
Actions.showTemplates()
_onNewTemplate: =>
Actions.createTemplate({draftLocalId: @props.draftLocalId})
module.exports = TemplatePicker