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

@finastra/data-table

v1.8.1

Published

Data Table Web Component

Downloads

49

Readme

Table

See it on NPM! How big is this package in your project? Storybook

Table component allow user display a set of data.

Table Usage

Import

npm i @finastra/data-table
import '@finastra/data-table';
const data = [
    {
        API: 'Exchange Rates',
        'End Point': 'End point 1',
        'Date Time': '01-10-2019',
        'Day of Week': 'Monday',
        'Hour of Day': '16h-17h',
        'Status Code': '200',
        'Error Response': 'OK',
        'No. of Calls': 3,
        Revenue: {
            currency: 'EUR',
            amount: 3
        }
    },
    {
        API: 'Exchange Rates',
        'End Point': 'End point 2',
        'Date Time': '02-01-2019',
        'Day of Week': 'Monday',
        'Hour of Day': '16h-17h',
        'Status Code': '400',
        'Error Response': 'Bad Request',
        'No. of Calls': 2,
        Revenue: {
            currency: 'EUR',
            amount: 2
        }
    }];
const columns = [
    { id: 'API', name: 'API', type: 'string', align: 'center', displayName: 'Display Api' },
    { id: 'End Point', name: 'End Point', type: 'string', align: 'left', sortable: true },
    { id: 'Hour of Day', name: 'Hour of Day', type: 'string', align: 'left' },
    { id: 'Status Code', name: 'Status Code', type: 'string', align: 'left' },
    { id: 'Error Response', name: 'Error Response', type: 'string', align: 'center' },
    { id: 'No. of Calls', name: 'No. of Calls', type: 'number', align: 'right', sortable: true }
];
const columnsToDisplay = ['API', 'End Point', 'Hour of Day', 'Status Code', 'Error Response', 'No. of Calls'];
...
<fds-data-table
    [dataSource]="${data}"
    [columns]="${columns}"
    [columnsToDisplay]="${columnsToDisplay}"
    [selectable]="true"
    [multiSelect]="false"
></fds-data-table>

Events

| Event | Description | | --------------------------- | ---------------------------------------------------------------- | | onFdsDataTableRowSelected | Selected data can be found from event.detail with array format |

Properties

| Property | Attribute | Type | Default | Description | |----------------------------|----------------------------|--------------------|------------|--------------------------------------------------| | columns | columns | FdsTableColumn[] | [] | Array of column definitions. | | columnsToDisplay | columnsToDisplay | string[] | [] | Array of column ids to display. | | dataSource | dataSource | FdsTableRow[] | "[]" | Array of data to display in the table. | | dense | dense | boolean | false | Wether display data table in a smaller size | | emitPureData | emitPureData | boolean | true | Whether event should emit only user data without fds data table used properties such like _fdsRowId/_fdsRowSelected etc. | | multiSelect | multiSelect | boolean | false | Whether to allow multiple rows to be selected. | | override | | | | | | selectable | selectable | boolean | false | Whether to show if a row is selected. | | showMultiSelectCheckBox | showMultiSelectCheckBox | boolean | false | Whether to show select checkbox column. When showMultiSelectCheckBox=true implicits selectable=true multiSelect=true. | | showSingleSelectRadioBox | showSingleSelectRadioBox | boolean | false | Whether to show single select radio box column. When showSingleSelectRadioBox=true implicits selectable=true multiSelect=false | | styles | | CSSResult[] | ["styles"] | |

Events

| Event | Description | |-----------------------------|----------------------------| | onFdsDataTableRowSelected | Fired when selecting a row |

CSS Custom Properties

| Property | Default | Description | |---------------------------------|---------|--------------------------------------------------| | --fds-data-table-border-width | "1px" | Size of the border width | | --fds-data-table-max-height | "615px" | Max height of table. By default there will be max 10 rows displayed which means 615px for normal size. 439px for dense size. 538px for dense size with checkbox or radiobox. |

Interfaces:


