<?xml version="1.0"?>
<puzzles xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.0pdd.com/puzzles.xsd" date="2019-03-24T11:16:33+00:00" version="0.30.16">
  <puzzle alive="false">
    <issue href="https://github.com/codeforthailand/election-live/issues/2" closed="2019-03-17T14:16:35+00:00">2</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-d27db1b0</id>
    <lines>50-50</lines>
    <body>Extract data subscription part to create-subscription.</body>
    <file>src/components/GlobalPanel.js</file>
    <author>Thai on Cloud9</author>
    <email>dtinth@spacet.me</email>
    <time>2019-03-17T13:22:53Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/codeforthailand/election-live/issues/3" closed="2019-03-17T13:37:22+00:00">3</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-b7da613f</id>
    <lines>52-52</lines>
    <body>Model the types of score subscription.</body>
    <file>src/components/GlobalPanel.js</file>
    <author>Thai on Cloud9</author>
    <email>dtinth@spacet.me</email>
    <time>2019-03-17T13:22:53Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/codeforthailand/election-live/issues/4" closed="2019-03-19T20:26:41+00:00">4</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-c7fae5f2</id>
    <lines>6-6</lines>
    <body>Implement responsive layout and navigation</body>
    <file>src/components/layout.js</file>
    <author>Thai on Cloud9</author>
    <email>dtinth@spacet.me</email>
    <time>2019-03-17T13:22:53Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/codeforthailand/election-live/issues/5" closed="2019-03-20T04:15:03+00:00">5</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-e3647017</id>
    <lines>40-41</lines>
    <body>Improve performance of `getProvinceById` to be O(1), e.g. by pre-generating a map.</body>
    <file>src/data/information.js</file>
    <author>Thai on Cloud9</author>
    <email>dtinth@spacet.me</email>
    <time>2019-03-17T13:22:53Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/codeforthailand/election-live/issues/6" closed="2019-03-20T04:15:06+00:00">6</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-2323ec8b</id>
    <lines>52-53</lines>
    <body>Improve performance of `getPartyById` to be O(1), e.g. by pre-generating a map.</body>
    <file>src/data/information.js</file>
    <author>Thai on Cloud9</author>
    <email>dtinth@spacet.me</email>
    <time>2019-03-17T13:22:53Z</time>
    <children/>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/codeforthailand/election-live/issues/7">7</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-3e65a273</id>
    <lines>12-16</lines>
    <body>Add Analytics, e.g. Google Analytics. Check out Gatsby docs for how to add analytics - Main Guide: https://www.gatsbyjs.org/docs/adding-analytics/ - Google Analytics: https://www.gatsbyjs.org/docs/adding-analytics/#using-gatsby-plugin-google-analytics - Google Tag Manager: https://www.gatsbyjs.org/packages/gatsby-plugin-google-tagmanager/</body>
    <file>gatsby-config.js</file>
    <author>Thai Pangsakulyanont</author>
    <email>org.yi.dttvb@gmail.com</email>
    <time>2019-03-17T17:39:36Z</time>
    <children/>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/codeforthailand/election-live/issues/8">8</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-7b7c8def</id>
    <lines>4-4</lines>
    <body>Polish the footer</body>
    <file>src/components/Footer.js</file>
    <author>Thai Pangsakulyanont</author>
    <email>org.yi.dttvb@gmail.com</email>
    <time>2019-03-17T17:46:08Z</time>
    <children/>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/codeforthailand/election-live/issues/9">9</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-f6b007b5</id>
    <lines>12-14</lines>
    <body>Add default link style - Maybe make it a different color and remove the underline. - Make sure it is keyboard accessible.</body>
    <file>src/styles/global.css</file>
    <author>Thai Pangsakulyanont</author>
    <email>org.yi.dttvb@gmail.com</email>
    <time>2019-03-17T17:46:28Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/codeforthailand/election-live/issues/10" closed="2019-03-20T04:20:31+00:00">10</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-6d4ecde9</id>
    <lines>9-10</lines>
    <body>Add page title using Helmet (see: https://www.gatsbyjs.org/docs/add-page-metadata)</body>
    <file>src/components/layout.js</file>
    <author>Thai Pangsakulyanont</author>
    <email>org.yi.dttvb@gmail.com</email>
    <time>2019-03-17T17:56:58Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/codeforthailand/election-live/issues/11" closed="2019-03-20T15:38:21+00:00">11</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-9f3e7e67</id>
    <lines>19-20</lines>
    <body>Add PWA manifest file using gatsby-plugin-manifest. (see: https://www.gatsbyjs.org/docs/add-a-manifest-file/)</body>
    <file>gatsby-config.js</file>
    <author>Thai Pangsakulyanont</author>
    <email>org.yi.dttvb@gmail.com</email>
    <time>2019-03-17T17:58:30Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/codeforthailand/election-live/issues/12" closed="2019-03-17T18:53:39+00:00">12</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-bf73ac08</id>
    <lines>16-16</lines>
    <body>Implement &lt;PartyStatsRow /&gt; component</body>
    <file>src/components/KitchenSink.js</file>
    <author>Thai Pangsakulyanont</author>
    <email>org.yi.dttvb@gmail.com</email>
    <time>2019-03-17T18:33:07Z</time>
    <children>
      <puzzle alive="false">
        <issue href="https://github.com/codeforthailand/election-live/issues/13" closed="2019-03-18T19:46:33+00:00">13</issue>
        <ticket>12</ticket>
        <estimate>0</estimate>
        <role>DEV</role>
        <id>12-e8edc4cf</id>
        <lines>3-3</lines>
        <body>Make &lt;PartyStatsRow /&gt; accept props and display values based on props.</body>
        <file>src/components/PartyStatsRow.js</file>
        <author>Thai Pangsakulyanont</author>
        <email>org.yi.dttvb@gmail.com</email>
        <time>2019-03-17T18:53:16Z</time>
        <children/>
      </puzzle>
      <puzzle alive="false">
        <issue href="https://github.com/codeforthailand/election-live/issues/14" closed="2019-03-17T19:03:00+00:00">14</issue>
        <ticket>12</ticket>
        <estimate>0</estimate>
        <role>DEV</role>
        <id>12-6a75db9b</id>
        <lines>5-5</lines>
        <body>Adjust &lt;PartyStatsRow /&gt; styling according to design.</body>
        <file>src/components/PartyStatsRow.js</file>
        <author>Thai Pangsakulyanont</author>
        <email>org.yi.dttvb@gmail.com</email>
        <time>2019-03-17T18:53:16Z</time>
        <children>
          <puzzle alive="false">
            <issue href="https://github.com/codeforthailand/election-live/issues/15" closed="2019-03-18T19:46:36+00:00">15</issue>
            <ticket>14</ticket>
            <estimate>0</estimate>
            <role>DEV</role>
            <id>14-ae470d0d</id>
            <lines>6-6</lines>
            <body>Implement score bar in &lt;PartyStatsRow /&gt;.</body>
            <file>src/components/PartyStatsRow.js</file>
            <author>Thai Pangsakulyanont</author>
            <email>org.yi.dttvb@gmail.com</email>
            <time>2019-03-17T19:02:41Z</time>
            <children/>
          </puzzle>
        </children>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/codeforthailand/election-live/issues/16" closed="2019-03-22T04:13:15+00:00">16</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-db2b4d14</id>
    <lines>4-5</lines>
    <body>Implement &lt;CandidateStatsRow /&gt; component This component displays how many votes a candidate has received.</body>
    <file>src/components/CandidateStatsRow.js</file>
    <author>Thai Pangsakulyanont</author>
    <email>org.yi.dttvb@gmail.com</email>
    <time>2019-03-17T19:09:46Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/codeforthailand/election-live/issues/17" closed="2019-03-23T08:56:29+00:00">17</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-b9478345</id>
    <lines>4-4</lines>
    <body>Add content about where we got the data from</body>
    <file>src/pages/source.js</file>
    <author>Thai Pangsakulyanont</author>
    <email>org.yi.dttvb@gmail.com</email>
    <time>2019-03-18T14:11:03Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/codeforthailand/election-live/issues/19" closed="2019-03-23T09:32:01+00:00">19</issue>
    <ticket>18</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>18-fe5a555b</id>
    <lines>43-43</lines>
    <body>Implement filtering code for &#xE40;&#xE02;&#xE15;&#xE1E;&#xE37;&#xE49;&#xE19;&#xE17;&#xE35;&#xE48;&#xE43;&#xE19;&#xE40;&#xE21;&#xE37;&#xE2D;&#xE07;</body>
    <file>src/models/information/_filters.js</file>
    <author>Thai Pangsakulyanont</author>
    <email>org.yi.dttvb@gmail.com</email>
    <time>2019-03-18T16:21:58Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/codeforthailand/election-live/issues/20" closed="2019-03-23T09:32:03+00:00">20</issue>
    <ticket>18</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>18-95187052</id>
    <lines>51-51</lines>
    <body>Implement filtering code for &#xE40;&#xE02;&#xE15;&#xE1E;&#xE37;&#xE49;&#xE19;&#xE17;&#xE35;&#xE48;&#xE19;&#xE2D;&#xE01;&#xE40;&#xE21;&#xE37;&#xE2D;&#xE07;</body>
    <file>src/models/information/_filters.js</file>
    <author>Thai Pangsakulyanont</author>
    <email>org.yi.dttvb@gmail.com</email>
    <time>2019-03-18T16:21:58Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/codeforthailand/election-live/issues/21" closed="2019-03-23T09:07:14+00:00">21</issue>
    <ticket>18</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>18-c7f367f1</id>
    <lines>59-59</lines>
    <body>Implement filtering code for Gerrymandering</body>
    <file>src/models/information/_filters.js</file>
    <author>Thai Pangsakulyanont</author>
    <email>org.yi.dttvb@gmail.com</email>
    <time>2019-03-18T16:21:58Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/codeforthailand/election-live/issues/22" closed="2019-03-23T08:52:19+00:00">22</issue>
    <ticket>18</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>18-3c00c6fa</id>
    <lines>67-67</lines>
    <body>Implement filtering code for Swing District</body>
    <file>src/models/information/_filters.js</file>
    <author>Thai Pangsakulyanont</author>
    <email>org.yi.dttvb@gmail.com</email>
    <time>2019-03-18T16:21:58Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/codeforthailand/election-live/issues/23" closed="2019-03-22T15:39:19+00:00">23</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-2a60074f</id>
    <lines>62-67</lines>
    <body>How do we determine when vote counting for a certain zone is finished? The problem is, we don&#x2019;t know beforehand how many ballots we received. And it also seems like the official API doesn&#x2019;t provide the information on progress of each zone, or whether the counting has finished. Need to check with the committee to see if the data will be available, and if not, decide the appropriate adjustments to the app.</body>
    <file>src/models/datasource.d.ts</file>
    <author>Thai Pangsakulyanont</author>
    <email>org.yi.dttvb@gmail.com</email>
    <time>2019-03-18T17:14:02Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/codeforthailand/election-live/issues/24" closed="2019-03-18T17:53:11+00:00">24</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-72b33c4d</id>
    <lines>89-91</lines>
    <body>Define JSON data format for each province. This data should contain necessary information to display - Per-zone summary</body>
    <file>src/models/datasource.d.ts</file>
    <author>Thai Pangsakulyanont</author>
    <email>org.yi.dttvb@gmail.com</email>
    <time>2019-03-18T17:14:02Z</time>
    <children>
      <puzzle alive="false">
        <issue href="https://github.com/codeforthailand/election-live/issues/25" closed="2019-03-18T20:07:26+00:00">25</issue>
        <ticket>24</ticket>
        <estimate>0</estimate>
        <role>DEV</role>
        <id>24-9f7f924e</id>
        <lines>5-5</lines>
        <body>implement &lt;PartyStatsList&gt; for &lt;PartyStatsrow /&gt; .</body>
        <file>src/components/KitchenSink.js</file>
        <author>dodadoa</author>
        <email>maddodadoa@gmail.com</email>
        <time>2019-03-18T19:03:06Z</time>
        <children/>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/codeforthailand/election-live/issues/26" closed="2019-03-23T11:07:03+00:00">26</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-4ee38d3c</id>
    <lines>12-12</lines>
    <body>Design and implement a loading state</body>
    <file>src/components/NationwideSummaryView.js</file>
    <author>Thai Pangsakulyanont</author>
    <email>org.yi.dttvb@gmail.com</email>
    <time>2019-03-18T18:52:26Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/codeforthailand/election-live/issues/27" closed="2019-03-19T04:44:22+00:00">27</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-0da576fa</id>
    <lines>12-13</lines>
    <body>Add gatsby-plugin-layout to prevent the whole layout from unmounting every time. (see: https://www.gatsbyjs.org/docs/layout-components/#how-to-prevent-layout-components-from-unmounting)</body>
    <file>src/components/PageLayout.js</file>
    <author>Thai Pangsakulyanont</author>
    <email>org.yi.dttvb@gmail.com</email>
    <time>2019-03-18T20:10:50Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/codeforthailand/election-live/issues/28" closed="2019-03-19T18:40:24+00:00">28</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-f489eb0c</id>
    <lines>11-14</lines>
    <body>Add a representative color to each party. Uncomment the following code once a property "color" is added to every party in `information/_parties.json`. color: string</body>
    <file>src/models/definition.d.ts</file>
    <author>Thai Pangsakulyanont</author>
    <email>org.yi.dttvb@gmail.com</email>
    <time>2019-03-18T20:10:50Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/codeforthailand/election-live/issues/29" closed="2019-03-19T13:45:32+00:00">29</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-daf3173f</id>
    <lines>6-6</lines>
    <body>Adjust NavBar style according to latest design (desktop).</body>
    <file>src/components/NavBar.js</file>
    <author>Thai Pangsakulyanont</author>
    <email>org.yi.dttvb@gmail.com</email>
    <time>2019-03-18T20:12:32Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/codeforthailand/election-live/issues/31" closed="2019-03-22T05:52:23+00:00">31</issue>
    <ticket>30</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>30-19a372c6</id>
    <lines>4-4</lines>
    <body>Declare the required props for Election Map.</body>
    <file>src/components/ElectionMap.js</file>
    <author>Thai Pangsakulyanont</author>
    <email>org.yi.dttvb@gmail.com</email>
    <time>2019-03-19T05:24:37Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/codeforthailand/election-live/issues/32" closed="2019-03-24T07:53:07+00:00">32</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-b9804e60</id>
    <lines>32-33</lines>
    <body>Add `gatsby-plugin-netlify` for Netlify headers. (see: https://www.gatsbyjs.org/packages/gatsby-plugin-netlify/)</body>
    <file>gatsby-config.js</file>
    <author>Thai Pangsakulyanont</author>
    <email>org.yi.dttvb@gmail.com</email>
    <time>2019-03-19T13:16:42Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/codeforthailand/election-live/issues/33" closed="2019-03-20T05:13:53+00:00">33</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-fb05d954</id>
    <lines>35-36</lines>
    <body>Add `gatsby-plugin-htaccess` for deployment to Apache-based server. (see: https://www.gatsbyjs.org/packages/gatsby-plugin-htaccess/)</body>
    <file>gatsby-config.js</file>
    <author>Thai Pangsakulyanont</author>
    <email>org.yi.dttvb@gmail.com</email>
    <time>2019-03-19T13:16:42Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/codeforthailand/election-live/issues/34" closed="2019-03-20T05:05:24+00:00">34</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-f7fafd1b</id>
    <lines>42-42</lines>
    <body>Setup deployment to live environment.</body>
    <file>.circleci/config.yml</file>
    <author>Thai Pangsakulyanont</author>
    <email>org.yi.dttvb@gmail.com</email>
    <time>2019-03-19T13:16:42Z</time>
    <children/>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/codeforthailand/election-live/issues/35">35</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-137b9003</id>
    <lines>9-9</lines>
    <body>Add kitchen sink for CompactScoreBar</body>
    <file>src/pages/dev/kitchen-sink.js</file>
    <author>Thai Pangsakulyanont</author>
    <email>org.yi.dttvb@gmail.com</email>
    <time>2019-03-19T15:34:43Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/codeforthailand/election-live/issues/36" closed="2019-03-19T19:21:45+00:00">36</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-649b950e</id>
    <lines>11-11</lines>
    <body>Add kitchen sink for DesktopScoreBar</body>
    <file>src/pages/dev/kitchen-sink.js</file>
    <author>Thai Pangsakulyanont</author>
    <email>org.yi.dttvb@gmail.com</email>
    <time>2019-03-19T15:34:43Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/codeforthailand/election-live/issues/37" closed="2019-03-20T10:40:19+00:00">37</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-804aa44c</id>
    <lines>99-99</lines>
    <body>Implement Hamburger menu according to design.</body>
    <file>src/components/MainLayout.js</file>
    <author>Thai Pangsakulyanont</author>
    <email>org.yi.dttvb@gmail.com</email>
    <time>2019-03-19T15:29:18Z</time>
    <children/>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/codeforthailand/election-live/issues/38">38</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-da0e8e1c</id>
    <lines>4-4</lines>
    <body>Design props for CompactScoreBar</body>
    <file>src/components/CompactScoreBar.js</file>
    <author>Thai Pangsakulyanont</author>
    <email>org.yi.dttvb@gmail.com</email>
    <time>2019-03-19T15:34:43Z</time>
    <children/>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/codeforthailand/election-live/issues/39">39</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-1c865966</id>
    <lines>6-6</lines>
    <body>Implement Compact Score Bar according to design</body>
    <file>src/components/CompactScoreBar.js</file>
    <author>Thai Pangsakulyanont</author>
    <email>org.yi.dttvb@gmail.com</email>
    <time>2019-03-19T15:34:43Z</time>
    <children/>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/codeforthailand/election-live/issues/40">40</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-5d825f1e</id>
    <lines>44-49</lines>
    <body>Setup CircleCI to obtain lighthouse report. This can be done by these steps: (1) Run `yarn build` to generate a built bundle (2) Start a temporary web server. (3) Run lighthouse CLI to obtain report. (See: https://github.com/GoogleChrome/lighthouse) (4) Store artifact in CircleCI using `store_artifacts` command.</body>
    <file>.circleci/config.yml</file>
    <author>Thai Pangsakulyanont</author>
    <email>org.yi.dttvb@gmail.com</email>
    <time>2019-03-19T14:43:43Z</time>
    <children/>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/codeforthailand/election-live/issues/41">41</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-675aeca2</id>
    <lines>36-36</lines>
    <body>Polish design of NationwideSummaryHeader according to the design.</body>
    <file>src/components/NationwideSummaryView.js</file>
    <author>Thai Pangsakulyanont</author>
    <email>org.yi.dttvb@gmail.com</email>
    <time>2019-03-19T16:39:04Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/codeforthailand/election-live/issues/43" closed="2019-03-21T18:42:02+00:00">43</issue>
    <ticket>42</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>42-f3f6d36f</id>
    <lines>98-98</lines>
    <body>Height and margins for mobile zone filter and search?</body>
    <file>src/components/ZoneMasterView.js</file>
    <author>Thai Pangsakulyanont</author>
    <email>org.yi.dttvb@gmail.com</email>
    <time>2019-03-19T17:39:10Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/codeforthailand/election-live/issues/44" closed="2019-03-20T05:48:34+00:00">44</issue>
    <ticket>42</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>42-2ed2acf4</id>
    <lines>112-112</lines>
    <body>Render mobile tabs</body>
    <file>src/components/ZoneMasterView.js</file>
    <author>Thai Pangsakulyanont</author>
    <email>org.yi.dttvb@gmail.com</email>
    <time>2019-03-19T17:39:10Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/codeforthailand/election-live/issues/48" closed="2019-03-21T18:38:06+00:00">48</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-e7d3ea86</id>
    <lines>6-7</lines>
    <body>Replace hardcoded mock data in DesktopScoreBarContainer with subscription to data model.</body>
    <file>src/components/DesktopScoreBarContainer.js</file>
    <author>Thai Pangsakulyanont</author>
    <email>org.yi.dttvb@gmail.com</email>
    <time>2019-03-20T05:44:15Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/codeforthailand/election-live/issues/49" closed="2019-03-21T18:38:07+00:00">49</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-a2cb78b6</id>
    <lines>74-75</lines>
    <body>Create a 1st version of ZoneSearchField component in place of the Placeholder. May be a dummy component.</body>
    <file>src/components/ZoneMasterView.js</file>
    <author>Thai Pangsakulyanont</author>
    <email>org.yi.dttvb@gmail.com</email>
    <time>2019-03-20T05:48:16Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/codeforthailand/election-live/issues/50" closed="2019-03-21T18:38:09+00:00">50</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-13da9db6</id>
    <lines>81-82</lines>
    <body>Create a 1st version of ZoneFilterPanel component in place of the Placeholder. May be a dummy component.</body>
    <file>src/components/ZoneMasterView.js</file>
    <author>Thai Pangsakulyanont</author>
    <email>org.yi.dttvb@gmail.com</email>
    <time>2019-03-20T05:48:16Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/codeforthailand/election-live/issues/51" closed="2019-03-21T18:38:13+00:00">51</issue>
    <ticket>42</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>42-9a011cc1</id>
    <lines>126-127</lines>
    <body>Implement the first version of mobile tabs May be a dummy component that looks like the real one.</body>
    <file>src/components/ZoneMasterView.js</file>
    <author>Thai Pangsakulyanont</author>
    <email>org.yi.dttvb@gmail.com</email>
    <time>2019-03-20T05:48:16Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/codeforthailand/election-live/issues/52" closed="2019-03-20T16:36:08+00:00">52</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-e93337f7</id>
    <lines>19-20</lines>
    <body>Replace mock data in NationwideSummaryHeaderContainer with subscription to the Data Model.</body>
    <file>src/pages/index.js</file>
    <author>Thai Pangsakulyanont</author>
    <email>org.yi.dttvb@gmail.com</email>
    <time>2019-03-20T05:44:15Z</time>
    <children>
      <puzzle alive="false">
        <issue href="https://github.com/codeforthailand/election-live/issues/57" closed="2019-03-22T11:27:50+00:00">57</issue>
        <ticket>52</ticket>
        <estimate>0</estimate>
        <role>DEV</role>
        <id>52-3c7320d7</id>
        <lines>3-3</lines>
        <body>Replace mock data with real data loading logic.</body>
        <file>src/models/LiveDataSubscription.js</file>
        <author>Thai on Cloud9</author>
        <email>dtinth@spacet.me</email>
        <time>2019-03-20T16:18:47Z</time>
        <children/>
      </puzzle>
      <puzzle alive="false">
        <issue href="https://github.com/codeforthailand/election-live/issues/62" closed="2019-03-20T20:07:48+00:00">62</issue>
        <ticket>52</ticket>
        <estimate>0</estimate>
        <role>DEV</role>
        <id>52-5b8cc84b</id>
        <lines>23-23</lines>
        <body>Calculate `totalZoneCount` based on filter instead of hardcoded 350.</body>
        <file>src/pages/index.js</file>
        <author>Thai on Cloud9</author>
        <email>dtinth@spacet.me</email>
        <time>2019-03-20T16:33:04Z</time>
        <children/>
      </puzzle>
      <puzzle alive="false">
        <issue href="https://github.com/codeforthailand/election-live/issues/63" closed="2019-03-20T18:28:45+00:00">63</issue>
        <ticket>52</ticket>
        <estimate>0</estimate>
        <role>DEV</role>
        <id>52-1b49df34</id>
        <lines>4-4</lines>
        <body>[Refactor] Move components/__mocks__ to __fixtures__</body>
        <file>src/components/DesktopScoreBarContainer.js</file>
        <author>Thai on Cloud9</author>
        <email>dtinth@spacet.me</email>
        <time>2019-03-20T16:48:00Z</time>
        <children/>
      </puzzle>
      <puzzle alive="false">
        <issue href="https://github.com/codeforthailand/election-live/issues/64" closed="2019-03-20T18:28:47+00:00">64</issue>
        <ticket>52</ticket>
        <estimate>0</estimate>
        <role>DEV</role>
        <id>52-2fb6fb3f</id>
        <lines>6-6</lines>
        <body>[Refactor] Move models/__mocks__ to __fixtures__</body>
        <file>src/models/LiveDataSubscription.js</file>
        <author>Thai on Cloud9</author>
        <email>dtinth@spacet.me</email>
        <time>2019-03-20T16:48:00Z</time>
        <children/>
      </puzzle>
      <puzzle alive="false">
        <issue href="https://github.com/codeforthailand/election-live/issues/75" closed="2019-03-22T11:27:52+00:00">75</issue>
        <ticket>52</ticket>
        <estimate>0</estimate>
        <role>DEV</role>
        <id>52-7e616144</id>
        <lines>57-57</lines>
        <body>Replace mock data for per-province with real data loading logic.</body>
        <file>src/models/LiveDataSubscription.js</file>
        <author>Thai Pangsakulyanont</author>
        <email>org.yi.dttvb@gmail.com</email>
        <time>2019-03-22T08:34:28Z</time>
        <children/>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/codeforthailand/election-live/issues/53" closed="2019-03-20T16:20:20+00:00">53</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-a6ea5ab6</id>
    <lines>31-32</lines>
    <body>Replace mock data in PartyStatsContainer with subscription to the Data Model.</body>
    <file>src/pages/index.js</file>
    <author>Thai Pangsakulyanont</author>
    <email>org.yi.dttvb@gmail.com</email>
    <time>2019-03-20T05:44:15Z</time>
    <children>
      <puzzle alive="false">
        <issue href="https://github.com/codeforthailand/election-live/issues/58" closed="2019-03-20T18:28:49+00:00">58</issue>
        <ticket>53</ticket>
        <estimate>0</estimate>
        <role>DEV</role>
        <id>53-809e0aaf</id>
        <lines>37-37</lines>
        <body>[Refactor] Move party stats calculation logic to models/PartyStats.</body>
        <file>src/pages/index.js</file>
        <author>Thai on Cloud9</author>
        <email>dtinth@spacet.me</email>
        <time>2019-03-20T16:18:47Z</time>
        <children/>
      </puzzle>
      <puzzle alive="false">
        <issue href="https://github.com/codeforthailand/election-live/issues/59" closed="2019-03-20T18:28:52+00:00">59</issue>
        <ticket>53</ticket>
        <estimate>0</estimate>
        <role>DEV</role>
        <id>53-ad259d5d</id>
        <lines>1-1</lines>
        <body>[Refactor] Move calculation logic related to partyStats to models/PartyStats.</body>
        <file>src/calculation/partyStats.js</file>
        <author>Thai on Cloud9</author>
        <email>dtinth@spacet.me</email>
        <time>2019-03-20T16:18:47Z</time>
        <children/>
      </puzzle>
      <puzzle alive="false">
        <issue href="https://github.com/codeforthailand/election-live/issues/60" closed="2019-03-20T18:28:54+00:00">60</issue>
        <ticket>53</ticket>
        <estimate>0</estimate>
        <role>DEV</role>
        <id>53-bfab4181</id>
        <lines>78-78</lines>
        <body>[Refactor] Move PartyStats type to models/PartyStats.</body>
        <file>src/models/ElectionEntities.d.ts</file>
        <author>Thai on Cloud9</author>
        <email>dtinth@spacet.me</email>
        <time>2019-03-20T16:18:47Z</time>
        <children/>
      </puzzle>
    </children>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/codeforthailand/election-live/issues/61" closed="2019-03-21T18:54:28+00:00">61</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-25d3af41</id>
    <lines>52-54</lines>
    <body>Allow _some_ caching for HTML files (e.g. 30~60 seconds). Right now, generated .htaccess file sets caching age to 0, which can cause unnecessarily high load.</body>
    <file>gatsby-config.js</file>
    <author>Thai on Cloud9</author>
    <email>dtinth@spacet.me</email>
    <time>2019-03-20T16:18:47Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/codeforthailand/election-live/issues/66" closed="2019-03-23T16:07:44+00:00">66</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-67a5e157</id>
    <lines>111-111</lines>
    <body>Implement and style search button on desktop.</body>
    <file>src/components/ZoneMasterView.js</file>
    <author>Thai Pangsakulyanont</author>
    <email>org.yi.dttvb@gmail.com</email>
    <time>2019-03-21T19:05:29Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/codeforthailand/election-live/issues/67" closed="2019-03-23T11:07:06+00:00">67</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-5f0fec55</id>
    <lines>11-12</lines>
    <body>Change the style to match the design check out here! https://projects.invisionapp.com/d/main/default/#/console/17016173/352732955/inspect</body>
    <file>src/components/MainLayout.js</file>
    <author>dodadoa</author>
    <email>maddodadoa@gmail.com</email>
    <time>2019-03-21T19:11:39Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/codeforthailand/election-live/issues/69" closed="2019-03-22T16:50:20+00:00">69</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-298537d0</id>
    <lines>52-53</lines>
    <body>Update zone filtering logic to allow searching by postal code and province name.</body>
    <file>src/components/ZoneSearchPanel.js</file>
    <author>Thai Pangsakulyanont</author>
    <email>org.yi.dttvb@gmail.com</email>
    <time>2019-03-21T20:52:21Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/codeforthailand/election-live/issues/70" closed="2019-03-22T20:40:39+00:00">70</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-d680e1f5</id>
    <lines>219-219</lines>
    <body>Connect the mobile tabs to routing.</body>
    <file>src/components/ZoneMasterView.js</file>
    <author>Thai Pangsakulyanont</author>
    <email>org.yi.dttvb@gmail.com</email>
    <time>2019-03-22T04:48:51Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/codeforthailand/election-live/issues/71" closed="2019-03-22T15:39:24+00:00">71</issue>
    <ticket>30</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>30-25ad3860</id>
    <lines>37-37</lines>
    <body>Push realtime result to election map instead of mock data</body>
    <file>src/components/ZoneMasterView.js</file>
    <author>@rapee</author>
    <email>iiieyes@gmail.com</email>
    <time>2019-03-22T04:55:07Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/codeforthailand/election-live/issues/76" closed="2019-03-22T17:27:17+00:00">76</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-04bb1519</id>
    <lines>38-40</lines>
    <body>Convert this state to the route. To keep the active filter, we can use query string (`location.search`). e.g. `/filters/northern?tab=map`.</body>
    <file>src/components/ZoneMasterView.js</file>
    <author>Thai Pangsakulyanont</author>
    <email>org.yi.dttvb@gmail.com</email>
    <time>2019-03-22T08:52:49Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/codeforthailand/election-live/issues/77" closed="2019-03-22T20:41:48+00:00">77</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-9ac29d92</id>
    <lines>9-9</lines>
    <body>[UI polish] Polish the spacing in ZoneSearchPanel to match the design.</body>
    <file>src/components/ZoneSearchPanel.js</file>
    <author>Thai Pangsakulyanont</author>
    <email>org.yi.dttvb@gmail.com</email>
    <time>2019-03-22T08:54:02Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/codeforthailand/election-live/issues/89" closed="2019-03-24T07:53:08+00:00">89</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-8bf3c6db</id>
    <lines>58-58</lines>
    <body>Update zone filtering logic to allow searching by postal code</body>
    <file>src/components/ZoneSearchPanel.js</file>
    <author>Supanat Pothivarakorn</author>
    <email>supanat.ptk@gmail.com</email>
    <time>2019-03-22T15:21:25Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/codeforthailand/election-live/issues/96" closed="2019-03-24T07:53:09+00:00">96</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-57a78ffe</id>
    <lines>136-139</lines>
    <body>ElectionMap: Selection does not update on route change. This is because ElectionMap manages its own "selected" state. To fix this, make ElectionMap take in the ID of current selection via props rather than managing the state inside ElectionMap.</body>
    <file>src/components/ElectionMap.js</file>
    <author>Thai Pangsakulyanont</author>
    <email>org.yi.dttvb@gmail.com</email>
    <time>2019-03-22T20:38:02Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/codeforthailand/election-live/issues/97" closed="2019-03-23T14:42:55+00:00">97</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-2cc36a26</id>
    <lines>124-125</lines>
    <body>[UI] ElectionMapContainer: Replace placeholder text in tooltip with actual content.</body>
    <file>src/components/ElectionMapContainer.js</file>
    <author>Thai Pangsakulyanont</author>
    <email>org.yi.dttvb@gmail.com</email>
    <time>2019-03-22T20:32:06Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/codeforthailand/election-live/issues/99" closed="2019-03-23T15:57:30+00:00">99</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-e21b1648</id>
    <lines>127-127</lines>
    <body>PartyStatsContainer: Handle case where data failed to load.</body>
    <file>src/pages/index.js</file>
    <author>Thai Pangsakulyanont</author>
    <email>org.yi.dttvb@gmail.com</email>
    <time>2019-03-22T21:22:54Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/codeforthailand/election-live/issues/100" closed="2019-03-23T15:57:32+00:00">100</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-72af4204</id>
    <lines>268-268</lines>
    <body>ZoneCandidateList: Handle case where data failed to load.</body>
    <file>src/pages/index.js</file>
    <author>Thai Pangsakulyanont</author>
    <email>org.yi.dttvb@gmail.com</email>
    <time>2019-03-22T21:22:54Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/codeforthailand/election-live/issues/101" closed="2019-03-23T15:48:57+00:00">101</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-77a0075b</id>
    <lines>285-285</lines>
    <body>Incorporate NO VOTES into ZoneCandidateList.</body>
    <file>src/pages/index.js</file>
    <author>Thai Pangsakulyanont</author>
    <email>org.yi.dttvb@gmail.com</email>
    <time>2019-03-22T21:22:54Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/codeforthailand/election-live/issues/102" closed="2019-03-24T11:16:33+00:00">102</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-a35fbb61</id>
    <lines>17-17</lines>
    <body>Add social meta tag, e.g. open graph image, etc.</body>
    <file>src/components/DocumentHead.js</file>
    <author>Thai Pangsakulyanont</author>
    <email>org.yi.dttvb@gmail.com</email>
    <time>2019-03-22T21:41:12Z</time>
    <children/>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/codeforthailand/election-live/issues/103">103</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-361316c7</id>
    <lines>14-16</lines>
    <body>Allow a way for us to display a banner to tell users to refresh the browser. Our app may contain bugs and we might need users to refresh our website to get the new code.</body>
    <file>src/components/PageLayout.js</file>
    <author>Thai Pangsakulyanont</author>
    <email>org.yi.dttvb@gmail.com</email>
    <time>2019-03-22T21:41:12Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/codeforthailand/election-live/issues/106" closed="2019-03-23T15:30:49+00:00">106</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-18867a8f</id>
    <lines>173-173</lines>
    <body>CountdownCurtain: Add image</body>
    <file>src/components/MainLayout.js</file>
    <author>Thai Pangsakulyanont</author>
    <email>org.yi.dttvb@gmail.com</email>
    <time>2019-03-23T08:37:26Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/codeforthailand/election-live/issues/107" closed="2019-03-23T13:26:29+00:00">107</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-50f189f4</id>
    <lines>179-179</lines>
    <body>CountdownCurtain: Replace static text with countdown</body>
    <file>src/components/MainLayout.js</file>
    <author>Thai Pangsakulyanont</author>
    <email>org.yi.dttvb@gmail.com</email>
    <time>2019-03-23T08:37:26Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/codeforthailand/election-live/issues/109" closed="2019-03-23T14:25:34+00:00">109</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-190105c7</id>
    <lines>131-133</lines>
    <body>getLatestDirectoryState: Disable this conditional if control variable "locked" is true. Have to wait for ETL team to update `latest.json`. e.g. (latestState.data.control &amp;&amp; latestState.data.control.locked)</body>
    <file>src/models/LiveDataSubscription.js</file>
    <author>Thai Pangsakulyanont</author>
    <email>org.yi.dttvb@gmail.com</email>
    <time>2019-03-23T09:09:48Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/codeforthailand/election-live/issues/111" closed="2019-03-23T11:10:57+00:00">111</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-512bf393</id>
    <lines>8-8</lines>
    <body>inject vote count props to this comp for showing total vote %</body>
    <file>src/components/VoteCounter.js</file>
    <author>Pankamol Srikaew</author>
    <email>aim.ske09@gmail.com</email>
    <time>2019-03-23T08:45:37Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/codeforthailand/election-live/issues/112" closed="2019-03-23T15:49:49+00:00">112</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-4fde1041</id>
    <lines>289-294</lines>
    <body>ZoneCandidateList Bug: Calculate goodVotes based on `data.candidates` instead of zoneStats.goodVotes. Problem: To reproduce, time travel to 20190323040304 and open a zone. You can see that I candidate receive **thousand percent** of the votes, which is impossible. The problem may be because that zoneStats and candidates fetching are not in sync, causing weird data like this. To fix this problem, we can count good votes by summing each candidate&#x2019;s score + `zoneStats.noVote`.</body>
    <file>src/pages/index.js</file>
    <author>Thai Pangsakulyanont</author>
    <email>org.yi.dttvb@gmail.com</email>
    <time>2019-03-23T09:32:57Z</time>
    <children/>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/codeforthailand/election-live/issues/114">114</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-e7181c37</id>
    <lines>35-35</lines>
    <body>implement search and select with visualization of each party</body>
    <file>src/components/ZonePartyView.js</file>
    <author>Pankamol Srikaew</author>
    <email>aim.ske09@gmail.com</email>
    <time>2019-03-23T11:33:49Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/codeforthailand/election-live/issues/115" closed="2019-03-23T14:43:04+00:00">115</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-d1c6a30c</id>
    <lines>62-62</lines>
    <body>search party: implement onChange</body>
    <file>src/components/ZonePartyView.js</file>
    <author>Pankamol Srikaew</author>
    <email>aim.ske09@gmail.com</email>
    <time>2019-03-23T11:25:39Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/codeforthailand/election-live/issues/116" closed="2019-03-24T07:54:50+00:00">116</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-05b74acd</id>
    <lines>91-91</lines>
    <body>visualize data in country map when select a party</body>
    <file>src/components/ZonePartyView.js</file>
    <author>Pankamol Srikaew</author>
    <email>aim.ske09@gmail.com</email>
    <time>2019-03-23T11:33:49Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/codeforthailand/election-live/issues/117" closed="2019-03-23T14:07:17+00:00">117</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-edaaced4</id>
    <lines>126-126</lines>
    <body>show each party vote result</body>
    <file>src/components/ZonePartyView.js</file>
    <author>Pankamol Srikaew</author>
    <email>aim.ske09@gmail.com</email>
    <time>2019-03-23T11:33:49Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/codeforthailand/election-live/issues/120" closed="2019-03-24T09:14:54+00:00">120</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-50f0f6bf</id>
    <lines>32-32</lines>
    <body>Party View - binding data to ZonePartyMemberVoteResult</body>
    <file>src/components/PerPartyMemberVoteResult.js</file>
    <author>Pankamol Srikaew</author>
    <email>aim.ske09@gmail.com</email>
    <time>2019-03-23T13:48:41Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/codeforthailand/election-live/issues/122" closed="2019-03-23T18:19:23+00:00">122</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-c71f393e</id>
    <lines>62-62</lines>
    <body>Party View - implement interactive tab</body>
    <file>src/components/PerPartyMemberVoteResult.js</file>
    <author>Pankamol Srikaew</author>
    <email>aim.ske09@gmail.com</email>
    <time>2019-03-23T13:48:41Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/codeforthailand/election-live/issues/131" closed="2019-03-23T17:59:51+00:00">131</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-782da7ba</id>
    <lines>51-51</lines>
    <body>toggle open dropdown</body>
    <file>src/components/PartyDropdown.js</file>
    <author>Krittawat Suphankomut</author>
    <email>krittawat.sup@gmail.com</email>
    <time>2019-03-23T15:41:48Z</time>
    <children/>
  </puzzle>
  <puzzle alive="false">
    <issue href="https://github.com/codeforthailand/election-live/issues/138" closed="2019-03-24T09:14:56+00:00">138</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-e830b149</id>
    <lines>83-83</lines>
    <body>Party View - result panel - implement showing candidate's vote result when select tab</body>
    <file>src/components/PerPartyMemberVoteResult.js</file>
    <author>Pankamol Srikaew</author>
    <email>aim.ske09@gmail.com</email>
    <time>2019-03-23T18:15:22Z</time>
    <children/>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/codeforthailand/election-live/issues/171">171</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-c662abcb</id>
    <lines>99-99</lines>
    <body>implement estimated councoilor graph */}</body>
    <file>src/components/PerPartySearchPanelContainer.js</file>
    <author>Pattarawat Chormai</author>
    <email>pat.chormai@gmail.com</email>
    <time>2019-03-24T06:00:48Z</time>
    <children/>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/codeforthailand/election-live/issues/172">172</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-aafb55e9</id>
    <lines>142-142</lines>
    <body>PartyView - PartyPresidentCandidateList - bind presiddent candidate data by party id</body>
    <file>src/components/PerPartySearchPanelContainer.js</file>
    <author>Thai Pangsakulyanont</author>
    <email>org.yi.dttvb@gmail.com</email>
    <time>2019-03-24T07:52:09Z</time>
    <children/>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/codeforthailand/election-live/issues/173">173</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-2d5f6489</id>
    <lines>56-56</lines>
    <body>add contributors</body>
    <file>src/pages/about.js</file>
    <author>Thai Pangsakulyanont</author>
    <email>org.yi.dttvb@gmail.com</email>
    <time>2019-03-24T07:52:09Z</time>
    <children/>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/codeforthailand/election-live/issues/177">177</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-aac0edaf</id>
    <lines>56-56</lines>
    <body>This logic is now available in getSeatDisplayModel. Refactor this component to use it.</body>
    <file>src/components/ElectionMapContainer.js</file>
    <author>Thai Pangsakulyanont</author>
    <email>org.yi.dttvb@gmail.com</email>
    <time>2019-03-24T08:55:13Z</time>
    <children/>
  </puzzle>
  <puzzle alive="true">
    <issue href="https://github.com/codeforthailand/election-live/issues/180">180</issue>
    <ticket>1</ticket>
    <estimate>0</estimate>
    <role>DEV</role>
    <id>1-86cabcc8</id>
    <lines>161-161</lines>
    <body>Party View - display winning party-list candidates</body>
    <file>src/components/PerPartyMemberVoteResult.js</file>
    <author>Unnawut Leepaisalsuwanna</author>
    <email>unnawut@unnawut.com</email>
    <time>2019-03-24T08:58:35Z</time>
    <children/>
  </puzzle>
</puzzles>
