Skip to content

Commit 35160ca

Browse files
author
Piotr Siatka
committed
Remove pnp from RecentTab.
Refactor. Fix bugs.
1 parent 609c7ca commit 35160ca

19 files changed

+553
-386
lines changed

src/controls/filePicker/FilePicker.tsx

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,13 @@ import { OneDriveFilesTab } from './OneDriveFilesTab';
2525
import { OneDriveService } from '../../services/OneDriveService';
2626
import { OrgAssetsService } from '../../services/OrgAssetsService';
2727
import { IFilePickerResult } from './FilePicker.types';
28+
import { FilesSearchService } from '../../services/FilesSearchService';
2829

2930
export class FilePicker extends React.Component<IFilePickerProps, IFilePickerState> {
3031
private fileBrowserService: FileBrowserService;
3132
private oneDriveService: OneDriveService;
3233
private orgAssetsService: OrgAssetsService;
34+
private fileSearchService: FilesSearchService;
3335

3436
constructor(props: IFilePickerProps) {
3537
super(props);
@@ -38,6 +40,7 @@ export class FilePicker extends React.Component<IFilePickerProps, IFilePickerSta
3840
this.fileBrowserService = new FileBrowserService(props.webPartContext);
3941
this.oneDriveService = new OneDriveService(props.webPartContext);
4042
this.orgAssetsService = new OrgAssetsService(props.webPartContext);
43+
this.fileSearchService = new FilesSearchService(props.webPartContext, this.props.bingAPIKey);
4144

4245
this.state = {
4346
panelOpen: false,
@@ -65,8 +68,8 @@ export class FilePicker extends React.Component<IFilePickerProps, IFilePickerSta
6568
accepts: accepts,
6669
context: this.props.webPartContext,
6770
onClose: () => this._handleClosePanel(),
68-
onSave: (value: IFilePickerResult) => { this._handleSave(value) }
69-
}
71+
onSave: (value: IFilePickerResult) => { this._handleSave(value); }
72+
};
7073

7174
return (
7275
<div >
@@ -131,7 +134,7 @@ export class FilePicker extends React.Component<IFilePickerProps, IFilePickerSta
131134
{
132135
this.state.selectedTab === "keyWeb" &&
133136
<WebSearchTab
134-
bingAPIKey={this.props.bingAPIKey}
137+
bingSearchService={this.fileSearchService}
135138
{...linkTabProps}
136139
/>
137140
}
@@ -145,6 +148,7 @@ export class FilePicker extends React.Component<IFilePickerProps, IFilePickerSta
145148
{
146149
this.state.selectedTab === "keyRecent" &&
147150
<RecentFilesTab
151+
fileSearchService={this.fileSearchService}
148152
{...linkTabProps}
149153
/>
150154
}

src/controls/filePicker/LinkFilePickerTab/LinkFilePickerTab.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import { PrimaryButton, DefaultButton } from 'office-ui-fabric-react/lib/compone
1111
import { TextField } from 'office-ui-fabric-react/lib/TextField';
1212

1313
// PnP
14+
//TODO: Remove pnp
1415
import { FetchClient } from "@pnp/common";
1516

1617
// Localized strings
Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
11
import { IFilePickerTab } from "..";
2+
import { FilesSearchService } from "../../../services/FilesSearchService";
23

3-
export interface IRecentFilesTabProps extends IFilePickerTab { }
4+
export interface IRecentFilesTabProps extends IFilePickerTab {
5+
fileSearchService: FilesSearchService;
6+
}

src/controls/filePicker/RecentFilesTab/IRecentFilesTabState.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import { IRecentFile } from ".";
21
import { IFilePickerResult } from "../FilePicker.types";
2+
import { IRecentFile } from "../../../services/FilesSearchService.types";
33

44
export interface IRecentFilesTabState {
55
results: IRecentFile[];

src/controls/filePicker/RecentFilesTab/RecentFilesTab.tsx

Lines changed: 8 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,14 @@ import { Image, ImageFit } from 'office-ui-fabric-react/lib/Image';
1515
import { Check } from 'office-ui-fabric-react/lib/Check';
1616

1717
// Custom props and states
18-
import { IRecentFilesTabProps, IRecentFilesTabState, IRecentFile } from '.';
18+
import { IRecentFilesTabProps, IRecentFilesTabState } from '.';
1919

2020
// Localized resources
2121
import * as strings from 'ControlStrings';
2222

2323
// PnP
24-
import { sp, SearchResults, SearchResult } from "@pnp/sp";
2524
import { Placeholder } from '../../../Placeholder';
26-
import { IFilePickerResult } from '../FilePicker.types';
25+
import { IRecentFile } from '../../../services/FilesSearchService.types';
2726

2827
/**
2928
* Rows per page
@@ -87,81 +86,13 @@ export default class RecentFilesTab extends React.Component<IRecentFilesTabProps
8786
/**
8887
* Gets the most recently used files
8988
*/
90-
public componentDidMount(): void {
91-
const { absoluteUrl } = this.props.context.pageContext.web;
89+
public async componentDidMount() {
90+
const recentFilesResult = await this.props.fileSearchService.executeRecentSearch(this.props.accepts);
91+
this._selection.setItems(recentFilesResult, true);
9292

93-
// Build a filter criteria for each accepted file type, if applicable
94-
const fileFilter: string = this._getFileFilter();
95-
96-
// // This is how you make two promises at once and wait for both results to return
97-
// // TODO: research to see if there is a way to get this info in one call. Perhaps as context info?
98-
sp.setup({
99-
sp: { baseUrl: absoluteUrl }
100-
});
101-
const getContext: [Promise<any[]>, Promise<any[]>] = [sp.web.select("Id").get(), sp.site.select("Id").get()];
102-
103-
104-
// TODO: Replace @pnpjs
105-
Promise.all(getContext).then((results: any[]) => {
106-
// retrieve site id and web id
107-
const webId: string = results[0].Id;
108-
const siteId: string = results[1].Id;
109-
110-
// build a query template
111-
const queryTemplate: string = `((SiteID:${siteId} OR SiteID: {${siteId}}) AND (WebId: ${webId} OR WebId: {${webId}})) AND LastModifiedTime < {Today} AND -Title:OneNote_DeletedPages AND -Title:OneNote_RecycleBin${fileFilter}`;
112-
113-
// search for recent changes with accepted file types
114-
sp.search({
115-
QueryTemplate: queryTemplate,
116-
RowLimit: 20,
117-
SelectProperties: [
118-
"Title",
119-
"Path",
120-
"Filename",
121-
"FileExtension",
122-
"FileType",
123-
"Created",
124-
"Author",
125-
"LastModifiedTime",
126-
"EditorOwsUser",
127-
"ModifiedBy",
128-
"LinkingUrl",
129-
"SiteTitle",
130-
"ParentLink",
131-
"DocumentPreviewMetadata",
132-
"ListID",
133-
"ListItemID",
134-
"SPSiteURL",
135-
"SiteID",
136-
"WebId",
137-
"UniqueID",
138-
"SPWebUrl",
139-
"DefaultEncodingURL",
140-
"PictureThumbnailURL",
141-
],
142-
SortList: [
143-
{
144-
"Property": "LastModifiedTime",
145-
"Direction": 1
146-
}
147-
]
148-
}).then((r: SearchResults) => {
149-
const recentFilesResult: IRecentFile[] = r.PrimarySearchResults.map((result: SearchResult) => {
150-
const recentFile: IRecentFile = {
151-
key: result["UniqueID"],
152-
name: result.Title,
153-
fileUrl: result["DefaultEncodingURL"],
154-
editedBy: result["ModifiedBy"]
155-
};
156-
return recentFile;
157-
});
158-
this._selection.setItems(recentFilesResult, true);
159-
160-
this.setState({
161-
isLoading: false,
162-
results: recentFilesResult
163-
});
164-
});
93+
this.setState({
94+
isLoading: false,
95+
results: recentFilesResult
16596
});
16697
}
16798

@@ -330,26 +261,6 @@ export default class RecentFilesTab extends React.Component<IRecentFilesTabProps
330261
this.props.onClose();
331262
}
332263

333-
334-
/**
335-
* Builds a file filter using the accepted file extensions
336-
*/
337-
private _getFileFilter() {
338-
let fileFilter: string = undefined;
339-
if (this.props.accepts) {
340-
fileFilter = " AND (";
341-
this.props.accepts.split(",").forEach((fileType: string, index: number) => {
342-
fileType = fileType.replace(".", "");
343-
if (index > 0) {
344-
fileFilter = fileFilter + " OR ";
345-
}
346-
fileFilter = fileFilter + `FileExtension:${fileType} OR SecondaryFileExtension:${fileType}`;
347-
});
348-
fileFilter = fileFilter + ")";
349-
}
350-
return fileFilter;
351-
}
352-
353264
/**
354265
* Creates a ref to the list
355266
*/

src/controls/filePicker/RecentFilesTab/RecentFilesTab.types.ts

Lines changed: 0 additions & 6 deletions
This file was deleted.
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
11
export * from './RecentFilesTab';
2-
export * from './RecentFilesTab.types';
32
export * from './IRecentFilesTabProps';
43
export * from './IRecentFilesTabState';

src/controls/filePicker/UploadFilePickerTab/UploadFilePickerTab.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ export default class UploadFilePickerTab extends React.Component<IUploadFilePick
8080
file,
8181
fileAbsoluteUrl: null,
8282
fileTitle: GeneralHelper.getFileNameWithoutExtension(file.name)
83-
}
83+
};
8484
// Convert to base64 image
8585
const reader = new FileReader();
8686

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import { IFilePickerTab } from "..";
22
import { ISearchSuggestion } from ".";
3+
import { FilesSearchService } from "../../../services/FilesSearchService";
34

45
export interface IWebSearchTabProps extends IFilePickerTab {
5-
bingAPIKey: string;
6+
bingSearchService: FilesSearchService;
67
suggestions?: ISearchSuggestion[];
78
}

src/controls/filePicker/WebSearchTab/IWebSearchTabState.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
import { ImageSize, ImageAspect, ImageLicense, ISearchResult } from ".";
1+
import { ImageSize, ImageAspect, ImageLicense } from ".";
22
import { IFilePickerResult } from "../FilePicker.types";
3+
import { ISearchResult } from "../../../services/FilesSearchService.types";
34

45
export interface IWebSearchTabState {
56
isLoading: boolean;

0 commit comments

Comments
 (0)