<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
    <title>DevExtreme Demo</title>
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
    <link rel="stylesheet" type="text/css" href="https://unpkg.com/devextreme@18.1.1-pre-18103/dist/css/dx.spa.css" />
    <link rel="stylesheet" type="text/css" href="https://unpkg.com/devextreme@18.1.1-pre-18103/dist/css/dx.common.css" />
    <link rel="stylesheet" type="text/css" href="https://unpkg.com/devextreme@18.1.1-pre-18103/dist/css/dx.light.css" />

    <script src="https://unpkg.com/core-js@2.4.1/client/shim.min.js"></script>
    <script src="https://unpkg.com/zone.js@0.6.25/dist/zone.js"></script>
    <script src="https://unpkg.com/reflect-metadata@0.1.3/Reflect.js"></script>
    <script src="https://unpkg.com/systemjs@0.19.31/dist/system.js"></script>
    
    <script src="config.js"></script>

    <script>
        System.import('app')
            .then(function(viz) {
                System.import("devextreme/viz/themes").then(function(viz) {
                    viz.currentTheme("generic.light");
                    viz.refreshTheme();
                });
            })
            .catch(console.error.bind(console));
    </script>

</head>

<body class="dx-viewport">
    <div class="demo-container">
        <demo-app>Loading...</demo-app>
    </div>
</body>

</html>
// In real applications, you should not transpile code in the browser. You can see how to create your own application with Angular and DevExtreme here:
// https://github.com/DevExpress/devextreme-angular/blob/master/README.md

System.config({
    transpiler: 'ts',
    typescriptOptions: {
        module: "commonjs",
        emitDecoratorMetadata: true,
        experimentalDecorators: true
    },
    meta: {
        'typescript': {
            "exports": "ts"
        }
    },
    paths: {
        'npm:': 'https://unpkg.com/'
    },
    map: {
        'ts': 'npm:plugin-typescript@7.0.6/lib/plugin.js',
        'typescript': 'npm:typescript@2.2.2/lib/typescript.js',

        '@angular/core': 'npm:@angular/core@5.1.2/bundles/core.umd.js',
        '@angular/common': 'npm:@angular/common@5.1.2/bundles/common.umd.js',
        '@angular/compiler': 'npm:@angular/compiler@5.1.2/bundles/compiler.umd.js',
        '@angular/platform-browser': 'npm:@angular/platform-browser@5.1.2/bundles/platform-browser.umd.js',
        '@angular/platform-browser-dynamic': 'npm:@angular/platform-browser-dynamic@5.1.2/bundles/platform-browser-dynamic.umd.js',
       '@angular/common/http': 'npm:@angular/common/bundles/common-http.umd.js',
       'tslib': 'npm:tslib/tslib.js',
        '@angular/router': 'npm:@angular/router@5.1.2/bundles/router.umd.js',
        '@angular/forms': 'npm:@angular/forms@5.1.2/bundles/forms.umd.js',

        'rxjs': 'npm:rxjs@5.3.1',

        'devextreme': 'npm:devextreme@18.1.1-pre-18103',
        'jszip': 'npm:jszip@3.1.3/dist/jszip.min.js',
        'devextreme-angular': 'npm:devextreme-angular@18.1.1-beta.4'
    },
    packages: {
        'app': {
            main: './app.component.ts',
            defaultExtension: 'ts'
        },
        'devextreme': {
            defaultExtension: 'js'
        },
        'devextreme-angular': {
            main: 'index.js',
            defaultExtension: 'js'
        }
    }
});
<dx-data-grid 
    id="gridContainer" 
    [dataSource]="dataSource"
    [columns]="columns"
    [filterValue]=filterValue >
    <dxo-filter-panel [visible]="true"></dxo-filter-panel>
    <dxo-filter-builder
        [customOperations]="customOperations">
    </dxo-filter-builder>
    <dxo-filter-row [visible]="true"></dxo-filter-row>
    <dxo-header-filter [visible]="true"></dxo-header-filter>
    <dxo-scrolling mode="infinite"></dxo-scrolling>
