Skip to content

Commit 6f16fc2

Browse files
Andrey Dolzhikovwdevfx
andauthored
CardView: Card template demo (DevExpress#30029)
Co-authored-by: wdevfx <ilya.vinogradov@devexpress.com>
1 parent 23082ec commit 6f16fc2

103 files changed

Lines changed: 12554 additions & 602 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 53 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,54 @@
1-
<dx-card-view id="cardView" [dataSource]="customers" keyExpr="ID">
2-
<dxi-card-view-column
3-
*ngFor="let column of columns"
4-
[dataField]="column"
5-
></dxi-card-view-column>
1+
<dx-card-view
2+
[dataSource]="vehicles"
3+
cardsPerRow="auto"
4+
[cardMinWidth]="260"
5+
cardTemplate="vehicleCardTemplate"
6+
>
7+
<dxo-card-view-header-filter [visible]="true"></dxo-card-view-header-filter>
8+
<dxo-card-view-search-panel [visible]="true"></dxo-card-view-search-panel>
9+
<dxo-card-view-paging [pageSize]="12"></dxo-card-view-paging>
10+
11+
<dxi-card-view-column dataField="TrademarkName"></dxi-card-view-column>
12+
<dxi-card-view-column dataField="Name"></dxi-card-view-column>
13+
<dxi-card-view-column dataField="Price" format="currency">
14+
<dxo-card-view-column-header-filter
15+
[groupInterval]="20000"
16+
></dxo-card-view-column-header-filter>
17+
</dxi-card-view-column>
18+
<dxi-card-view-column dataField="CategoryName"></dxi-card-view-column>
19+
<dxi-card-view-column dataField="Modification"></dxi-card-view-column>
20+
<dxi-card-view-column dataField="BodyStyleName"></dxi-card-view-column>
21+
<dxi-card-view-column dataField="Horsepower"></dxi-card-view-column>
22+
23+
<div *dxTemplate="let model of 'vehicleCardTemplate'">
24+
<ng-container *ngIf="model.card?.data as data">
25+
<vehicle-card
26+
[id]="data.ID"
27+
[model]="data.TrademarkName + ' ' + data.Name"
28+
[price]="getFormattedPrice(model.card)"
29+
[categoryName]="data.CategoryName"
30+
[modification]="data.Modification"
31+
[bodyStyleName]="data.BodyStyleName"
32+
[horsepower]="data.Horsepower"
33+
(showInfo)="showInfo(data)"
34+
></vehicle-card>
35+
</ng-container>
36+
</div>
637
</dx-card-view>
38+
39+
<dx-popup
40+
[width]="350"
41+
[height]="240"
42+
[(visible)]="popupVisible"
43+
[dragEnabled]="false"
44+
[hideOnOutsideClick]="true"
45+
title="Image Info"
46+
>
47+
<dxo-position at="center" my="center" collision="fit"></dxo-position>
48+
<div *dxTemplate="let _ of 'content'">
49+
<license-info
50+
*ngIf="currentVehicle"
51+
[vehicle]="currentVehicle"
52+
></license-info>
53+
</div>
54+
</dx-popup>

apps/demos/Demos/CardView/CardTemplate/Angular/app/app.component.ts

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,16 @@
11
import { NgModule, Component, enableProdMode } from '@angular/core';
22
import { BrowserModule } from '@angular/platform-browser';
33
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
4-
import { DxCardViewModule } from 'devextreme-angular';
5-
import { Customer, Service } from './app.service';
4+
import {
5+
DxButtonModule,
6+
DxCardViewModule,
7+
DxPopupModule,
8+
DxTemplateModule,
9+
} from 'devextreme-angular';
10+
import { CardInfo } from 'devextreme-angular/ui/card-view';
11+
import { Service, Vehicle } from './app.service';
12+
import { VehicleCard } from './vehicle-card/vehicle-card.component';
13+
import { LicenseInfo } from './license-info/license-info.component';
614

715
if (!/localhost/.test(document.location.host)) {
816
enableProdMode();
@@ -20,21 +28,39 @@ if (window && window.config?.packageConfigPaths) {
2028
providers: [Service],
2129
})
2230
export class AppComponent {
23-
customers: Customer[];
31+
vehicles: Vehicle[];
2432

25-
columns = ['CompanyName', 'City', 'State', 'Phone', 'Fax'];
33+
popupVisible = false;
34+
currentVehicle: Vehicle | null = null;
2635

2736
constructor(service: Service) {
28-
this.customers = service.getCustomers();
37+
this.vehicles = service.getVehicles();
38+
}
39+
40+
showInfo(vehicle: Vehicle) {
41+
this.currentVehicle = vehicle;
42+
this.popupVisible = true;
43+
}
44+
45+
hideInfo() {
46+
this.popupVisible = false;
47+
}
48+
49+
getFormattedPrice(card: CardInfo): string {
50+
const priceText = card.fields.find(f => f?.column?.dataField === 'Price');
51+
return priceText?.text ?? '';
2952
}
3053
}
3154

3255
@NgModule({
3356
imports: [
3457
BrowserModule,
58+
DxTemplateModule,
3559
DxCardViewModule,
60+
DxPopupModule,
61+
DxButtonModule,
3662
],
37-
declarations: [AppComponent],
63+
declarations: [AppComponent, VehicleCard, LicenseInfo],
3864
bootstrap: [AppComponent],
3965
})
4066
export class AppModule { }

0 commit comments

Comments
 (0)