Special Levels: Hints & Blocks
What are we learning here?
- Show an hint in block layer
- Update text in a hint
- Regular hints will never get blocked
Now let's look at the layer hint
. As we know the component Hint
will be loaded by default into
this level. The component can show short messages and splash screens.
Wait a moment. Isn't a splash screen better to show in the blocking level? Well, yes and no. In a
real world application the splash screen would be shown before the component is visible. And
therefore there would be nothing to block. But this all it's up to you and we will you show how to
to this.
There is a third argument in the hint shortcut to make this possible: hint(type,text,level)
. This
will override the default level hint
to any other. Like block
or error
. Use it wisely.
With all that knowledge, let's demonstrate the following: Open a hint of type splash
, overriding
the level into block
and then open another (regular) hint to see that it will be shown even the
componet is blocked.
src/demo/components/loading-components/index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63 | <div class="border rounded d-inline-block p-1 mr-2 my-1 bg-white text-dark">
Block & Hint
<button class="btn btn-xs btn-info" data-role="modalSplashHint">
<i style="pointer-events: none" class="fas fa-play-circle"></i>
</button>
</div>
<div class="border rounded d-inline-block p-1 mr-2 my-1 bg-white text-dark">
Block
<button class="btn btn-xs btn-info" data-role="blockMessage">
<i style="pointer-events: none" class="fas fa-check-circle"></i>
</button>
<button class="btn btn-xs btn-danger" data-role="blockError">
<i style="pointer-events: none" class="fas fa-exclamation-circle"></i>
</button>
</div>
<div class="border rounded d-inline-block p-1 mr-2 my-1 bg-white text-dark">
Modal
<button class="btn btn-xs btn-info" data-role="modalApp">
<i style="pointer-events: none" class="fas fa-check-circle"></i>
</button>
<button class="btn btn-xs btn-info" data-role="modalMultiApp">
<i style="pointer-events: none" class="fas fa-play-circle"></i>
</button>
</div>
<div class="border rounded d-inline-block p-1 mr-2 my-1 bg-white text-dark">
Hint
<button class="btn btn-xs btn-info" data-role="hintInfo">
<i style="pointer-events: none" class="fas fa-info-circle"></i>
</button>
<button class="btn btn-xs btn-success" data-role="hintSuccess">
<i style="pointer-events: none" class="fas fa-check-circle"></i>
</button>
<button class="btn btn-xs btn-danger" data-role="hintError">
<i style="pointer-events: none" class="fas fa-exclamation-circle"></i>
</button>
</div>
<div class="border rounded d-inline-block p-1 mr-2 my-1 bg-white text-dark">
Note
<button class="btn btn-xs btn-info" data-role="hintInfoP">
<i style="pointer-events: none" class="fas fa-info-circle"></i>
</button>
<button class="btn btn-xs btn-success" data-role="hintSuccessP">
<i style="pointer-events: none" class="fas fa-check-circle"></i>
</button>
<button class="btn btn-xs btn-danger" data-role="hintErrorP">
<i style="pointer-events: none" class="fas fa-exclamation-circle"></i>
</button>
</div>
<div class="border rounded d-inline-block p-1 mr-2 my-1 bg-white text-dark">
Splash
<button class="btn btn-xs btn-info" data-role="hintSplash">
<i style="pointer-events: none" class="fas fa-exclamation-circle"></i>
</button>
</div>
<div class="border rounded d-inline-block p-1 mr-2 my-1 bg-white text-dark">
App
<button class="btn btn-xs btn-info" data-role="appNoId">
<i style="pointer-events: none" class="fas fa-times-circle"></i>
</button>
<button class="btn btn-xs btn-info" data-role="appId">
<i style="pointer-events: none" class="pe-none fas fa-check-circle"></i>
</button>
</div>
|
And add a handler:
src/demo/components/loading-components/index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83 | import { Canvas, Hint, Message } from "@codecoupler/cc-ui";
import Mockup from "../../apps/mockup";
import { toRaw } from "vue";
import template from "./index.html";
import modalMultiApp from "./modal-multi-app";
export default class extends Canvas {
static defaults = { target: null };
async start() {
this.element.innerHTML = template;
this.element.addEventListener("click", (e) => {
if (e.target.dataset.role) this[e.target.dataset.role]();
});
this.target = toRaw(this.options.target) ?? this.env.parent;
}
async modalSplashHint() {
let splash = await this.target.hint("splash", "Splash It!", "block");
await new Promise((r) => setTimeout(() => r(), 2000));
await this.target.hint("success", "You are blocked, but I am free!");
await new Promise((r) => setTimeout(() => r(), 4000));
splash.destroy();
}
async blockError() {
await this.target.block("info", "Normal Message", "A");
await new Promise((r) => setTimeout(() => r(), 2000));
await this.target.block("error", "Error Message", "B");
await new Promise((r) => setTimeout(() => r(), 2000));
this.target.unblock("B");
await new Promise((r) => setTimeout(() => r(), 2000));
this.target.unblock("A");
}
async blockMessage() {
let message = await this.target.getStage("root").load({
component: Message,
options: { text: "You are blocked!" },
level: "block"
});
for (let x = 0; x <= 100; x += 25) {
await new Promise((r) => setTimeout(() => r(), 750));
message.text = `Please Wait\n${x}% Progress`;
}
await new Promise((r) => setTimeout(() => r(), 2000));
message.destroy();
}
modalMultiApp() {
modalMultiApp(this.target, Mockup);
}
modalApp() {
this.target.getStage("root").load({ component: Mockup, level: "block" });
}
hintInfo() {
this.target.getStage("root").load(Hint, { type: "info", text: "Hint!" });
}
hintSuccess() {
this.target.hint("success", "Hint!");
}
hintError() {
this.target.hint("error", "Hint!");
}
hintInfoP() {
this.target.hint("info-permanent", "Permanent Hint!");
}
hintSuccessP() {
this.target.hint("success-permanent", "Permanent Hint!");
}
hintErrorP() {
this.target.hint("error-permanent", "Permanent Hint!");
}
async hintSplash() {
let splash = await this.target.hint("splash", "Splash!");
for (let x = 0; x <= 100; x += 25) {
await new Promise((r) => setTimeout(() => r(), 750));
splash.text = `Please Wait\n${x}% Progress`;
}
await new Promise((r) => setTimeout(() => r(), 2000));
splash.destroy();
}
appNoId() {
this.target.stage.load(Mockup);
}
appId() {
this.target.stage.load(Mockup, "fixed-id");
}
}
|