</dx-data-grid>
import { NgModule, Component, ViewChild, enableProdMode } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { DxDataGridComponent, DxDataGridModule, DxScrollViewModule } from 'devextreme-angular';

import DataSource from 'devextreme/data/data_source';
import { Order, Service } from './app.service';

if(!/localhost/.test(document.location.host)) {
    enableProdMode();
}

let getOrderDay = function (rowData: any): number {
    return (new Date(rowData.OrderDate)).getDay();
};

@Component({
    selector: 'demo-app',
    providers: [ Service ],
    templateUrl: 'app/app.component.html',
    styleUrls: ['app/app.component.css']
})

export class AppComponent {
    @ViewChild(DxDataGridComponent) dataGrid: DxDataGridComponent;
    dataSource: any;   
    columns: Array<any>;
    filterValue: Array<any>;
    applyFilterButtonOptions: any;
    cancelButtonOptions: any;
    clearFilterButton: any;
    filterButton: any;
    popupVisible: boolean;
    allowHierarchicalFields: boolean;
    customOperations: Array<any>;

    constructor(service: Service) {
        this.dataSource = new DataSource({
            store: service.getOrders()
        });
        this.popupVisible = false;
        this.allowHierarchicalFields = false;
        this.filterValue = [['Employee', '=', 'Clark Morgan'],
                            'and',
                            ['OrderDate', 'weekends']];
        this.customOperations = [{
            name: "weekends",
            caption: "Weekends",
            dataTypes: ["date"],
            icon: "check",
            hasValue: false,
            calculateFilterExpression: function () {
                return [[getOrderDay, "=", 0], "or", [getOrderDay, "=", 6]];
            }
        }];
        this.columns = [{
            caption: "Invoice Number",
            dataField: "OrderNumber",
            dataType: "number"
        }, {
            dataField: "OrderDate",
            dataType: "date"
        }, {
            dataField: "SaleAmount",
            dataType: "number",
            format: "currency"
        }, {
            dataField: "Employee"
        }, {
            caption: "City",
            dataField: "CustomerInfo.StoreCity"
        }, {
            caption: "State",
            dataField: "CustomerInfo.StoreState"
        }];
    }
}

@NgModule({
    imports: [
        BrowserModule,
        DxDataGridModule,
        DxScrollViewModule
    ],
    declarations: [AppComponent],
    bootstrap: [AppComponent]
})
export class AppModule { }

platformBrowserDynamic().bootstrapModule(AppModule);
import { Injectable } from '@angular/core';

export class Order {
    ID: number;
    OrderNumber: number;
    OrderDate: string;
    SaleAmount: number;
    Terms: string;
    CustomerInfo: {
        StoreState: string;
        StoreCity: string;
    };
    Employee: string;
}

