@v4fire/client
Version:
V4Fire client core library
259 lines (173 loc) • 5.75 kB
Markdown
# base/b-list
This module provides a standard component to create a list of tabs/links.
You can use it "as it is" or like a superclass.
The component uses the `<a>` or `<button>` tags with a simple text label to render each item.
If you need a more complex layout, provide it via a slot or by using `item/itemProps` props.
## Synopsis
* The component extends [[iData]].
* The component implements [[iActiveItems]], [[iVisible]], [[iWidth]] traits.
* The component is used as functional if there is no provided the `dataProvider` prop.
* The component supports tooltips.
* The component uses `aria` attributes.
* By default, the list will be created using `<ul>` and `<li>` tags.
## Features
* Support of links and tabs.
* Multiple active items (`multiple = true`).
* Cancellation of a choice (`cancelable = true`).
* Dynamic data loading.
## Modifiers
| Name | Description | Values | Default |
|--------------|------------------------|-----------|---------|
| `hideLabels` | Item labels are hidden | `boolean` | `false` |
Also, you can see the parent component and the component traits.
## Events
| EventName | Description | Payload description | Payload |
|---------------|----------------------------------------------|--------------------------------------------|---------|
| `itemsChange` | The component items has been changed | An array of items | `Items` |
Also, you can see the parent component and the component traits.
## Associated types
The component has associated type to specify active component item: **Active**.
```typescript
import bList, { component } from 'super/b-list/b-list';
export * from 'super/b-list/b-list';
@component()
export default class myList extends bList {
/** @override */
readonly Active!: number;
}
```
There are associated types to specify a type of component items: **Item** and **Items**.
```typescript
import bList, { component } from 'super/b-list/b-list';
export * from 'super/b-list/b-list';
@component()
export default class myList extends bList {
/** @override */
readonly Item!: MyItem;
}
```
Also, you can see the parent component.
## Model
The component can be used with the `v-model` directive.
```
< b-list :items = items | v-model = activeItem
```
```js
({
model: {
prop: 'activeProp',
event: 'onChange'
}
})
```
## Usage
### Simple use of the component with a provided list of items and default active item
```
< b-list :items = [ &
{label: 'Male', value: 0, active: true},
{label: 'Female', value: 1}
] .
```
### Use of the component with the providing of an active item
```
< b-list :active = 0 | :items = [ &
{label: 'Male', value: 0},
{label: 'Female', value: 1}
] .
```
### Use of the component with the providing of links and custom attributes
```
< b-list :items = [ &
{label: 'Home', href: '/home'},
{label: 'Google', href: 'https://google.com', attrs: {target: '_blank'}}
] .
```
### Loading items from a data provider
```
< b-list :active = true | :dataProvider = 'MyProvider'
```
### Use of the component with the creation of additional component for each item
```
< b-list &
:item = 'b-my-component' |
:itemProps = (item) => item |
:items = [ &
{label: 'Male', value: 0, active: true},
{label: 'Female', value: 1}
]
.
```
### Providing a key to the internal `v-for` directive
```
< b-tree &
:itemKey = 'value' |
:items = [ &
{label: 'Male', value: 0, active: true},
{label: 'Female', value: 1}
]
.
```
## Slots
The component supports a bunch of slots to provide:
1. `default` to provide the base content of each item.
```
< b-list :items = listOfItems
< template #default = {item}
{{ item.label }}
```
2. `preIcon` and `icon` to inject icons around each item.
```
< b-list :items = listOfItems
< template #preIcon
< img src = expand.svg
```
Also, these icons can be provided by a prop.
```
< b-list :items = [ &
{label: 'Foo', preIcon: 'expand'}
{label: 'Bar', icon: 'expand', iconComponent: 'b-custom-icon'}
] .
< b-list :items = listOfItems
< template #icon = {icon, item}
< img :src = icon
```
3. `progressIcon` to inject an icon that indicates loading each item, by default, is used [[bProgressIcon]].
```
< b-list :items = listOfItems
< template #progressIcon
< img src = spinner.svg
```
Also, this icon can be provided by a prop.
```
< b-list :items = [ &
{label: 'Foo', progressIcon: 'bCustomLoader'}
] .
```
## API
Also, you can see the implemented traits or the parent component.
### Props
#### [listTag = `'ul'`]
A type of the list' root tag.
#### [listElTag = `'li'`]
A type of list' element tags.
#### [activeProp]
An initial component active item/s.
If the component is switched to the `multiple` mode, you can pass an array or Set to define several active items.
#### [autoHref = `false`]
If true, then all items without the `href` option will automatically generate a link by using `value` and other props.
#### [multiple = `false`]
If true, the component supports a feature of multiple active items.
#### [cancelable]
If true, the active item can be unset by using another click to it.
By default, if the component is switched to the `multiple` mode, this value is set to `true`, otherwise to `false`.
#### [attrsProp]
Initial additional attributes are provided to an "internal" (native) list tag.
### Fields
#### items
List of component items.
### Getters
#### active
A component active item/s.
If the component is switched to the `multiple` mode, the getter will return a `Set` object.
#### attrs
Additional attributes are provided to an "internal" (native) list tag.