{"action":"created","issue":{"url":"https://api.github.com/repos/learningequality/studio/issues/1123","repository_url":"https://api.github.com/repos/learningequality/studio","labels_url":"https://api.github.com/repos/learningequality/studio/issues/1123/labels{/name}","comments_url":"https://api.github.com/repos/learningequality/studio/issues/1123/comments","events_url":"https://api.github.com/repos/learningequality/studio/issues/1123/events","html_url":"https://github.com/learningequality/studio/pull/1123","id":386950896,"node_id":"MDExOlB1bGxSZXF1ZXN0MjM1NTUwMzIw","number":1123,"title":"Bundles","user":{"login":"jayoshih","id":7447496,"node_id":"MDQ6VXNlcjc0NDc0OTY=","avatar_url":"https://avatars0.githubusercontent.com/u/7447496?v=4","gravatar_id":"","url":"https://api.github.com/users/jayoshih","html_url":"https://github.com/jayoshih","followers_url":"https://api.github.com/users/jayoshih/followers","following_url":"https://api.github.com/users/jayoshih/following{/other_user}","gists_url":"https://api.github.com/users/jayoshih/gists{/gist_id}","starred_url":"https://api.github.com/users/jayoshih/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jayoshih/subscriptions","organizations_url":"https://api.github.com/users/jayoshih/orgs","repos_url":"https://api.github.com/users/jayoshih/repos","events_url":"https://api.github.com/users/jayoshih/events{/privacy}","received_events_url":"https://api.github.com/users/jayoshih/received_events","type":"User","site_admin":false},"labels":[{"id":1101929145,"node_id":"MDU6TGFiZWwxMTAxOTI5MTQ1","url":"https://api.github.com/repos/learningequality/studio/labels/docs","name":"docs","color":"b2ffdb","default":false}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":0,"created_at":"2018-12-03T18:40:02Z","updated_at":"2018-12-05T17:06:00Z","closed_at":null,"author_association":"COLLABORATOR","pull_request":{"url":"https://api.github.com/repos/learningequality/studio/pulls/1123","html_url":"https://github.com/learningequality/studio/pull/1123","diff_url":"https://github.com/learningequality/studio/pull/1123.diff","patch_url":"https://github.com/learningequality/studio/pull/1123.patch"},"body":"## Description\r\n\r\nAdded the ability to make multiple channels be imported from one token\r\n\r\n#### Issue Addressed (if applicable)\r\n\r\nAddresses https://github.com/learningequality/clearinghouse/issues/206\r\n\r\n#### Before/After Screenshots (if applicable)\r\n\r\n![bundles](https://user-images.githubusercontent.com/7447496/49407099-599e1280-f70c-11e8-8f02-ba17c09f316d.gif)\r\n\r\n\r\n## Steps to Test\r\n\r\n- [ ] Go to Collections tab under the channel list\r\n- [ ] Create a collection (check that you can't save without specifying a title)\r\n- [ ] Add some channels\r\n- [ ] Save your collection\r\n- [ ] Edit your collection (select/deselect channels, edit title/description, etc.)\r\n- [ ] Try deleting your collection\r\n\r\n## Implementation Notes (optional)\r\n\r\n#### At a high level, how did you implement this?\r\n\r\nThis feature has been implemented in backbone for the collection list and vue for the collection modal. It also includes backend changes such as a new ChannelSet model and various endpoints around that.\r\n\r\n#### Does this introduce any tech-debt items?\r\n\r\nStill need to add ricecooker support. In the future, we may also want to add the ability to share channel collections with people, a way to publish all the channels under a collection, etc.\r\n\r\nFrom @rtibbles:\r\n\r\n> In general, it would be better to have a single store, and then register and unregister modules against that central store. This will work for now, but as we build up more complex state, this will be necessary, as if you have distinct stores, components will only know about the store they have been initialized with.\r\n\r\n\r\n## Checklist\r\n\r\n- [x] Is the code clean and well-commented?\r\n- [x] Does this introduce a change that needs to be updated in the [user docs](https://kolibri-studio.readthedocs.io/en/latest/index.html)?\r\n- [x] Are there tests for this change?\r\n- [x] Are all user-facing strings translated properly (if applicable)?\r\n- [x] Are all UI components LTR and RTL compliant (if applicable)?\r\n- [x] Are there any new interactions that need to be added to the [QA Sheet](https://docs.google.com/spreadsheets/d/1HF4Gy6rb_BLbZoNkZEWZonKFBqPyVEiQq4Ve6XgIYmQ/edit#gid=0)?\r\n- [x] Are there opportunities for using Google Analytics here (if applicable)?\r\n- [x] Are the migrations [safe for a large db](https://www.braintreepayments.com/blog/safe-operations-for-high-volume-postgresql/) (if applicable)?"},"comment":{"url":"https://api.github.com/repos/learningequality/studio/issues/comments/444563301","html_url":"https://github.com/learningequality/studio/pull/1123#issuecomment-444563301","issue_url":"https://api.github.com/repos/learningequality/studio/issues/1123","id":444563301,"node_id":"MDEyOklzc3VlQ29tbWVudDQ0NDU2MzMwMQ==","user":{"login":"aronasorman","id":191955,"node_id":"MDQ6VXNlcjE5MTk1NQ==","avatar_url":"https://avatars0.githubusercontent.com/u/191955?v=4","gravatar_id":"","url":"https://api.github.com/users/aronasorman","html_url":"https://github.com/aronasorman","followers_url":"https://api.github.com/users/aronasorman/followers","following_url":"https://api.github.com/users/aronasorman/following{/other_user}","gists_url":"https://api.github.com/users/aronasorman/gists{/gist_id}","starred_url":"https://api.github.com/users/aronasorman/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aronasorman/subscriptions","organizations_url":"https://api.github.com/users/aronasorman/orgs","repos_url":"https://api.github.com/users/aronasorman/repos","events_url":"https://api.github.com/users/aronasorman/events{/privacy}","received_events_url":"https://api.github.com/users/aronasorman/received_events","type":"User","site_admin":false},"created_at":"2018-12-05T17:06:00Z","updated_at":"2018-12-05T17:06:00Z","author_association":"MEMBER","body":"For context, putting complex logic in Models and minimizing it in controllers is called the \"Fat Models, Skinny Controller\" pattern. This is a nice overview of the rationale behind it: https://www.slideshare.net/syedhamin/thin-controllers-fat-models-how-to-write-better-code"}}
{"actor":{"display_login":"aronasorman"}}