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 = (
+
})
+ );
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