{"action":"created","comment":{"url":"https://api.github.com/repos/formspree/formspree/pulls/comments/213842989","pull_request_review_id":150727269,"id":213842989,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIxMzg0Mjk4OQ==","diff_hunk":"@@ -37,18 +38,18 @@ def configure_routes(app):\n     app.add_url_rule('/logout', 'logout', view_func=uv.logout, methods=['GET'])\n \n     # Users' forms\n-    app.add_url_rule('/dashboard', 'dashboard', view_func=fv.forms, methods=['GET'])\n-    app.add_url_rule('/forms', 'forms', view_func=fv.forms, methods=['GET'])\n-    app.add_url_rule('/forms', 'create-form', view_func=fv.create_form, methods=['POST'])\n-    app.add_url_rule('/forms/sitewide-check', view_func=fv.sitewide_check, methods=['GET'])\n-    app.add_url_rule('/forms/<hashid>/', 'form-submissions', view_func=fv.form_submissions, methods=['GET'])\n-    app.add_url_rule('/forms/<hashid>.<format>', 'form-submissions', view_func=fv.form_submissions, methods=['GET'])\n-    app.add_url_rule('/forms/<hashid>/toggle-recaptcha', 'toggle-recaptcha', view_func=fv.form_recaptcha_toggle, methods=['POST'])\n-    app.add_url_rule('/forms/<hashid>/toggle-emails', 'toggle-emails', view_func=fv.form_email_notification_toggle, methods=['POST'])\n-    app.add_url_rule('/forms/<hashid>/toggle-storage', 'toggle-storage', view_func=fv.form_archive_toggle, methods=['POST'])\n-    app.add_url_rule('/forms/<hashid>/toggle', 'form-toggle', view_func=fv.form_toggle, methods=['POST'])\n-    app.add_url_rule('/forms/<hashid>/delete', 'form-deletion', view_func=fv.form_deletion, methods=['POST'])\n-    app.add_url_rule('/forms/<hashid>/delete/<submissionid>', 'submission-deletion', view_func=fv.submission_deletion, methods=['POST'])\n+    app.add_url_rule('/dashboard', 'dashboard', view_func=fv.serve_dashboard, methods=['GET'])\n+    app.add_url_rule('/forms', 'dashboard', view_func=fv.serve_dashboard, methods=['GET'])\n+    app.add_url_rule('/forms/<hashid>', view_func=fv.serve_dashboard, methods=['GET'])\n+    app.add_url_rule('/forms/<hashid>/<path:s>', view_func=fv.serve_dashboard, methods=['GET'])\n+    app.add_url_rule('/forms/<hashid>.<format>', view_func=fv.export_submissions, methods=['GET'])\n+    app.add_url_rule('/api/forms', view_func=fa.list, methods=['GET'])","path":"formspree/routes.py","position":27,"original_position":27,"commit_id":"4d332bdacb4efa0b3a7c660e0240f4dd06d1fc94","original_commit_id":"4d332bdacb4efa0b3a7c660e0240f4dd06d1fc94","user":{"login":"colevscode","id":409293,"node_id":"MDQ6VXNlcjQwOTI5Mw==","avatar_url":"https://avatars3.githubusercontent.com/u/409293?v=4","gravatar_id":"","url":"https://api.github.com/users/colevscode","html_url":"https://github.com/colevscode","followers_url":"https://api.github.com/users/colevscode/followers","following_url":"https://api.github.com/users/colevscode/following{/other_user}","gists_url":"https://api.github.com/users/colevscode/gists{/gist_id}","starred_url":"https://api.github.com/users/colevscode/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/colevscode/subscriptions","organizations_url":"https://api.github.com/users/colevscode/orgs","repos_url":"https://api.github.com/users/colevscode/repos","events_url":"https://api.github.com/users/colevscode/events{/privacy}","received_events_url":"https://api.github.com/users/colevscode/received_events","type":"User","site_admin":false},"body":"If this will be a public API, I think we should version it from the start. Something like `/api/v1/forms`. Makes things cleaner if we need to later fork and create a new version of the api.","created_at":"2018-08-29T21:37:54Z","updated_at":"2018-08-29T21:57:04Z","html_url":"https://github.com/formspree/formspree/pull/190#discussion_r213842989","pull_request_url":"https://api.github.com/repos/formspree/formspree/pulls/190","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/formspree/formspree/pulls/comments/213842989"},"html":{"href":"https://github.com/formspree/formspree/pull/190#discussion_r213842989"},"pull_request":{"href":"https://api.github.com/repos/formspree/formspree/pulls/190"}}},"pull_request":{"url":"https://api.github.com/repos/formspree/formspree/pulls/190","id":209326912,"node_id":"MDExOlB1bGxSZXF1ZXN0MjA5MzI2OTEy","html_url":"https://github.com/formspree/formspree/pull/190","diff_url":"https://github.com/formspree/formspree/pull/190.diff","patch_url":"https://github.com/formspree/formspree/pull/190.patch","issue_url":"https://api.github.com/repos/formspree/formspree/issues/190","number":190,"state":"open","locked":false,"title":"Move the /forms dashboard to a unified React talking to a JSON API","user":{"login":"fiatjaf","id":1653275,"node_id":"MDQ6VXNlcjE2NTMyNzU=","avatar_url":"https://avatars1.githubusercontent.com/u/1653275?v=4","gravatar_id":"","url":"https://api.github.com/users/fiatjaf","html_url":"https://github.com/fiatjaf","followers_url":"https://api.github.com/users/fiatjaf/followers","following_url":"https://api.github.com/users/fiatjaf/following{/other_user}","gists_url":"https://api.github.com/users/fiatjaf/gists{/gist_id}","starred_url":"https://api.github.com/users/fiatjaf/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fiatjaf/subscriptions","organizations_url":"https://api.github.com/users/fiatjaf/orgs","repos_url":"https://api.github.com/users/fiatjaf/repos","events_url":"https://api.github.com/users/fiatjaf/events{/privacy}","received_events_url":"https://api.github.com/users/fiatjaf/received_events","type":"User","site_admin":false},"body":"**Changes proposed in this pull request:**\r\n\r\n- setup js tooling (node modules and Makefile) and make these run on heroku-postbuild trigger\r\n- setup prettier so js code can be standardized\r\n- move js and scss source dirs around\r\n- setup react and react-router, making them take control of\r\n  /forms, /dashboard and /forms/<hashid> and so on\r\n- remove all forms dashboard templates, moving their markup and logic to jsx\r\n- remove unnecessary js code and rename submissions.scss to settings.scss\r\n- create formspree/forms/api.py and move all actions created from the\r\n  dashboard into there\r\n- remove some bloat\r\n\r\n**Have you made sure to add:**\r\n- [ ] Tests\r\n- [ ] Documentation\r\n\r\n**Screenshots and GIFs**\r\n\r\n![2018-08-18-162235_972x544_scrot](https://user-images.githubusercontent.com/1653275/44302625-7c462000-a303-11e8-8429-46367cfa7873.png)\r\n![2018-08-18-162222_1106x770_scrot](https://user-images.githubusercontent.com/1653275/44302624-7c462000-a303-11e8-8bed-6320069a62de.png)\r\n![2018-08-18-162210_1200x913_scrot](https://user-images.githubusercontent.com/1653275/44302623-7c462000-a303-11e8-8add-1f14bc1f94ac.png)\r\n\r\n\r\n**Deploy notes**\r\n\r\nThe `heroku/nodejs` buildpack must be added to the Heroku settings with `heroku buildpacks:add heroku/nodejs`.\r\n\r\n**Additional information**\r\n\r\nThis version is live on https://formspree-staging.herokuapp.com/, please take a look.","created_at":"2018-08-18T19:29:18Z","updated_at":"2018-08-29T21:57:04Z","closed_at":null,"merged_at":null,"merge_commit_sha":"9c9af0f06f834650f988e656988e6de322c5d584","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/formspree/formspree/pulls/190/commits","review_comments_url":"https://api.github.com/repos/formspree/formspree/pulls/190/comments","review_comment_url":"https://api.github.com/repos/formspree/formspree/pulls/comments{/number}","comments_url":"https://api.github.com/repos/formspree/formspree/issues/190/comments","statuses_url":"https://api.github.com/repos/formspree/formspree/statuses/4d332bdacb4efa0b3a7c660e0240f4dd06d1fc94","head":{"label":"fiatjaf:dashboard-react","ref":"dashboard-react","sha":"4d332bdacb4efa0b3a7c660e0240f4dd06d1fc94","user":{"login":"fiatjaf","id":1653275,"node_id":"MDQ6VXNlcjE2NTMyNzU=","avatar_url":"https://avatars1.githubusercontent.com/u/1653275?v=4","gravatar_id":"","url":"https://api.github.com/users/fiatjaf","html_url":"https://github.com/fiatjaf","followers_url":"https://api.github.com/users/fiatjaf/followers","following_url":"https://api.github.com/users/fiatjaf/following{/other_user}","gists_url":"https://api.github.com/users/fiatjaf/gists{/gist_id}","starred_url":"https://api.github.com/users/fiatjaf/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fiatjaf/subscriptions","organizations_url":"https://api.github.com/users/fiatjaf/orgs","repos_url":"https://api.github.com/users/fiatjaf/repos","events_url":"https://api.github.com/users/fiatjaf/events{/privacy}","received_events_url":"https://api.github.com/users/fiatjaf/received_events","type":"User","site_admin":false},"repo":{"id":28492157,"node_id":"MDEwOlJlcG9zaXRvcnkyODQ5MjE1Nw==","name":"formspree","full_name":"fiatjaf/formspree","owner":{"login":"fiatjaf","id":1653275,"node_id":"MDQ6VXNlcjE2NTMyNzU=","avatar_url":"https://avatars1.githubusercontent.com/u/1653275?v=4","gravatar_id":"","url":"https://api.github.com/users/fiatjaf","html_url":"https://github.com/fiatjaf","followers_url":"https://api.github.com/users/fiatjaf/followers","following_url":"https://api.github.com/users/fiatjaf/following{/other_user}","gists_url":"https://api.github.com/users/fiatjaf/gists{/gist_id}","starred_url":"https://api.github.com/users/fiatjaf/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fiatjaf/subscriptions","organizations_url":"https://api.github.com/users/fiatjaf/orgs","repos_url":"https://api.github.com/users/fiatjaf/repos","events_url":"https://api.github.com/users/fiatjaf/events{/privacy}","received_events_url":"https://api.github.com/users/fiatjaf/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/fiatjaf/formspree","description":null,"fork":true,"url":"https://api.github.com/repos/fiatjaf/formspree","forks_url":"https://api.github.com/repos/fiatjaf/formspree/forks","keys_url":"https://api.github.com/repos/fiatjaf/formspree/keys{/key_id}","collaborators_url":"https://api.github.com/repos/fiatjaf/formspree/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/fiatjaf/formspree/teams","hooks_url":"https://api.github.com/repos/fiatjaf/formspree/hooks","issue_events_url":"https://api.github.com/repos/fiatjaf/formspree/issues/events{/number}","events_url":"https://api.github.com/repos/fiatjaf/formspree/events","assignees_url":"https://api.github.com/repos/fiatjaf/formspree/assignees{/user}","branches_url":"https://api.github.com/repos/fiatjaf/formspree/branches{/branch}","tags_url":"https://api.github.com/repos/fiatjaf/formspree/tags","blobs_url":"https://api.github.com/repos/fiatjaf/formspree/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/fiatjaf/formspree/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/fiatjaf/formspree/git/refs{/sha}","trees_url":"https://api.github.com/repos/fiatjaf/formspree/git/trees{/sha}","statuses_url":"https://api.github.com/repos/fiatjaf/formspree/statuses/{sha}","languages_url":"https://api.github.com/repos/fiatjaf/formspree/languages","stargazers_url":"https://api.github.com/repos/fiatjaf/formspree/stargazers","contributors_url":"https://api.github.com/repos/fiatjaf/formspree/contributors","subscribers_url":"https://api.github.com/repos/fiatjaf/formspree/subscribers","subscription_url":"https://api.github.com/repos/fiatjaf/formspree/subscription","commits_url":"https://api.github.com/repos/fiatjaf/formspree/commits{/sha}","git_commits_url":"https://api.github.com/repos/fiatjaf/formspree/git/commits{/sha}","comments_url":"https://api.github.com/repos/fiatjaf/formspree/comments{/number}","issue_comment_url":"https://api.github.com/repos/fiatjaf/formspree/issues/comments{/number}","contents_url":"https://api.github.com/repos/fiatjaf/formspree/contents/{+path}","compare_url":"https://api.github.com/repos/fiatjaf/formspree/compare/{base}...{head}","merges_url":"https://api.github.com/repos/fiatjaf/formspree/merges","archive_url":"https://api.github.com/repos/fiatjaf/formspree/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/fiatjaf/formspree/downloads","issues_url":"https://api.github.com/repos/fiatjaf/formspree/issues{/number}","pulls_url":"https://api.github.com/repos/fiatjaf/formspree/pulls{/number}","milestones_url":"https://api.github.com/repos/fiatjaf/formspree/milestones{/number}","notifications_url":"https://api.github.com/repos/fiatjaf/formspree/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/fiatjaf/formspree/labels{/name}","releases_url":"https://api.github.com/repos/fiatjaf/formspree/releases{/id}","deployments_url":"https://api.github.com/repos/fiatjaf/formspree/deployments","created_at":"2014-12-25T21:57:31Z","updated_at":"2018-05-14T00:51:01Z","pushed_at":"2018-08-29T19:34:29Z","git_url":"git://github.com/fiatjaf/formspree.git","ssh_url":"git@github.com:fiatjaf/formspree.git","clone_url":"https://github.com/fiatjaf/formspree.git","svn_url":"https://github.com/fiatjaf/formspree","homepage":null,"size":2849,"stargazers_count":0,"watchers_count":0,"language":"CSS","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"formspree:master","ref":"master","sha":"7ce164e945de02c1091513c56d5090d40a6624e4","user":{"login":"formspree","id":14319378,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE0MzE5Mzc4","avatar_url":"https://avatars2.githubusercontent.com/u/14319378?v=4","gravatar_id":"","url":"https://api.github.com/users/formspree","html_url":"https://github.com/formspree","followers_url":"https://api.github.com/users/formspree/followers","following_url":"https://api.github.com/users/formspree/following{/other_user}","gists_url":"https://api.github.com/users/formspree/gists{/gist_id}","starred_url":"https://api.github.com/users/formspree/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/formspree/subscriptions","organizations_url":"https://api.github.com/users/formspree/orgs","repos_url":"https://api.github.com/users/formspree/repos","events_url":"https://api.github.com/users/formspree/events{/privacy}","received_events_url":"https://api.github.com/users/formspree/received_events","type":"Organization","site_admin":false},"repo":{"id":27942236,"node_id":"MDEwOlJlcG9zaXRvcnkyNzk0MjIzNg==","name":"formspree","full_name":"formspree/formspree","owner":{"login":"formspree","id":14319378,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE0MzE5Mzc4","avatar_url":"https://avatars2.githubusercontent.com/u/14319378?v=4","gravatar_id":"","url":"https://api.github.com/users/formspree","html_url":"https://github.com/formspree","followers_url":"https://api.github.com/users/formspree/followers","following_url":"https://api.github.com/users/formspree/following{/other_user}","gists_url":"https://api.github.com/users/formspree/gists{/gist_id}","starred_url":"https://api.github.com/users/formspree/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/formspree/subscriptions","organizations_url":"https://api.github.com/users/formspree/orgs","repos_url":"https://api.github.com/users/formspree/repos","events_url":"https://api.github.com/users/formspree/events{/privacy}","received_events_url":"https://api.github.com/users/formspree/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/formspree/formspree","description":"Easy HTML form without PHP or JavaScript","fork":false,"url":"https://api.github.com/repos/formspree/formspree","forks_url":"https://api.github.com/repos/formspree/formspree/forks","keys_url":"https://api.github.com/repos/formspree/formspree/keys{/key_id}","collaborators_url":"https://api.github.com/repos/formspree/formspree/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/formspree/formspree/teams","hooks_url":"https://api.github.com/repos/formspree/formspree/hooks","issue_events_url":"https://api.github.com/repos/formspree/formspree/issues/events{/number}","events_url":"https://api.github.com/repos/formspree/formspree/events","assignees_url":"https://api.github.com/repos/formspree/formspree/assignees{/user}","branches_url":"https://api.github.com/repos/formspree/formspree/branches{/branch}","tags_url":"https://api.github.com/repos/formspree/formspree/tags","blobs_url":"https://api.github.com/repos/formspree/formspree/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/formspree/formspree/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/formspree/formspree/git/refs{/sha}","trees_url":"https://api.github.com/repos/formspree/formspree/git/trees{/sha}","statuses_url":"https://api.github.com/repos/formspree/formspree/statuses/{sha}","languages_url":"https://api.github.com/repos/formspree/formspree/languages","stargazers_url":"https://api.github.com/repos/formspree/formspree/stargazers","contributors_url":"https://api.github.com/repos/formspree/formspree/contributors","subscribers_url":"https://api.github.com/repos/formspree/formspree/subscribers","subscription_url":"https://api.github.com/repos/formspree/formspree/subscription","commits_url":"https://api.github.com/repos/formspree/formspree/commits{/sha}","git_commits_url":"https://api.github.com/repos/formspree/formspree/git/commits{/sha}","comments_url":"https://api.github.com/repos/formspree/formspree/comments{/number}","issue_comment_url":"https://api.github.com/repos/formspree/formspree/issues/comments{/number}","contents_url":"https://api.github.com/repos/formspree/formspree/contents/{+path}","compare_url":"https://api.github.com/repos/formspree/formspree/compare/{base}...{head}","merges_url":"https://api.github.com/repos/formspree/formspree/merges","archive_url":"https://api.github.com/repos/formspree/formspree/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/formspree/formspree/downloads","issues_url":"https://api.github.com/repos/formspree/formspree/issues{/number}","pulls_url":"https://api.github.com/repos/formspree/formspree/pulls{/number}","milestones_url":"https://api.github.com/repos/formspree/formspree/milestones{/number}","notifications_url":"https://api.github.com/repos/formspree/formspree/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/formspree/formspree/labels{/name}","releases_url":"https://api.github.com/repos/formspree/formspree/releases{/id}","deployments_url":"https://api.github.com/repos/formspree/formspree/deployments","created_at":"2014-12-12T23:20:09Z","updated_at":"2018-08-29T20:26:17Z","pushed_at":"2018-08-29T19:34:30Z","git_url":"git://github.com/formspree/formspree.git","ssh_url":"git@github.com:formspree/formspree.git","clone_url":"https://github.com/formspree/formspree.git","svn_url":"https://github.com/formspree/formspree","homepage":"https://formspree.io","size":2745,"stargazers_count":2274,"watchers_count":2274,"language":"CSS","has_issues":false,"has_projects":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":187,"mirror_url":null,"archived":false,"open_issues_count":15,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":187,"open_issues":15,"watchers":2274,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/formspree/formspree/pulls/190"},"html":{"href":"https://github.com/formspree/formspree/pull/190"},"issue":{"href":"https://api.github.com/repos/formspree/formspree/issues/190"},"comments":{"href":"https://api.github.com/repos/formspree/formspree/issues/190/comments"},"review_comments":{"href":"https://api.github.com/repos/formspree/formspree/pulls/190/comments"},"review_comment":{"href":"https://api.github.com/repos/formspree/formspree/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/formspree/formspree/pulls/190/commits"},"statuses":{"href":"https://api.github.com/repos/formspree/formspree/statuses/4d332bdacb4efa0b3a7c660e0240f4dd06d1fc94"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"colevscode"}}