From eacbd9b5009a3646854b59e9983753fd288ea1c4 Mon Sep 17 00:00:00 2001
From: Henry Jameson <me@hjkos.com>
Date: Mon, 27 Aug 2018 22:22:25 +0300
Subject: Separated tab-switcher into a reusable component. This depends on JSX
 addition

---
 src/components/tab_switcher/tab_switcher.jsx | 44 ++++++++++++++++++++++++++++
 1 file changed, 44 insertions(+)
 create mode 100644 src/components/tab_switcher/tab_switcher.jsx

(limited to 'src/components/tab_switcher/tab_switcher.jsx')

diff --git a/src/components/tab_switcher/tab_switcher.jsx b/src/components/tab_switcher/tab_switcher.jsx
new file mode 100644
index 00000000..0a6eec11
--- /dev/null
+++ b/src/components/tab_switcher/tab_switcher.jsx
@@ -0,0 +1,44 @@
+import Vue from 'vue'
+
+import './tab_switcher.scss'
+
+export default Vue.component('tab-switcher', {
+  name: 'TabSwitcher',
+  data () {
+    return {
+      active: 0
+    }
+  },
+  methods: {
+    activateTab(index) {
+      return () => this.active = index;
+    }
+  },
+  render(h) {
+    const tabs = this.$slots.default
+          .filter(slot => slot.data)
+          .map((slot, index) => {
+            const classes = ['tab']
+
+            if (index === this.active) {
+              classes.push('active')
+            }
+            return (<button onClick={this.activateTab(index)} class={ classes.join(' ') }>{slot.data.attrs.title}</button>)
+          });
+    const contents = (
+      <div>
+        {this.$slots.default.filter(slot => slot.data)[this.active]}
+      </div>
+    );
+    return (
+      <div class="tab-switcher">
+        <div class="tabs">
+          {tabs}
+        </div>
+        <div class="contents">
+          {contents}
+        </div>
+      </div>
+    )
+  }
+})
-- 
cgit v1.2.3-70-g09d2

