Skip to content

Commit be5cb61

Browse files
committed
Code improvements
1 parent b49398f commit be5cb61

File tree

4 files changed

+90
-82
lines changed

4 files changed

+90
-82
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,48 @@
1-
import { MSGraphClientV3 } from "@microsoft/sp-http";
2-
import { AdaptiveCardExtensionContext } from '@microsoft/sp-adaptive-card-extension-base';
3-
import { GraphFiles } from './types';
4-
5-
6-
export interface IFileService {
7-
_getFiles(siteAddress: string, listTitle: string): Promise<GraphFiles>;
8-
}
9-
10-
export class FileService implements IFileService {
11-
public context: AdaptiveCardExtensionContext;
12-
private MSGraphClient: MSGraphClientV3;
13-
14-
constructor(context: AdaptiveCardExtensionContext) {
15-
this.context = context;
16-
}
17-
18-
public async _getFiles(siteAddress: string, listTitle: string): Promise<GraphFiles> {
19-
let files: GraphFiles;
20-
try{
21-
const client = await this._getClient();
22-
const siteId = await this._getSiteId(client, siteAddress);
23-
const listId = await this._getListId(client, siteId, listTitle);
24-
files = await client.api("sites/"+siteId+"/lists/"+listId+"/items").select("contentType").version('beta').get();
25-
} catch{
26-
files = {value:[]};
27-
}
28-
return files;
29-
}
30-
31-
private async _getSiteId (client:MSGraphClientV3, siteAddress: string): Promise<string> {
32-
const hostname = siteAddress.split('/')[2];
33-
const serverRelativeUrl = siteAddress.split(hostname)[1];
34-
const siteId = await client.api("sites/"+hostname+":"+serverRelativeUrl).version('beta').get();
35-
return siteId.id;
36-
}
37-
38-
private async _getListId (client:MSGraphClientV3, siteId: string, listTitle: string): Promise<string> {
39-
const list = await client.api("sites/"+siteId+"/lists").version('beta').filter("displayName eq '"+listTitle+"'").get();
40-
return list.value[0].id;
41-
}
42-
43-
private async _getClient(): Promise<MSGraphClientV3> {
44-
if (this.MSGraphClient === undefined)
45-
this.MSGraphClient = await this.context.msGraphClientFactory.getClient("3");
46-
return this.MSGraphClient;
47-
}
1+
import { MSGraphClientV3 } from "@microsoft/sp-http";
2+
import { AdaptiveCardExtensionContext } from '@microsoft/sp-adaptive-card-extension-base';
3+
import { GraphFiles } from './types';
4+
5+
6+
export interface IFileService {
7+
_getFiles(siteAddress: string, listTitle: string): Promise<GraphFiles>;
8+
}
9+
10+
export class FileService implements IFileService {
11+
public context: AdaptiveCardExtensionContext;
12+
private MSGraphClient: MSGraphClientV3;
13+
14+
constructor(context: AdaptiveCardExtensionContext) {
15+
this.context = context;
16+
}
17+
18+
public async _getFiles(siteAddress: string, listTitle: string): Promise<GraphFiles> {
19+
let files: GraphFiles;
20+
try{
21+
const client = await this._getClient();
22+
const siteId = await this._getSiteId(client, siteAddress);
23+
const listId = await this._getListId(client, siteId, listTitle);
24+
files = await client.api("sites/"+siteId+"/lists/"+listId+"/items").select("contentType").version('beta').get();
25+
} catch{
26+
files = {value:[]};
27+
}
28+
return files;
29+
}
30+
31+
private async _getSiteId (client:MSGraphClientV3, siteAddress: string): Promise<string> {
32+
const hostname = siteAddress.split('/')[2];
33+
const serverRelativeUrl = siteAddress.split(hostname)[1];
34+
const siteId = await client.api("sites/"+hostname+":"+serverRelativeUrl).version('beta').get();
35+
return siteId.id;
36+
}
37+
38+
private async _getListId (client:MSGraphClientV3, siteId: string, listTitle: string): Promise<string> {
39+
const list = await client.api("sites/"+siteId+"/lists").version('beta').filter("displayName eq '"+listTitle+"'").get();
40+
return list.value[0].id;
41+
}
42+
43+
private async _getClient(): Promise<MSGraphClientV3> {
44+
if (this.MSGraphClient === undefined)
45+
this.MSGraphClient = await this.context.msGraphClientFactory.getClient("3");
46+
return this.MSGraphClient;
47+
}
4848
}

samples/ChartCard-FilesByContentType/src/adaptiveCardExtensions/filesByContentType/FilesByContentTypeAdaptiveCardExtension.ts

+13-7
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
import { IPropertyPaneConfiguration } from '@microsoft/sp-property-pane';
2-
import { BaseAdaptiveCardExtension } from '@microsoft/sp-adaptive-card-extension-base';
2+
import { BaseAdaptiveCardExtension, IPieDataPoint } from '@microsoft/sp-adaptive-card-extension-base';
33
import { CardView } from './cardView/CardView';
44
import { FilesByContentTypePropertyPane } from './FilesByContentTypePropertyPane';
55
import { QuickView } from './quickView/QuickView';
66
import { FileService, IFileService } from '../FileService';
7-
import { GraphFiles, PieFileData } from '../types';
7+
import { GraphFiles } from '../types';
88

99
export interface IFilesByContentTypeAdaptiveCardExtensionProps {
1010
title: string;
1111
siteAddress: string;
1212
listTitle: string;
13-
filesNumberByCtP: PieFileData[]
1413
}
1514

1615
export interface IFilesByContentTypeAdaptiveCardExtensionState {
16+
filesNumberByCtP: IPieDataPoint[];
1717
}
1818

1919
const CARD_VIEW_REGISTRY_ID: string = 'FilesByContentType_CARD_VIEW';
@@ -27,7 +27,9 @@ export default class FilesByContentTypeAdaptiveCardExtension extends BaseAdaptiv
2727
private _deferredPropertyPane: FilesByContentTypePropertyPane;
2828

2929
public async onInit(): Promise<void> {
30-
this.state = {};
30+
this.state = {
31+
filesNumberByCtP: []
32+
};
3133
// registers the card view to be shown in a dashboard
3234
this.cardNavigator.register(CARD_VIEW_REGISTRY_ID, () => new CardView());
3335
// registers the quick view to open via QuickView action
@@ -37,16 +39,20 @@ export default class FilesByContentTypeAdaptiveCardExtension extends BaseAdaptiv
3739
}
3840

3941
private async retrieveFiles(): Promise<void> {
40-
let filesData: PieFileData[] = [];
42+
4143
const service: IFileService = new FileService(this.context);
4244
const allFiles: GraphFiles = await service._getFiles(this.properties.siteAddress, this.properties.listTitle);
4345
const ctNames: string[] = allFiles.value.map((file) => file.contentType.name);
46+
47+
let filesData: IPieDataPoint[] = [];
4448
let uniqueNames = [...new Set(ctNames)];
4549
uniqueNames.forEach(ctName => {
4650
let currentCtCount = allFiles.value.filter(file => file.contentType.name === ctName);
47-
filesData.push({ name: ctName, total: currentCtCount.length });
51+
filesData.push({ x: ctName, y: currentCtCount.length });
52+
})
53+
this.setState({
54+
filesNumberByCtP: filesData
4855
})
49-
this.properties.filesNumberByCtP = filesData;
5056
}
5157

5258

samples/ChartCard-FilesByContentType/src/adaptiveCardExtensions/filesByContentType/cardView/CardView.ts

+17-10
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import {
33
IDataVisualizationCardViewParameters,
44
IExternalLinkCardAction,
55
IQuickViewCardAction,
6-
IPieDataPoint,
76
PieChartCardView,
87
} from '@microsoft/sp-adaptive-card-extension-base';
98
import {
@@ -12,31 +11,39 @@ import {
1211
QUICK_VIEW_REGISTRY_ID,
1312
} from '../FilesByContentTypeAdaptiveCardExtension';
1413

15-
let fileSeries: IPieDataPoint[]= [];
16-
1714
export class CardView extends BaseComponentsCardView<
1815
IFilesByContentTypeAdaptiveCardExtensionProps,
1916
IFilesByContentTypeAdaptiveCardExtensionState,
2017
IDataVisualizationCardViewParameters
2118
> {
19+
2220
public get cardViewParameters(): IDataVisualizationCardViewParameters {
23-
fileSeries = [];
24-
this.properties.filesNumberByCtP.forEach(contentType =>{
25-
fileSeries.push({x: contentType.name, y: contentType.total});
26-
});
27-
this.properties.filesNumberByCtP = [];
2821
return PieChartCardView({
2922
cardBar: {
3023
componentName: 'cardBar',
3124
title: this.properties.title
3225
},
26+
header: {
27+
componentName: 'text',
28+
text: this.properties.listTitle
29+
},
3330
body: {
3431
componentName: 'dataVisualization',
3532
dataVisualizationKind: 'pie',
36-
isDonut: false,
33+
isDonut: true,
3734
series: [{
38-
data: fileSeries,
35+
data: this.state.filesNumberByCtP
3936
}]
37+
},
38+
footer: {
39+
componentName: 'cardButton',
40+
title: 'View Details',
41+
action: {
42+
type: 'QuickView',
43+
parameters: {
44+
view: QUICK_VIEW_REGISTRY_ID
45+
}
46+
}
4047
}
4148
});
4249
}
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,13 @@
1-
export type File = {
2-
"@odata.etag"?: string;
3-
contentType: {
4-
id: string;
5-
name: string;
6-
}
7-
};
8-
9-
10-
export type GraphFiles = {
11-
"@odata.context"?: string;
12-
value: File[];
13-
};
14-
15-
export type PieFileData ={
16-
name: string;
17-
total: number;
18-
}
1+
export type File = {
2+
"@odata.etag"?: string;
3+
contentType: {
4+
id: string;
5+
name: string;
6+
}
7+
};
8+
9+
10+
export type GraphFiles = {
11+
"@odata.context"?: string;
12+
value: File[];
13+
};

0 commit comments

Comments
 (0)