UNPKG

@pnp/spfx-property-controls

Version:

Reusable property pane controls for SharePoint Framework solutions

96 lines 4.45 kB
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; import { SPHttpClient } from '@microsoft/sp-http'; /** * Service implementation to search sites in SharePoint */ export default class SPSiteSearchService { /** * Search sites from the SharePoint */ searchSites(ctx, query, trimDuplicates, additionalQuery) { return __awaiter(this, void 0, void 0, function* () { let rootUrl = ctx.pageContext.web.absoluteUrl; if (ctx.pageContext.web.serverRelativeUrl !== "/") { rootUrl = ctx.pageContext.web.absoluteUrl.replace(ctx.pageContext.web.serverRelativeUrl, ''); } let queryText = `(contentclass:STS_Site contentclass:STS_Web Path:${rootUrl}* Title:${query}*)`; if (additionalQuery) { queryText += ` AND (${additionalQuery})`; } let startRow = 0; const rowLimit = 500; let totalRows = 0; const values = []; // eslint-disable-line @typescript-eslint/no-explicit-any const searchRequest = { QueryTemplate: queryText, RowLimit: rowLimit, TrimDuplicates: trimDuplicates, SelectProperties: ['SiteId', 'SiteID', 'WebId', 'DepartmentId', 'Title', 'Path'], StartRow: 0 }; const requestUrl = `${ctx.pageContext.web.absoluteUrl}/_api/search/postquery`; // // getting all sites // do { searchRequest.StartRow = startRow; const searchResponse = yield ctx.spHttpClient.post(requestUrl, SPHttpClient.configurations.v1, { body: JSON.stringify({ request: searchRequest }), headers: { 'Accept': 'application/json;odata=nometadata', 'Content-Type': 'application/json;charset=utf-8', 'odata-version': '3.0' } }); const sitesResponse = yield searchResponse.json(); const relevantResults = sitesResponse.PrimaryQueryResult.RelevantResults; values.push(...relevantResults.Table.Rows); totalRows = relevantResults.TotalRows; startRow += rowLimit; } while (values.length < totalRows); // Do the call against the SP REST API search endpoint let res = []; res = values.map(element => { const site = {}; element.Cells.forEach(cell => { switch (cell.Key) { case 'Title': site.title = cell.Value; break; case 'Path': site.url = cell.Value; break; case 'SiteId': case 'SiteID': site.id = cell.Value; break; case 'WebId': site.webId = cell.Value; break; case 'DepartmentId': if (cell.Value) { if (cell.Value.indexOf('{') === 0) { site.hubSiteId = cell.Value.slice(1, -1); } else { site.hubSiteId = cell.Value; } } break; } }); return site; }); return res; }); } } //# sourceMappingURL=SPSiteSearchService.js.map