let orders: Order[] = [{
    "ID": 1,
    "OrderNumber": 35703,
    "OrderDate": "2014/04/10",
    "SaleAmount": 11800,
    "Terms": "15 Days",
    "Employee": "Harv Mudd",
    "CustomerInfo": {
        "StoreState": "California",
        "StoreCity": "Los Angeles"
    }
}, {
    "ID": 4,
    "OrderNumber": 35711,
    "OrderDate": "2014/01/12",
    "SaleAmount": 16050,
    "Terms": "15 Days",
    "Employee": "Jim Packard",
    "CustomerInfo": {
        "StoreState": "California",
        "StoreCity": "San Jose"
    }
}, {
    "ID": 5,
    "OrderNumber": 35714,
    "OrderDate": "2014/01/22",
    "SaleAmount": 14750,
    "Terms": "15 Days",
    "Employee": "Harv Mudd",
    "CustomerInfo": {
        "StoreState": "Nevada",
        "StoreCity": "Las Vegas"
    }
}, {
    "ID": 7,
    "OrderNumber": 35983,
    "OrderDate": "2014/02/07",
    "SaleAmount": 3725,
    "Terms": "15 Days",
    "Employee": "Todd Hoffman",
    "CustomerInfo": {
        "StoreState": "Colorado",
        "StoreCity": "Denver"
    }
}, {
    "ID": 9,
    "OrderNumber": 36987,
    "OrderDate": "2014/03/11",
    "SaleAmount": 14200,
    "Terms": "15 Days",
    "Employee": "Clark Morgan",
    "CustomerInfo": {
        "StoreState": "Utah",
        "StoreCity": "Salt Lake City"
    }
}, {
    "ID": 11,
    "OrderNumber": 38466,
    "OrderDate": "2014/03/01",
    "SaleAmount": 7800,
    "Terms": "15 Days",
    "Employee": "Harv Mudd",
    "CustomerInfo": {
        "StoreState": "California",
        "StoreCity": "Los Angeles"
    }
}, {
    "ID": 14,
    "OrderNumber": 39420,
    "OrderDate": "2014/02/15",
    "SaleAmount": 20500,
    "Terms": "15 Days",
    "Employee": "Jim Packard",
    "CustomerInfo": {
        "StoreState": "California",
        "StoreCity": "San Jose"
    }
}, {
    "ID": 15,
    "OrderNumber": 39874,
    "OrderDate": "2014/02/04",
    "SaleAmount": 9050,
    "Terms": "30 Days",
    "Employee": "Harv Mudd",
    "CustomerInfo": {
        "StoreState": "Nevada",
        "StoreCity": "Las Vegas"
    }
}, {
    "ID": 18,
    "OrderNumber": 42847,
    "OrderDate": "2014/02/15",
    "SaleAmount": 20400,
    "Terms": "30 Days",
    "Employee": "Todd Hoffman",
    "CustomerInfo": {
        "StoreState": "Wyoming",
        "StoreCity": "Casper"
    }
}, {
    "ID": 19,
    "OrderNumber": 43982,
    "OrderDate": "2014/05/29",
    "SaleAmount": 6050,
    "Terms": "30 Days",
    "Employee": "Clark Morgan",
    "CustomerInfo": {
        "StoreState": "Utah",
        "StoreCity": "Salt Lake City"
    }
}, {
    "ID": 29,
    "OrderNumber": 56272,
    "OrderDate": "2014/02/06",
    "SaleAmount": 15850,
    "Terms": "30 Days",
    "Employee": "Clark Morgan",
    "CustomerInfo": {
        "StoreState": "Utah",
        "StoreCity": "Salt Lake City"
    }
}, {
    "ID": 30,
    "OrderNumber": 57429,
    "OrderDate": "2014/05/16",
    "SaleAmount": 11050,
    "Terms": "30 Days",
    "Employee": "Clark Morgan",
    "CustomerInfo": {
        "StoreState": "Arizona",
        "StoreCity": "Phoenix"
    }
}, {
    "ID": 32,
    "OrderNumber": 58292,
    "OrderDate": "2014/05/13",
    "SaleAmount": 13500,
    "Terms": "15 Days",
    "Employee": "Harv Mudd",
    "CustomerInfo": {
        "StoreState": "California",
        "StoreCity": "Los Angeles"
    }
}, {
    "ID": 36,
    "OrderNumber": 62427,
    "OrderDate": "2014/01/27",
    "SaleAmount": 23500,
    "Terms": "15 Days",
    "Employee": "Harv Mudd",
    "CustomerInfo": {
        "StoreState": "Nevada",
        "StoreCity": "Las Vegas"
    }
}, {
    "ID": 39,
    "OrderNumber": 65977,
    "OrderDate": "2014/02/05",
    "SaleAmount": 2550,
    "Terms": "15 Days",
    "Employee": "Todd Hoffman",
    "CustomerInfo": {
        "StoreState": "Wyoming",
        "StoreCity": "Casper"
    }
}, {
    "ID": 40,
    "OrderNumber": 66947,
    "OrderDate": "2014/03/23",
    "SaleAmount": 3500,
    "Terms": "15 Days",
    "Employee": "Clark Morgan",
    "CustomerInfo": {
        "StoreState": "Utah",
        "StoreCity": "Salt Lake City"
    }
}, {
    "ID": 42,
    "OrderNumber": 68428,
    "OrderDate": "2014/04/10",
    "SaleAmount": 10500,
    "Terms": "15 Days",
    "Employee": "Harv Mudd",
    "CustomerInfo": {
        "StoreState": "California",
        "StoreCity": "Los Angeles"
    }
}, {
    "ID": 43,
    "OrderNumber": 69477,
    "OrderDate": "2014/03/09",
    "SaleAmount": 14200,
    "Terms": "15 Days",
    "Employee": "Harv Mudd",
    "CustomerInfo": {
        "StoreState": "California",
        "StoreCity": "Anaheim"
    }
}, {
    "ID": 46,
    "OrderNumber": 72947,
    "OrderDate": "2014/01/14",
    "SaleAmount": 13350,
    "Terms": "30 Days",
    "Employee": "Harv Mudd",
    "CustomerInfo": {
        "StoreState": "Nevada",
        "StoreCity": "Las Vegas"
    }
}, {
    "ID": 47,
    "OrderNumber": 73088,
    "OrderDate": "2014/03/25",
    "SaleAmount": 8600,
    "Terms": "30 Days",
    "Employee": "Clark Morgan",
    "CustomerInfo": {
        "StoreState": "Nevada",
        "StoreCity": "Reno"
    }
}, {
    "ID": 50,
    "OrderNumber": 76927,
    "OrderDate": "2014/04/27",
    "SaleAmount": 9800,
    "Terms": "30 Days",
    "Employee": "Clark Morgan",
    "CustomerInfo": {
        "StoreState": "Utah",
        "StoreCity": "Salt Lake City"
    }
}, {
    "ID": 51,
    "OrderNumber": 77297,
    "OrderDate": "2014/04/30",
    "SaleAmount": 10850,
    "Terms": "30 Days",
    "Employee": "Clark Morgan",
    "CustomerInfo": {
        "StoreState": "Arizona",
        "StoreCity": "Phoenix"
    }
}, {
    "ID": 56,
    "OrderNumber": 84744,
    "OrderDate": "2014/02/10",
    "SaleAmount": 4650,
    "Terms": "30 Days",
    "Employee": "Harv Mudd",
    "CustomerInfo": {
        "StoreState": "Nevada",
        "StoreCity": "Las Vegas"
    }
}, {
    "ID": 57,
    "OrderNumber": 85028,
    "OrderDate": "2014/05/17",
    "SaleAmount": 2575,
    "Terms": "30 Days",
    "Employee": "Clark Morgan",
    "CustomerInfo": {
        "StoreState": "Nevada",
        "StoreCity": "Reno"
    }
}, {
    "ID": 59,
    "OrderNumber": 87297,
    "OrderDate": "2014/04/21",
    "SaleAmount": 14200,
    "Terms": "30 Days",
    "Employee": "Todd Hoffman",
    "CustomerInfo": {
        "StoreState": "Wyoming",
        "StoreCity": "Casper"
    }
}, {
    "ID": 60,
    "OrderNumber": 88027,
    "OrderDate": "2014/02/14",
    "SaleAmount": 13650,
    "Terms": "30 Days",
    "Employee": "Clark Morgan",
    "CustomerInfo": {
        "StoreState": "Utah",
        "StoreCity": "Salt Lake City"
    }
}, {
    "ID": 65,
    "OrderNumber": 94726,
    "OrderDate": "2014/05/22",
    "SaleAmount": 20500,
    "Terms": "15 Days",
    "Employee": "Jim Packard",
    "CustomerInfo": {
        "StoreState": "California",
        "StoreCity": "San Jose"
    }
}, {
    "ID": 66,
    "OrderNumber": 95266,
    "OrderDate": "2014/03/10",
    "SaleAmount": 9050,
    "Terms": "15 Days",
    "Employee": "Harv Mudd",
    "CustomerInfo": {
        "StoreState": "Nevada",
        "StoreCity": "Las Vegas"
    }
}, {
    "ID": 69,
    "OrderNumber": 98477,
    "OrderDate": "2014/01/01",
    "SaleAmount": 23500,
    "Terms": "15 Days",
    "Employee": "Todd Hoffman",
    "CustomerInfo": {
        "StoreState": "Wyoming",
        "StoreCity": "Casper"
    }
}, {
    "ID": 70,
    "OrderNumber": 99247,
    "OrderDate": "2014/02/08",
    "SaleAmount": 2100,
    "Terms": "15 Days",
    "Employee": "Clark Morgan",
    "CustomerInfo": {
        "StoreState": "Utah",
        "StoreCity": "Salt Lake City"
    }
}, {
    "ID": 78,
    "OrderNumber": 174884,
    "OrderDate": "2014/04/10",
    "SaleAmount": 7200,
    "Terms": "30 Days",
    "Employee": "Todd Hoffman",
    "CustomerInfo": {
        "StoreState": "Colorado",
        "StoreCity": "Denver"
    }
}, {
    "ID": 81,
    "OrderNumber": 188877,
    "OrderDate": "2014/02/11",
    "SaleAmount": 8750,
    "Terms": "30 Days",
    "Employee": "Clark Morgan",
    "CustomerInfo": {
        "StoreState": "Arizona",
        "StoreCity": "Phoenix"
    }
}, {
    "ID": 82,
    "OrderNumber": 191883,
    "OrderDate": "2014/02/05",
    "SaleAmount": 9900,
    "Terms": "30 Days",
    "Employee": "Harv Mudd",
    "CustomerInfo": {
        "StoreState": "California",
        "StoreCity": "Los Angeles"
    }
}, {
    "ID": 83,
    "OrderNumber": 192474,
    "OrderDate": "2014/01/21",
    "SaleAmount": 12800,
    "Terms": "30 Days",
    "Employee": "Harv Mudd",
    "CustomerInfo": {
        "StoreState": "California",
        "StoreCity": "Anaheim"
    }
}, {
    "ID": 84,
    "OrderNumber": 193847,
    "OrderDate": "2014/03/21",
    "SaleAmount": 14100,
    "Terms": "30 Days",
    "Employee": "Harv Mudd",
    "CustomerInfo": {
        "StoreState": "California",
        "StoreCity": "San Diego"
    }
}, {
    "ID": 85,
    "OrderNumber": 194877,
    "OrderDate": "2014/03/06",
    "SaleAmount": 4750,
    "Terms": "30 Days",
    "Employee": "Jim Packard",
    "CustomerInfo": {
        "StoreState": "California",
        "StoreCity": "San Jose"
    }
}, {
    "ID": 86,
    "OrderNumber": 195746,
    "OrderDate": "2014/05/26",
    "SaleAmount": 9050,
    "Terms": "30 Days",
    "Employee": "Harv Mudd",
    "CustomerInfo": {
        "StoreState": "Nevada",
        "StoreCity": "Las Vegas"
    }
}, {
    "ID": 87,
    "OrderNumber": 197474,
    "OrderDate": "2014/03/02",
    "SaleAmount": 6400,
    "Terms": "30 Days",
    "Employee": "Clark Morgan",
    "CustomerInfo": {
        "StoreState": "Nevada",
        "StoreCity": "Reno"
    }
}, {
    "ID": 88,
    "OrderNumber": 198746,
    "OrderDate": "2014/05/09",
    "SaleAmount": 15700,
    "Terms": "30 Days",
    "Employee": "Todd Hoffman",
    "CustomerInfo": {
        "StoreState": "Colorado",
        "StoreCity": "Denver"
    }
}, {
    "ID": 91,
    "OrderNumber": 214222,
    "OrderDate": "2014/02/08",
    "SaleAmount": 11050,
    "Terms": "30 Days",
    "Employee": "Clark Morgan",
    "CustomerInfo": {
        "StoreState": "Arizona",
        "StoreCity": "Phoenix"
    }
}];

@Injectable()
export class Service {
    getOrders(): Order[] {
        return orders;
    }
}
::ng-deep #gridContainer {
    height: 440px;
}