From 394141df947de6aedd1f90f3a2b7a396eec0e1b4 Mon Sep 17 00:00:00 2001 From: mrh0057 Date: Sun, 5 Apr 2020 15:16:51 -0500 Subject: [PATCH] Updated vlist to have key() attribute. Issue #479 --- src/virtual_dom/vlist.rs | 16 ++++++++++++++++ src/virtual_dom/vnode.rs | 2 +- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/virtual_dom/vlist.rs b/src/virtual_dom/vlist.rs index 8b55babf6e0..6c3a12c7eb8 100644 --- a/src/virtual_dom/vlist.rs +++ b/src/virtual_dom/vlist.rs @@ -60,6 +60,22 @@ impl VList { pub fn add_child(&mut self, child: VNode) { self.children.push(child); } + + pub fn key(&self) -> Option { + let mut key = String::with_capacity(150); + const START_STRING: &str = "#vlist_"; + key.push_str(START_STRING); + for n in &self.children{ + if let Some(child_key) = &n.key() { + key = key + child_key; + } + } + if START_STRING == &key { + None + } else { + Some(key) + } + } } impl VDiff for VList { diff --git a/src/virtual_dom/vnode.rs b/src/virtual_dom/vnode.rs index 7698dfa09c3..75e8bc0f1ae 100644 --- a/src/virtual_dom/vnode.rs +++ b/src/virtual_dom/vnode.rs @@ -37,7 +37,7 @@ impl VNode { VNode::VTag(vtag) => vtag.key.clone(), VNode::VText(_) => None, VNode::VComp(vcomp) => vcomp.key.clone(), - VNode::VList(_) => None, + VNode::VList(vnode) => vnode.key().clone(), VNode::VRef(_) => None, } }