{"action":"created","issue":{"url":"https://api.github.com/repos/DeclarativeHub/Bond/issues/524","repository_url":"https://api.github.com/repos/DeclarativeHub/Bond","labels_url":"https://api.github.com/repos/DeclarativeHub/Bond/issues/524/labels{/name}","comments_url":"https://api.github.com/repos/DeclarativeHub/Bond/issues/524/comments","events_url":"https://api.github.com/repos/DeclarativeHub/Bond/issues/524/events","html_url":"https://github.com/DeclarativeHub/Bond/pull/524","id":317385300,"number":524,"title":"[WIP] Observable Tree","user":{"login":"srdanrasic","id":1660804,"avatar_url":"https://avatars1.githubusercontent.com/u/1660804?v=4","gravatar_id":"","url":"https://api.github.com/users/srdanrasic","html_url":"https://github.com/srdanrasic","followers_url":"https://api.github.com/users/srdanrasic/followers","following_url":"https://api.github.com/users/srdanrasic/following{/other_user}","gists_url":"https://api.github.com/users/srdanrasic/gists{/gist_id}","starred_url":"https://api.github.com/users/srdanrasic/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/srdanrasic/subscriptions","organizations_url":"https://api.github.com/users/srdanrasic/orgs","repos_url":"https://api.github.com/users/srdanrasic/repos","events_url":"https://api.github.com/users/srdanrasic/events{/privacy}","received_events_url":"https://api.github.com/users/srdanrasic/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":3,"created_at":"2018-04-24T20:36:11Z","updated_at":"2018-04-27T08:46:10Z","closed_at":null,"author_association":"CONTRIBUTOR","pull_request":{"url":"https://api.github.com/repos/DeclarativeHub/Bond/pulls/524","html_url":"https://github.com/DeclarativeHub/Bond/pull/524","diff_url":"https://github.com/DeclarativeHub/Bond/pull/524.diff","patch_url":"https://github.com/DeclarativeHub/Bond/pull/524.patch"},"body":"@tonyarnold I've merged your PR into `observable-tree` branch so we can work here. \r\n\r\nI've also refactored things a bit, but I've just started. We don't need (Mutable)ObservableTreeNode classes so I removed them. We can use `ObservableCollection` where underlying collection is  `TreeNode`. I've renamed `TreeNode` into `TreeNodeProtocol` and introduced a concrete tree implementation - `TreeNode`.\r\n\r\nWe need to add more methods to `TreeNodeProtocol` and then add respective variants to `ObservableCollection+TreeNode`.\r\n\r\nI also need to handle batched diff and patching properly. \r\n\r\nCheck the playground."},"comment":{"url":"https://api.github.com/repos/DeclarativeHub/Bond/issues/comments/384907064","html_url":"https://github.com/DeclarativeHub/Bond/pull/524#issuecomment-384907064","issue_url":"https://api.github.com/repos/DeclarativeHub/Bond/issues/524","id":384907064,"user":{"login":"srdanrasic","id":1660804,"avatar_url":"https://avatars1.githubusercontent.com/u/1660804?v=4","gravatar_id":"","url":"https://api.github.com/users/srdanrasic","html_url":"https://github.com/srdanrasic","followers_url":"https://api.github.com/users/srdanrasic/followers","following_url":"https://api.github.com/users/srdanrasic/following{/other_user}","gists_url":"https://api.github.com/users/srdanrasic/gists{/gist_id}","starred_url":"https://api.github.com/users/srdanrasic/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/srdanrasic/subscriptions","organizations_url":"https://api.github.com/users/srdanrasic/orgs","repos_url":"https://api.github.com/users/srdanrasic/repos","events_url":"https://api.github.com/users/srdanrasic/events{/privacy}","received_events_url":"https://api.github.com/users/srdanrasic/received_events","type":"User","site_admin":false},"created_at":"2018-04-27T08:46:10Z","updated_at":"2018-04-27T08:46:10Z","author_association":"CONTRIBUTOR","body":"Hey @tonyarnold, how would you implement inserting or deleting objects with those classes? NSFastEnumeration is just an Objective-C style Sequence. So it does not, by itself, support any mutation. \r\n\r\nBtw, I'm using our own `RangeReplacableTreeNode` to implement editing, not `RangeReplaceableCollection`. We can change the protocol if needed. The idea is that the conforming class has to implement only one method, `replaceSubrange`. It then gets all other editing methods for free. "}}
{"actor":{"display_login":"srdanrasic"}}