mirror of
https://github.com/odoo/owl.git
synced 2025-10-06 19:59:41 +07:00
improve demo app
This commit is contained in:
@@ -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
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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),
|
||||||
|
|||||||
@@ -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);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -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() {
|
||||||
|
|||||||
Reference in New Issue
Block a user