<?xml version="1.0" encoding="utf-8" standalone="no"?><rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0"><channel><title>Random Jots</title><managingEditor>nripendra.newa@gmail.com (Nripendra Nath Newa)</managingEditor><pubDate>Mon, 29 Oct 2018 16:16:45 GMT</pubDate><language>en-us</language><item><title>Githubdomain</title><pubDate>Sat, 2 Dec 2017 00:00:00 GMT</pubDate><guid isPermaLink="false">http://nripendra.github.io//2017/12/02/githubdomain</guid><description>&lt;h1 id="change-in-domain"&gt;Change in domain&lt;/h1&gt;
&lt;p&gt;Very short notice! My original domain &lt;code class="highlighter-rouge"&gt;blogs.nnn.ninja.np&lt;/code&gt; has been down for a while now. I tried communicating with the provider but 
to no avail. So, I have now decided to use &lt;code class="highlighter-rouge"&gt;github.io&lt;/code&gt; domain, which is the default domain given by github for any github pages.&lt;/p&gt;

&lt;p&gt;To stay safe in future, I plan to continue with this domain on perpetual basis.&lt;/p&gt;
</description></item><item><title>Learning reactjs flux, node, electron ... (Part-22)</title><pubDate>Sat, 5 Dec 2015 06:00:00 GMT</pubDate><guid isPermaLink="false">http://nripendra.github.io//fb-messenger/2015/12/05/Learning-js-technologies-part22</guid><description>&lt;aside class="related-posts"&gt; This is a multipart series filed under category &lt;a href="/categories.html#fb-messenger-ref"&gt;fb-messenger&lt;/a&gt; &lt;ul&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/19/Learning-js-technologies-part1"&gt;Part 1&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/20/Learning-js-technologies-part2"&gt;Part 2&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part3"&gt;Part 3&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part4"&gt;Part 4&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part5"&gt;Part 5&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/23/Learning-js-technologies-part6"&gt;Part 6&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/23/Learning-js-technologies-part7"&gt;Part 7&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/24/Learning-js-technologies-part8"&gt;Part 8&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/07/Learning-js-technologies-part9"&gt;Part 9&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/08/Learning-js-technologies-part10"&gt;Part 10&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/19/Learning-js-technologies-part11"&gt;Part 11&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/23/Learning-js-technologies-part12"&gt;Part 12&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/10/01/Learning-js-technologies-part13"&gt;Part 13&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/03/Learning-js-technologies-part14"&gt;Part 14&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/06/Learning-js-technologies-part15"&gt;Part 15&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/10/Learning-js-technologies-part16"&gt;Part 16&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/12/Learning-js-technologies-part17"&gt;Part 17&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/14/Learning-js-technologies-part18"&gt;Part 18&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/17/Learning-js-technologies-part19"&gt;Part 19&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/19/Learning-js-technologies-part20"&gt;Part 20&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/27/Learning-js-technologies-part21"&gt;Part 21&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/12/05/Learning-js-technologies-part22"&gt;Part 22&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; &lt;/aside&gt; &lt;h1 id="running-unit-test-inside-electron"&gt;Running unit test inside electron&lt;/h1&gt; &lt;p class="first"&gt; If you are following this series, you may already know that I have been using &lt;a href="https://github.com/tmpvar/jsdom"&gt;jsdom&lt;/a&gt; for the purpose of mocking DOM. But the experience hasn’t been very smooth. Although jsdom itself is quite great project, React doesn’t play well with jsdom. It’s quite funny since they themselves use jsdom as part of their jest framework (official testing framework from React). &lt;/p&gt; &lt;p&gt;I had been working around the incompatibilities and quirks between React and jsdom since quite the &lt;a href="https://github.com/facebook/react/issues/4740"&gt;beginning&lt;/a&gt;. Recently when I couldn’t write test for one of my &lt;a href="https://github.com/nripendra/fb-messenger/issues/17"&gt;feature&lt;/a&gt; because jsdom didn’t support CustomEvent, I started to have serious thought about changing my test approach. I finally had enough when React again started giving “dangerouslyReplaceNodeWithMarkup” exception whenever re-rendering got triggered. Basically it worked find on first render, but when I simulated some event like click that caused the DOM to change, it threw this exception. Initially I was thinking about monkey patching things by avoiding re-rendering, and dividing test into 2-3 tests. With combination of these tests I could assert that things would turn out well.&lt;/p&gt; &lt;p&gt;Meanwhile I began searching if electron can have headless...</description></item><item><title>Learning reactjs flux, node, electron ... (Part-21)</title><pubDate>Fri, 27 Nov 2015 06:00:00 GMT</pubDate><guid isPermaLink="false">http://nripendra.github.io//fb-messenger/2015/11/27/Learning-js-technologies-part21</guid><description>&lt;aside class="related-posts"&gt; This is a multipart series filed under category &lt;a href="/categories.html#fb-messenger-ref"&gt;fb-messenger&lt;/a&gt; &lt;ul&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/19/Learning-js-technologies-part1"&gt;Part 1&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/20/Learning-js-technologies-part2"&gt;Part 2&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part3"&gt;Part 3&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part4"&gt;Part 4&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part5"&gt;Part 5&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/23/Learning-js-technologies-part6"&gt;Part 6&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/23/Learning-js-technologies-part7"&gt;Part 7&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/24/Learning-js-technologies-part8"&gt;Part 8&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/07/Learning-js-technologies-part9"&gt;Part 9&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/08/Learning-js-technologies-part10"&gt;Part 10&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/19/Learning-js-technologies-part11"&gt;Part 11&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/23/Learning-js-technologies-part12"&gt;Part 12&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/10/01/Learning-js-technologies-part13"&gt;Part 13&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/03/Learning-js-technologies-part14"&gt;Part 14&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/06/Learning-js-technologies-part15"&gt;Part 15&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/10/Learning-js-technologies-part16"&gt;Part 16&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/12/Learning-js-technologies-part17"&gt;Part 17&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/14/Learning-js-technologies-part18"&gt;Part 18&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/17/Learning-js-technologies-part19"&gt;Part 19&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/19/Learning-js-technologies-part20"&gt;Part 20&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/27/Learning-js-technologies-part21"&gt;Part 21&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/12/05/Learning-js-technologies-part22"&gt;Part 22&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; &lt;/aside&gt; &lt;h1 id="the-release"&gt;The release.&lt;/h1&gt; &lt;p class="first"&gt; Finally I have released the fb-messenger as v0.1.0. Not quite usable at this time since we can just view conversation. That too just for the current session, nothing that happened before logging in to the app is showin right now. There are a lot of things remaining to accomplish to make it even an usable application, let alone feature rich like the ones from facebook themself. &lt;/p&gt; &lt;h1 id="the-journey"&gt;The journey.&lt;/h1&gt; &lt;p&gt;It was quite a pain to get it released. First of all I had to setup travsi ci to deploy to github releases. Configuration wasn’t much difficult. But after configuring found a &lt;a href="https://github.com/travis-ci/travis-ci/issues/5145"&gt;bug in travis&lt;/a&gt;. Finally after the workarround suggested in the issue itself got it working.&lt;/p&gt; &lt;p&gt;Now the next trouble started… Avira was detecting the electron exe file built on travis as a virus! I was quite worried at this point, so tested it using &lt;a href="https://www.virustotal.com/"&gt;Virustotal&lt;/a&gt;. A sigh of relief! it was a false alarm. I then submitted the report to Avira, they have confirmed about the false alarm and have mentioned that their virus database will be updated.&lt;/p&gt; &lt;p&gt;Then this another trouble followed! The application wasn’t working! The...</description></item><item><title>Learning reactjs flux, node, electron ... (Part-20)</title><pubDate>Thu, 19 Nov 2015 06:00:00 GMT</pubDate><guid isPermaLink="false">http://nripendra.github.io//fb-messenger/2015/11/19/Learning-js-technologies-part20</guid><description>&lt;aside class="related-posts"&gt; This is a multipart series filed under category &lt;a href="/categories.html#fb-messenger-ref"&gt;fb-messenger&lt;/a&gt; &lt;ul&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/19/Learning-js-technologies-part1"&gt;Part 1&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/20/Learning-js-technologies-part2"&gt;Part 2&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part3"&gt;Part 3&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part4"&gt;Part 4&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part5"&gt;Part 5&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/23/Learning-js-technologies-part6"&gt;Part 6&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/23/Learning-js-technologies-part7"&gt;Part 7&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/24/Learning-js-technologies-part8"&gt;Part 8&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/07/Learning-js-technologies-part9"&gt;Part 9&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/08/Learning-js-technologies-part10"&gt;Part 10&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/19/Learning-js-technologies-part11"&gt;Part 11&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/23/Learning-js-technologies-part12"&gt;Part 12&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/10/01/Learning-js-technologies-part13"&gt;Part 13&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/03/Learning-js-technologies-part14"&gt;Part 14&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/06/Learning-js-technologies-part15"&gt;Part 15&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/10/Learning-js-technologies-part16"&gt;Part 16&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/12/Learning-js-technologies-part17"&gt;Part 17&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/14/Learning-js-technologies-part18"&gt;Part 18&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/17/Learning-js-technologies-part19"&gt;Part 19&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/19/Learning-js-technologies-part20"&gt;Part 20&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/27/Learning-js-technologies-part21"&gt;Part 21&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/12/05/Learning-js-technologies-part22"&gt;Part 22&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; &lt;/aside&gt; &lt;h1 id="adding-support-for-receiving-emoji-and-emoticons"&gt;Adding support for receiving emoji and emoticons.&lt;/h1&gt; &lt;p class="first"&gt; I have two cards on my waffle board for receiving emoji and emoticons. Emoji are unicode characters showing various expressions. Where as emoticons are combination of plain ascii characters to denote emotions eg: “&lt;strong&gt;:)&lt;/strong&gt;” represents happy face. &lt;/p&gt; &lt;p&gt;As of now most of softwares uses image replacements to display the emoji. Pure font support for emoji (e.g Segoe UI) are emerging but it will take time to get mainstream. And probably longer time for chromium to support it. Electron is based on chromium. More over cross platform solution hasn’t emerged yet. So I needed to support emoji with image replacement technique. There are thousands of emojis so it was absolutely necessary to get a 3rd party solution, or else emoji which is just one small feature in whole chat application, would turn into a subproject of its own requiring a lot of attension. Luckily I found one: &lt;a href="https://github.com/rodrigopolo/minEmoji"&gt;minEmoji&lt;/a&gt;. In fact I had found couple of them:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://emojione.com/"&gt;EmojiOne&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="https://github.com/laurenancona/twimoji"&gt;Twimoji&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;But &lt;a href="https://github.com/rodrigopolo/minEmoji"&gt;minEmoji&lt;/a&gt; appealed to me due to its small size and simplicity, and I found it more near to what I really want....</description></item><item><title>Learning reactjs flux, node, electron ... (Part-19)</title><pubDate>Tue, 17 Nov 2015 06:00:00 GMT</pubDate><guid isPermaLink="false">http://nripendra.github.io//fb-messenger/2015/11/17/Learning-js-technologies-part19</guid><description>&lt;aside class="related-posts"&gt; This is a multipart series filed under category &lt;a href="/categories.html#fb-messenger-ref"&gt;fb-messenger&lt;/a&gt; &lt;ul&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/19/Learning-js-technologies-part1"&gt;Part 1&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/20/Learning-js-technologies-part2"&gt;Part 2&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part3"&gt;Part 3&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part4"&gt;Part 4&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part5"&gt;Part 5&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/23/Learning-js-technologies-part6"&gt;Part 6&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/23/Learning-js-technologies-part7"&gt;Part 7&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/24/Learning-js-technologies-part8"&gt;Part 8&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/07/Learning-js-technologies-part9"&gt;Part 9&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/08/Learning-js-technologies-part10"&gt;Part 10&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/19/Learning-js-technologies-part11"&gt;Part 11&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/23/Learning-js-technologies-part12"&gt;Part 12&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/10/01/Learning-js-technologies-part13"&gt;Part 13&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/03/Learning-js-technologies-part14"&gt;Part 14&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/06/Learning-js-technologies-part15"&gt;Part 15&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/10/Learning-js-technologies-part16"&gt;Part 16&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/12/Learning-js-technologies-part17"&gt;Part 17&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/14/Learning-js-technologies-part18"&gt;Part 18&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/17/Learning-js-technologies-part19"&gt;Part 19&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/19/Learning-js-technologies-part20"&gt;Part 20&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/27/Learning-js-technologies-part21"&gt;Part 21&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/12/05/Learning-js-technologies-part22"&gt;Part 22&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; &lt;/aside&gt; &lt;p class="first"&gt; A lot of things has been changed since the last post. Few more features has been added into the application, new icon has been created, started working with inno-setup to create setup files, integrated into &lt;a href="https://travis-ci.org/nripendra/fb-messenger/"&gt;travis-ci&lt;/a&gt; Changed from gulp-atom to gulp-electron for packaging the application with electron shell… &lt;/p&gt; &lt;p&gt;Instead of trello I’ve decided to use &lt;a href="https://waffle.io/nripendra/fb-messenger/"&gt;waffle.io&lt;/a&gt;, since it gives board view while making it easy to track issues in github. Trying to get more formalized with my approach. I haved divided issues into milestones, and now planning to follow proper git-flow for version control, and semver for versioning application.&lt;/p&gt; &lt;p&gt;Will discuss about most of these in this and future posts. Let’s continue with one additional feature added to the application. Now the application is able to receive stickers, although animated stickers are still not supported. The change itself was quite simple:&lt;/p&gt; &lt;p&gt;In message-item.tsx, change the render method of &lt;strong&gt;MessageContent&lt;/strong&gt; class as follows:&lt;/p&gt; &lt;div class="language-ts highlighter-rouge"&gt;&lt;div class="highlight"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;&lt;span class="nx"&gt;render&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;attachments&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="p"&gt;[]).&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;justify&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s1"&gt;'textAlign'&lt;/span&gt;&lt;span...</description></item><item><title>Learning reactjs flux, node, electron ... (Part-18)</title><pubDate>Sat, 14 Nov 2015 06:00:00 GMT</pubDate><guid isPermaLink="false">http://nripendra.github.io//fb-messenger/2015/11/14/Learning-js-technologies-part18</guid><description>&lt;aside class="related-posts"&gt; This is a multipart series filed under category &lt;a href="/categories.html#fb-messenger-ref"&gt;fb-messenger&lt;/a&gt; &lt;ul&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/19/Learning-js-technologies-part1"&gt;Part 1&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/20/Learning-js-technologies-part2"&gt;Part 2&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part3"&gt;Part 3&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part4"&gt;Part 4&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part5"&gt;Part 5&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/23/Learning-js-technologies-part6"&gt;Part 6&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/23/Learning-js-technologies-part7"&gt;Part 7&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/24/Learning-js-technologies-part8"&gt;Part 8&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/07/Learning-js-technologies-part9"&gt;Part 9&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/08/Learning-js-technologies-part10"&gt;Part 10&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/19/Learning-js-technologies-part11"&gt;Part 11&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/23/Learning-js-technologies-part12"&gt;Part 12&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/10/01/Learning-js-technologies-part13"&gt;Part 13&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/03/Learning-js-technologies-part14"&gt;Part 14&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/06/Learning-js-technologies-part15"&gt;Part 15&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/10/Learning-js-technologies-part16"&gt;Part 16&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/12/Learning-js-technologies-part17"&gt;Part 17&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/14/Learning-js-technologies-part18"&gt;Part 18&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/17/Learning-js-technologies-part19"&gt;Part 19&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/19/Learning-js-technologies-part20"&gt;Part 20&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/27/Learning-js-technologies-part21"&gt;Part 21&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/12/05/Learning-js-technologies-part22"&gt;Part 22&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; &lt;/aside&gt; &lt;p class="first"&gt; As of now the chat thread does get updated when we send or receive message, but we need to scroll to bottom to see the latest message. In this post we will make the chat thread scroll to end automatically. I’m feeling lucky as I found a &lt;a href="http://blog.vjeux.com/2013/javascript/scroll-position-with-react.html"&gt;blog entry&lt;/a&gt; explaining exactly how to do it… &lt;/p&gt; &lt;p&gt;For our purpose, we will add a private member in “ConversationHistory” class named “shouldScrollBottom”. This flag is used to determine if we should automatically scroll to bottom or not. In case user is scrolling upwards to view old messages it will be rather irritating to scroll them down. And in constructor we set the default value to false (which I don’t think is mandatory).&lt;/p&gt; &lt;div class="language-ts highlighter-rouge"&gt;&lt;div class="highlight"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;&lt;span class="kr"&gt;private&lt;/span&gt; &lt;span class="nx"&gt;shouldScrollBottom&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;boolean&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="kd"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ConversationHistoryProps&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt; &lt;span class="k"&gt;super&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;shouldScrollBottom&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt; &lt;p&gt;Now we will tap into two of the react lifecycle methods:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;componentWillUpdate and&lt;/li&gt; &lt;li&gt;componentDidUpdate&lt;/li&gt; &lt;/ul&gt; &lt;div class="language-ts highlighter-rouge"&gt;&lt;div class="highlight"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;&lt;span class="nx"&gt;componentWillUpdate&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;currentNode&lt;/span&gt; &lt;span...</description></item><item><title>Learning reactjs flux, node, electron ... (Part-17)</title><pubDate>Thu, 12 Nov 2015 06:00:00 GMT</pubDate><guid isPermaLink="false">http://nripendra.github.io//fb-messenger/2015/11/12/Learning-js-technologies-part17</guid><description>&lt;aside class="related-posts"&gt; This is a multipart series filed under category &lt;a href="/categories.html#fb-messenger-ref"&gt;fb-messenger&lt;/a&gt; &lt;ul&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/19/Learning-js-technologies-part1"&gt;Part 1&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/20/Learning-js-technologies-part2"&gt;Part 2&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part3"&gt;Part 3&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part4"&gt;Part 4&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part5"&gt;Part 5&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/23/Learning-js-technologies-part6"&gt;Part 6&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/23/Learning-js-technologies-part7"&gt;Part 7&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/24/Learning-js-technologies-part8"&gt;Part 8&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/07/Learning-js-technologies-part9"&gt;Part 9&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/08/Learning-js-technologies-part10"&gt;Part 10&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/19/Learning-js-technologies-part11"&gt;Part 11&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/23/Learning-js-technologies-part12"&gt;Part 12&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/10/01/Learning-js-technologies-part13"&gt;Part 13&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/03/Learning-js-technologies-part14"&gt;Part 14&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/06/Learning-js-technologies-part15"&gt;Part 15&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/10/Learning-js-technologies-part16"&gt;Part 16&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/12/Learning-js-technologies-part17"&gt;Part 17&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/14/Learning-js-technologies-part18"&gt;Part 18&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/17/Learning-js-technologies-part19"&gt;Part 19&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/19/Learning-js-technologies-part20"&gt;Part 20&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/27/Learning-js-technologies-part21"&gt;Part 21&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/12/05/Learning-js-technologies-part22"&gt;Part 22&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; &lt;/aside&gt; &lt;p class="first"&gt; In this post we will clean up the chat component by dividing it further into multiple subcomponents.The chat component itself is consist of two major parts: &lt;/p&gt; &lt;ul&gt; &lt;li&gt;The friend list&lt;/li&gt; &lt;li&gt;Conversation history with selected friend.&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;We already have separate component for friend list. For conversation history we are clubbing everything right into chat component. My plan is to move conversation section to separate component. The conversation component has various sections, the header in which currently selected friend’s detail is displayed, the actual conversation with that friend and the textbox to type in message.&lt;/p&gt; &lt;p&gt;With this goal in mind, let’s modify chat.tsx as follows:&lt;/p&gt; &lt;div class="language-ts highlighter-rouge"&gt;&lt;div class="highlight"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="s1"&gt;'react'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;ReactDom&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="s1"&gt;'react-dom'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;Hbox&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Vbox&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="s1"&gt;'./layout'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;ChatStore&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="s1"&gt;'../stores/chatstore'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;ChatActions&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="s1"&gt;'../actions/chatactions'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;AppStores&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="s1"&gt;'../appstores'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;connectToStore&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="s1"&gt;'../decorators/connectToStores'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;FriendList&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="s1"&gt;'./friendlist'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span...</description></item><item><title>Learning reactjs flux, node, electron ... (Part-16)</title><pubDate>Tue, 10 Nov 2015 06:00:00 GMT</pubDate><guid isPermaLink="false">http://nripendra.github.io//fb-messenger/2015/11/10/Learning-js-technologies-part16</guid><description>&lt;aside class="related-posts"&gt; This is a multipart series filed under category &lt;a href="/categories.html#fb-messenger-ref"&gt;fb-messenger&lt;/a&gt; &lt;ul&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/19/Learning-js-technologies-part1"&gt;Part 1&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/20/Learning-js-technologies-part2"&gt;Part 2&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part3"&gt;Part 3&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part4"&gt;Part 4&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part5"&gt;Part 5&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/23/Learning-js-technologies-part6"&gt;Part 6&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/23/Learning-js-technologies-part7"&gt;Part 7&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/24/Learning-js-technologies-part8"&gt;Part 8&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/07/Learning-js-technologies-part9"&gt;Part 9&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/08/Learning-js-technologies-part10"&gt;Part 10&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/19/Learning-js-technologies-part11"&gt;Part 11&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/23/Learning-js-technologies-part12"&gt;Part 12&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/10/01/Learning-js-technologies-part13"&gt;Part 13&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/03/Learning-js-technologies-part14"&gt;Part 14&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/06/Learning-js-technologies-part15"&gt;Part 15&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/10/Learning-js-technologies-part16"&gt;Part 16&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/12/Learning-js-technologies-part17"&gt;Part 17&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/14/Learning-js-technologies-part18"&gt;Part 18&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/17/Learning-js-technologies-part19"&gt;Part 19&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/19/Learning-js-technologies-part20"&gt;Part 20&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/27/Learning-js-technologies-part21"&gt;Part 21&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/12/05/Learning-js-technologies-part22"&gt;Part 22&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; &lt;/aside&gt; &lt;p class="first"&gt; In previous post we converted the login form to material-ui desing. In this post we will convert the inner pages. &lt;/p&gt; &lt;p&gt;To get started with I added a search bar on top of the friend list. To create search bar, ‘&lt;a href="http://material-ui.com/#/components/toolbars"&gt;Toolbar&lt;/a&gt;’ component was used..&lt;/p&gt; &lt;div class="language-ts highlighter-rouge"&gt;&lt;div class="highlight"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Toolbar&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;ToolbarGroup&lt;/span&gt; &lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="kr"&gt;float&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"left"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;TextField&lt;/span&gt; &lt;span class="nx"&gt;hintText&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Search..."&lt;/span&gt; &lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="err"&gt;&amp;gt; &lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/ToolbarGroup&lt;/span&gt;&lt;span class="err"&gt;&amp;gt; &lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;ToolbarGroup&lt;/span&gt; &lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="kr"&gt;float&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"right"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;ToolbarSeparator&lt;/span&gt;&lt;span class="o"&gt;/&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Popover&lt;/span&gt; &lt;span class="nx"&gt;listStyle&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;iconButtonElement&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;IconButton&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;FontIcon&lt;/span&gt; &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"fa fa-bell notification"&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/IconButton&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;} &lt;/span&gt; &lt;span class="nx"&gt;openDirection&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'bottom-right'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;ListItem&lt;/span&gt; &lt;span class="nx"&gt;leftAvatar&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Avatar&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;F&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/Avatar&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;} &lt;/span&gt; &lt;span class="nx"&gt;primaryText&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Brendan Lim"&lt;/span&gt; &lt;span class="nx"&gt;secondaryText&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;I&lt;/span&gt;&lt;span class="s1"&gt;'ll be in your neighborhood doing errands this weekend. Do you want to grab brunch? &amp;lt;/p&amp;gt; } /&amp;gt; &amp;lt;/Popover&amp;gt; &amp;lt;IconButton&amp;gt;&amp;lt;FontIcon className="fa fa-sign-out" /&amp;gt;&amp;lt;/IconButton&amp;gt; &amp;lt;/ToolbarGroup&amp;gt; &amp;lt;/Toolbar&amp;gt; &lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt; &lt;p&gt;Along with search textbox,...</description></item><item><title>Learning reactjs flux, node, electron ... (Part-15)</title><pubDate>Fri, 6 Nov 2015 06:00:00 GMT</pubDate><guid isPermaLink="false">http://nripendra.github.io//fb-messenger/2015/11/06/Learning-js-technologies-part15</guid><description>&lt;aside class="related-posts"&gt; This is a multipart series filed under category &lt;a href="/categories.html#fb-messenger-ref"&gt;fb-messenger&lt;/a&gt; &lt;ul&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/19/Learning-js-technologies-part1"&gt;Part 1&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/20/Learning-js-technologies-part2"&gt;Part 2&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part3"&gt;Part 3&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part4"&gt;Part 4&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part5"&gt;Part 5&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/23/Learning-js-technologies-part6"&gt;Part 6&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/23/Learning-js-technologies-part7"&gt;Part 7&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/24/Learning-js-technologies-part8"&gt;Part 8&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/07/Learning-js-technologies-part9"&gt;Part 9&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/08/Learning-js-technologies-part10"&gt;Part 10&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/19/Learning-js-technologies-part11"&gt;Part 11&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/23/Learning-js-technologies-part12"&gt;Part 12&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/10/01/Learning-js-technologies-part13"&gt;Part 13&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/03/Learning-js-technologies-part14"&gt;Part 14&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/06/Learning-js-technologies-part15"&gt;Part 15&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/10/Learning-js-technologies-part16"&gt;Part 16&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/12/Learning-js-technologies-part17"&gt;Part 17&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/14/Learning-js-technologies-part18"&gt;Part 18&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/17/Learning-js-technologies-part19"&gt;Part 19&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/19/Learning-js-technologies-part20"&gt;Part 20&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/27/Learning-js-technologies-part21"&gt;Part 21&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/12/05/Learning-js-technologies-part22"&gt;Part 22&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; &lt;/aside&gt; &lt;p class="first"&gt; So far the UI for our project looked quite dull. And I was quite bored looking at the UI, so I decided to go for some styling. It was also meant to be a breath of fresh air for the project which was getting quite monotonous. &lt;/p&gt; &lt;p&gt;Instead of diving into all css, I chose to go for awesome &lt;a href="http://material-ui.com/"&gt;material ui&lt;/a&gt; kit. I figured out that it should be pretty easy, as it is built for reactjs. All I need to do was download it and use its components instead of default html components. Well I was quite wrong didn’t turnout to be the way I was day dreaming.&lt;/p&gt; &lt;p&gt;Downloading was pretty easy:&lt;/p&gt; &lt;div class="highlighter-rouge"&gt;&lt;div class="highlight"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;npm install material-ui --save &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt; &lt;p&gt;Using material-Ui wasn’t that difficult either. All that needs to be done is to require the component that is to be used:&lt;/p&gt; &lt;div class="language-ts highlighter-rouge"&gt;&lt;div class="highlight"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Avatar&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'material-ui/lib/avatar'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;FontIcon&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'material-ui/lib/font-icon'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;RaisedButton&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'material-ui/lib/raised-button'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;TextField&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'material-ui/lib/text-field'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span...</description></item><item><title>Learning reactjs flux, node, electron ... (Part-14)</title><pubDate>Tue, 3 Nov 2015 06:00:00 GMT</pubDate><guid isPermaLink="false">http://nripendra.github.io//fb-messenger/2015/11/03/Learning-js-technologies-part14</guid><description>&lt;aside class="related-posts"&gt; This is a multipart series filed under category &lt;a href="/categories.html#fb-messenger-ref"&gt;fb-messenger&lt;/a&gt; &lt;ul&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/19/Learning-js-technologies-part1"&gt;Part 1&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/20/Learning-js-technologies-part2"&gt;Part 2&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part3"&gt;Part 3&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part4"&gt;Part 4&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part5"&gt;Part 5&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/23/Learning-js-technologies-part6"&gt;Part 6&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/23/Learning-js-technologies-part7"&gt;Part 7&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/24/Learning-js-technologies-part8"&gt;Part 8&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/07/Learning-js-technologies-part9"&gt;Part 9&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/08/Learning-js-technologies-part10"&gt;Part 10&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/19/Learning-js-technologies-part11"&gt;Part 11&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/23/Learning-js-technologies-part12"&gt;Part 12&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/10/01/Learning-js-technologies-part13"&gt;Part 13&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/03/Learning-js-technologies-part14"&gt;Part 14&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/06/Learning-js-technologies-part15"&gt;Part 15&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/10/Learning-js-technologies-part16"&gt;Part 16&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/12/Learning-js-technologies-part17"&gt;Part 17&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/14/Learning-js-technologies-part18"&gt;Part 18&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/17/Learning-js-technologies-part19"&gt;Part 19&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/19/Learning-js-technologies-part20"&gt;Part 20&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/27/Learning-js-technologies-part21"&gt;Part 21&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/12/05/Learning-js-technologies-part22"&gt;Part 22&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; &lt;/aside&gt; &lt;p class="first"&gt; Its been quite long since I worked on this small side project of mine. Well I got busy with my day to day works and couldn't find enough time to work on this. I though that I should work atleast once a month even if it is for an hour or so. Hence, I continued with adding one more feature, i.e. showing received messages from the friend. &lt;/p&gt; &lt;p&gt;With these changes we won’t still be able to send message, but message sent by friends will be listed.&lt;/p&gt; &lt;p&gt;To get started following change was made ChatStore class&lt;/p&gt; &lt;div class="language-ts highlighter-rouge"&gt;&lt;div class="highlight"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;Store&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="s1"&gt;'delorean'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;ChatService&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="s1"&gt;'../services/chatservice'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;EventEmitter&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="s1"&gt;'events'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;ChatStore&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;Store&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="kr"&gt;private&lt;/span&gt; &lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;any&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="kr"&gt;private&lt;/span&gt; &lt;span class="nx"&gt;chatService&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ChatService&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;currentUserId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;currentChatThread&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;error&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;any&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;friendList&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;any&lt;/span&gt;&lt;span...</description></item><item><title>Learning reactjs flux, node, electron ... (Part-13)</title><pubDate>Thu, 1 Oct 2015 06:00:00 GMT</pubDate><guid isPermaLink="false">http://nripendra.github.io//fb-messenger/2015/10/01/Learning-js-technologies-part13</guid><description>&lt;aside class="related-posts"&gt; This is a multipart series filed under category &lt;a href="/categories.html#fb-messenger-ref"&gt;fb-messenger&lt;/a&gt; &lt;ul&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/19/Learning-js-technologies-part1"&gt;Part 1&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/20/Learning-js-technologies-part2"&gt;Part 2&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part3"&gt;Part 3&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part4"&gt;Part 4&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part5"&gt;Part 5&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/23/Learning-js-technologies-part6"&gt;Part 6&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/23/Learning-js-technologies-part7"&gt;Part 7&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/24/Learning-js-technologies-part8"&gt;Part 8&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/07/Learning-js-technologies-part9"&gt;Part 9&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/08/Learning-js-technologies-part10"&gt;Part 10&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/19/Learning-js-technologies-part11"&gt;Part 11&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/23/Learning-js-technologies-part12"&gt;Part 12&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/10/01/Learning-js-technologies-part13"&gt;Part 13&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/03/Learning-js-technologies-part14"&gt;Part 14&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/06/Learning-js-technologies-part15"&gt;Part 15&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/10/Learning-js-technologies-part16"&gt;Part 16&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/12/Learning-js-technologies-part17"&gt;Part 17&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/14/Learning-js-technologies-part18"&gt;Part 18&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/17/Learning-js-technologies-part19"&gt;Part 19&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/19/Learning-js-technologies-part20"&gt;Part 20&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/27/Learning-js-technologies-part21"&gt;Part 21&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/12/05/Learning-js-technologies-part22"&gt;Part 22&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; &lt;/aside&gt; &lt;p class="first"&gt; In this post we will add a very basic interactivity functionality. When any friend in friend list is clicked that friend should be the active friend. &lt;/p&gt; &lt;p&gt;I had to make changes in total of 5 files all together to get this functinality working… One change would have been rather unnecessary if I had followed proper unit testing :)&lt;/p&gt; &lt;p&gt;The problem was with merge method in layout.tsx’s Style component. Now over all layout.tsx looks like this:&lt;/p&gt; &lt;div class="language-ts highlighter-rouge"&gt;&lt;div class="highlight"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="s1"&gt;'react'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="cm"&gt;/** * Style * @ref: https://gist.github.com/Munawwar/7926618 */&lt;/span&gt; &lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;Style&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;any&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;merge&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="na"&gt;target&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;any&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//@ref = https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/assign&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="kc"&gt;undefined&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;target&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;TypeError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Cannot convert first argument to object'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="kr"&gt;arguments&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span...</description></item><item><title>Learning reactjs flux, node, electron ... (Part-12)</title><pubDate>Wed, 23 Sep 2015 06:00:00 GMT</pubDate><guid isPermaLink="false">http://nripendra.github.io//fb-messenger/2015/09/23/Learning-js-technologies-part12</guid><description>&lt;aside class="related-posts"&gt; This is a multipart series filed under category &lt;a href="/categories.html#fb-messenger-ref"&gt;fb-messenger&lt;/a&gt; &lt;ul&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/19/Learning-js-technologies-part1"&gt;Part 1&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/20/Learning-js-technologies-part2"&gt;Part 2&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part3"&gt;Part 3&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part4"&gt;Part 4&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part5"&gt;Part 5&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/23/Learning-js-technologies-part6"&gt;Part 6&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/23/Learning-js-technologies-part7"&gt;Part 7&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/24/Learning-js-technologies-part8"&gt;Part 8&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/07/Learning-js-technologies-part9"&gt;Part 9&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/08/Learning-js-technologies-part10"&gt;Part 10&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/19/Learning-js-technologies-part11"&gt;Part 11&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/23/Learning-js-technologies-part12"&gt;Part 12&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/10/01/Learning-js-technologies-part13"&gt;Part 13&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/03/Learning-js-technologies-part14"&gt;Part 14&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/06/Learning-js-technologies-part15"&gt;Part 15&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/10/Learning-js-technologies-part16"&gt;Part 16&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/12/Learning-js-technologies-part17"&gt;Part 17&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/14/Learning-js-technologies-part18"&gt;Part 18&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/17/Learning-js-technologies-part19"&gt;Part 19&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/19/Learning-js-technologies-part20"&gt;Part 20&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/27/Learning-js-technologies-part21"&gt;Part 21&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/12/05/Learning-js-technologies-part22"&gt;Part 22&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; &lt;/aside&gt; &lt;p class="first"&gt; In this post we will divide the chat component, abstracting the task of listing friends to a separate component. And we will also add some styling to the component. Let's name the component that lists friends as "FriendList". &lt;/p&gt; &lt;p&gt;To get started we will add a file named “friendlist.tsx” in src/components folder.&lt;/p&gt; &lt;div class="language-ts highlighter-rouge"&gt;&lt;div class="highlight"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="s1"&gt;'react'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;Hbox&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Vbox&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="s1"&gt;'./layout'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;FriendListProps&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;friendList&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;any&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{};&lt;/span&gt;&lt;span class="c1"&gt;//Dictionary&amp;lt;string, any&amp;gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;FriendList&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Component&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;FriendListProps&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;any&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="kd"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="na"&gt;props&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;FriendListProps&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;super&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="nx"&gt;render&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;state&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="s1"&gt;'online'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'1px solid gray'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;borderLeft&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'3px...</description></item><item><title>Learning reactjs flux, node, electron ... (Part-11)</title><pubDate>Sat, 19 Sep 2015 06:00:00 GMT</pubDate><guid isPermaLink="false">http://nripendra.github.io//fb-messenger/2015/09/19/Learning-js-technologies-part11</guid><description>&lt;aside class="related-posts"&gt; This is a multipart series filed under category &lt;a href="/categories.html#fb-messenger-ref"&gt;fb-messenger&lt;/a&gt; &lt;ul&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/19/Learning-js-technologies-part1"&gt;Part 1&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/20/Learning-js-technologies-part2"&gt;Part 2&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part3"&gt;Part 3&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part4"&gt;Part 4&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part5"&gt;Part 5&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/23/Learning-js-technologies-part6"&gt;Part 6&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/23/Learning-js-technologies-part7"&gt;Part 7&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/24/Learning-js-technologies-part8"&gt;Part 8&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/07/Learning-js-technologies-part9"&gt;Part 9&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/08/Learning-js-technologies-part10"&gt;Part 10&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/19/Learning-js-technologies-part11"&gt;Part 11&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/23/Learning-js-technologies-part12"&gt;Part 12&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/10/01/Learning-js-technologies-part13"&gt;Part 13&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/03/Learning-js-technologies-part14"&gt;Part 14&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/06/Learning-js-technologies-part15"&gt;Part 15&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/10/Learning-js-technologies-part16"&gt;Part 16&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/12/Learning-js-technologies-part17"&gt;Part 17&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/14/Learning-js-technologies-part18"&gt;Part 18&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/17/Learning-js-technologies-part19"&gt;Part 19&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/19/Learning-js-technologies-part20"&gt;Part 20&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/27/Learning-js-technologies-part21"&gt;Part 21&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/12/05/Learning-js-technologies-part22"&gt;Part 22&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; &lt;/aside&gt; &lt;p class="first"&gt; So far the chat interface has been intangible, we have console logs but the front interface itself doesn't do anything at all. Lets change this lets make it display list of our friends. We will start by doing this in the chat component itself and then refactor various functionalities of the chat component into their own component as required. &lt;/p&gt; &lt;p&gt;After looking at the log it is quite clear that the friend list is returned as key value pair of userId and user details. One thing that seems to be missing though is the user’s online status. It does seem like online status can be updated through the use of presence events, but doesn’t look very promising to me, as it will take sometime to get the list updated, till then we will have to assume all friends offline.&lt;/p&gt; &lt;div class="language-ts highlighter-rouge"&gt;&lt;div class="highlight"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="s1"&gt;'react'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;ChatStore&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="s1"&gt;'../stores/chatstore'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;ChatActions&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="s1"&gt;'../actions/chatactions'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;Hbox&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Vbox&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="s1"&gt;'./layout'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;AppStores&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span...</description></item><item><title>Learning reactjs flux, node, electron ... (Part-10)</title><pubDate>Tue, 8 Sep 2015 06:00:00 GMT</pubDate><guid isPermaLink="false">http://nripendra.github.io//fb-messenger/2015/09/08/Learning-js-technologies-part10</guid><description>&lt;aside class="related-posts"&gt; This is a multipart series filed under category &lt;a href="/categories.html#fb-messenger-ref"&gt;fb-messenger&lt;/a&gt; &lt;ul&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/19/Learning-js-technologies-part1"&gt;Part 1&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/20/Learning-js-technologies-part2"&gt;Part 2&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part3"&gt;Part 3&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part4"&gt;Part 4&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part5"&gt;Part 5&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/23/Learning-js-technologies-part6"&gt;Part 6&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/23/Learning-js-technologies-part7"&gt;Part 7&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/24/Learning-js-technologies-part8"&gt;Part 8&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/07/Learning-js-technologies-part9"&gt;Part 9&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/08/Learning-js-technologies-part10"&gt;Part 10&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/19/Learning-js-technologies-part11"&gt;Part 11&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/23/Learning-js-technologies-part12"&gt;Part 12&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/10/01/Learning-js-technologies-part13"&gt;Part 13&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/03/Learning-js-technologies-part14"&gt;Part 14&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/06/Learning-js-technologies-part15"&gt;Part 15&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/10/Learning-js-technologies-part16"&gt;Part 16&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/12/Learning-js-technologies-part17"&gt;Part 17&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/14/Learning-js-technologies-part18"&gt;Part 18&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/17/Learning-js-technologies-part19"&gt;Part 19&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/19/Learning-js-technologies-part20"&gt;Part 20&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/27/Learning-js-technologies-part21"&gt;Part 21&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/12/05/Learning-js-technologies-part22"&gt;Part 22&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; &lt;/aside&gt; &lt;p class="first"&gt; Let's create a layout component that would enable us to organize our components in terms of hbox and vbox. You'll find an example of these layout rules &lt;a href="https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XUL/Tutorial/The_Box_Model"&gt;here&lt;/a&gt;. Don't be lazy please go ahead and click the link! I'll be waiting... &lt;/p&gt; &lt;p&gt;If you did actually went through the article it would be quite clear how hbox and vbox components can make our life easy when it comes to laying out our components. Add a file named “layout.tsx” in src/components folder.&lt;/p&gt; &lt;div class="language-ts highlighter-rouge"&gt;&lt;div class="highlight"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="s1"&gt;'react'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="cm"&gt;/** * Style * @ref: https://gist.github.com/Munawwar/7926618 */&lt;/span&gt; &lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;Style&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;any&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;merge&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="na"&gt;target&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;any&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="na"&gt;source&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;any&lt;/span&gt;&lt;span class="p"&gt;[])&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="na"&gt;from&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nx"&gt;any&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="na"&gt;keys&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nb"&gt;Array&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;s&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;s&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;source&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span...</description></item><item><title>Learning reactjs flux, node, electron ... (Part-9)</title><pubDate>Mon, 7 Sep 2015 06:00:00 GMT</pubDate><guid isPermaLink="false">http://nripendra.github.io//fb-messenger/2015/09/07/Learning-js-technologies-part9</guid><description>&lt;aside class="related-posts"&gt; This is a multipart series filed under category &lt;a href="/categories.html#fb-messenger-ref"&gt;fb-messenger&lt;/a&gt; &lt;ul&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/19/Learning-js-technologies-part1"&gt;Part 1&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/20/Learning-js-technologies-part2"&gt;Part 2&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part3"&gt;Part 3&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part4"&gt;Part 4&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part5"&gt;Part 5&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/23/Learning-js-technologies-part6"&gt;Part 6&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/23/Learning-js-technologies-part7"&gt;Part 7&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/24/Learning-js-technologies-part8"&gt;Part 8&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/07/Learning-js-technologies-part9"&gt;Part 9&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/08/Learning-js-technologies-part10"&gt;Part 10&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/19/Learning-js-technologies-part11"&gt;Part 11&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/23/Learning-js-technologies-part12"&gt;Part 12&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/10/01/Learning-js-technologies-part13"&gt;Part 13&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/03/Learning-js-technologies-part14"&gt;Part 14&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/06/Learning-js-technologies-part15"&gt;Part 15&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/10/Learning-js-technologies-part16"&gt;Part 16&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/12/Learning-js-technologies-part17"&gt;Part 17&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/14/Learning-js-technologies-part18"&gt;Part 18&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/17/Learning-js-technologies-part19"&gt;Part 19&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/19/Learning-js-technologies-part20"&gt;Part 20&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/27/Learning-js-technologies-part21"&gt;Part 21&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/12/05/Learning-js-technologies-part22"&gt;Part 22&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; &lt;/aside&gt; &lt;p class="first"&gt; In previous post we added functionality for login. Now user can enter their facebook username and password and get authenticated. Next step is to show chatting screen as soon as login is successful. But due to the way "facebook-chat-api" and Flux works, I'm quite confused. After login is successful we get "api" object in the callback. For any further communication we need this "api" object. My plan is to have a separate store and services for chat interface. And confusion is over how loginStore should pass the "api" object to chatStore? As per flux model the communication flow should always be one-way, from view -&amp;gt; action -&amp;gt; dispatcher -&amp;gt; store -&amp;gt; view. But here we need to pass data from one store to next. May be I'm mis-understanding the concept of store here. &lt;/p&gt; &lt;p&gt;My solution here is to save “api” object as a property of loginStore, and pass it as a property of chat component when rendering. Here’s what my plan is:&lt;/p&gt; &lt;div class="language-ts highlighter-rouge"&gt;&lt;div class="highlight"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Chat&lt;/span&gt; &lt;span class="nx"&gt;store&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;AppStores&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;chatStore&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;AppStores&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;loginStore&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="sr"&gt;/&amp;gt;&lt;/span&gt;&lt;span class="se"&gt;)&lt;/span&gt;&lt;span class="err"&gt;;...</description></item><item><title>Learning reactjs flux, node, electron ... (Part-8)</title><pubDate>Mon, 24 Aug 2015 06:00:00 GMT</pubDate><guid isPermaLink="false">http://nripendra.github.io//fb-messenger/2015/08/24/Learning-js-technologies-part8</guid><description>&lt;aside class="related-posts"&gt; This is a multipart series filed under category &lt;a href="/categories.html#fb-messenger-ref"&gt;fb-messenger&lt;/a&gt; &lt;ul&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/19/Learning-js-technologies-part1"&gt;Part 1&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/20/Learning-js-technologies-part2"&gt;Part 2&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part3"&gt;Part 3&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part4"&gt;Part 4&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part5"&gt;Part 5&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/23/Learning-js-technologies-part6"&gt;Part 6&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/23/Learning-js-technologies-part7"&gt;Part 7&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/24/Learning-js-technologies-part8"&gt;Part 8&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/07/Learning-js-technologies-part9"&gt;Part 9&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/08/Learning-js-technologies-part10"&gt;Part 10&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/19/Learning-js-technologies-part11"&gt;Part 11&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/23/Learning-js-technologies-part12"&gt;Part 12&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/10/01/Learning-js-technologies-part13"&gt;Part 13&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/03/Learning-js-technologies-part14"&gt;Part 14&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/06/Learning-js-technologies-part15"&gt;Part 15&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/10/Learning-js-technologies-part16"&gt;Part 16&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/12/Learning-js-technologies-part17"&gt;Part 17&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/14/Learning-js-technologies-part18"&gt;Part 18&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/17/Learning-js-technologies-part19"&gt;Part 19&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/19/Learning-js-technologies-part20"&gt;Part 20&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/27/Learning-js-technologies-part21"&gt;Part 21&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/12/05/Learning-js-technologies-part22"&gt;Part 22&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; &lt;/aside&gt; &lt;p class="first"&gt; Currently the login store's authenticate method does nothing much. Obviously it should try to login from Facebook. For this purpose we will use [facebook-chat-api](https://www.npmjs.com/package/facebook-chat-api). We will wrap actual calls to the "facebook-chat-api" inside our service classes. As of now I'm planning to use LoginService class for login, and ChatService to get the chat running. &lt;/p&gt; &lt;p&gt;Lets focus on login first for now.&lt;/p&gt; &lt;p&gt;Add following import in login.spec.tsx&lt;/p&gt; &lt;div class="language-ts highlighter-rouge"&gt;&lt;div class="highlight"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;LoginService&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="s1"&gt;'../../src/services/loginservice'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt; &lt;p&gt;Then add following specs:&lt;/p&gt; &lt;div class="language-ts highlighter-rouge"&gt;&lt;div class="highlight"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;&lt;span class="nx"&gt;it&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"should call LoginService.authenticate when login button is clicked, and form is valid"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;HTMLFormElement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;prototype&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;checkValidity&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//We don't actually want to hit facebook in our unit test&lt;/span&gt; &lt;span class="nx"&gt;spyOn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;LoginService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;prototype&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'authenticate'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;and&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;returnValue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;({}));&lt;/span&gt; &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;loginForm&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Login&lt;/span&gt; &lt;span class="nx"&gt;store&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;AppStores&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;loginStore&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="sr"&gt;/&amp;gt;, document.body&lt;/span&gt;&lt;span class="se"&gt;)&lt;/span&gt;&lt;span class="err"&gt;; &lt;/span&gt; &lt;span class="nx"&gt;ReactTestUtils&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Simulate&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;click&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;findDOMNode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;loginForm&lt;/span&gt;&lt;span...</description></item><item><title>Learning reactjs flux, node, electron ... (Part-7)</title><pubDate>Sun, 23 Aug 2015 06:00:00 GMT</pubDate><guid isPermaLink="false">http://nripendra.github.io//fb-messenger/2015/08/23/Learning-js-technologies-part7</guid><description>&lt;aside class="related-posts"&gt; This is a multipart series filed under category &lt;a href="/categories.html#fb-messenger-ref"&gt;fb-messenger&lt;/a&gt; &lt;ul&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/19/Learning-js-technologies-part1"&gt;Part 1&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/20/Learning-js-technologies-part2"&gt;Part 2&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part3"&gt;Part 3&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part4"&gt;Part 4&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part5"&gt;Part 5&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/23/Learning-js-technologies-part6"&gt;Part 6&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/23/Learning-js-technologies-part7"&gt;Part 7&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/24/Learning-js-technologies-part8"&gt;Part 8&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/07/Learning-js-technologies-part9"&gt;Part 9&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/08/Learning-js-technologies-part10"&gt;Part 10&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/19/Learning-js-technologies-part11"&gt;Part 11&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/23/Learning-js-technologies-part12"&gt;Part 12&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/10/01/Learning-js-technologies-part13"&gt;Part 13&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/03/Learning-js-technologies-part14"&gt;Part 14&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/06/Learning-js-technologies-part15"&gt;Part 15&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/10/Learning-js-technologies-part16"&gt;Part 16&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/12/Learning-js-technologies-part17"&gt;Part 17&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/14/Learning-js-technologies-part18"&gt;Part 18&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/17/Learning-js-technologies-part19"&gt;Part 19&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/19/Learning-js-technologies-part20"&gt;Part 20&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/27/Learning-js-technologies-part21"&gt;Part 21&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/12/05/Learning-js-technologies-part22"&gt;Part 22&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; &lt;/aside&gt; &lt;p class="first"&gt; Lets try adding some behaviour into the login form, we created in the previous post. To get the behaviour we want, we will follow the recommended pattern from Facebook i.e. Flux. &lt;/p&gt; &lt;p&gt;There are mainly 4 parts that makes up Flux:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Store&lt;/li&gt; &lt;li&gt;Dispatcher&lt;/li&gt; &lt;li&gt;Action&lt;/li&gt; &lt;li&gt;View&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;We already have the View part, i.e. the App and Login components we have been creating so far. For other parts we will use delorean. To use delorean we will install it first.&lt;/p&gt; &lt;div class="highlighter-rouge"&gt;&lt;div class="highlight"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;npm install delorean --save-dev &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt; &lt;p&gt;For implementation of Flux, I’m following the recommendations from the following blog post (a must read if you haven’t already done so): &lt;a href="http://blog.andrewray.me/flux-for-stupid-people/"&gt;http://blog.andrewray.me/flux-for-stupid-people/&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Lets first create a store. We will be using concepts introduced in this post itself. Below are few quotes about stores concepts from the article:&lt;/p&gt; &lt;blockquote&gt; &lt;ul&gt; &lt;li&gt;A store is a singleton&lt;/li&gt; &lt;li&gt;Store then responds to the dispatched event.&lt;/li&gt; &lt;li&gt;A store is not a model. A store contains models.&lt;/li&gt; &lt;li&gt;Store emits an event, but not using the dispatcher&lt;/li&gt; &lt;li&gt;A store is the only thing in your application that knows how to update data&lt;/li&gt; &lt;li&gt;A store represents a single “domain” of your application.&lt;/li&gt; &lt;/ul&gt;...</description></item><item><title>Learning reactjs flux, node, electron ... (Part-6)</title><pubDate>Sun, 23 Aug 2015 06:00:00 GMT</pubDate><guid isPermaLink="false">http://nripendra.github.io//fb-messenger/2015/08/23/Learning-js-technologies-part6</guid><description>&lt;aside class="related-posts"&gt; This is a multipart series filed under category &lt;a href="/categories.html#fb-messenger-ref"&gt;fb-messenger&lt;/a&gt; &lt;ul&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/19/Learning-js-technologies-part1"&gt;Part 1&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/20/Learning-js-technologies-part2"&gt;Part 2&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part3"&gt;Part 3&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part4"&gt;Part 4&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part5"&gt;Part 5&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/23/Learning-js-technologies-part6"&gt;Part 6&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/23/Learning-js-technologies-part7"&gt;Part 7&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/24/Learning-js-technologies-part8"&gt;Part 8&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/07/Learning-js-technologies-part9"&gt;Part 9&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/08/Learning-js-technologies-part10"&gt;Part 10&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/19/Learning-js-technologies-part11"&gt;Part 11&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/23/Learning-js-technologies-part12"&gt;Part 12&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/10/01/Learning-js-technologies-part13"&gt;Part 13&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/03/Learning-js-technologies-part14"&gt;Part 14&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/06/Learning-js-technologies-part15"&gt;Part 15&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/10/Learning-js-technologies-part16"&gt;Part 16&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/12/Learning-js-technologies-part17"&gt;Part 17&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/14/Learning-js-technologies-part18"&gt;Part 18&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/17/Learning-js-technologies-part19"&gt;Part 19&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/19/Learning-js-technologies-part20"&gt;Part 20&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/27/Learning-js-technologies-part21"&gt;Part 21&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/12/05/Learning-js-technologies-part22"&gt;Part 22&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; &lt;/aside&gt; &lt;p class="first"&gt; Lets establish a basic flow for our application. The initial thing that user sees as soon as application is started is the login interface. Once user enters the credentials and is successfully validated, the user should see the chat interface. Chat interface will consist of the user's friend list, and the interface to type messages. &lt;/p&gt; &lt;p&gt;I’m not really a designer so here’s basic wire frame &lt;img src="/assets/posts/fb-messenger-6/wire-login.png" alt="wire-login.png" /&gt;&lt;/p&gt; &lt;p&gt;&lt;img src="/assets/posts/fb-messenger-6/wire-authenticated.png" alt="wire-authenticated.png" /&gt;&lt;/p&gt; &lt;p&gt;Lets start by writing some tests. We will be using jasmine and jsdom to write our tests. To begin with lets install jasmine and jsdom.&lt;/p&gt; &lt;div class="highlighter-rouge"&gt;&lt;div class="highlight"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;npm install gulp-jasmine --save-dev npm install jsdom --save-dev tsd install jasmine tsd install jsdom &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt; &lt;p&gt;Add following entries in the filesGlob section of tsconfig.json file.&lt;/p&gt; &lt;div class="highlighter-rouge"&gt;&lt;div class="highlight"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;"./tests/**/*.ts" "./tests/**/*.tsx" &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt; &lt;p&gt;Your filesGlob should look something like this:&lt;/p&gt; &lt;div class="highlighter-rouge"&gt;&lt;div class="highlight"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;"filesGlob": [ "./src/**/*.ts", "./src/**/*.tsx", "./tests/**/*.ts", "./tests/**/*.tsx", "./tools/typings/**/*.d.ts", "!./node_modules/**/*", "!./out/**/*", "!./tests/out/**/*", "!./electron/**/*" ] &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt; &lt;aside&gt; Note: my initial plan was to write tests in js, so I didn't have filesGlob entires for test folder. But I noted that both jasmine and jsdom has definitelytyped entries, so I decided to use typescript itself. &lt;/aside&gt;...</description></item><item><title>Learning reactjs flux, node, electron ... (Part-5)</title><pubDate>Fri, 21 Aug 2015 06:00:00 GMT</pubDate><guid isPermaLink="false">http://nripendra.github.io//fb-messenger/2015/08/21/Learning-js-technologies-part5</guid><description>&lt;aside class="related-posts"&gt; This is a multipart series filed under category &lt;a href="/categories.html#fb-messenger-ref"&gt;fb-messenger&lt;/a&gt; &lt;ul&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/19/Learning-js-technologies-part1"&gt;Part 1&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/20/Learning-js-technologies-part2"&gt;Part 2&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part3"&gt;Part 3&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part4"&gt;Part 4&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part5"&gt;Part 5&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/23/Learning-js-technologies-part6"&gt;Part 6&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/23/Learning-js-technologies-part7"&gt;Part 7&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/24/Learning-js-technologies-part8"&gt;Part 8&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/07/Learning-js-technologies-part9"&gt;Part 9&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/08/Learning-js-technologies-part10"&gt;Part 10&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/19/Learning-js-technologies-part11"&gt;Part 11&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/23/Learning-js-technologies-part12"&gt;Part 12&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/10/01/Learning-js-technologies-part13"&gt;Part 13&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/03/Learning-js-technologies-part14"&gt;Part 14&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/06/Learning-js-technologies-part15"&gt;Part 15&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/10/Learning-js-technologies-part16"&gt;Part 16&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/12/Learning-js-technologies-part17"&gt;Part 17&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/14/Learning-js-technologies-part18"&gt;Part 18&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/17/Learning-js-technologies-part19"&gt;Part 19&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/19/Learning-js-technologies-part20"&gt;Part 20&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/27/Learning-js-technologies-part21"&gt;Part 21&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/12/05/Learning-js-technologies-part22"&gt;Part 22&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; &lt;/aside&gt; &lt;p class="first"&gt; A series titled "Learning reactjs flux, node, electron ...", with four posts already published nothing much has been done yet about ReactJs or flux. That's absurd right? Yes, I too am with you. Now is the time to do some justice to the title. So, lets get started with ReactJs. &lt;/p&gt; &lt;p&gt;Well this isn’t supposed to be a tutorial about ReactJs, so if you are looking for tutorial about how to get started or working philosophy of reactjs, you may want to visit some other blog. In this series we will take more practical stance. In my opinion this approach would be helpful for someone who has gone through such tutorials and knows a thing or two about react already, but want to know what all those theories means when writing down code. I’ll try to explain some of my design choice though. Probably also share links to blogs based on which I make some decission. I may be mis-understanding the intension of original author, if anyone points out my mistakes I would be really grateful.&lt;/p&gt; &lt;p&gt;So, let’s being with installing react first.&lt;/p&gt; &lt;div class="highlighter-rouge"&gt;&lt;div class="highlight"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;npm install react --save-dev &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt; &lt;p&gt;Since we are using...</description></item><item><title>Learning reactjs flux, node, electron ... (Part-4)</title><pubDate>Fri, 21 Aug 2015 06:00:00 GMT</pubDate><guid isPermaLink="false">http://nripendra.github.io//fb-messenger/2015/08/21/Learning-js-technologies-part4</guid><description>&lt;aside class="related-posts"&gt; This is a multipart series filed under category &lt;a href="/categories.html#fb-messenger-ref"&gt;fb-messenger&lt;/a&gt; &lt;ul&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/19/Learning-js-technologies-part1"&gt;Part 1&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/20/Learning-js-technologies-part2"&gt;Part 2&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part3"&gt;Part 3&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part4"&gt;Part 4&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part5"&gt;Part 5&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/23/Learning-js-technologies-part6"&gt;Part 6&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/23/Learning-js-technologies-part7"&gt;Part 7&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/24/Learning-js-technologies-part8"&gt;Part 8&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/07/Learning-js-technologies-part9"&gt;Part 9&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/08/Learning-js-technologies-part10"&gt;Part 10&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/19/Learning-js-technologies-part11"&gt;Part 11&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/23/Learning-js-technologies-part12"&gt;Part 12&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/10/01/Learning-js-technologies-part13"&gt;Part 13&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/03/Learning-js-technologies-part14"&gt;Part 14&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/06/Learning-js-technologies-part15"&gt;Part 15&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/10/Learning-js-technologies-part16"&gt;Part 16&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/12/Learning-js-technologies-part17"&gt;Part 17&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/14/Learning-js-technologies-part18"&gt;Part 18&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/17/Learning-js-technologies-part19"&gt;Part 19&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/19/Learning-js-technologies-part20"&gt;Part 20&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/27/Learning-js-technologies-part21"&gt;Part 21&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/12/05/Learning-js-technologies-part22"&gt;Part 22&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; &lt;/aside&gt; &lt;p class="first"&gt; Finally we now have a basic structure of folders, configurations files, build system and a minimal running program in place, after these excruciating long process. Now, its time to commit things to git and sync with github. If you have followed throughly, I haven't created a repository in github. We do have a local git repository but it isn't cloned from github. At this point, my initial thought was something on this line: &lt;/p&gt; &lt;ul&gt; &lt;li&gt;Rename local folder.&lt;/li&gt; &lt;li&gt;Goto to github.com.&lt;/li&gt; &lt;li&gt;Create repository there.&lt;/li&gt; &lt;li&gt;Clone the repository (using clone to desktop button).&lt;/li&gt; &lt;li&gt;Copy all the files/folders to this cloned repository.&lt;/li&gt; &lt;li&gt;commit and Sync.&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;Phew! quite a process. Luckily I didn’t do it! I wanted to investigate if github for desktop had easier way. Well thanks to github, it does have that feature. Heres how I did it:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Open github for windows and click on the “+” icon.&lt;/li&gt; &lt;li&gt;Choose “Add” tab&lt;/li&gt; &lt;li&gt;Type name of repository and paste the path of repository (D:\Projects\Node\fb-messenger for me), then click “Create repository” button&lt;/li&gt; &lt;li&gt;Now commit the files, and click on “publish”&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;Thats it!!&lt;/p&gt; &lt;p&gt;This is how dialog for adding existing repository looks like. &lt;img src="/assets/posts/fb-messenger-1/git01.png" alt="Add existing...</description></item><item><title>Learning reactjs flux, node, electron ... (Part-3)</title><pubDate>Fri, 21 Aug 2015 06:00:00 GMT</pubDate><guid isPermaLink="false">http://nripendra.github.io//fb-messenger/2015/08/21/Learning-js-technologies-part3</guid><description>&lt;aside class="related-posts"&gt; This is a multipart series filed under category &lt;a href="/categories.html#fb-messenger-ref"&gt;fb-messenger&lt;/a&gt; &lt;ul&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/19/Learning-js-technologies-part1"&gt;Part 1&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/20/Learning-js-technologies-part2"&gt;Part 2&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part3"&gt;Part 3&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part4"&gt;Part 4&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part5"&gt;Part 5&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/23/Learning-js-technologies-part6"&gt;Part 6&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/23/Learning-js-technologies-part7"&gt;Part 7&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/24/Learning-js-technologies-part8"&gt;Part 8&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/07/Learning-js-technologies-part9"&gt;Part 9&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/08/Learning-js-technologies-part10"&gt;Part 10&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/19/Learning-js-technologies-part11"&gt;Part 11&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/23/Learning-js-technologies-part12"&gt;Part 12&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/10/01/Learning-js-technologies-part13"&gt;Part 13&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/03/Learning-js-technologies-part14"&gt;Part 14&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/06/Learning-js-technologies-part15"&gt;Part 15&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/10/Learning-js-technologies-part16"&gt;Part 16&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/12/Learning-js-technologies-part17"&gt;Part 17&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/14/Learning-js-technologies-part18"&gt;Part 18&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/17/Learning-js-technologies-part19"&gt;Part 19&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/19/Learning-js-technologies-part20"&gt;Part 20&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/27/Learning-js-technologies-part21"&gt;Part 21&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/12/05/Learning-js-technologies-part22"&gt;Part 22&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; &lt;/aside&gt; &lt;p class="first"&gt; In previous post we did write some simple code, whose expected output is to print "Hello from electron!" into the console when we run the program. Now the thing remaining is to actually run the program. But to run program we will have to build first. &lt;/p&gt; &lt;h2 id="building-javascript"&gt;Building javascript!!&lt;/h2&gt; &lt;p&gt;Hmm.. yes, we will build javascript, the basic building will involve compiling typescript code to es6 code, and further transpile es6 code to es5 (js) code, and combile all the modules into single file. Normally it is good idea to write various modules in seperate files for maintainability, but when deploying it is easier if all modules reside in one file. In case of normal browser application we can further opt to minify and gzip the content.&lt;/p&gt; &lt;h2 id="lets-begin"&gt;Lets begin&lt;/h2&gt; &lt;p&gt;We will be using &lt;a href="http://gulpjs.com/"&gt;gulp&lt;/a&gt; as our build tool. Actually it is a task runner similar to rake in Ruby world. We can create a list of tasks and decide the sequence of task we would like to run to achieve our final output. To be able to create we will have to install gulp first. It is easy just open console and type...</description></item><item><title>Learning reactjs flux, node, electron ... (Part-2)</title><pubDate>Thu, 20 Aug 2015 06:00:00 GMT</pubDate><guid isPermaLink="false">http://nripendra.github.io//fb-messenger/2015/08/20/Learning-js-technologies-part2</guid><description>&lt;aside class="related-posts"&gt; This is a multipart series filed under category &lt;a href="/categories.html#fb-messenger-ref"&gt;fb-messenger&lt;/a&gt; &lt;ul&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/19/Learning-js-technologies-part1"&gt;Part 1&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/20/Learning-js-technologies-part2"&gt;Part 2&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part3"&gt;Part 3&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part4"&gt;Part 4&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part5"&gt;Part 5&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/23/Learning-js-technologies-part6"&gt;Part 6&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/23/Learning-js-technologies-part7"&gt;Part 7&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/24/Learning-js-technologies-part8"&gt;Part 8&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/07/Learning-js-technologies-part9"&gt;Part 9&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/08/Learning-js-technologies-part10"&gt;Part 10&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/19/Learning-js-technologies-part11"&gt;Part 11&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/23/Learning-js-technologies-part12"&gt;Part 12&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/10/01/Learning-js-technologies-part13"&gt;Part 13&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/03/Learning-js-technologies-part14"&gt;Part 14&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/06/Learning-js-technologies-part15"&gt;Part 15&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/10/Learning-js-technologies-part16"&gt;Part 16&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/12/Learning-js-technologies-part17"&gt;Part 17&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/14/Learning-js-technologies-part18"&gt;Part 18&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/17/Learning-js-technologies-part19"&gt;Part 19&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/19/Learning-js-technologies-part20"&gt;Part 20&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/27/Learning-js-technologies-part21"&gt;Part 21&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/12/05/Learning-js-technologies-part22"&gt;Part 22&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; &lt;/aside&gt; &lt;p class="first"&gt; In previous post we created project's folder structure and wrote some json config files. In this post we will continue on that and write some code. &lt;/p&gt; &lt;h2 id="about-the-folder-structure"&gt;About the folder structure&lt;/h2&gt; &lt;p&gt;Lets get started by explaining about how I plan to use the folders.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;electron: this folder will be used to save electron files, cache folder will be used by gulp-atom package to download and cache the prebuilt electron files, and in build folder we will have our final product.&lt;/li&gt; &lt;li&gt;out: this folder will contain compiled output. In js we will have the output of typescript compilation, and in compile we will further compile the files in the js folder using babel and browserify to create single js file.&lt;/li&gt; &lt;li&gt;src: this folder is where we will have all our codes. Since I’m planning to use Flux pattern, I’m already dividing this folder into several part like actions, stores etc.&lt;/li&gt; &lt;li&gt;tests: this is where we will have our unit tests. We will write unit test in js + jsx probably using few es6/es7 features, so even test will require build step. The compiled test will be stored in tests/out folder&lt;/li&gt; &lt;li&gt;tools/typings: this is where...</description></item><item><title>Learning reactjs flux, node, electron ... (Part-1)</title><pubDate>Wed, 19 Aug 2015 06:00:00 GMT</pubDate><guid isPermaLink="false">http://nripendra.github.io//fb-messenger/2015/08/19/Learning-js-technologies-part1</guid><description>&lt;aside class="related-posts"&gt; This is a multipart series filed under category &lt;a href="/categories.html#fb-messenger-ref"&gt;fb-messenger&lt;/a&gt; &lt;ul&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/19/Learning-js-technologies-part1"&gt;Part 1&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/20/Learning-js-technologies-part2"&gt;Part 2&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part3"&gt;Part 3&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part4"&gt;Part 4&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/21/Learning-js-technologies-part5"&gt;Part 5&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/23/Learning-js-technologies-part6"&gt;Part 6&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/23/Learning-js-technologies-part7"&gt;Part 7&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/08/24/Learning-js-technologies-part8"&gt;Part 8&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/07/Learning-js-technologies-part9"&gt;Part 9&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/08/Learning-js-technologies-part10"&gt;Part 10&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/19/Learning-js-technologies-part11"&gt;Part 11&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/09/23/Learning-js-technologies-part12"&gt;Part 12&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/10/01/Learning-js-technologies-part13"&gt;Part 13&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/03/Learning-js-technologies-part14"&gt;Part 14&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/06/Learning-js-technologies-part15"&gt;Part 15&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/10/Learning-js-technologies-part16"&gt;Part 16&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/12/Learning-js-technologies-part17"&gt;Part 17&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/14/Learning-js-technologies-part18"&gt;Part 18&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/17/Learning-js-technologies-part19"&gt;Part 19&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/19/Learning-js-technologies-part20"&gt;Part 20&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/11/27/Learning-js-technologies-part21"&gt;Part 21&lt;/a&gt;&lt;/li&gt; &lt;li&gt; &lt;a href="/fb-messenger/2015/12/05/Learning-js-technologies-part22"&gt;Part 22&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; &lt;/aside&gt; &lt;p class="first"&gt; Its been a while since I last worked on big enough javascript project. Javascript landscape has changed a lot since then. Es6, Es7 are now hot topics, so are the technologies like gulp/grunt nodejs and npm. I have been learning about these technologies through various sources, but haven't been able practically apply what I have learned. So I came up with this plan to get my hands dirty by writing some code using these technologies. I'm planning this post to be a series, where I'll track my progress. To get started, I'll be setting up a project and commit it to github. &lt;/p&gt; &lt;p&gt;(Be warned!! It is a project to get my hands dirty on, it may never be completed. Also, be warned that I’m in no way authority over these topics.)&lt;/p&gt; &lt;h2 id="about-the-project"&gt;About the project&lt;/h2&gt; &lt;p&gt;This is going to be github’s &lt;a href="http://electron.atom.io/"&gt;electron&lt;/a&gt; based desktop application. Windows will be used as primary target, as I have easy access to windows machine, but hopefully it will be cross platform due to the technology being used. I’ll try to build it for mac once I get hold of a mac machine.&lt;/p&gt; &lt;p&gt;I’ve been hearing quite nice...</description></item><item><title>Portable Jekyll setup</title><pubDate>Tue, 18 Aug 2015 17:05:00 GMT</pubDate><guid isPermaLink="false">http://nripendra.github.io//meta/2015/08/18/Jekyll-setup</guid><description>&lt;p&gt;It has been sometime since I wrote my last post. I have switched couple of different machines in this period of time. I was trying to write a post, but then it occured to me that I have forgotten how I used to do it :laughing:&lt;/p&gt; &lt;p&gt;In this post I’ll try to outline the steps for my own future reference, someone else may find it helpful too.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Go to https://github.com/madhur/PortableJekyll click “Download Zip” button.&lt;/li&gt; &lt;li&gt;For more setup instruction look at https://github.com/madhur/PortableJekyll/wiki&lt;/li&gt; &lt;li&gt;Create a file named &lt;strong&gt;set_JEKYLL_PATH.cmd&lt;/strong&gt; with following content:&lt;/li&gt; &lt;/ul&gt; &lt;pre&gt;&lt;code class="language-bat"&gt;SETX JEKYLL_PATH %~dp0 &lt;/code&gt;&lt;/pre&gt; &lt;p&gt;Save this file in same directory where you have portable jekyll, i.e. this file and protable jekyll’s &lt;strong&gt;setpath.cmd&lt;/strong&gt; should be on same level (in my case I have it at E:\portable-softwares\PortableJekyll), and double click the file. This is one time setup, until you change the machine, once this file is double clicked it sets an environment variable named JEKYLL_PATH.&lt;/p&gt; &lt;p&gt;In the jekyll blog root path I have a file jekyllhelper.bat with following content.&lt;/p&gt; &lt;pre&gt;&lt;code class="language-bat"&gt;ECHO Setting env variables... ECHO %1 if "%1"=="-d" ( CALL %JEKYLL_PATH%setpath.cmd START jekyll serve &amp;amp; ping 1.1.1.1 -n 1 -w 10000 &amp;gt; nul &amp;amp; START http://localhost:4000/ &amp;amp; EXIT EXIT ) else ( CALL %JEKYLL_PATH%setpath.cmd jekyll %1 ) &lt;/code&gt;&lt;/pre&gt; &lt;ul&gt; &lt;li&gt;ref: &lt;ul&gt; &lt;li&gt;https://github.com/nripendra/nripendra.github.io (see there is Jekyllhelper.bat file)&lt;/li&gt; &lt;li&gt;https://github.com/nripendra/nripendra.github.io/blob/master/Jekyllhelper.bat (refer it’s content.)&lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;/ul&gt; &lt;p&gt;Open command window in root path of your blog project (in my case it is at D:\Git\nripendra.github.io), type ‘Jekyllhelper build’. This compiles the md files into html and opens the homepage in the default browser. Sometimes the serving process may not be completed withing 10 seconds, in that case wait for sometime and then refresh the browser.&lt;/p&gt; &lt;p&gt;If you look carefully my blog has visual studio project file. In this project file I have removed all...</description></item><item><title>Cubicle.js</title><pubDate>Tue, 16 Dec 2014 06:00:00 GMT</pubDate><guid isPermaLink="false">http://nripendra.github.io//cubicle-js/2014/12/16/cubicle-js</guid><description>&lt;p&gt;&lt;a href="https://github.com/nripendra/Cubicle.js"&gt;Cubical.Js&lt;/a&gt; is a small light-weight javascript library for defining modular components. Released under &lt;a href="https://github.com/nripendra/Cubicle.js/blob/master/LICENSE"&gt;MIT&lt;/a&gt; license, it is my yet another opensource project that I published this year. This year I’m quite happy to be able to release couple of my projects into opensource world. Cubicle.js is one of such projects. Many times when working on larger projects we need a way to organize our javascript codes into multiple files/classes/modules. In past I normally used to create javascript classes, either using some sort of frameworks or using vanilla-js. No matter what, I would end up with a lot of classes that clutter up the global namespace.&lt;/p&gt; &lt;p&gt;One of my project used &lt;a href="http://requirejs.org/"&gt;requirejs&lt;/a&gt; framework which is quite nice framework that loads desired modules asynchronously at the run time. But whole loading javascript asynchronously didn’t fit well with this particular project, where javascript was spread across a lot of pages. Having to require jquery each time just to use some “$” magic was also not very comfy. We couldn’t help much as this project was a jumbled mess of CMS and dynamic server-side code. We decided to remove requirejs. When I began with refactoring, I got into a situation, a lot of our code was defined as requirejs &lt;a href="http://requirejs.org/docs/api.html#define"&gt;modules&lt;/a&gt;. I didn’t wanted to move away from this approach, so I created my own “define” function. It worked very similar to requirejs’s “define”. But unlike requirejs, it was fully synchronous. Hence we had to properly bundle each module in correct sequence.&lt;/p&gt; &lt;p&gt;Need less to say I was quite happy with what the define function did. I could move all 74 requirejs modules in couple of hours which, I was expecting to take at least couple of weeks, if I had to entirely create separate vanilla js classes for each modules.&lt;/p&gt;...</description></item><item><title>Introducing xGherkin.net</title><pubDate>Sun, 23 Nov 2014 07:35:00 GMT</pubDate><guid isPermaLink="false">http://nripendra.github.io//xgherkin-net/2014/11/23/introducing-xGhekin-net</guid><description>&lt;p&gt;Test Driven Development (TDD) is the current norm in industry. It refers to design of software product based on series of Tests. Tests in TDD are not essentially unit tests, but unit test frameworks and concepts are primarily in use. The &lt;strong&gt;Red-Green-Refactor&lt;/strong&gt; flow is at the heart of TDD, it basically means write a failing test first (which test tools generally denotes in Red), then make it pass (Green) and then refactor the code. Which implies that we should write test even before writing actual code. Also a rule of thumb for compiled language like c# would be to consider compilation failures as a Red.&lt;/p&gt; &lt;h2 id="what-is-bdd"&gt;What is BDD?&lt;/h2&gt; &lt;p&gt;BDD is new style of doing TDD, it maintains same Red-Green-Refactor flow and can be done with same frameworks and tools used for TDD. The difference being its ultimate focus on human beings, rather than machine. BDD encourages writing test such that it is easy to read for humans. This human focus does turn out to be very important aspect of BDD, so much so that people like me who are wary of writting Tests can now turn their mind towards writing tests.&lt;/p&gt; &lt;p&gt;Writing tests in BDD mostly seems like explaining what software should do in very human language, that’s exactly the intended purpose of TDD! But “T” in TDD didn’t do it any justice. Programmers who were already writing unit tests, integration tests etc continued on their path, and new entrants to TDD domain were rather perplexed at the complexity. &lt;strong&gt;How would I even write test without any code to ‘test’?&lt;/strong&gt; This was exactly my question for quite some ‘years’ when I first got introduced to TDD! Finally figured out after going throug a lots of article and trying things myself. But still today when I know at least basics...</description></item><item><title>About my Favicon</title><pubDate>Sat, 1 Nov 2014 11:55:00 GMT</pubDate><guid isPermaLink="false">http://nripendra.github.io//meta/2014/11/01/about-myfavicon</guid><description>&lt;p&gt;Favicons are very small, so small that, most of us don’t even realize they are present. Small they might be but not unimportant, as I recently learned. The favicons do subtly identify a website, without us even knowing (we are accustomed to recognize Facebook tab using their icon). I really didn’t give much thought to favicons before this, they were always there and I was ok. When I started this blog, the first thing I noticed was the fact that the space for my favicon in tab was blank. So, I began to think about what my favicon should be? May be a small image of myself? Or, should I ask one of my designer colleagues to design it for me. I was surrounded by quite dilemma on this topic for quite some time after release of this blog.&lt;/p&gt; &lt;h3 id="lost-and-found"&gt;Lost and found!&lt;/h3&gt; &lt;p&gt;Well, not quite "lost" per say, but I found my favicon, all thanks to &lt;a href="http://stackoverflow.com/"&gt;stackoverflow&lt;/a&gt; and &lt;a href="https://www.gravatar.com/"&gt;Gravatar&lt;/a&gt;. While I was asking questions and giving answers on &lt;a href="http://stackoverflow.com/"&gt;stackoverflow&lt;/a&gt;, I noticed that &lt;a href="http://stackoverflow.com/"&gt;stackoverflow&lt;/a&gt; uses my "&lt;em&gt;identicon&lt;/em&gt;" generated by &lt;a href="https://www.gravatar.com/"&gt;Gravatar&lt;/a&gt;. Wow! This instantly clicked me, my identicon should me my favicon. It is a personal blog, and what is better favicon than something that identifies me?&lt;/p&gt; &lt;p&gt;Putting identicon up for favicon seemed to be much better idea than my initial idea of putting up small image of myself. At a 16X16 pixel my image would have lost a lot or details, so much so that it wouldn’t have been recognizable that it actually was an image of me. But this identicon can scale quite well to small sizes.&lt;/p&gt; &lt;p&gt;Here you go:&lt;/p&gt; &lt;p&gt;&lt;img src="https://www.gravatar.com/avatar/f686aaaf192af2dde05e60c4370bd2a0?s=16&amp;amp;d=identicon&amp;amp;r=PG" alt="" width="16" height="16" /&gt; &lt;img src="https://www.gravatar.com/avatar/f686aaaf192af2dde05e60c4370bd2a0?s=32&amp;amp;d=identicon&amp;amp;r=PG" alt="" width="32" height="32" /&gt; &lt;img src="https://www.gravatar.com/avatar/f686aaaf192af2dde05e60c4370bd2a0?s=64&amp;amp;d=identicon&amp;amp;r=PG" alt="" width="64" height="64" /&gt;&lt;/p&gt; &lt;h3 id="decisions"&gt;Decisions&lt;/h3&gt; &lt;p&gt;So, here we go,...</description></item><item><title>My own Domain</title><pubDate>Thu, 23 Oct 2014 01:14:00 GMT</pubDate><guid isPermaLink="false">http://nripendra.github.io//my-own-domain</guid><description>&lt;p&gt;Well lets get started with a brief back-story, I have been blogging from &lt;a href="http://nripendra-newa.blogspot.com"&gt;nripendra-newa.blogspot.com&lt;/a&gt;. Although not very active, I do like to share my ideas every now and then. When I mention url of my blog to my friends and colleagues, they always pick on me about my domain. I’m a techie so obviously I should have my own domain RIGHT :stuck_out_tongue:? This blog is response to all these sarcasm I face from time to time. Now that I have my own super cool domain name &lt;a href="http://nnn.ninja.np"&gt;nnn.ninja.np&lt;/a&gt;, I decided to use it for my blogs.&lt;/p&gt; &lt;h3 id="decissions-decissions"&gt;Decissions Decissions&lt;/h3&gt; &lt;h4 id="domain-name"&gt;Domain name&lt;/h4&gt; &lt;p&gt;Well, I’m from Nepal so I thought to take up .np domain, primarily because it is free for Nepalese, all I needed to do was to produce a government verified Identity. Although not the best user interface, our domain Registrar’s registration process was quite straight forward.&lt;/p&gt; &lt;p&gt;Our national domain Registrar requires that a personal domain name must include all parts of name as per the citizenship card. Since my full name is “Nripendra Nath Newa” it would become quite a long one if I used my name, so I decided to use just the initials, hence “nnn”.&lt;/p&gt; &lt;p&gt;I would have preferred nnn.np as my domain but our registrar required that I had to choose a generic Top Level Domain(gTLD). So, after going through the list of available generic domains I finally settled down for .ninja domain. Mainly because it sounds cool, breaking free from (not so cool) traditional domain names like .com, .net. Also since my domain name already had 3 ‘n’s, both gTLD and ccTLD staring with n was fun, and to some extent I always had this fantasy of becoming a Ninja myself :smile:&lt;/p&gt; &lt;h4 id="blog-hosting"&gt;Blog hosting&lt;/h4&gt; &lt;p&gt;When I started registering my domain name, I...</description></item></channel></rss>