{"action":"created","comment":{"url":"https://api.github.com/repos/Opentrons/opentrons/pulls/comments/167021257","pull_request_review_id":95177100,"id":167021257,"diff_hunk":"@@ -0,0 +1,49 @@\n+// @flow\n+import * as React from 'react'\n+import omit from 'lodash/omit'\n+\n+import styles from './Modal.css'\n+\n+type ModalProps = {\n+  hideModal?: boolean,\n+  onClickAway?: (event: ?SyntheticEvent<>) => void,\n+  children?: React.Node\n+}\n+\n+export default class Modal extends React.Component<ModalProps> {\n+  outerRef: ?HTMLElement\n+\n+  handleClickAway = (e: SyntheticEvent<>) => {","path":"protocol-designer/src/components/modals/Modal.js","position":16,"original_position":16,"commit_id":"e562655675fbb2cfdf100dd4ea9ab01536f01f72","original_commit_id":"e562655675fbb2cfdf100dd4ea9ab01536f01f72","user":{"login":"IanLondon","id":11590381,"avatar_url":"https://avatars0.githubusercontent.com/u/11590381?v=4","gravatar_id":"","url":"https://api.github.com/users/IanLondon","html_url":"https://github.com/IanLondon","followers_url":"https://api.github.com/users/IanLondon/followers","following_url":"https://api.github.com/users/IanLondon/following{/other_user}","gists_url":"https://api.github.com/users/IanLondon/gists{/gist_id}","starred_url":"https://api.github.com/users/IanLondon/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/IanLondon/subscriptions","organizations_url":"https://api.github.com/users/IanLondon/orgs","repos_url":"https://api.github.com/users/IanLondon/repos","events_url":"https://api.github.com/users/IanLondon/events{/privacy}","received_events_url":"https://api.github.com/users/IanLondon/received_events","type":"User","site_admin":false},"body":"oh geez I forgot there was a Modal in component library","created_at":"2018-02-08T18:11:12Z","updated_at":"2018-02-08T18:11:12Z","html_url":"https://github.com/Opentrons/opentrons/pull/778#discussion_r167021257","pull_request_url":"https://api.github.com/repos/Opentrons/opentrons/pulls/778","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/Opentrons/opentrons/pulls/comments/167021257"},"html":{"href":"https://github.com/Opentrons/opentrons/pull/778#discussion_r167021257"},"pull_request":{"href":"https://api.github.com/repos/Opentrons/opentrons/pulls/778"}},"in_reply_to_id":167016000},"pull_request":{"url":"https://api.github.com/repos/Opentrons/opentrons/pulls/778","id":167781613,"html_url":"https://github.com/Opentrons/opentrons/pull/778","diff_url":"https://github.com/Opentrons/opentrons/pull/778.diff","patch_url":"https://github.com/Opentrons/opentrons/pull/778.patch","issue_url":"https://api.github.com/repos/Opentrons/opentrons/issues/778","number":778,"state":"open","locked":false,"title":"Pd pause & consolidate form + \"More Options\" modal","user":{"login":"IanLondon","id":11590381,"avatar_url":"https://avatars0.githubusercontent.com/u/11590381?v=4","gravatar_id":"","url":"https://api.github.com/users/IanLondon","html_url":"https://github.com/IanLondon","followers_url":"https://api.github.com/users/IanLondon/followers","following_url":"https://api.github.com/users/IanLondon/following{/other_user}","gists_url":"https://api.github.com/users/IanLondon/gists{/gist_id}","starred_url":"https://api.github.com/users/IanLondon/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/IanLondon/subscriptions","organizations_url":"https://api.github.com/users/IanLondon/orgs","repos_url":"https://api.github.com/users/IanLondon/repos","events_url":"https://api.github.com/users/IanLondon/events{/privacy}","received_events_url":"https://api.github.com/users/IanLondon/received_events","type":"User","site_admin":false},"body":"## review requests\r\n\r\nCheck it out: https://s3-us-west-2.amazonaws.com/opentrons-protocol-designer/pd_consolidate-form/index.html\r\n\r\n* Create Transfer/Pause/Consolidate form\r\n* Can save options\r\n* Can open \"MORE OPTIONS\" modal, and edit and save the name/description fields\r\n* Can DELETE STEP in MORE OPTIONS modal\r\n\r\n#### Not in scope:\r\n\r\n* Consolidate's SubStep items\r\n* Custom names show up in step list (new issue #784)\r\n\r\n## overview\r\n\r\nCloses #732 \r\n\r\nAlso, fixes #713 and fixes #726 (this PR includes the now-closed Pause Form PR #750)\r\n\r\n## changelog\r\n\r\n* Ripped out and rewrote form validation -- no more attempt at fancy DSL for validation/parsing, just use a error-monad-like return object\r\n* First-pass flow typing of `utils.js`, mostly because I extracted `formConnector` to `formConnectorFactory` and put it in that file\r\n\r\n### Pause form\r\n* \"Save\" button disabled when form invalid\r\n* Pause Step form\r\n* Placeholder blank form for other steps\r\n* Refactor substeps: the `TransferishSubstep` will cover transfer/distribute/consolidate - mix and pause do their own thing.\r\n\r\n### Consolidate form\r\n* (TODO describe changes)\r\n\r\n### Modals\r\n* base `Modal` with lean `modalHOC` for passing props thru base Modal into the child\r\n* `MoreOptionsModal` and `ConnectedMoreOptionsModal` - this functions as a secondary unsaved form, it's 2 degrees away from a saved form. So user first edits fields in MoreOptionsModal, clicks Save, then the MoreOptionsModal fields are saved to the unsavedForm. Finally user clicks Save on the form itself, and the field is actually saved.\r\n","created_at":"2018-02-07T19:07:17Z","updated_at":"2018-02-08T18:11:12Z","closed_at":null,"merged_at":null,"merge_commit_sha":"ce997405529e699ce56f4b7912582b07ec3a15c4","assignee":null,"assignees":[],"requested_reviewers":[{"login":"umbhau","id":1682403,"avatar_url":"https://avatars2.githubusercontent.com/u/1682403?v=4","gravatar_id":"","url":"https://api.github.com/users/umbhau","html_url":"https://github.com/umbhau","followers_url":"https://api.github.com/users/umbhau/followers","following_url":"https://api.github.com/users/umbhau/following{/other_user}","gists_url":"https://api.github.com/users/umbhau/gists{/gist_id}","starred_url":"https://api.github.com/users/umbhau/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/umbhau/subscriptions","organizations_url":"https://api.github.com/users/umbhau/orgs","repos_url":"https://api.github.com/users/umbhau/repos","events_url":"https://api.github.com/users/umbhau/events{/privacy}","received_events_url":"https://api.github.com/users/umbhau/received_events","type":"User","site_admin":false},{"login":"Kadee80","id":3430313,"avatar_url":"https://avatars1.githubusercontent.com/u/3430313?v=4","gravatar_id":"","url":"https://api.github.com/users/Kadee80","html_url":"https://github.com/Kadee80","followers_url":"https://api.github.com/users/Kadee80/followers","following_url":"https://api.github.com/users/Kadee80/following{/other_user}","gists_url":"https://api.github.com/users/Kadee80/gists{/gist_id}","starred_url":"https://api.github.com/users/Kadee80/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Kadee80/subscriptions","organizations_url":"https://api.github.com/users/Kadee80/orgs","repos_url":"https://api.github.com/users/Kadee80/repos","events_url":"https://api.github.com/users/Kadee80/events{/privacy}","received_events_url":"https://api.github.com/users/Kadee80/received_events","type":"User","site_admin":false},{"login":"howisthisnamenottakenyet","id":35570080,"avatar_url":"https://avatars2.githubusercontent.com/u/35570080?v=4","gravatar_id":"","url":"https://api.github.com/users/howisthisnamenottakenyet","html_url":"https://github.com/howisthisnamenottakenyet","followers_url":"https://api.github.com/users/howisthisnamenottakenyet/followers","following_url":"https://api.github.com/users/howisthisnamenottakenyet/following{/other_user}","gists_url":"https://api.github.com/users/howisthisnamenottakenyet/gists{/gist_id}","starred_url":"https://api.github.com/users/howisthisnamenottakenyet/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/howisthisnamenottakenyet/subscriptions","organizations_url":"https://api.github.com/users/howisthisnamenottakenyet/orgs","repos_url":"https://api.github.com/users/howisthisnamenottakenyet/repos","events_url":"https://api.github.com/users/howisthisnamenottakenyet/events{/privacy}","received_events_url":"https://api.github.com/users/howisthisnamenottakenyet/received_events","type":"User","site_admin":false}],"requested_teams":[],"milestone":null,"commits_url":"https://api.github.com/repos/Opentrons/opentrons/pulls/778/commits","review_comments_url":"https://api.github.com/repos/Opentrons/opentrons/pulls/778/comments","review_comment_url":"https://api.github.com/repos/Opentrons/opentrons/pulls/comments{/number}","comments_url":"https://api.github.com/repos/Opentrons/opentrons/issues/778/comments","statuses_url":"https://api.github.com/repos/Opentrons/opentrons/statuses/e562655675fbb2cfdf100dd4ea9ab01536f01f72","head":{"label":"Opentrons:pd_consolidate-form","ref":"pd_consolidate-form","sha":"e562655675fbb2cfdf100dd4ea9ab01536f01f72","user":{"login":"Opentrons","id":6139147,"avatar_url":"https://avatars2.githubusercontent.com/u/6139147?v=4","gravatar_id":"","url":"https://api.github.com/users/Opentrons","html_url":"https://github.com/Opentrons","followers_url":"https://api.github.com/users/Opentrons/followers","following_url":"https://api.github.com/users/Opentrons/following{/other_user}","gists_url":"https://api.github.com/users/Opentrons/gists{/gist_id}","starred_url":"https://api.github.com/users/Opentrons/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Opentrons/subscriptions","organizations_url":"https://api.github.com/users/Opentrons/orgs","repos_url":"https://api.github.com/users/Opentrons/repos","events_url":"https://api.github.com/users/Opentrons/events{/privacy}","received_events_url":"https://api.github.com/users/Opentrons/received_events","type":"Organization","site_admin":false},"repo":{"id":38644841,"name":"opentrons","full_name":"Opentrons/opentrons","owner":{"login":"Opentrons","id":6139147,"avatar_url":"https://avatars2.githubusercontent.com/u/6139147?v=4","gravatar_id":"","url":"https://api.github.com/users/Opentrons","html_url":"https://github.com/Opentrons","followers_url":"https://api.github.com/users/Opentrons/followers","following_url":"https://api.github.com/users/Opentrons/following{/other_user}","gists_url":"https://api.github.com/users/Opentrons/gists{/gist_id}","starred_url":"https://api.github.com/users/Opentrons/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Opentrons/subscriptions","organizations_url":"https://api.github.com/users/Opentrons/orgs","repos_url":"https://api.github.com/users/Opentrons/repos","events_url":"https://api.github.com/users/Opentrons/events{/privacy}","received_events_url":"https://api.github.com/users/Opentrons/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Opentrons/opentrons","description":"Python API for writing protocols and running them on Opentrons robots","fork":false,"url":"https://api.github.com/repos/Opentrons/opentrons","forks_url":"https://api.github.com/repos/Opentrons/opentrons/forks","keys_url":"https://api.github.com/repos/Opentrons/opentrons/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Opentrons/opentrons/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Opentrons/opentrons/teams","hooks_url":"https://api.github.com/repos/Opentrons/opentrons/hooks","issue_events_url":"https://api.github.com/repos/Opentrons/opentrons/issues/events{/number}","events_url":"https://api.github.com/repos/Opentrons/opentrons/events","assignees_url":"https://api.github.com/repos/Opentrons/opentrons/assignees{/user}","branches_url":"https://api.github.com/repos/Opentrons/opentrons/branches{/branch}","tags_url":"https://api.github.com/repos/Opentrons/opentrons/tags","blobs_url":"https://api.github.com/repos/Opentrons/opentrons/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Opentrons/opentrons/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Opentrons/opentrons/git/refs{/sha}","trees_url":"https://api.github.com/repos/Opentrons/opentrons/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Opentrons/opentrons/statuses/{sha}","languages_url":"https://api.github.com/repos/Opentrons/opentrons/languages","stargazers_url":"https://api.github.com/repos/Opentrons/opentrons/stargazers","contributors_url":"https://api.github.com/repos/Opentrons/opentrons/contributors","subscribers_url":"https://api.github.com/repos/Opentrons/opentrons/subscribers","subscription_url":"https://api.github.com/repos/Opentrons/opentrons/subscription","commits_url":"https://api.github.com/repos/Opentrons/opentrons/commits{/sha}","git_commits_url":"https://api.github.com/repos/Opentrons/opentrons/git/commits{/sha}","comments_url":"https://api.github.com/repos/Opentrons/opentrons/comments{/number}","issue_comment_url":"https://api.github.com/repos/Opentrons/opentrons/issues/comments{/number}","contents_url":"https://api.github.com/repos/Opentrons/opentrons/contents/{+path}","compare_url":"https://api.github.com/repos/Opentrons/opentrons/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Opentrons/opentrons/merges","archive_url":"https://api.github.com/repos/Opentrons/opentrons/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Opentrons/opentrons/downloads","issues_url":"https://api.github.com/repos/Opentrons/opentrons/issues{/number}","pulls_url":"https://api.github.com/repos/Opentrons/opentrons/pulls{/number}","milestones_url":"https://api.github.com/repos/Opentrons/opentrons/milestones{/number}","notifications_url":"https://api.github.com/repos/Opentrons/opentrons/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Opentrons/opentrons/labels{/name}","releases_url":"https://api.github.com/repos/Opentrons/opentrons/releases{/id}","deployments_url":"https://api.github.com/repos/Opentrons/opentrons/deployments","created_at":"2015-07-06T20:41:01Z","updated_at":"2018-01-17T22:02:52Z","pushed_at":"2018-02-08T18:03:49Z","git_url":"git://github.com/Opentrons/opentrons.git","ssh_url":"git@github.com:Opentrons/opentrons.git","clone_url":"https://github.com/Opentrons/opentrons.git","svn_url":"https://github.com/Opentrons/opentrons","homepage":"","size":17756,"stargazers_count":41,"watchers_count":41,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":28,"mirror_url":null,"archived":false,"open_issues_count":112,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0"},"forks":28,"open_issues":112,"watchers":41,"default_branch":"v3a"}},"base":{"label":"Opentrons:v3a","ref":"v3a","sha":"55df66aab338357ff84d5668885b7f4725fb624e","user":{"login":"Opentrons","id":6139147,"avatar_url":"https://avatars2.githubusercontent.com/u/6139147?v=4","gravatar_id":"","url":"https://api.github.com/users/Opentrons","html_url":"https://github.com/Opentrons","followers_url":"https://api.github.com/users/Opentrons/followers","following_url":"https://api.github.com/users/Opentrons/following{/other_user}","gists_url":"https://api.github.com/users/Opentrons/gists{/gist_id}","starred_url":"https://api.github.com/users/Opentrons/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Opentrons/subscriptions","organizations_url":"https://api.github.com/users/Opentrons/orgs","repos_url":"https://api.github.com/users/Opentrons/repos","events_url":"https://api.github.com/users/Opentrons/events{/privacy}","received_events_url":"https://api.github.com/users/Opentrons/received_events","type":"Organization","site_admin":false},"repo":{"id":38644841,"name":"opentrons","full_name":"Opentrons/opentrons","owner":{"login":"Opentrons","id":6139147,"avatar_url":"https://avatars2.githubusercontent.com/u/6139147?v=4","gravatar_id":"","url":"https://api.github.com/users/Opentrons","html_url":"https://github.com/Opentrons","followers_url":"https://api.github.com/users/Opentrons/followers","following_url":"https://api.github.com/users/Opentrons/following{/other_user}","gists_url":"https://api.github.com/users/Opentrons/gists{/gist_id}","starred_url":"https://api.github.com/users/Opentrons/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Opentrons/subscriptions","organizations_url":"https://api.github.com/users/Opentrons/orgs","repos_url":"https://api.github.com/users/Opentrons/repos","events_url":"https://api.github.com/users/Opentrons/events{/privacy}","received_events_url":"https://api.github.com/users/Opentrons/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Opentrons/opentrons","description":"Python API for writing protocols and running them on Opentrons robots","fork":false,"url":"https://api.github.com/repos/Opentrons/opentrons","forks_url":"https://api.github.com/repos/Opentrons/opentrons/forks","keys_url":"https://api.github.com/repos/Opentrons/opentrons/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Opentrons/opentrons/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Opentrons/opentrons/teams","hooks_url":"https://api.github.com/repos/Opentrons/opentrons/hooks","issue_events_url":"https://api.github.com/repos/Opentrons/opentrons/issues/events{/number}","events_url":"https://api.github.com/repos/Opentrons/opentrons/events","assignees_url":"https://api.github.com/repos/Opentrons/opentrons/assignees{/user}","branches_url":"https://api.github.com/repos/Opentrons/opentrons/branches{/branch}","tags_url":"https://api.github.com/repos/Opentrons/opentrons/tags","blobs_url":"https://api.github.com/repos/Opentrons/opentrons/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Opentrons/opentrons/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Opentrons/opentrons/git/refs{/sha}","trees_url":"https://api.github.com/repos/Opentrons/opentrons/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Opentrons/opentrons/statuses/{sha}","languages_url":"https://api.github.com/repos/Opentrons/opentrons/languages","stargazers_url":"https://api.github.com/repos/Opentrons/opentrons/stargazers","contributors_url":"https://api.github.com/repos/Opentrons/opentrons/contributors","subscribers_url":"https://api.github.com/repos/Opentrons/opentrons/subscribers","subscription_url":"https://api.github.com/repos/Opentrons/opentrons/subscription","commits_url":"https://api.github.com/repos/Opentrons/opentrons/commits{/sha}","git_commits_url":"https://api.github.com/repos/Opentrons/opentrons/git/commits{/sha}","comments_url":"https://api.github.com/repos/Opentrons/opentrons/comments{/number}","issue_comment_url":"https://api.github.com/repos/Opentrons/opentrons/issues/comments{/number}","contents_url":"https://api.github.com/repos/Opentrons/opentrons/contents/{+path}","compare_url":"https://api.github.com/repos/Opentrons/opentrons/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Opentrons/opentrons/merges","archive_url":"https://api.github.com/repos/Opentrons/opentrons/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Opentrons/opentrons/downloads","issues_url":"https://api.github.com/repos/Opentrons/opentrons/issues{/number}","pulls_url":"https://api.github.com/repos/Opentrons/opentrons/pulls{/number}","milestones_url":"https://api.github.com/repos/Opentrons/opentrons/milestones{/number}","notifications_url":"https://api.github.com/repos/Opentrons/opentrons/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Opentrons/opentrons/labels{/name}","releases_url":"https://api.github.com/repos/Opentrons/opentrons/releases{/id}","deployments_url":"https://api.github.com/repos/Opentrons/opentrons/deployments","created_at":"2015-07-06T20:41:01Z","updated_at":"2018-01-17T22:02:52Z","pushed_at":"2018-02-08T18:03:49Z","git_url":"git://github.com/Opentrons/opentrons.git","ssh_url":"git@github.com:Opentrons/opentrons.git","clone_url":"https://github.com/Opentrons/opentrons.git","svn_url":"https://github.com/Opentrons/opentrons","homepage":"","size":17756,"stargazers_count":41,"watchers_count":41,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":28,"mirror_url":null,"archived":false,"open_issues_count":112,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0"},"forks":28,"open_issues":112,"watchers":41,"default_branch":"v3a"}},"_links":{"self":{"href":"https://api.github.com/repos/Opentrons/opentrons/pulls/778"},"html":{"href":"https://github.com/Opentrons/opentrons/pull/778"},"issue":{"href":"https://api.github.com/repos/Opentrons/opentrons/issues/778"},"comments":{"href":"https://api.github.com/repos/Opentrons/opentrons/issues/778/comments"},"review_comments":{"href":"https://api.github.com/repos/Opentrons/opentrons/pulls/778/comments"},"review_comment":{"href":"https://api.github.com/repos/Opentrons/opentrons/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/Opentrons/opentrons/pulls/778/commits"},"statuses":{"href":"https://api.github.com/repos/Opentrons/opentrons/statuses/e562655675fbb2cfdf100dd4ea9ab01536f01f72"}},"author_association":"MEMBER"}}
{"actor":{"display_login":"IanLondon"}}