diff --git a/build/config/eslint.json b/build/config/eslint.json index a031f8aa6..5514fcbbc 100644 --- a/build/config/eslint.json +++ b/build/config/eslint.json @@ -34,7 +34,7 @@ "quote-props": ["error", "consistent-as-needed", { "keywords": true }], "no-param-reassign": ["error", { "props": false }], "semi": "off", - "import/no-unresolved": ["error", {"ignore": ["nylas-exports", "nylas-component-kit", "electron", "nylas-store", "react-dom/server"]}], + "import/no-unresolved": ["error", {"ignore": ["nylas-exports", "nylas-component-kit", "electron", "nylas-store", "react-dom/server", "nylas-observables"]}], "react/no-multi-comp": "off", "react/prop-types": ["error", {"ignore": ["children"]}], "react/sort-comp": "error" diff --git a/internal_packages/attachments/lib/attachment-component.jsx b/internal_packages/attachments/lib/attachment-component.jsx index 164069ea8..420503204 100644 --- a/internal_packages/attachments/lib/attachment-component.jsx +++ b/internal_packages/attachments/lib/attachment-component.jsx @@ -16,13 +16,13 @@ class AttachmentComponent extends Component { messageClientId: PropTypes.string, }; + static containerRequired = false; + constructor() { super() this.state = {progressPercent: 0} } - static containerRequired = false; - _isDownloading() { const {download} = this.props const state = download ? download.state : null diff --git a/internal_packages/category-picker/lib/category-picker-popover.jsx b/internal_packages/category-picker/lib/category-picker-popover.jsx index bd097ae82..5be99682e 100644 --- a/internal_packages/category-picker/lib/category-picker-popover.jsx +++ b/internal_packages/category-picker/lib/category-picker-popover.jsx @@ -246,7 +246,8 @@ export default class CategoryPickerPopover extends Component { + mode={RetinaImg.Mode.ContentIsMask} + /> ) }; @@ -263,7 +264,8 @@ export default class CategoryPickerPopover extends Component { className="check-img dash" name="tagging-conflicted.png" mode={RetinaImg.Mode.ContentPreserve} - onClick={() => this._onSelectCategory(item)}/> + onClick={() => this._onSelectCategory(item)} + /> ) } else { checkStatus = ( @@ -271,7 +273,8 @@ export default class CategoryPickerPopover extends Component { className="check-img check" name="tagging-checkmark.png" mode={RetinaImg.Mode.ContentPreserve} - onClick={() => this._onSelectCategory(item)}/> + onClick={() => this._onSelectCategory(item)} + /> ) } @@ -281,7 +284,8 @@ export default class CategoryPickerPopover extends Component { className="check-img check" name="tagging-checkbox.png" mode={RetinaImg.Mode.ContentPreserve} - onClick={() => this._onSelectCategory(item)}/> + onClick={() => this._onSelectCategory(item)} + /> {checkStatus} ) @@ -299,7 +303,8 @@ export default class CategoryPickerPopover extends Component { + mode={RetinaImg.Mode.ContentIsMask} + />
“{searchValue}” (create new)
@@ -348,7 +353,8 @@ export default class CategoryPickerPopover extends Component { className="search" placeholder={placeholder} value={this.state.searchValue} - onChange={this._onSearchValueChange} />, + onChange={this._onSearchValueChange} + />, ] return ( diff --git a/internal_packages/composer-emoji/lib/emoji-button-popover.jsx b/internal_packages/composer-emoji/lib/emoji-button-popover.jsx index 7c50311de..7a0163d31 100644 --- a/internal_packages/composer-emoji/lib/emoji-button-popover.jsx +++ b/internal_packages/composer-emoji/lib/emoji-button-popover.jsx @@ -42,6 +42,7 @@ class EmojiButtonPopover extends React.Component { if (!emojiName) return null; EmojiActions.selectEmoji({emojiName: emojiName, replaceSelection: false}); Actions.closePopover(); + return null } onScroll = () => { @@ -51,12 +52,10 @@ class EmojiButtonPopover extends React.Component { if (emojiContainer.scrollTop === 0) { this.setState({activeTab: Object.keys(this.state.categorizedEmoji)[0]}); } else { - for (const category in this.state.categoryPositions) { - if (this.state.categoryPositions.hasOwnProperty(category)) { - if (emojiContainer.scrollTop >= this.state.categoryPositions[category].top && - emojiContainer.scrollTop <= this.state.categoryPositions[category].bottom) { - this.setState({activeTab: category}); - } + for (const category of Object.keys(this.state.categoryPositions)) { + if (emojiContainer.scrollTop >= this.state.categoryPositions[category].top && + emojiContainer.scrollTop <= this.state.categoryPositions[category].bottom) { + this.setState({activeTab: category}); } } } @@ -118,10 +117,8 @@ class EmojiButtonPopover extends React.Component { const frequentlyUsedEmoji = EmojiStore.frequentlyUsedEmoji(); if (frequentlyUsedEmoji.length > 0) { categorizedEmoji = {'Frequently Used': frequentlyUsedEmoji}; - for (const category in categorizedEmojiList) { - if (categorizedEmojiList.hasOwnProperty(category)) { - categorizedEmoji[category] = categorizedEmojiList[category]; - } + for (const category of Object.keys(categorizedEmojiList)) { + categorizedEmoji[category] = categorizedEmojiList[category]; } categoryNames = ["Frequently Used"].concat(categoryNames); } @@ -131,14 +128,12 @@ class EmojiButtonPopover extends React.Component { categoryPositions[name] = {top: 0, bottom: 0}; } let verticalPos = 25; - for (const category in categoryPositions) { - if (categoryPositions.hasOwnProperty(category)) { - const height = Math.ceil(categorizedEmoji[category].length / 8) * 24; - categoryPositions[category].top = verticalPos; - verticalPos += height; - categoryPositions[category].bottom = verticalPos; - verticalPos += 24; - } + for (const category of Object.keys(categoryPositions)) { + const height = Math.ceil(categorizedEmoji[category].length / 8) * 24; + categoryPositions[category].top = verticalPos; + verticalPos += height; + categoryPositions[category].bottom = verticalPos; + verticalPos += 24; } return { categoryNames: categoryNames, @@ -184,22 +179,20 @@ class EmojiButtonPopover extends React.Component { } calcEmojiByPosition = (position) => { - for (const category in this.state.categoryPositions) { - if (this.state.categoryPositions.hasOwnProperty(category)) { - const LEFT_BOUNDARY = 8; - const RIGHT_BOUNDARY = 204; - const EMOJI_WIDTH = 24.5; - const EMOJI_HEIGHT = 24; - const EMOJI_PER_ROW = 8; - if (position.x >= LEFT_BOUNDARY && - position.x <= RIGHT_BOUNDARY && - position.y >= this.state.categoryPositions[category].top && - position.y <= this.state.categoryPositions[category].bottom) { - const x = Math.round((position.x + 5) / EMOJI_WIDTH); - const y = Math.round((position.y - this.state.categoryPositions[category].top + 10) / EMOJI_HEIGHT); - const index = x + (y - 1) * EMOJI_PER_ROW - 1; - return this.state.categorizedEmoji[category][index]; - } + for (const category of Object.keys(this.state.categoryPositions)) { + const LEFT_BOUNDARY = 8; + const RIGHT_BOUNDARY = 204; + const EMOJI_WIDTH = 24.5; + const EMOJI_HEIGHT = 24; + const EMOJI_PER_ROW = 8; + if (position.x >= LEFT_BOUNDARY && + position.x <= RIGHT_BOUNDARY && + position.y >= this.state.categoryPositions[category].top && + position.y <= this.state.categoryPositions[category].bottom) { + const x = Math.round((position.x + 5) / EMOJI_WIDTH); + const y = Math.round((position.y - this.state.categoryPositions[category].top + 10) / EMOJI_HEIGHT); + const index = x + (y - 1) * EMOJI_PER_ROW - 1; + return this.state.categorizedEmoji[category][index]; } } return null; @@ -219,7 +212,8 @@ class EmojiButtonPopover extends React.Component { className={className} name={`icon-emojipicker-${(category.replace(/ /g, '-')).toLowerCase()}.png`} mode={RetinaImg.Mode.ContentIsMask} - onMouseDown={() => this.scrollToCategory(category)} /> + onMouseDown={() => this.scrollToCategory(category)} + /> ); }); @@ -250,7 +244,8 @@ class EmojiButtonPopover extends React.Component { renderNextCategory(); } - renderCategory(category, i, ctx, position, callback) { + renderCategory(category, i, ctx, pos, callback) { + const position = pos if (i > 0) { position.x = 18; position.y += 48; @@ -304,7 +299,8 @@ class EmojiButtonPopover extends React.Component { + onScroll={this.onScroll} + >
+ style={{zoom: "0.5"}} + >
diff --git a/internal_packages/composer-emoji/lib/emoji-button.jsx b/internal_packages/composer-emoji/lib/emoji-button.jsx index 5ec66aba6..76c9cd77b 100644 --- a/internal_packages/composer-emoji/lib/emoji-button.jsx +++ b/internal_packages/composer-emoji/lib/emoji-button.jsx @@ -7,10 +7,6 @@ import EmojiButtonPopover from './emoji-button-popover'; class EmojiButton extends React.Component { static displayName = 'EmojiButton'; - constructor() { - super(); - } - onClick = () => { const buttonRect = ReactDOM.findDOMNode(this).getBoundingClientRect(); Actions.openPopover( @@ -22,7 +18,7 @@ class EmojiButton extends React.Component { render() { return ( ); } diff --git a/internal_packages/composer-emoji/lib/emoji-composer-extension.jsx b/internal_packages/composer-emoji/lib/emoji-composer-extension.jsx index ce72b069d..9b6f6442e 100644 --- a/internal_packages/composer-emoji/lib/emoji-composer-extension.jsx +++ b/internal_packages/composer-emoji/lib/emoji-composer-extension.jsx @@ -130,6 +130,7 @@ class EmojiComposerExtension extends ComposerExtension { EmojiComposerExtension._onSelectEmoji(args); } } + return null; }; static applyTransformsToDraft = ({draft}) => { @@ -214,6 +215,7 @@ class EmojiComposerExtension extends ComposerExtension { style="margin-top: -5px;">`; editor.insertHTML(html, {selectInsertion: false}); EmojiActions.useEmoji({emojiName: emojiName, emojiChar: emojiChar}); + return null; }; static _emojiPickerWidth(emojiOptions) { diff --git a/internal_packages/composer-emoji/lib/emoji-message-extension.jsx b/internal_packages/composer-emoji/lib/emoji-message-extension.jsx index 9d026407f..29e74fee7 100644 --- a/internal_packages/composer-emoji/lib/emoji-message-extension.jsx +++ b/internal_packages/composer-emoji/lib/emoji-message-extension.jsx @@ -4,7 +4,8 @@ import {MessageViewExtension, RegExpUtils} from 'nylas-exports'; import EmojiStore from './emoji-store'; import emoji from 'node-emoji'; -function makeIntoEmojiTag(node, emojiName) { +function makeIntoEmojiTag(nodeArg, emojiName) { + const node = nodeArg; node.src = EmojiStore.getImagePath(emojiName); node.className = `emoji ${emojiName}`; node.width = 14; diff --git a/internal_packages/composer-emoji/lib/emoji-picker.jsx b/internal_packages/composer-emoji/lib/emoji-picker.jsx index bafef4817..7dcc23034 100644 --- a/internal_packages/composer-emoji/lib/emoji-picker.jsx +++ b/internal_packages/composer-emoji/lib/emoji-picker.jsx @@ -36,20 +36,25 @@ class EmojiPicker extends React.Component { this.props.emojiOptions.forEach((emojiOption, i) => { const emojiClass = emojiIndex === i ? "btn btn-icon emoji-option" : "btn btn-icon"; let emojiChar = emoji.get(emojiOption); - emojiChar = (); + emojiChar = ( + {emojiOption} + ); emojiButtons.push( ); - emojiButtons.push(
); + emojiButtons.push(
); }); } return ( diff --git a/internal_packages/composer-emoji/lib/emoji-store.jsx b/internal_packages/composer-emoji/lib/emoji-store.jsx index 900298266..9be988fd9 100644 --- a/internal_packages/composer-emoji/lib/emoji-store.jsx +++ b/internal_packages/composer-emoji/lib/emoji-store.jsx @@ -1,7 +1,8 @@ +/* eslint global-require: "off" */ + import NylasStore from 'nylas-store'; import Rx from 'rx-lite'; import _ from 'underscore'; -import fs from 'fs'; import {DatabaseStore} from 'nylas-exports'; import EmojiActions from './emoji-actions'; @@ -19,7 +20,7 @@ class EmojiStore extends NylasStore { activate = () => { const query = DatabaseStore.findJSONBlob(EmojiJSONBlobKey); this._subscription = Rx.Observable.fromQuery(query).subscribe((emoji) => { - this._emoji = emoji ? emoji : []; + this._emoji = emoji || []; this.trigger(); }); this.listenTo(EmojiActions.useEmoji, this._onUseEmoji); @@ -59,10 +60,8 @@ class EmojiStore extends NylasStore { return curEmoji.emojiChar === emoji.emojiChar; }); if (savedEmoji) { - for (const key in emoji) { - if (emoji.hasOwnProperty(key)) { - savedEmoji[key] = emoji[key]; - } + for (const key of Object.keys(emoji)) { + savedEmoji[key] = emoji[key]; } savedEmoji.frequency++; } else { diff --git a/src/pro b/src/pro index 6b0b9cff9..dc53549b1 160000 --- a/src/pro +++ b/src/pro @@ -1 +1 @@ -Subproject commit 6b0b9cff9b710a73ad3ba4e274ffe1ba448f145b +Subproject commit dc53549b1016214a33724035a447c2545a2b5d07