Skip to content

Commit 7ffddae

Browse files
committed
fix of #1129
1 parent b39352f commit 7ffddae

File tree

6 files changed

+47
-11
lines changed

6 files changed

+47
-11
lines changed

src/controls/filePicker/FilePicker.tsx

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -89,10 +89,11 @@ export class FilePicker extends React.Component<
8989
organisationAssetsEnabled: orgAssetsEnabled,
9090
selectedTab: this.getDefaultSelectedTabKey(this.props, orgAssetsEnabled),
9191
});
92-
if (!!this.props.context && !!this.props.webAbsoluteUrl){
93-
let webTitle = await this.fileBrowserService.getSiteTitle();
92+
if (!!this.props.context && !!this.props.webAbsoluteUrl) {
93+
const { title, id } = await this.fileBrowserService.getSiteTitleAndId();
9494
this.setState({
95-
webTitle
95+
webTitle: title,
96+
webId: id
9697
});
9798
}
9899
}
@@ -222,6 +223,8 @@ export class FilePicker extends React.Component<
222223
includePageLibraries={this.props.includePageLibraries}
223224
defaultFolderAbsolutePath={this.props.defaultFolderAbsolutePath}
224225
webTitle={this.state.webTitle}
226+
webId={this.state.webId}
227+
webAbsoluteUrl={this.props.webAbsoluteUrl}
225228
{...linkTabProps}
226229
/>
227230
)}

src/controls/filePicker/IFilePickerState.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ export interface IFilePickerState {
33
panelOpen?: boolean;
44
selectedTab?: string;
55
webTitle?: string;
6+
webId?: string;
67

78
organisationAssetsEnabled?: boolean;
89
}

src/controls/filePicker/SiteFilePickerTab/ISiteFilePickerTabProps.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,21 @@ export interface ISiteFilePickerTabProps extends IFilePickerTab {
1414
* Specifies a default folder to be active in the Site Files tab
1515
*/
1616
defaultFolderAbsolutePath?: string;
17-
18-
/**
17+
18+
/**
1919
* Title of the default site
2020
*/
2121
webTitle?: string;
2222

23+
/**
24+
* Id of the default site
25+
*/
26+
webId?: string;
27+
28+
/**
29+
* Absolute Url of the default site
30+
*/
31+
webAbsoluteUrl?: string;
32+
2333
includePageLibraries?: boolean;
2434
}

src/controls/filePicker/SiteFilePickerTab/SiteFilePickerTab.tsx

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import { SPWeb } from "@microsoft/sp-page-context";
1414

1515
import styles from './SiteFilePickerTab.module.scss';
1616
import * as strings from 'ControlStrings';
17-
import { urlCombine } from '../../../common/utilities';
17+
import { toRelativeUrl, urlCombine } from '../../../common/utilities';
1818
import { cloneDeep } from '@microsoft/sp-lodash-subset';
1919

2020
export default class SiteFilePickerTab extends React.Component<ISiteFilePickerTabProps, ISiteFilePickerTabState> {
@@ -27,17 +27,23 @@ export default class SiteFilePickerTab extends React.Component<ISiteFilePickerTa
2727
const breadcrumbSiteNode: FilePickerBreadcrumbItem = this.props.breadcrumbFirstNode ? this.props.breadcrumbFirstNode : {
2828
isCurrentItem: false,
2929
text: props.webTitle || props.context.pageContext.web.title,
30-
key: props.context.pageContext.web.id.toString(),
30+
key: props.webId || props.context.pageContext.web.id.toString(),
3131
};
3232
// add click event after defining breadcrumb so that it also applies to breadcrumb items passed to the component as properties
3333
breadcrumbSiteNode.onClick = (ev, itm) => { this.onBreadcrumpItemClick(itm); };
3434

3535
let breadcrumbItems: FilePickerBreadcrumbItem[] = [breadcrumbSiteNode];
3636

37+
let webAbsoluteUrl = props.webAbsoluteUrl || props.context.pageContext.web.absoluteUrl;
38+
let webServerRelativeUrl = toRelativeUrl(webAbsoluteUrl);
39+
3740
let { folderAbsPath = undefined, libraryServRelUrl = undefined, folderServRelPath = undefined, folderBreadcrumbs = [] } = props.defaultFolderAbsolutePath
3841
? this._parseInitialLocationState(
3942
props.defaultFolderAbsolutePath,
40-
props.context.pageContext.web
43+
{
44+
serverRelativeUrl: webServerRelativeUrl,
45+
absoluteUrl: webAbsoluteUrl
46+
}
4147
)
4248
: {};
4349

@@ -55,7 +61,7 @@ export default class SiteFilePickerTab extends React.Component<ISiteFilePickerTa
5561
};
5662
}
5763

