# Tabs component
Les composants Tabs
, Tab
et SmartElementTab
définissent un ensemble de composants permettant de créer une liste
d'onglets et les méthodes/événements nécessaires à la navigation entre ces derniers.
Le composant Tabs
définit le conteneur parent des différents onglets que sont les composants Tab
et
SmartElementTab
.
# Installation
Les tabs sont composés de trois éléments à importer.
@anakeen/user-interfaces/components/lib/AnkTabs.esm
@anakeen/user-interfaces/components/lib/AnkSmartElementTab.esm
@anakeen/user-interfaces/components/lib/AnkTab.esm
Si vous importez le smartElementTab, vous devez aussi importer la CSS associée :
@anakeen/user-interfaces/components/scss/AnkSmartElement.scss
WARNING
Le composant SmartElementTab
est
asynchrone, il faut donc le
charger manière asynchrone dans vue (avec une closure). De plus, pour accéder au composant il faut attendre que celui-ci
soit monté, un évènement vue @smartElementTabMounted
est mis à disposition pour pouvoir déclencher une méthode à ce
moment.
# Tabs component
Le composant Tabs
fournit un système d'onglets pour la manipulation de Smart Element Tab (SmartElementTab)
ou de
Tab
.
# Propriétés
v-model
(string) optionnel
La valeur liée au nom de l'onglet sélectionné.
selected
(string) optionnel
Nom de l'onglet sélectionné.
type
(TabTypes) optionnel
Type de l'onglet Valeurs possible: Card | Border_Card | Bezel.
closable
(boolean) optionnel
Définit la possibilité de fermer ou non chaque onglet (par défaut: false).
addable
(boolean) optionnel
Définit la possibilité d'ajouter des onglets vides (par défaut: false).
minTabSize
(string) optionnel
Définit la largeur minimale d'un onglet
forceScrollNavigation
(boolean) optionnel
Définit l'affichage obligatoire des boutons de navigation (par défaut: false).
# Événements
# tabRemove
Cet événement permet d'effectuer des instructions avant la suppression d'un onglet.
# Déclenchement
Cet événement est déclenché lorsque l'utilisateur clique sur le bouton de suppression d'un onglet.
# Paramètres passés au callback
tabRemoved
(string)
Nom de la l'onglet supprimé
# Exemple d'utilisation
<template>
<div>
<ank-tabs selected="smartTab" @tabRemove="onRemoveTab">
<ank-smart-tab v-if="myTabOpen" ref="smartTab" identifier="USER_ADMIN" name="smartTab" :closable="true" />
<ank-tab tabId="htmlTab" label="HTMLTab">
<h1>HTMLTab</h1>
</ank-tab>
</ank-tabs>
</div>
</template>
<script>
import AnkTabs from "@anakeen/user-interfaces/components/lib/AnkTabs.esm";
import AnkSmartTab from "@anakeen/user-interfaces/components/lib/AnkSmartElementTab.esm";
import AnkTab from "@anakeen/user-interfaces/components/lib/AnkTab.esm";
import "@anakeen/user-interfaces/components/scss/AnkSmartElement.scss";
export default {
components: {
AnkTabs,
AnkSmartTab: () => AnkSmartTab,
AnkTab
},
data() {
return {
myTabOpen: true
};
},
methods: {
onRemoveTab(event, detail) {
this.$refs.smartTab
.closeSmartElement()
.then(() => {
this.myTabOpen = false;
})
.catch(err => {
console.error(err);
});
}
}
};
</script>
# tabClick
Cet événement permet d'effectuer des instructions lorsque l'utilisateur sélectionne un onglet.
# Déclenchement
Cet événement est déclenché lorsque l'utilisateur sélectionne un onglet.
# Paramètres passés au callback
event
Événement
# Exemple d'utilisation
<template>
<div>
<ank-tabs selected="smartTab" @tabClick="onSelectedTab">
<ank-smart-tab v-if="myTabOpen" ref="smartTab" identifier="USER_ADMIN" name="smartTab" :closable="true" />
<ank-tab tabId="htmlTab" label="HTMLTab">
<h1>HTMLTab</h1>
</ank-tab>
</ank-tabs>
</div>
</template>
<script>
import AnkTabs from "@anakeen/user-interfaces/components/lib/AnkTabs.esm";
import AnkSmartTab from "@anakeen/user-interfaces/components/lib/AnkSmartElementTab.esm";
import AnkTab from "@anakeen/user-interfaces/components/lib/AnkTab.esm";
import "@anakeen/user-interfaces/components/scss/AnkSmartElement.scss";
export default {
components: {
AnkTabs,
AnkSmartTab: () => AnkSmartTab,
AnkTab
},
data() {
return {
myTabOpen: true
};
},
methods: {
onSelectedTab(event) {
console.log(`L'onglet ${event.selectedTab} est selectionné`);
}
}
};
</script>
# tabBeforeLeave
Cet événement permet d'effectuer des instructions avant de naviguer en dehors de l'onglet
# Déclenchement
Cet événement est déclenché lorsque l'utilisateur navigue en dehors de l'onglet
# Paramètres passés au callback
event
Événement
# input
Cet événement permet de mettre à jour l'identifiant de l'onglet sélectionné .
# Déclenchement
Cet événement est déclenché lorsque l'utilisateur navigue en dehors de l'onglet.
# Paramètres passés au callback
tabName
Identifiant de l'onglet
# Méthodes
# setSelectedTab
public setSelectedTab(string tabName)
Cette méthode permet de sélectionner un onglet.
# Arguments
tabName
(string)
Identifiant de l'onglet.
# Retour
Aucun.
# Erreurs / Exceptions
Aucune.
# Exemple d'utilisation
<template>
<div>
<ank-tabs ref="smartTab">
<ank-smart-tab identifier="USER_ADMIN" />
<ank-tab tabId="htmlTab" label="HTMLTab">
<h1>HTMLTab</h1>
</ank-tab>
</ank-tabs>
</div>
</template>
<script>
import AnkTabs from "@anakeen/user-interfaces/components/lib/AnkTabs.esm";
import AnkSmartTab from "@anakeen/user-interfaces/components/lib/AnkSmartElementTab.esm";
import AnkTab from "@anakeen/user-interfaces/components/lib/AnkTab.esm";
import "@anakeen/user-interfaces/components/scss/AnkSmartElement.scss";
export default {
components: {
AnkTabs,
AnkSmartTab: () => AnkSmartTab,
AnkTab
},
mounted() {
this.$refs.smartTab.setSelectedTab("USER_ADMIN");
}
};
</script>
# Smart Element Tab component
# Description
Le composant SmartElementTab
représente un onglet contenant un Smart Element.
# Propriétés
label
(string) optionnel
Titre de l'onglet (par défaut: "Chargement en cours..."). Pour définir un label customisé, il est possible d'utiliser une balise
<template v-slot:label></template>
dans laquelle est défini le template vue du label.
disabled
(boolean) optionnel
Désactivation d'un onglet (par défaut false).
identifier
(string) optionnel
Identifiant du Smart Element.
tabId
(string) optionnel
Identifiant de l'onglet.
viewId
(string) optionnel
Définit la vue de rendu (par défaut : "!defaultConsultation").
closable
(boolean) optionnel
Définit la possibilité de fermer ou non chaque onglet (par défaut: false).
lazy
(boolean) optionnel
Définit le mode de chargement des onglets:
- si
lazy
vaut true, alors les onglets ne se chargeront qu'au clic sur l'onglet.- si
lazy
vaut false, alors les onglets sont chargés au montage du composant. Par défautlazy
vaut false.
# Slots
# loading
Le slot nommé loading
permet de personnaliser l'affichage du chargement en cours. L'affichage du chargement est
automatiquement retiré lorsque l'évènement ready
du Smart Element
a été déclenché.
Par défaut, le chargement est représenté par le logo Anakeen
ainsi qu'une barre de chargement. Le contenu du slot est
rendu dans la balise encadrant le Smart Element, ainsi l'affichage du chargement occupe l'ensemble de l'espace pris par
le Smart Element.
# Exemple
Affichage d'un texte centré
<template>
<div>
<ank-tabs class="custom-tabs">
<ank-smart-tab identifier="USER_ADMIN" class="custom-tab">
<template v-slot:loading>
<h1>Chargement en cours...</h1>
</template>
</ank-smart-tab>
</ank-tabs>
</div>
</template>
<style scoped>
.custom-tabs {
height: 500px;
}
.custom-tab > .ank-se-tab-element > .smart-element-custom-loading > .custom-loading {
display: flex;
height: 100%;
align-items: center;
justify-content: center;
}
</style>
# Événements
# Événements du composant Smart Element
Chaque onglet du composant correspond à un Smart Element
, l'ensemble des événements du Smart Element est propagé sur
le composant Tabs
avec le nom suivant :
SmartElementTab<nom_evenement>
<template>
<div>
<ank-tabs selected="smartTab">
<ank-smart-tab
identifier="USER_ADMIN"
name="smartTab"
@SmartElementTabAfterSave="onEvent"
@SmartElementTabAfterDelete="onEvent"
@SmartElementTabActionClick="onEvent"
@SmartElementTabDisplayError="onEvent"
@SmartElementTabDisplayMessage="onEvent"
@SmartElementTabBeforeSave="onEvent"
/>
<ank-tab tabId="htmlTab" label="HTMLTab">
<h1>HTMLTab</h1>
</ank-tab>
</ank-tabs>
</div>
</template>
<script>
import AnkTabs from "@anakeen/user-interfaces/components/lib/AnkTabs.esm";
import AnkSmartTab from "@anakeen/user-interfaces/components/lib/AnkSmartElementTab.esm";
import AnkTab from "@anakeen/user-interfaces/components/lib/AnkTab.esm";
import "@anakeen/user-interfaces/components/scss/AnkSmartElement.scss";
export default {
components: {
AnkTabs,
AnkSmartTab: () => AnkSmartTab,
AnkTab
},
methods: {
onEvent: function(event, detail) {
console.log(event, detail);
}
}
};
</script>
# Annulation de la sauvegarde du Smart Element
L'annulation de la sauvegarde d'un Smart Element doit se faire avant que la procédure de sauvegarde soit engagée.
De fait, il faut effectuer cette annulation durant l'événement SmartElementTabBeforeSave
.
# Méthodes
# closeSmartElement
void closeSmartElement();
Cette méthode permet de fermer le Smart Element courant.
Attention
Cette méthode ne ferme pas l'onglet dans lequel se trouve le Smart Element.
# Arguments
Aucun.
# Retour
Aucun.
# Erreurs / Exceptions
Aucune.
# Exemple
- Fermeture de l'onglet du Smart Element courant suite à la fermeture du Smart Element
<template>
<div>
<ank-tabs selected="smartTab" @tabRemove="onRemoveTab">
<ank-smart-tab v-if="myTabOpen" ref="smartTab" identifier="USER_ADMIN" name="smartTab" :closable="true" />
<ank-tab tabId="htmlTab" label="HTMLTab">
<h1>HTMLTab</h1>
</ank-tab>
</ank-tabs>
</div>
</template>
<script>
import AnkTabs from "@anakeen/user-interfaces/components/lib/AnkTabs.esm";
import AnkSmartTab from "@anakeen/user-interfaces/components/lib/AnkSmartElementTab.esm";
import AnkTab from "@anakeen/user-interfaces/components/lib/AnkTab.esm";
import "@anakeen/user-interfaces/components/scss/AnkSmartElement.scss";
export default {
components: {
AnkTabs,
AnkSmartTab: () => AnkSmartTab,
AnkTab
},
data() {
return {
myTabOpen: true
};
},
methods: {
onRemoveTab(event, detail) {
this.$refs.smartTab
.closeSmartElement()
.then(() => {
this.myTabOpen = false;
})
.catch(err => {
console.error(err);
});
}
}
};
</script>
# Autres méthodes
Le composant SmartElementTab
permet également d'utiliser toutes les méthodes liées au Smart Element (voir
documentation sur les méthodes de Smart Element).
# Exemple
<template>
<div>
<ank-tabs selected="smartTab">
<ank-smart-tab
identifier="112861"
name="smartTab"
ref="myTab"
@SmartElementTabMounted="onEvent"
/>
<ank-tab tabId="htmlTab" label="HTMLTab">
<h1>HTMLTab</h1>
</ank-tab>
</ank-tabs>
</div>
</div>
</template>
<script>
import AnkTabs from "@anakeen/user-interfaces/components/lib/AnkTabs.esm";
import AnkSmartTab from "@anakeen/user-interfaces/components/lib/AnkSmartElementTab.esm";
import AnkTab from "@anakeen/user-interfaces/components/lib/AnkTab.esm";
import "@anakeen/user-interfaces/components/scss/AnkSmartElement.scss";
export default {
components: {
AnkTabs,
AnkSmartTab: () => AnkSmartTab,
AnkTab
},
data() {
return {
myTabOpen: true
};
},
methods: {
onEvent(event) {
console.log(this.$refs.myTab.getProperties());
}
}
};
</script>
# Tab component
# Description
Le composant Tab
représente un onglet générique pouvant contenir un template VueJs ou de la DOM.
# Propriétés
tabId
(string)
Identifiant de l'onglet
label
(string) optionnel
Titre de l'onglet (par défaut: ""). Pour définir un label customisé, il est possible d'utiliser une balise
<template v-slot:label></template>
dans laquelle est défini le template vue du label.
disabled
(boolean) optionnel
Désactivation d'un onglet (par défaut false).
closable
(boolean) optionnel
Définit la possibilité de fermer ou non chaque onglet (par défaut: false).
lazy
(boolean) optionnel
Définit le mode de chargement des onglets:
- si
lazy
vaut true, alors les onglets ne se chargeront qu'au clic sur l'onglet.- si
lazy
vaut false, alors les onglets sont charger au montage du composant. Par défautlazy
vaut false.
# Événements
# Événement tabLabelChanged
# Déclenchement
Cet événement est déclenché lorsque le titre du l'onget a été modifié.
# Paramètres passés au callback
Aucun.
# Méthodes
Aucune.
# Exemple
<template>
<div class="ank-test-app">
<div class="ank-test-app-tabs-wrapper">
<ank-tabs class="ank-test-app-tabs">
<ank-tab :closable="false" tabId="welcome">
<template slot="label">
<span class="ank-test-app-welcome-title" v-html="welcomeTabTitle" />
</template>
<span>body</span>
</ank-tab>
</ank-tabs>
</div>
</div>
</template>
<script>
import AnkTabs from "@anakeen/user-interfaces/components/lib/AnkTabs.esm";
import AnkTab from "@anakeen/user-interfaces/components/lib/AnkTab.esm";
import "@anakeen/user-interfaces/components/scss/AnkSmartElement.scss";
export default {
components: {
AnkTabs,
AnkTab
},
data() {
return {
welcomeTabTitle: "Welcome"
};
}
};
</script>
# Exemple
<template>
<div class="ank-test-app">
<div class="ank-test-app-tabs-wrapper">
<ank-tabs class="ank-test-app-tabs" ref="testAppTabs" @tabRemove="onRemoveTab" @tabAdd="onTabAdd" addable>
<ank-tab :closable="false" tabId="welcome">
<template slot="label">
<span class="ank-test-app-welcome-title" v-html="welcomeTabTitle"></span>
</template>
<span>body</span>
</ank-tab>
<ank-smart-tab
v-for="(tab, index) in tabs"
:identifier="tab.name"
:key="tab.tabId"
:tabId="tab.tabId"
:closable="!!tab.closable"
:viewId="tab.viewId || '!defaultConsultation'"
:revision="tab.revision"
ref="seTab"
@SmartElementTabAfterSave="onAfterSave"
@SmartElementTabAfterDelete="onAfterDelete"
@SmartElementTabActionClick="onActionClick"
@SmartElementTabDisplayError="onDisplayError"
@SmartElementTabDisplayMessage="onDisplayMessage"
>
</ank-smart-tab>
</ank-tabs>
</div>
</div>
</template>
<script>
import AnkTabs from "@anakeen/user-interfaces/components/lib/AnkTabs.esm";
import AnkSmartTab from "@anakeen/user-interfaces/components/lib/AnkSmartElementTab.esm";
import AnkTab from "@anakeen/user-interfaces/components/lib/AnkTab.esm";
import "@anakeen/user-interfaces/components/scss/AnkSmartElement.scss";
export default {
components: {
AnkTabs,
AnkSmartTab: () => AnkSmartTab,
AnkTab
},
data() {
return {
welcomeTabTitle: "Welcome",
tabs: [
{
closable: true,
name: "2099"
},
{
closable: true,
name: "2113"
},
{
closable: false,
name: "2090"
}
]
};
},
methods: {
onAfterSave(event, detail) {
console.log(event, detail);
},
onAfterDelete(event, detail) {
console.log(event, detail);
},
onActionClick(event, detail) {
console.log(event, detail);
},
onDisplayError(event, detail) {
console.log(event, detail);
},
onDisplayMessage(event, detail) {
console.log(event, detail);
},
onTabAdd(event, detail) {
this.tabs.push({
closable: true,
name: "2133"
});
},
onRemoveTab(event, detail) {
this.$refs.seTab.forEach((item, key) => {
if (item.paneName === event) {
item
.closeSmartElement()
.then(() => {
this.tabs.splice(key, 1);
})
.catch(err => {
console.error(err);
});
}
});
}
}
};
</script>