blob: 36db08d0b11cd67632b296c1b8d62f389fdff3ca [file] [log] [blame]
import {html, render} from "../../web_modules/lit-html.js";
import {createStore} from "../../web_modules/redux.js";
export class AdminElement extends HTMLElement {
constructor() {
super();
this.attachShadow({mode: "open"});
this.store = createStore(this.update.bind(this), {switched: false});
this.store.subscribe(this.render.bind(this));
}
static get observedAttributes() {
return ["greetee"];
}
connectedCallback () {
this.render();
}
attributeChangedCallback(name, oldValue, newValue) {
this.render();
}
onSwitchClicked(event) {
this.store.dispatch({ type: "SWITCH" });
}
update(state, action) {
console.log(`Processing action: ${JSON.stringify(action)}`);
switch (action.type) {
case "SWITCH":
state.switched = !state.switched;
break;
}
return state;
}
render() {
let state = this.store.getState();
let greetee = state.switched ? "Andreas" : this.getAttribute("greetee");
const template = html`
<p>Hello ${greetee}! <button @click=${this.onSwitchClicked.bind(this)}>Switch</button></p>
`;
render(template, this.shadowRoot);
}
}
customElements.define("mlk-admin", AdminElement);