58-
private _parseInitialLocationState(folderAbsPath: string, { serverRelativeUrl: webServRelUrl, absoluteUrl: webAbsUrl }: SPWeb) {
64+
private _parseInitialLocationState(folderAbsPath: string, { serverRelativeUrl: webServRelUrl, absoluteUrl: webAbsUrl }) {
5965
// folderAbsPath: "https://tenant.sharepoint.com/teams/Test/DocLib/Folder"
6066

6167
// folderServRelPath: "/teams/Test/DocLib/Folder"
@@ -179,7 +185,7 @@ export default class SiteFilePickerTab extends React.Component<ISiteFilePickerTa
179185
onOpenFolder={(folder: IFile) => this._handleOpenFolder(folder, true)}
180186
fileBrowserService={this.props.fileBrowserService}
181187
libraryUrl={this.state.libraryUrl}
182-
folderPath={this.state.libraryPath}
188+
folderPath={decodeURIComponent(this.state.libraryPath)}
183189
accepts={this.props.accepts} />}
184190
</div>
185191
<div className={styles.actionButtonsContainer}>

src/services/FileBrowserService.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,21 @@ export class FileBrowserService {
176176

177177
}
178178

179+
public getSiteTitleAndId = async (): Promise<{ title: string, id: string }> => {
180+
const restApi = `${this.siteAbsoluteUrl}/_api/web?$select=Title,Id`;
181+
const webResult = await this.context.spHttpClient.get(restApi, SPHttpClient.configurations.v1);
182+
183+
if (!webResult || !webResult.ok) {
184+
throw new Error(`Something went wrong when executing request. Status='${webResult.status}'`);
185+
}
186+
if (!webResult || !webResult) {
187+
throw new Error(`Cannot read data from the results.`);
188+
}
189+
let webJson = await webResult.json();
190+
return { title: webJson.Title, id: webJson.Id };
191+
192+
}
193+
179194
/**
180195
* Executes query to load files with possible extension filtering
181196
* @param restApi

src/webparts/controlsTest/components/ControlsTest.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1662,7 +1662,8 @@ export default class ControlsTest extends React.Component<IControlsTestProps, IC
16621662
/>
16631663
<FilePicker
16641664
bingAPIKey="<BING API KEY>"
1665-
defaultFolderAbsolutePath={this.state.filePickerDefaultFolderAbsolutePath}
1665+
webAbsoluteUrl="https://aterentiev.sharepoint.com/sites/SPFxinTeamsDemo"
1666+
defaultFolderAbsolutePath={"https://aterentiev.sharepoint.com/sites/SPFxinTeamsDemo/Shared%20Documents/General"}
16661667
//accepts={[".gif", ".jpg", ".jpeg", ".bmp", ".dib", ".tif", ".tiff", ".ico", ".png", ".jxr", ".svg"]}
16671668
buttonLabel="Add File"
16681669
buttonIconProps={{ iconName: 'Add', styles: { root: { fontSize: 42 } } }}

0 commit comments

Comments
 (0)