@mello-labs/datagrid

A grid for visualizing and organizing complex data sets

Stats

StarsIssuesVersionUpdatedCreatedSize
@mello-labs/datagrid
002.0.03 years ago4 years agoMinified + gzip package size for @mello-labs/datagrid in KB

Readme

@mello-labs/datagrid

Installation

To install this library, run:

$ npm install @mello-labs/datagrid --save

Consuming your library

Once you have published your library to npm, you can import your library in any Angular application by running:

$ npm install @mello-labs/datagrid

and then from your Angular AppModule:

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';

import { AppComponent } from './app.component';

// Import your library
import { DatagridModule } from '@mello-labs/datagrid';

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,

    // Specify your library as an import
    DatagridModule.forRoot()
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

Once your library is imported, you can use its components, directives and pipes in your Angular application:

<!-- You can now use your library component in app.component.html -->
<datagrid #datagrid
            [rows]="rows$ | async"
            [columns]="columns$ | async"
            [state]="state"
            [options]="options"
            (onStateChange)="onStateChange($event)"
            (onRowsSelected)="onRowsSelected($event)"
            (onRowUpdated)="onRowUpdated($event)">
    <!-- Custom templates, prop corresponds to column property -->
    <datagrid-column prop="LNKey">
        <!-- Header template -->
        <ng-template let-value="value" let-column="column" let-row="row" datagrid-header-template>
            {{column.name}}
        </ng-template>
        <!-- Cell template -->
        <ng-template let-value="value" let-column="column" let-row="row" datagrid-cell-template>
            <strong>{{value}}</strong> - {{column.prop}}
        </ng-template>
    </datagrid-column>
</datagrid>
import { Datagrid } from '@mello-labs/datagrid';

// Inputs
public options: Datagrid.Options = {
    scrollbarH: true,
    selectionType: 'multi',
    fullScreen: true,
    controlsDropdown: true,
    showInfo: true,
    trackRow: (index, row) => row.LNKey,
    primaryKey: 'LNKey',
    rowStyle: [
    {
            model: this.api.get('/assets/mock/rowstyles.json'),
            rules: (row, model) => {
                //console.log('rowStyle', row, model);
            let styles = {};
            if (model.rowColors.lookup && model.rowColors.lookup[row.LNKey] && model.rowColors.lookup[row.LNKey].tagDefId && model.tagDefs.lookup && model.tagDefs.lookup[model.rowColors.lookup[row.LNKey].tagDefId]) {
                styles['background-color'] = model.tagDefs.lookup[model.rowColors.lookup[row.LNKey].tagDefId].tagColor;
                styles['color'] = model.tagDefs.lookup[model.rowColors.lookup[row.LNKey].tagDefId].fontColor;
            }
            return styles;
        }
    }
  ],
}

public columns: Datagrid.Column[] = [
    {
        prop: 'name',
        label: 'Name',
        columnType: 'string',
        canSort: true,
        canGroup: true,
        canFilter: true
    },
    {
        prop: 'pod',
        label: 'POD',
        columnType: 'string',
        width: 70,
        canSort: true,
        canGroup: true,
        canFilter: true
    }    
];

public state = { "filters": [], "sorts": [], "groups": [{ "dir": "asc", "prop": "State" }] };
public rows$: Observable<any[]> = this.api.get('/assets/mock/pipeline-sm.json');

// Methods
/**
 * When the state has been changed (grouping/filtering/sorting/etc)
 * @param event
 */
public onStateChange(event) {
    console.log('onStateChange', event, JSON.stringify(event));
}

/**
 * When rows have been selected
 * @param event
 */
public onRowsSelected(event) {
    console.log('onRowsSelected', event);
}

/**
 * When a row has been edited
 * @param event
 */
public onRowUpdated(event) {
    console.log('onRowUpdated', event);
}

/**
 * When columns have been updated, IE resizing/sorting etc
 * @param event
 */
public onColumnsUpdated(event) {
    console.log('onColumnsUpdated', event);
}

/**
 * On a right click event within the datatable
 * @param event
 */
public onRightClickMenu(event) {
    console.log('onRightClickMenu', event);
}

/**
 * When a custom link was clicked
 * @param event
 */
public onCustomLinkEvent(event) {
    console.log('onCustomLinkEvent', event);
}

Development

To generate all *.js, *.d.ts and *.metadata.json files:

$ npm run build

To lint all *.ts files:

$ npm run lint

License

MIT © Jerrol Krause

If you find any bugs or have a feature request, please open an issue on github!

The npm package download data comes from npm's download counts api and package details come from npms.io.