Special Levels: Permanent Hints
What are we learning here?
- How to use variations of a hint
- How to use the shortcut
hint(type,text)
The hint component offers many variants. And we will test them all here. And we will use a shortcut
which should be used whenever possible: this.hint(type,text)
.
Why using the shortcut
The shortcut takes care of using the root stage and if not possible the stage of the component.
This is important in cases where a hint should be given before a component is initialized and if
you have many parallel tasks which shows hints in a unpredictible manner
Let's add some more buttons into our HTML structure:
src/demo/components/loading-components/index.html
| <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 some handlers:
src/demo/components/loading-components/index.js
| import { Canvas, Hint } from "@codecoupler/cc-ui";
import Mockup from "../../apps/mockup";
import { toRaw } from "vue";
import template from "./index.html";
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;
}
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!");
await new Promise((r) => setTimeout(() => r(), 2000));
splash.destroy();
}
appNoId() {
this.target.stage.load(Mockup);
}
appId() {
this.target.stage.load(Mockup, "fixed-id");
}
}
|
OK. Let's summarize the variations. You can specify the following as type
:
info
, error
, success
: An hint which close automatically in different themes.
info-permanent
, error-permanent
, success-permanent
: An hint which have to be closed by the
user in different themes.
splash
: A non closable and permanent hint centered.