From 7ffddaeac3cd92721d572e51c19e3fc74c35924e Mon Sep 17 00:00:00 2001 From: Alex Terentiev Date: Wed, 9 Mar 2022 17:47:20 -0500 Subject: [PATCH] fix of #1129 --- src/controls/filePicker/FilePicker.tsx | 9 ++++++--- src/controls/filePicker/IFilePickerState.ts | 1 + .../SiteFilePickerTab/ISiteFilePickerTabProps.ts | 14 ++++++++++++-- .../SiteFilePickerTab/SiteFilePickerTab.tsx | 16 +++++++++++----- src/services/FileBrowserService.ts | 15 +++++++++++++++ .../controlsTest/components/ControlsTest.tsx | 3 ++- 6 files changed, 47 insertions(+), 11 deletions(-) diff --git a/src/controls/filePicker/FilePicker.tsx b/src/controls/filePicker/FilePicker.tsx index 923532f4d..6674ec852 100644 --- a/src/controls/filePicker/FilePicker.tsx +++ b/src/controls/filePicker/FilePicker.tsx @@ -89,10 +89,11 @@ export class FilePicker extends React.Component< organisationAssetsEnabled: orgAssetsEnabled, selectedTab: this.getDefaultSelectedTabKey(this.props, orgAssetsEnabled), }); - if (!!this.props.context && !!this.props.webAbsoluteUrl){ - let webTitle = await this.fileBrowserService.getSiteTitle(); + if (!!this.props.context && !!this.props.webAbsoluteUrl) { + const { title, id } = await this.fileBrowserService.getSiteTitleAndId(); this.setState({ - webTitle + webTitle: title, + webId: id }); } } @@ -222,6 +223,8 @@ export class FilePicker extends React.Component< includePageLibraries={this.props.includePageLibraries} defaultFolderAbsolutePath={this.props.defaultFolderAbsolutePath} webTitle={this.state.webTitle} + webId={this.state.webId} + webAbsoluteUrl={this.props.webAbsoluteUrl} {...linkTabProps} /> )} diff --git a/src/controls/filePicker/IFilePickerState.ts b/src/controls/filePicker/IFilePickerState.ts index e2fec3e08..8cc01c628 100644 --- a/src/controls/filePicker/IFilePickerState.ts +++ b/src/controls/filePicker/IFilePickerState.ts @@ -3,6 +3,7 @@ export interface IFilePickerState { panelOpen?: boolean; selectedTab?: string; webTitle?: string; + webId?: string; organisationAssetsEnabled?: boolean; } diff --git a/src/controls/filePicker/SiteFilePickerTab/ISiteFilePickerTabProps.ts b/src/controls/filePicker/SiteFilePickerTab/ISiteFilePickerTabProps.ts index ebc7ff0a7..b513a0b46 100644 --- a/src/controls/filePicker/SiteFilePickerTab/ISiteFilePickerTabProps.ts +++ b/src/controls/filePicker/SiteFilePickerTab/ISiteFilePickerTabProps.ts @@ -14,11 +14,21 @@ export interface ISiteFilePickerTabProps extends IFilePickerTab { * Specifies a default folder to be active in the Site Files tab */ defaultFolderAbsolutePath?: string; - - /** + + /** * Title of the default site */ webTitle?: string; + /** + * Id of the default site + */ + webId?: string; + + /** + * Absolute Url of the default site + */ + webAbsoluteUrl?: string; + includePageLibraries?: boolean; } diff --git a/src/controls/filePicker/SiteFilePickerTab/SiteFilePickerTab.tsx b/src/controls/filePicker/SiteFilePickerTab/SiteFilePickerTab.tsx index 6d3319dcb..a99016e19 100644 --- a/src/controls/filePicker/SiteFilePickerTab/SiteFilePickerTab.tsx +++ b/src/controls/filePicker/SiteFilePickerTab/SiteFilePickerTab.tsx @@ -14,7 +14,7 @@ import { SPWeb } from "@microsoft/sp-page-context"; import styles from './SiteFilePickerTab.module.scss'; import * as strings from 'ControlStrings'; -import { urlCombine } from '../../../common/utilities'; +import { toRelativeUrl, urlCombine } from '../../../common/utilities'; import { cloneDeep } from '@microsoft/sp-lodash-subset'; export default class SiteFilePickerTab extends React.Component { @@ -27,17 +27,23 @@ export default class SiteFilePickerTab extends React.Component { this.onBreadcrumpItemClick(itm); }; let breadcrumbItems: FilePickerBreadcrumbItem[] = [breadcrumbSiteNode]; + let webAbsoluteUrl = props.webAbsoluteUrl || props.context.pageContext.web.absoluteUrl; + let webServerRelativeUrl = toRelativeUrl(webAbsoluteUrl); + let { folderAbsPath = undefined, libraryServRelUrl = undefined, folderServRelPath = undefined, folderBreadcrumbs = [] } = props.defaultFolderAbsolutePath ? this._parseInitialLocationState( props.defaultFolderAbsolutePath, - props.context.pageContext.web + { + serverRelativeUrl: webServerRelativeUrl, + absoluteUrl: webAbsoluteUrl + } ) : {}; @@ -55,7 +61,7 @@ export default class SiteFilePickerTab extends React.Component this._handleOpenFolder(folder, true)} fileBrowserService={this.props.fileBrowserService} libraryUrl={this.state.libraryUrl} - folderPath={this.state.libraryPath} + folderPath={decodeURIComponent(this.state.libraryPath)} accepts={this.props.accepts} />}
diff --git a/src/services/FileBrowserService.ts b/src/services/FileBrowserService.ts index d9c51e2bb..a324ed5a0 100644 --- a/src/services/FileBrowserService.ts +++ b/src/services/FileBrowserService.ts @@ -176,6 +176,21 @@ export class FileBrowserService { } + public getSiteTitleAndId = async (): Promise<{ title: string, id: string }> => { + const restApi = `${this.siteAbsoluteUrl}/_api/web?$select=Title,Id`; + const webResult = await this.context.spHttpClient.get(restApi, SPHttpClient.configurations.v1); + + if (!webResult || !webResult.ok) { + throw new Error(`Something went wrong when executing request. Status='${webResult.status}'`); + } + if (!webResult || !webResult) { + throw new Error(`Cannot read data from the results.`); + } + let webJson = await webResult.json(); + return { title: webJson.Title, id: webJson.Id }; + + } + /** * Executes query to load files with possible extension filtering * @param restApi diff --git a/src/webparts/controlsTest/components/ControlsTest.tsx b/src/webparts/controlsTest/components/ControlsTest.tsx index 9de01557c..5bee0ffd3 100644 --- a/src/webparts/controlsTest/components/ControlsTest.tsx +++ b/src/webparts/controlsTest/components/ControlsTest.tsx @@ -1662,7 +1662,8 @@ export default class ControlsTest extends React.Component