export interface FdsTableColumn {
    id: string; //unique id for table column
    name: string; // column name
    type: FdsColumnType; // the data type of this column => can apply different template to this column
    align?: 'left' | 'right' | 'center'; // text align in cell
    displayName?: string; // column display name if not provided, name will display
    sortable?: boolean; // can sort this column;
    cellTemplateId?: string; // used for customized cell
    _style?: string; // customized style for one column
}

export interface FdsTableDataItem {
    _fdsTableRowStyle?: string;  // customized style for one row
}

export interface FdsTableRow extends FdsTableDataItem {
    _fdsSelected?: boolean, //identify if current row is selected or not
    _fdsSelectDisabled?: boolean, //identify if current row is selectable or not
    _fdsRowId?: string, //a unique id for current row.
}

Pagination Usage

Import

import '@finastra/data-table';

<fds-data-table-pagination length="11" pageIndex="0" pageSize="5" pageSizeOptions="[5, 10, 20]" showFirstLastButtons="true">
</fds-data-table-pagination>

Events

| Event | Description | | ------------------------ | ------------------------------------------- | | onFdsPaginationChanged | Page event can be founded in event.detail |

PageEvent Detail format:

 {
    pageIndex: number ,
    pageSize: number,
    length: number,
    previousPageIndex: number
 }

Data Table Component with Pagination

Here is just an example component of combining fds-data-table and fds-data-table-pagination. You can use it directly if it is suitable to your case. If not you can create your own component with fds-data-table and fds-data-table-pagination

Import

import '@finastra/data-table';

<fds-data-table-with-pagination
  [dataSource]="${data}"
  [columns]="${columns}"
  [columnsToDisplay]="${columnsToDisplay}"
  [selectable]="true"
  [multiSelect]="false"
  [pageIndex]="0"
  [pageSize]="5"
  [pageSizeOptions]="[5, 10, 20]"
  [showFirstLastButtons]="true"
></fds-data-table-with-pagination>

Events

| Event | Description | | ----------------------------------------- | ------------------------------------------------------------------ | | onFdsDataTableWithPaginationRowSelected | Selected data can be founded from event.detail with array format |

This component is a simple example combining fds-data-table with fds-data-table-pagination component. If it can meet your requirements, you can use it directly with it. If it can't meet your requirements, you can use fds-data-table with fds-data-table-pagination to compose your own logic.

Properties

| Property | Attribute | Type | Default | Description | |-----------------------------|-----------------------------|--------------------|------------|--------------------------------------------------| | columns | columns | FdsTableColumn[] | [] | Array of column definitions. | | columnsToDisplay | columnsToDisplay | string[] | [] | Array of column ids to display. | | dataSource | dataSource | FdsTableRow[] | "[]" | Array of data to display in the table. | | dense | dense | boolean | false | Wether display data table in a smaller size | | multiSelect | multiSelect | boolean | false | Whether to allow multiple rows to be selected. | | override | | | | | | pageIndex | pageIndex | number | 0 | | | pageSizeOptions | pageSizeOptions | number[] | "[]" | Array of page sizes to display, pageSize will take the first element otherwise pageSize will be 5. | | recordSelectionCrossPages | recordSelectionCrossPages | boolean | false | Wether selection cross pages is enabled | | selectable | selectable | boolean | false | Whether to show if a row is selected. | | showFirstLastButtons | showFirstLastButtons | boolean | false | Whether to display the first and last page buttons. | | showMultiSelectCheckBox | showMultiSelectCheckBox | boolean | false | Whether to show select checkbox column. When showMultiSelectCheckBox=true implicits selectable=true multiSelect=true. | | showSingleSelectRadioBox | showSingleSelectRadioBox | boolean | false | Whether to show single select radio box column. When showSingleSelectRadioBox=true implicits selectable=true multiSelect=false | | styles | | CSSResult[] | ["styles"] | |

Methods

| Method | Type | |--------------------------------|-------------------------------| | getDataByPagination | (): FdsTableRow[] | | onDataTablePaginationChanged | (e: any): void | | onDataTableRowSelected | (e: CustomEvent<any>): void |

