Skip to content

Instantly share code, notes, and snippets.

@vitch
Created September 18, 2019 10:32
Show Gist options
  • Save vitch/d8edb1b5d4895daf944cf5f086454d28 to your computer and use it in GitHub Desktop.
Save vitch/d8edb1b5d4895daf944cf5f086454d28 to your computer and use it in GitHub Desktop.
{{#let (state (type "tab-manager") this.model) as |tabManager|}}
<h2>Items</h2>
<ul>
{{#each tabManager.tabs key="label.state" as |tab|}}
<li>
{{tab.label.state}}
{{#unless tab.isOpen.state}}
<button onclick={{action tabManager.activateTab tab}} type="button" class="button-xs">+</button>
{{/unless}}
</li>
{{/each}}
</ul>
<h2>Tabs</h2>
<div class="tabs">
<nav class="tabs-nav">
{{#each tabManager.openTabs key="label.state" as |tab|}}
<a href="#">
{{tab.label.state}}
<button onclick={{action tab.isOpen.set false}} type="button" class="button-xs">x</button>
</a>
{{/each}}
</nav>
</div>
{{/let}}
import Tab from "./tab";
import { filter } from "microstates";
export default class TabManager {
tabs = [Tab];
get openTabs() {
return filter(this.tabs, tab => tab.isOpen.state);
}
activateTab(tab) {
console.log(this, "activateTab", tab);
return tab.isOpen.set(true);
}
}
export default class Tab {
id = Number;
label = String;
isOpen = Boolean;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment