{"action":"created","comment":{"url":"https://api.github.com/repos/artsy/force/pulls/comments/123816994","pull_request_review_id":46060395,"id":123816994,"diff_hunk":"@@ -0,0 +1,59 @@\n+import AuctionBlock from 'desktop/components/react/auction_block/auction_block'\n+import Banner from 'desktop/apps/auction2/components/page/Banner'\n+import CommercialFilter from './commercial_filter'\n+import Footer from 'desktop/apps/auction2/components/page/Footer'\n+import Header from 'desktop/apps/auction2/components/page/Header'\n+import PropTypes from 'prop-types'\n+import React from 'react'\n+import WorksByFollowedArtists from 'desktop/apps/auction2/components/commercial_filter/WorksByFollowedArtists'\n+import { connect } from 'react-redux'\n+\n+function Layout (props) {\n+  const { articles, auction, displayFollowedArtistsRail } = props\n+  const { associated_sale, eligible_sale_artworks_count } = auction.toJSON()","path":"desktop/apps/auction2/components/Layout.js","position":13,"original_position":13,"commit_id":"1b293b9f80d84d86e785537416df2b347cbbdcb7","original_commit_id":"5d776e4c61ae721e9e2475f5f28c6b39e9a7680e","user":{"login":"damassi","id":236943,"avatar_url":"https://avatars2.githubusercontent.com/u/236943?v=3","gravatar_id":"","url":"https://api.github.com/users/damassi","html_url":"https://github.com/damassi","followers_url":"https://api.github.com/users/damassi/followers","following_url":"https://api.github.com/users/damassi/following{/other_user}","gists_url":"https://api.github.com/users/damassi/gists{/gist_id}","starred_url":"https://api.github.com/users/damassi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/damassi/subscriptions","organizations_url":"https://api.github.com/users/damassi/orgs","repos_url":"https://api.github.com/users/damassi/repos","events_url":"https://api.github.com/users/damassi/events{/privacy}","received_events_url":"https://api.github.com/users/damassi/received_events","type":"User","site_admin":false},"body":"For now, yes -- so you don't have to do `.get('foo')` everywhere. And ideally, if Backbone _has_ to be used, then this sort of call takes place way up the chain so that React only sees data. Unfortunately there are a few model methods scattered about that I still need access to.   Will cleanup all of this stuff in the future. ","created_at":"2017-06-23T18:33:35Z","updated_at":"2017-06-23T18:33:35Z","html_url":"https://github.com/artsy/force/pull/1571#discussion_r123816994","pull_request_url":"https://api.github.com/repos/artsy/force/pulls/1571","_links":{"self":{"href":"https://api.github.com/repos/artsy/force/pulls/comments/123816994"},"html":{"href":"https://github.com/artsy/force/pull/1571#discussion_r123816994"},"pull_request":{"href":"https://api.github.com/repos/artsy/force/pulls/1571"}}},"pull_request":{"url":"https://api.github.com/repos/artsy/force/pulls/1571","id":126443333,"html_url":"https://github.com/artsy/force/pull/1571","diff_url":"https://github.com/artsy/force/pull/1571.diff","patch_url":"https://github.com/artsy/force/pull/1571.patch","issue_url":"https://api.github.com/repos/artsy/force/issues/1571","number":1571,"state":"open","locked":false,"title":"@acjay, @swier27 => Isomorphic React / Redux /auction/:id route ","user":{"login":"damassi","id":236943,"avatar_url":"https://avatars2.githubusercontent.com/u/236943?v=3","gravatar_id":"","url":"https://api.github.com/users/damassi","html_url":"https://github.com/damassi","followers_url":"https://api.github.com/users/damassi/followers","following_url":"https://api.github.com/users/damassi/following{/other_user}","gists_url":"https://api.github.com/users/damassi/gists{/gist_id}","starred_url":"https://api.github.com/users/damassi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/damassi/subscriptions","organizations_url":"https://api.github.com/users/damassi/orgs","repos_url":"https://api.github.com/users/damassi/repos","events_url":"https://api.github.com/users/damassi/events{/privacy}","received_events_url":"https://api.github.com/users/damassi/received_events","type":"User","site_admin":false},"body":"## Overview \r\n\r\nThe primary objective of this PR is to set down a new pattern for building isomorphic React / Redux apps in Force, via refactoring the `/auction/:id` app, en-route to a fully responsive overall `/auctions` experience. \r\n\r\nNote that changes inside of this pr take place in a newly-created `/auction2` folder, which is behind an auth route. Additionally, a new asset-file `auctions2.coffee` and `auctions2.styl` has [been created](https://github.com/damassi/force/blob/5d776e4c61ae721e9e2475f5f28c6b39e9a7680e/desktop/assets/auctions2.coffee#L21) so that things don't conflict with currently live code.\r\n\r\nFor those reviewing, if you can restrict comments to the _super high level_ structure / approach that would be appreciated. This is a first step along the road now that everything is working and the pattern has been set down. We can nitpick the smaller items and code in a different PR 😄. Each iteration will clean up the misc in-progress details of the previous version.   \r\n\r\n**Proposed \"Auctions Experience\" Refactor Phases:**\r\n1. ~~Set down a solid way to render React in force, isomorphically~~\r\n1. **[Current Phase]** ~~Set down a new app structure that blurs the line between client and server, and implement isomorphic React/Redux rendering~~\r\n1. Implement new [responsive designs](https://github.com/artsy/auctions/projects/1) for `/auction/:id`\r\n1. Merge `/auctions` and `/auction` under a single, snappy SPA application, powered by Redux and React Router. In the future additional Auctions sub-apps can go here. The idea is to get things to perform as fast as possible \r\n1. Implement _new_ `/auctions` designs. @briansw is currently in the design phase \r\n1. Implement Isomorphic Relay Router for data dependencies, with an eye towards reducing data payload in responsive mobile views. Will coordinate around work currently taking place in `reaction-force` \r\n\r\n**Changes in this PR:** \r\n- Ported over `/auction/:id` templates located in `templates` folder to React \r\n- Restructured app so that its more \"universal\" — with entrypoints at the root and everything else accessible everywhere. This follows patterns set down in Prediction \r\n- Restructured some of the code to make it more modular (while keeping logic and so on largely the same)\r\n- Updated file paths to absolute\r\n\r\nWhile there are a ton of modifications, most of them are minor file path / relocation / renaming changes. Pre-existing application logic has remained the same (though in some cases reorganized). Jade to React port code is 1-1. \r\n\r\nTo get an idea of the new file-structure, I would recommend browsing the branch here: https://github.com/damassi/force/tree/responsive-auction-views/desktop/apps/auction2\r\n\r\n<img width=\"344\" alt=\"screen shot 2017-06-21 at 2 24 15 pm\" src=\"https://user-images.githubusercontent.com/236943/27407493-598c13d0-568d-11e7-92ad-ac016fdc83d1.png\">\r\n\r\n## 10 Second App Flow:\r\n\r\n```javascript \r\n// server.js\r\n\r\nconst store = configureStore(reducers, initialState)\r\n\r\napp.get('/my-route', (req, res, next) => {\r\n  const layout = renderReactLayout({\r\n    basePath: req.app.get('views'),\r\n    blocks: {\r\n      head: 'meta.jade',\r\n      body: MyAppComponent\r\n    }\r\n    locals: req.locals,\r\n    data: {\r\n      someState: store.getState(),\r\n      additional,\r\n      data,\r\n      to, \r\n      pass,\r\n      to,\r\n      app\r\n    }\r\n  })\r\n\r\n  res.send(layout) \r\n})\r\n\r\n\r\n// MyAppComponent.js\r\n\r\nexport default function MyAppComponent(props) {\r\n  return (\r\n    <Provider store={props.store}>\r\n      \r\n      {/* \r\n         NOTE: \r\n         Typically put backbone / dom-related code in DOM, and then pass\r\n         down instances to children if need be. The typical lifecycle methods \r\n         contained inside will handle cleanup when ready. \r\n      */}\r\n      <DOM>\r\n        <Layout />\r\n      </DOM>\r\n    </Provider>\r\n  )\r\n}\r\n\r\n// client.js\r\nconst store = configureStore(reducers, window.__BOOTSTRAP__)\r\n\r\nReactDOM.render(\r\n  <MyAppComponent store={store} />, mountPoint\r\n)\r\n```","created_at":"2017-06-20T04:05:40Z","updated_at":"2017-06-23T18:33:35Z","closed_at":null,"merged_at":null,"merge_commit_sha":"a50a332e88e73d2412ce17b2eb7cdd6846c63a3f","assignee":{"login":"damassi","id":236943,"avatar_url":"https://avatars2.githubusercontent.com/u/236943?v=3","gravatar_id":"","url":"https://api.github.com/users/damassi","html_url":"https://github.com/damassi","followers_url":"https://api.github.com/users/damassi/followers","following_url":"https://api.github.com/users/damassi/following{/other_user}","gists_url":"https://api.github.com/users/damassi/gists{/gist_id}","starred_url":"https://api.github.com/users/damassi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/damassi/subscriptions","organizations_url":"https://api.github.com/users/damassi/orgs","repos_url":"https://api.github.com/users/damassi/repos","events_url":"https://api.github.com/users/damassi/events{/privacy}","received_events_url":"https://api.github.com/users/damassi/received_events","type":"User","site_admin":false},"assignees":[{"login":"damassi","id":236943,"avatar_url":"https://avatars2.githubusercontent.com/u/236943?v=3","gravatar_id":"","url":"https://api.github.com/users/damassi","html_url":"https://github.com/damassi","followers_url":"https://api.github.com/users/damassi/followers","following_url":"https://api.github.com/users/damassi/following{/other_user}","gists_url":"https://api.github.com/users/damassi/gists{/gist_id}","starred_url":"https://api.github.com/users/damassi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/damassi/subscriptions","organizations_url":"https://api.github.com/users/damassi/orgs","repos_url":"https://api.github.com/users/damassi/repos","events_url":"https://api.github.com/users/damassi/events{/privacy}","received_events_url":"https://api.github.com/users/damassi/received_events","type":"User","site_admin":false}],"requested_reviewers":[{"login":"acjay","id":1256382,"avatar_url":"https://avatars1.githubusercontent.com/u/1256382?v=3","gravatar_id":"","url":"https://api.github.com/users/acjay","html_url":"https://github.com/acjay","followers_url":"https://api.github.com/users/acjay/followers","following_url":"https://api.github.com/users/acjay/following{/other_user}","gists_url":"https://api.github.com/users/acjay/gists{/gist_id}","starred_url":"https://api.github.com/users/acjay/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/acjay/subscriptions","organizations_url":"https://api.github.com/users/acjay/orgs","repos_url":"https://api.github.com/users/acjay/repos","events_url":"https://api.github.com/users/acjay/events{/privacy}","received_events_url":"https://api.github.com/users/acjay/received_events","type":"User","site_admin":false}],"milestone":null,"commits_url":"https://api.github.com/repos/artsy/force/pulls/1571/commits","review_comments_url":"https://api.github.com/repos/artsy/force/pulls/1571/comments","review_comment_url":"https://api.github.com/repos/artsy/force/pulls/comments{/number}","comments_url":"https://api.github.com/repos/artsy/force/issues/1571/comments","statuses_url":"https://api.github.com/repos/artsy/force/statuses/1b293b9f80d84d86e785537416df2b347cbbdcb7","head":{"label":"damassi:responsive-auction-views","ref":"responsive-auction-views","sha":"1b293b9f80d84d86e785537416df2b347cbbdcb7","user":{"login":"damassi","id":236943,"avatar_url":"https://avatars2.githubusercontent.com/u/236943?v=3","gravatar_id":"","url":"https://api.github.com/users/damassi","html_url":"https://github.com/damassi","followers_url":"https://api.github.com/users/damassi/followers","following_url":"https://api.github.com/users/damassi/following{/other_user}","gists_url":"https://api.github.com/users/damassi/gists{/gist_id}","starred_url":"https://api.github.com/users/damassi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/damassi/subscriptions","organizations_url":"https://api.github.com/users/damassi/orgs","repos_url":"https://api.github.com/users/damassi/repos","events_url":"https://api.github.com/users/damassi/events{/privacy}","received_events_url":"https://api.github.com/users/damassi/received_events","type":"User","site_admin":false},"repo":{"id":82748774,"name":"force","full_name":"damassi/force","owner":{"login":"damassi","id":236943,"avatar_url":"https://avatars2.githubusercontent.com/u/236943?v=3","gravatar_id":"","url":"https://api.github.com/users/damassi","html_url":"https://github.com/damassi","followers_url":"https://api.github.com/users/damassi/followers","following_url":"https://api.github.com/users/damassi/following{/other_user}","gists_url":"https://api.github.com/users/damassi/gists{/gist_id}","starred_url":"https://api.github.com/users/damassi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/damassi/subscriptions","organizations_url":"https://api.github.com/users/damassi/orgs","repos_url":"https://api.github.com/users/damassi/repos","events_url":"https://api.github.com/users/damassi/events{/privacy}","received_events_url":"https://api.github.com/users/damassi/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/damassi/force","description":"The Artsy.net website:","fork":true,"url":"https://api.github.com/repos/damassi/force","forks_url":"https://api.github.com/repos/damassi/force/forks","keys_url":"https://api.github.com/repos/damassi/force/keys{/key_id}","collaborators_url":"https://api.github.com/repos/damassi/force/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/damassi/force/teams","hooks_url":"https://api.github.com/repos/damassi/force/hooks","issue_events_url":"https://api.github.com/repos/damassi/force/issues/events{/number}","events_url":"https://api.github.com/repos/damassi/force/events","assignees_url":"https://api.github.com/repos/damassi/force/assignees{/user}","branches_url":"https://api.github.com/repos/damassi/force/branches{/branch}","tags_url":"https://api.github.com/repos/damassi/force/tags","blobs_url":"https://api.github.com/repos/damassi/force/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/damassi/force/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/damassi/force/git/refs{/sha}","trees_url":"https://api.github.com/repos/damassi/force/git/trees{/sha}","statuses_url":"https://api.github.com/repos/damassi/force/statuses/{sha}","languages_url":"https://api.github.com/repos/damassi/force/languages","stargazers_url":"https://api.github.com/repos/damassi/force/stargazers","contributors_url":"https://api.github.com/repos/damassi/force/contributors","subscribers_url":"https://api.github.com/repos/damassi/force/subscribers","subscription_url":"https://api.github.com/repos/damassi/force/subscription","commits_url":"https://api.github.com/repos/damassi/force/commits{/sha}","git_commits_url":"https://api.github.com/repos/damassi/force/git/commits{/sha}","comments_url":"https://api.github.com/repos/damassi/force/comments{/number}","issue_comment_url":"https://api.github.com/repos/damassi/force/issues/comments{/number}","contents_url":"https://api.github.com/repos/damassi/force/contents/{+path}","compare_url":"https://api.github.com/repos/damassi/force/compare/{base}...{head}","merges_url":"https://api.github.com/repos/damassi/force/merges","archive_url":"https://api.github.com/repos/damassi/force/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/damassi/force/downloads","issues_url":"https://api.github.com/repos/damassi/force/issues{/number}","pulls_url":"https://api.github.com/repos/damassi/force/pulls{/number}","milestones_url":"https://api.github.com/repos/damassi/force/milestones{/number}","notifications_url":"https://api.github.com/repos/damassi/force/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/damassi/force/labels{/name}","releases_url":"https://api.github.com/repos/damassi/force/releases{/id}","deployments_url":"https://api.github.com/repos/damassi/force/deployments","created_at":"2017-02-22T01:59:50Z","updated_at":"2017-02-22T01:59:56Z","pushed_at":"2017-06-23T05:16:08Z","git_url":"git://github.com/damassi/force.git","ssh_url":"git@github.com:damassi/force.git","clone_url":"https://github.com/damassi/force.git","svn_url":"https://github.com/damassi/force","homepage":"https://www.artsy.net","size":121969,"stargazers_count":0,"watchers_count":0,"language":"CoffeeScript","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"artsy:master","ref":"master","sha":"d3c7191d18ea080cabeabe5f757b25f06c6208e9","user":{"login":"artsy","id":546231,"avatar_url":"https://avatars0.githubusercontent.com/u/546231?v=3","gravatar_id":"","url":"https://api.github.com/users/artsy","html_url":"https://github.com/artsy","followers_url":"https://api.github.com/users/artsy/followers","following_url":"https://api.github.com/users/artsy/following{/other_user}","gists_url":"https://api.github.com/users/artsy/gists{/gist_id}","starred_url":"https://api.github.com/users/artsy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/artsy/subscriptions","organizations_url":"https://api.github.com/users/artsy/orgs","repos_url":"https://api.github.com/users/artsy/repos","events_url":"https://api.github.com/users/artsy/events{/privacy}","received_events_url":"https://api.github.com/users/artsy/received_events","type":"Organization","site_admin":false},"repo":{"id":22887404,"name":"force","full_name":"artsy/force","owner":{"login":"artsy","id":546231,"avatar_url":"https://avatars0.githubusercontent.com/u/546231?v=3","gravatar_id":"","url":"https://api.github.com/users/artsy","html_url":"https://github.com/artsy","followers_url":"https://api.github.com/users/artsy/followers","following_url":"https://api.github.com/users/artsy/following{/other_user}","gists_url":"https://api.github.com/users/artsy/gists{/gist_id}","starred_url":"https://api.github.com/users/artsy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/artsy/subscriptions","organizations_url":"https://api.github.com/users/artsy/orgs","repos_url":"https://api.github.com/users/artsy/repos","events_url":"https://api.github.com/users/artsy/events{/privacy}","received_events_url":"https://api.github.com/users/artsy/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/artsy/force","description":"The Artsy.net website:","fork":false,"url":"https://api.github.com/repos/artsy/force","forks_url":"https://api.github.com/repos/artsy/force/forks","keys_url":"https://api.github.com/repos/artsy/force/keys{/key_id}","collaborators_url":"https://api.github.com/repos/artsy/force/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/artsy/force/teams","hooks_url":"https://api.github.com/repos/artsy/force/hooks","issue_events_url":"https://api.github.com/repos/artsy/force/issues/events{/number}","events_url":"https://api.github.com/repos/artsy/force/events","assignees_url":"https://api.github.com/repos/artsy/force/assignees{/user}","branches_url":"https://api.github.com/repos/artsy/force/branches{/branch}","tags_url":"https://api.github.com/repos/artsy/force/tags","blobs_url":"https://api.github.com/repos/artsy/force/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/artsy/force/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/artsy/force/git/refs{/sha}","trees_url":"https://api.github.com/repos/artsy/force/git/trees{/sha}","statuses_url":"https://api.github.com/repos/artsy/force/statuses/{sha}","languages_url":"https://api.github.com/repos/artsy/force/languages","stargazers_url":"https://api.github.com/repos/artsy/force/stargazers","contributors_url":"https://api.github.com/repos/artsy/force/contributors","subscribers_url":"https://api.github.com/repos/artsy/force/subscribers","subscription_url":"https://api.github.com/repos/artsy/force/subscription","commits_url":"https://api.github.com/repos/artsy/force/commits{/sha}","git_commits_url":"https://api.github.com/repos/artsy/force/git/commits{/sha}","comments_url":"https://api.github.com/repos/artsy/force/comments{/number}","issue_comment_url":"https://api.github.com/repos/artsy/force/issues/comments{/number}","contents_url":"https://api.github.com/repos/artsy/force/contents/{+path}","compare_url":"https://api.github.com/repos/artsy/force/compare/{base}...{head}","merges_url":"https://api.github.com/repos/artsy/force/merges","archive_url":"https://api.github.com/repos/artsy/force/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/artsy/force/downloads","issues_url":"https://api.github.com/repos/artsy/force/issues{/number}","pulls_url":"https://api.github.com/repos/artsy/force/pulls{/number}","milestones_url":"https://api.github.com/repos/artsy/force/milestones{/number}","notifications_url":"https://api.github.com/repos/artsy/force/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/artsy/force/labels{/name}","releases_url":"https://api.github.com/repos/artsy/force/releases{/id}","deployments_url":"https://api.github.com/repos/artsy/force/deployments","created_at":"2014-08-12T18:14:34Z","updated_at":"2017-06-15T14:24:22Z","pushed_at":"2017-06-23T17:51:21Z","git_url":"git://github.com/artsy/force.git","ssh_url":"git@github.com:artsy/force.git","clone_url":"https://github.com/artsy/force.git","svn_url":"https://github.com/artsy/force","homepage":"https://www.artsy.net","size":122168,"stargazers_count":181,"watchers_count":181,"language":"CoffeeScript","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":65,"mirror_url":null,"open_issues_count":99,"forks":65,"open_issues":99,"watchers":181,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/artsy/force/pulls/1571"},"html":{"href":"https://github.com/artsy/force/pull/1571"},"issue":{"href":"https://api.github.com/repos/artsy/force/issues/1571"},"comments":{"href":"https://api.github.com/repos/artsy/force/issues/1571/comments"},"review_comments":{"href":"https://api.github.com/repos/artsy/force/pulls/1571/comments"},"review_comment":{"href":"https://api.github.com/repos/artsy/force/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/artsy/force/pulls/1571/commits"},"statuses":{"href":"https://api.github.com/repos/artsy/force/statuses/1b293b9f80d84d86e785537416df2b347cbbdcb7"}}}}
{"actor":{"display_login":"damassi"}}