Events

| Event | Description | |-------------------------------------------|----------------------------| | onFdsDataTableWithPaginationRowSelected | Fired when selecting a row |

CSS Custom Properties

| Property | Default | Description | |---------------------------------|---------|--------------------------------------------------| | --fds-data-table-border-width | "1px" | Size of the border width | | --fds-data-table-max-height | "615px" | Max height of table. By default there will be max 10 rows displayed which means 615px for normal size. 439px for dense size. 538px for dense size with checkbox or radiobox. |

Advanced feature

If you want not only text contents in table component instead more complex contents, table component can also provide support for you!

Style for table

As the style for web component is under the shadow dom, normally the external css style will not apply to table component. But we want to provide more possible for developer in case their designer want other style.

Style for rows

If you want to apply special style for a table row, you can just assgin value to _fdsTableRowStyle to your data array, it accepts a css style string. We provide an interface FdsTableDataItem if you want make your data row with an type.

FdsTableDataItem {
    _fdsTableRowStyle?: string;
}

Style for columns

The same for columns, if you want to apply some style to the columns, you can assign value to _style to your column definition, it accepts a css style string. You can check FdsTableColumn interface. There are some properties which you may not know. You will get it in the next section.

export interface FdsTableColumn {
    id: string; //unique id for table column
    name: string; // column name
    type: FdsColumnType; // the data type of this column **check the cell type section for more info
    align?: 'left' | 'right' | 'center'; // text align in cell, center as default value
    displayName?: string; // column display name if not provided, name will display
    sortable?: boolean; // can sort this column or not;
    cellTemplateId?: string; // used for customized cell, check it in the Cell Type section
    _style?: string; // customized style for one column
}

Cell Type

While table is used to display data, you may need some special cell include string, number and date. We will provide some special cell types for you if you want:

export enum FdsColumnType {
    string = 'string',
    number = 'number',
    date = 'date',
    type_double = 'type_double',
    link = 'link',
    chip = 'chip',
    linear_progress = 'linear_progress',
    cell_template = 'cell_template',
}

Basic Cell Type

string, number and date type are general used basic cell types.

By default the align for all cell is center. However you can set the align direction by yourself in the column definition. But we highly recommand that you should put align to left for number type cell.

Type Double Cell

type_double cell is common used in finance scenarios such like 3 €. You can give the data with the spec:

export interface FdsTableTypeDouble {
    amount: number;
    currency: string;
}

By default type_double type cell is align to right.

Link Cell

link cell is used to put a link inside the table cell.

export interface FdsTableLink {
    text: string;
    link: string;
}

Chip Cell

chip cell is used to put a chip inside the table cell.

export interface FdsTableChip{
    label: string;
    color?: 'success' | 'info' | 'error';
    icon?: string;
}

Linear Progress Cell

linear_progress cell is used to put a linear process cell inside the table cell.

export type FdsTableLinearProgress = number | string;

You can set the value as number between [0, 1] or you can give the value with string in a percentage format for example: '80%';

Customized Cell with simple template

cell_template cell is used when none of our predefined cell can meet your requriements. However it is an experimental feature. As web component is stand alone to any framework, so if you want to use the component from any other framework like angular or react. There may be issues if you use a framework component as cell template. So far cell template doesn't support complex user case. But you can create any template which native html can support.

You can assign any data to the cell_template column as it is intended to give the freedom of creation.

To map the template to table cell, you should set cellTemplateId to your column definition. So that table component can know which template to load.

To dynamic assign data into your template you need to use {}to wrap your varaible. We highly recommand you use template element to wrap your template since the content in template will not display unless you cal it.

Example for template:

<fds-data-table>
    <template id="fds-cell-template">
        <span>{name}</span><!-- name should be a property in the data object -->
    </template>
</fds-data-table>

Example for column definition:

    {
        ....
        type: 'cell_template',
        cellTemplateId: 'fds-cell-template',
        ...
    }

Example for data:

    any {
        name: 'cell template cell here!' // data where the template will access
    }