1.0.5 • Published 7 years ago

ng2-dynatable v1.0.5

Weekly downloads
3
License
MIT
Repository
github
Last release
7 years ago

Ng2Dynatable

Ng2DynaTable is an angular 2+ component with the following features:

  • Pagination.
  • Sorting on headers.
  • Server side data rendering.
  • Api for filters .
  • Cell Writers for intercept data and apply custom values.
  • Components rendering in cells.
  • Dynamic classes (you can set what ever you want)

Installation

$ npm i -S ng2-dynatable

Helpers

  • Writer This is a interceptor of object keys, BTW this must match with a provided key of the dyna-headers

    ```
    export interface Writer {
        [key: string]: (value: any, header: string, index: number, data:any[]) => string|number|boolean;
    }
    ```
    As you may notice it accept a key that must match with a provided key of the dyna-headers, the callback will give you some important information:
    * value: The current item of the array.
    * header: The header that is being evaluated (this is the same that the key you provided).
    * index: The index of the actual item into the array that you or the server provided.
    * data: The array with which you are working.
    Also take in mind that it should only return the primitives types of typescript(number, string, boolean)
  • CellRender This is basically the same than the writer but this will accept a component as result, BTW this component should be declared as an entryComponent.

  • PaginatedResponse

export interface PaginatedResponse<R> {
    results: R[];
    total: number;
    page: number;
}

This interface is the one used for server side rendering, R is the Result Type expected.

  • IQuery
export interface IQuery {
    page: number;
    maxResults: number;
    sort?: {
        key: string;
        direction: 'ASC'|'DESC'
    }
}

This is the interface that you should inherit in your custom QueryInterface for example:

export interface PetQuery extends IQuery {
    id: number;
    name: string;
}

How to use it

First all you must import it into your AppModule.

Typescript

@NgModule({
    imports: [
        //your imports
        Ng2DynaTableModule.forRoot()
    ]
})

HTML

<!--Here we need to define the th elements because if not Angular will render the 
dynaheaders next to the th which obviously is out of sense-->
<ng2-dyna-table>
   <th>
     <dyna-header key="id" [sortable]="true">
       <!-- If you like you can use translations modules here -->
       Id
     </dyna-header>
   </th>
   <th>
     <dyna-header key="name">
       <!-- Sortable by default is false-->
       Name
     </dyna-header>
   </th>
</ng2-dyna-table>

Api

This component works thanks to an Api System which deals with the data source, pagination and sorting

Initialization

First all you must inject it into the constructor

constructor(query: QueryService<CustomQuery, ResponseType>) {}

in the above example CustomQuery is an instance of IQuery and ResponseType is the expected response type from server

Available methods and properties

emptyResult: string = This is a custom text for empty rows. Default: There is no data to display. writers: Writer = This is a interceptor which allow you to write a custom value in a given cell. cellRenders: CellRender = This is a custom kind of interceptor which allow you to put a component into the cell. rowsPerPage: number = This will tell to the component how many rows should be displayed at the same time. Default: 10. service: This property contains the Observable source where the table is going to subscribe, you can also subscribe to this if you want to keep tracking the information.

create: Here we will create the datasource for the table, you can pass an Array of type R with the information, the url where you are going to take the information or maybe you want to create a custom Request

create(dataOrUrl: R[]|string|RequestConstructor, query: Query = {page: 1, maxResults: 10} as Query): void

Usage examples

constructor(queryService<PetQuery, Pet>)
let pets: Pet[] = [{id: 1, name: 'dog'}, {id: 2, name: 'cat'}];
query.create(pets); //here we will asume page 1 as default and maxResults as 10 which is a basicQuery
//or
query.create('https://someservice.com/api'); //here we will asume page 1 as default and maxResults as 10 which is a basicQuery
//or
let customHeaders = new Headers();
customHeaders.set('X-Access-Token', localStorage.getItem('token'));
create({
    url: 'https://someservice.com/api',
    headers: customHeaders
})

addQuery: With this method you are going to be capable of add/change params to your query object, as for example for implement a filters section

Usage example

    someMethod() {
        this.query.addQuery({
            name: 'Foo'
        });
        //or
        this.query.addQuery('name', 'Foo');
    }

addFilter: This method allow you to handle the sorting of your table, so for example if for some weird reason you need to apply a sort programmatically you should use this method;

Usage example

    someOtherMethod() {
        /**
        * This method receive a key that must be part of your RequestQuery Object and a value that must be 'ASC' OR 'DESC'
        **/
        this.query.addFilter('name', 'ASC');
    }

repeatQuery: As the name indicates this method will force to fetch the data again (if data is being taken from the server)

Usage example

    anotherMethodAfterSomethingHappen() {
        this.query.repeatQuery();
    }
1.0.5

7 years ago

1.0.4

7 years ago

1.0.3

7 years ago

1.0.2

7 years ago

1.0.1

7 years ago

1.0.0

7 years ago

0.3.1

7 years ago

0.3.0

7 years ago

0.2.12

7 years ago

0.2.11

7 years ago

0.2.10

7 years ago

0.2.9

7 years ago

0.2.8

7 years ago

0.2.7

7 years ago

0.2.6

7 years ago

0.2.5

7 years ago

0.2.4

7 years ago

0.2.3

7 years ago

0.2.2

7 years ago

0.2.1

7 years ago

0.2.0

7 years ago

0.1.4

7 years ago

0.1.3

7 years ago

0.1.2

7 years ago

0.1.1

7 years ago

0.1.0

7 years ago

0.0.2

7 years ago

0.0.1

7 years ago