npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@kriptiko/vue-table

v2.0.1

Published

Vue table component for rendering server-side data.

Downloads

10

Readme

Vue Table

Vue table component for rendering server-side data.

npm npm npm vue2

Main features

  • Server-side data
  • Searchable columns
  • Sortable columns
  • Filterable columns
  • Drag and drop for reordering the tables' rows
  • Store modules
  • Persist the state to local storage

Installation

# NPM
npm install @kriptiko/vue-table

# Yarn
yarn add @kriptiko/vue-table

Usage

import Vue from 'vue'
import VueTable from '@kriptiko/vue-table'

Props

| Prop | Type | Default | Description | |-------------|:-------------------:|:-----------------------------------:|--------------------------------------------------------------------------------------------------| | checkable | Object | { display: false, attribute: null } | Show/hide checkboxes for bulk operations. See the Checkable API for more info. | | columns | Array | [] | The table columns. See the Columns API for more info. | | data-key | String | 'data' | The path to the data in the server's JSON response. | | locale | String | en | Sets the locale. Supported values: en, es, fr, pt. | | meta-key | String | null | The path to the pagination meta in the server's JSON response. | | paginate | Boolean | true | Paginates the records and enables the pages links. | | per-page | Number | 20 | Number of items displayed per page. Supported values: 20, 50, 100. | | orderable | Boolean | false | When set to true, the rows can be reorder by dragging them. | | row-class | String or Function | '' | The row CSS classes. It can be a String or a callback Function. | | sorting | Array | [] | The columns' sorting directions. See the Sorting API for more info. | | table-class | String | 'table table-striped' | The CSS classes of the table. | | uri | String | null | Data source URI |

Slots

Table header

For injecting HTML before the table, you can use the header slot. See the following example:

<vue-table v-bind="options" :items.sync="items" ref="vueTable">
        <template v-slot:header>
            <div class="mb-4 text-right">
                <button class="btn btn-outline-secondary btn-sm mr-1" @click="importItems()">
                    <i class="fas fa-file-import mr-1"></i> Import
                </button>

                <button class="btn btn-outline-secondary btn-sm" @click="exportItems($refs.vueTable.selectedItems)">
                    <i class="fas fa-file-export mr-1"></i> Export
                </button>
            </div>
        </template>

...

Reset button

For replacing the search button with your custom one, you can use the reset-button. See the next example:

<template v-slot:reset-button="slotProps">
    <button type="button" class="btn btn-primary" @click="slotProps.resetFilters">
        <i class="fas fa-sync-alt"></i>
    </button>
</template>

Columns API

| Property | Type | Default | Description | |---------------|:-------------:|:-------:|----------------------------------------------------------------| | headerClasses | String | null | The CSS classes that will be assigned to the table headers. | | name | String | "" | The column's attribute name. | | value | String, Array | null | The column's default value. | | slotName | String | "" | The name of the slot to be rendered. | | rowClasses | String | "" | The CSS classes that will be assigned to the table rows. | | searchable | Boolean | false | Determines whether the column is searchable. | | sortable | Boolean | false | Determines whether the column is sortable. | | title | String | "" | The column's header title. | | visible | Boolean | true | Determines whether the column is visible. | | render() | function | false | Callback for transforming the column's data. |

Sorting API

| Property | Type | Description | |---------------|:--------:|------------------------------------------------------------------| | column | String | The name of the column to be sorted. Must be an existing column. | | direction | String | The sorting direction. Allowed values: 'asc' or 'desc'. |

You can set a default sorting for your table's columns by passing a prop containing an array of objects with the names of the columns and respective sorting directions. Here's an example:

sorting: [
    {
        column: "name",
        direction: "asc"
    },
    {
        column: "created_at",
        direction: "desc"
    }
],

Request payload

Whenever you sort a column, the current sorting information will be attached to the request. For the previous example, this is how the payload will look like:

sorting[0][column]: name
sorting[0][direction]: asc
sorting[1][column]: name
sorting[1][direction]: created_at

Checkable API

| Property | Type | Description | |---------------|:--------:|------------------------------------------------------------------| | display | Boolean | Determines whether the checkboxes are displayed or not. | | attribute | String | The item's attribute to be stored on the selectedItems array |

Example

checkable: {
    display: true,
    attribute: "id"
},

Filters

Filters slot

You can make use of the filters slot for placing your selectors inline with the search bar.

You can even use v-model to trigger requests and to sync the local storage.

See this example:

<vue-table>
    <template v-slot:filters="slotProps">
        <div class="col-md-3">
            <select class="form-control" v-model="slotProps.filters.city_id">
                <option>Cities</option>
                <option value="1">Abbottton</option>
                <option value="2">Camrenland</option>
                <option value="3">Delfinamouth</option>
                <option value="4">East Benborough</option>
                <option value="5">Feeneymouth</option>
                <option value="6">Sipesburgh</option>
            </select>
        </div>
    </template>
</vue-table>

License

kriptiko/vue-table is open-sourced software licensed under the MIT license.

About Kriptiko

Kriptiko is a Creative Studio specialized in web development based in Matosinhos, Portugal.