improve demo app

This commit is contained in:
Géry Debongnie
2019-03-18 14:34:35 +01:00
parent 65a65bd241
commit 1f602512a5
6 changed files with 41 additions and 16 deletions
+8
View File
@@ -18,6 +18,14 @@
width: 100%; width: 100%;
} }
.left-thing .counter span {
color: white;
}
.left-thing .counter button {
width: 40px;
}
.right-thing { .right-thing {
padding: 20px; padding: 20px;
overflow: auto; overflow: auto;
+18 -5
View File
@@ -4,15 +4,22 @@ import { messages } from "./data.js";
const template = ` const template = `
<div class="main"> <div class="main">
<div class="left-thing"> <div class="left-thing">
<div class="counter">
<button t-on-click="increment(-1)">-</button>
<span style="font-weight:bold">Value: <t t-esc="state.messages.length"/></span>
<button t-on-click="increment(1)">+</button>
</div>
<button t-on-click="setMessageCount(10)">10 messages</button> <button t-on-click="setMessageCount(10)">10 messages</button>
<button t-on-click="setMessageCount(200)">200 messages</button> <button t-on-click="setMessageCount(20)">20 messages</button>
<button t-on-click="setMessageCount(500)">500 messages</button> <button t-on-click="setMessageCount(500)">500 messages</button>
<button t-on-click="setMessageCount(1000)">1000 messages</button>
<button t-on-click="setMessageCount(5000)">5000 messages</button> <button t-on-click="setMessageCount(5000)">5000 messages</button>
<button t-on-click="setMessageCount(15000)">15000 messages</button>
</div> </div>
<div class="right-thing"> <div class="right-thing">
<div class="content"> <div class="content">
<t t-foreach="state.messages" t-as="message"> <t t-foreach="state.messages" t-as="message">
<t t-widget="Message" t-props="message" t-on-remove_message="removeMessage"/> <t t-widget="Message" t-att-key="message.id" t-props="message" t-on-remove_message="removeMessage"/>
</t> </t>
</div> </div>
</div> </div>
@@ -35,8 +42,14 @@ export class App extends odoo.core.Component {
} }
removeMessage(data) { removeMessage(data) {
const index = this.state.messages.findIndex(m => m.id === data.id); const index = messages.findIndex(m => m.id === data.id);
this.state.messages.splice(index, 1); const n = this.state.messages.length;
this.setState({ messages: this.state.messages }); messages.splice(index, 1);
this.setState({ messages: messages.slice(0, n - 1) });
}
increment(delta) {
const n = this.state.messages.length + delta;
this.setMessageCount(n);
} }
} }
+2 -4
View File
@@ -1,14 +1,12 @@
const template = ` export class Counter extends odoo.core.Component {
inlineTemplate = `
<div> <div>
<button t-on-click="increment(-1)">-</button> <button t-on-click="increment(-1)">-</button>
<span style="font-weight:bold">Value: <t t-esc="state.counter"/></span> <span style="font-weight:bold">Value: <t t-esc="state.counter"/></span>
<button t-on-click="increment(1)">+</button> <button t-on-click="increment(1)">+</button>
</div>`; </div>`;
export class Counter extends odoo.core.Component {
constructor(parent, props) { constructor(parent, props) {
super(parent, props); super(parent, props);
this.inlineTemplate = template;
this.state = { this.state = {
counter: props.initialState || 0 counter: props.initialState || 0
}; };
+1 -1
View File
@@ -12,7 +12,7 @@ function chooseRandomly(array) {
return array[index]; return array[index];
} }
for (let i = 1; i < 6000; i++) { for (let i = 1; i < 16000; i++) {
messages.push({ messages.push({
id: i, id: i,
author: chooseRandomly(authors), author: chooseRandomly(authors),
+6 -3
View File
@@ -1,10 +1,13 @@
import { App } from "./app.js"; import { App } from "./app.js";
import { Counter } from "./counter.js";
document.addEventListener("DOMContentLoaded", function() { function createApp(el) {
const env = { const env = {
qweb: new odoo.core.QWeb() qweb: new odoo.core.QWeb()
}; };
const app = new App(env, { initialState: 13 }); const app = new App(env, { initialState: 13 });
app.mount(document.body); app.mount(el);
}
document.addEventListener("DOMContentLoaded", function() {
createApp(document.body);
}); });
+6 -3
View File
@@ -1,14 +1,17 @@
const template = ` import { Counter } from "./counter.js";
export class Message extends odoo.core.Component {
inlineTemplate = `
<div class="message"> <div class="message">
<span class="author"><t t-esc="props.author"/></span> <span class="author"><t t-esc="props.author"/></span>
<span class="msg"><t t-esc="props.msg"/></span> <span class="msg"><t t-esc="props.msg"/></span>
<button class="remove" t-on-click="removeMessage">Remove</button> <button class="remove" t-on-click="removeMessage">Remove</button>
<t t-widget="Counter" t-props="{initialState: props.id}"/>
</div>`; </div>`;
export class Message extends odoo.core.Component {
constructor(parent, props) { constructor(parent, props) {
super(parent, props); super(parent, props);
this.inlineTemplate = template; this.widgets = { Counter };
} }
removeMessage() { removeMessage() {