# j-Table

> Affichage des données dans une table configurable.

Framework: jcomponent20
Product: jComponent 20 (jcomponent@20)
Language: fr
Content-SHA256: ceeb283f5da4a1ecab4bdfa28fc43ae18cf5ce8aee1d14aaaa0c28b7f4e2b9b0
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: components@910ed1a86f6e72b4f031d3ad0dc7844f9fc5cb8e
Review: not-recorded

- `j-Table` est une alternative très simple à `j-DataGrid` ciblée pour les UI
- `data-source` Expectations `Array` ou `Object` Avec `{ page: 1, pages: 10, limit: 50, items: [], count: 1000 }`

__Configuration__ :

- `highlight {Boolean}` permet l'accent sur la ligne (defaut: `true`)
- `unhighlight {Boolean}` permet l'allumage de la ligne (defaut: `true`)
- Le `multiple {Boolean}` permet de mettre en lumière plusieurs lignes (defaut: `false`)
- `detail {Boolean/String}` Si le `string` La valeur doit être un lien vers `function(row_data, next_fn(new_data_for_detail_template_OR__new_html), tdelement)`
- `exec {String}` : un chemin vers `function(row/rows)` ou un chemin à `variable`.
- `remember {Boolean}` permet de se souvenir des dernières lignes sélectionnées (defaut: `false`)
- `pk {String}` une clé primaire (defaut : `id`)
- `border {Boolean}` permet la limite (defaut: `true`)
- `scrollbar {Boolean}` La barre d'écran personnalisée (defaut) est autorisée : `false`• Plus important : `height` Il faut préciser
- `height {Number/String}` la hauteur de la grille ou peut contenir un sélecteur `window`, `parent` ou sélectionneur `.ui-viewbox-body`
- `paginate {String}` un lien vers `function(model)` pour effectuer la page `{ page: 1, limit: 10, sort: [] }`
- `redraw {String}` un lien vers la fonction, il est évalué lorsque la table est redécouverte
- `filter {String}` un lien vers la fonction, il est évalué avant que la table soit rendue
- `dblclick {String}` un lien vers la fonction, il est évalué lorsque l'utilisateur effectue un double clic
- `datasource {String}` route vers la source de données (pour d'autres données supplémentaires dans le modèle. utilisation: `{{ $.data.something }}`)
- `click {String}` Un chemin à `function(button_name, row, button_element)`Il est exécuté lorsque l'utilisateur clique sur le bouton
- `flat {Boolean}` supprime la patte dans les cellules (defaut: `false`)
- `noborder {Boolean}` supprime la frontière (defaut: `false`)
- __NEW__: `hidewhenempty {Boolean}` cache la table quand elle est vide (defaut : `false`)

__Bon à savoir__ :

- Chaque élément `tr` contient l'attribut `data-index` avec l'indice `row`
- Chaque `td` __élément de détails__ contient l'attribut `data-index` avec l'indice `row`

__Définition HTML__:

```html
<ui-component name="table" path="" config="">

	<!--
		data-size="TD1,TD2,TD3"      : column width, optional (can contain pixels or percentage), "0" means "auto" width
		data-head="TD1,TD2,TD3"      : column names, optional
		data-align="TD1,TD2,TD3"     : column align, optional (0: left, 1: center, 2: right)
		data-type="TYPE"             : can be "detail" (Tangular template) or "empty" (empty is rendered when the Array is empty)
		data-display="MD,XS"         : can contain display types "LG" large, "MD" medium, "SM" small, "XS" extra small
		data-sort="name,,price"      : enables sorting, can contain the name of fields (a column with empty value will have disabled sorting)
	-->
	<script type="text/html" data-size="0,150px,50px" data-head="Name,Created,Opt" data-align="0,0,1" data-sort="1">
		<tr>
			<td>{{ name }}</td>
			<td>{{ dtcreated | format('[date]') }}</td>
			<td>OK</td>
		</tr>
	</script>

	<script type="text/html" data-type="detail">
		DETAIL: {{ name }}
		HIDDEN COMMANDS: {{ $.index }} or {{ $.user }}
	</script>

	<script type="text/html" data-type="empty">
		EMPTY
	</script>

</ui-component>
```

__Bon à savoir__ :

- `data-head` peut contenir des icônes Font Awesome, il doit être enveloppé comme ce `data-head="Name,'cog'"` ou `data-name="Name,'youtube fab'"`
- `NULL('link.to.data')` Évaluation `config.paginate`

Utilisez-le avec `<ui-component name="table">`. Lorsque le composant n'est pas encore chargé, jComponent le télécharge lors de la première utilisation depuis l'adresse dans `DEF.fallback` (le CDN Componentator par défaut). Auteur : Peter Širka. Source : le référentiel de composants Componentator, licence MIT.

```html example.html
<style>
	body{padding:50px;margin:0;font-family:Arial;height:100%;}
	html{height:100%;}
</style>

<ui-component name="table" path="items" config="detail:true;datasource:extra">

	<!-- WITHOUT HEADERS -->

	<script type="text/html" data-size="0,120px,120px" data-head="Name,Price,Controls" data-align="0,2,1" data-sort="name,price,">
		<tr>
			<td><b>{{ $.data.author }}:</b> {{ name }}</td>
			<td class="right">{{ price | format(2) }} &euro;</td>
			<td class="center"><button><i class="ti ti-search"></i></button><button><i class="ti ti-pencil"></i></button><button class="red" disabled><i class="ti ti-trash"></i></button></td>
		</tr>
	</script>

	<script type="text/html" data-type="detail">
		<div class="padding npt npb">
			<div>Author: <b>{{ $.data.author }}</b></div>
			<div>Role: <b>{{ $.data.role }}</b></div>
			<div>Name: <b>{{ name }}</b></div>
			<div>Description: <b>{{ description }}</b></div>
		</div>
	</script>

	<script type="text/html" data-type="empty">
		No data
	</script>

</ui-component>

<br />

<ui-component name="table" path="items" config="border:0">

	<!-- WITHOUT HEADERS -->
	<script type="text/html" data-size="0,120px,120px">
		<tr>
			<td>{{ name }}</td>
			<td class="right">{{ price | format(2) }} &euro;</td>
			<td class="center">{{ created | format('yyyy-MM-dd') }}</td>
		</tr>
	</script>

	<script type="text/html" data-type="empty">
		No data
	</script>

</ui-component>

<script>

	var items = [];
	var extra = {
		author: 'Brutus',
		role: 'Planter'
	};

	items.push({ name: '1 Lorem ipsum dolor.', description: 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Consectetur, mollitia!', price: 233, created: new Date().add('-5 days') });
	items.push({ name: '2 Lorem ipsum dolor.', description: 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Consectetur, mollitia!', price: 122, created: new Date().add('-1 year') });
	items.push({ name: '3 Lorem ipsum dolor.', description: 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Consectetur, mollitia!', price: 119, created: new Date().add('-1 month') });
	items.push({ name: '4 Lorem ipsum dolor.', description: 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Consectetur, mollitia!', price: 35.34, created: new Date().add('-14 days') });
	items.push({ name: '5 Lorem ipsum dolor.', description: 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Consectetur, mollitia!', price: 439.33, created: new Date().add('-5 hours') });
	items.push({ name: '6 Lorem ipsum dolor.', description: 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Consectetur, mollitia!', price: 111.12, created: new Date().add('-349 minutes') });

</script>
```
