diff --git a/samples/react-graph-cascading-managed-metadata/fast-serve/config.json b/samples/react-graph-cascading-managed-metadata/fast-serve/config.json index fbb6384ca..45fdbf596 100644 --- a/samples/react-graph-cascading-managed-metadata/fast-serve/config.json +++ b/samples/react-graph-cascading-managed-metadata/fast-serve/config.json @@ -2,5 +2,8 @@ "$schema": "https://raw.githubusercontent.com/s-KaiNet/spfx-fast-serve/master/schema/config.latest.schema.json", "cli": { "isLibraryComponent": false + }, + "serve": { + "open": false } } \ No newline at end of file diff --git a/samples/react-graph-cascading-managed-metadata/src/webparts/cascadingManagedMetadata/CascadingManagedMetadataWebPart.ts b/samples/react-graph-cascading-managed-metadata/src/webparts/cascadingManagedMetadata/CascadingManagedMetadataWebPart.ts index 005a2a5ff..ed873be14 100644 --- a/samples/react-graph-cascading-managed-metadata/src/webparts/cascadingManagedMetadata/CascadingManagedMetadataWebPart.ts +++ b/samples/react-graph-cascading-managed-metadata/src/webparts/cascadingManagedMetadata/CascadingManagedMetadataWebPart.ts @@ -16,8 +16,12 @@ export default class CascadingManagedMetadataWebPart extends BaseClientSideWebPa private _placeholder = null; - public async render(): Promise { + protected async onInit(): Promise { await MSGraph.Init(this.context); + return super.onInit(); + } + + public async render(): Promise { let renderElement = null; if (this.properties.termSetId) { renderElement = React.createElement( diff --git a/samples/react-graph-cascading-managed-metadata/src/webparts/cascadingManagedMetadata/components/CascadingManagedMetadata.tsx b/samples/react-graph-cascading-managed-metadata/src/webparts/cascadingManagedMetadata/components/CascadingManagedMetadata.tsx index 3b06c522f..fafc633fb 100644 --- a/samples/react-graph-cascading-managed-metadata/src/webparts/cascadingManagedMetadata/components/CascadingManagedMetadata.tsx +++ b/samples/react-graph-cascading-managed-metadata/src/webparts/cascadingManagedMetadata/components/CascadingManagedMetadata.tsx @@ -29,7 +29,7 @@ const CascadingManagedMetadata: React.SFC = (pro //* Check if the term set has a property called UsedForShowingMaps const _checkIfTermsetIsUsedForShowingMaps = async (): Promise => { try { - const termsetData = await MSGraph.Get(`/termStore/sets/${props.termSetId}`, "beta", ["properties"]); + const termsetData = await MSGraph.Call('get', `/termStore/sets/${props.termSetId}`, "beta", {}, ["properties"]); const termsetProperties: IProperty[] = termsetData.properties; console.debug("%s Retrieved termset properties. %o", LOG_SOURCE, termsetProperties); @@ -53,7 +53,7 @@ const CascadingManagedMetadata: React.SFC = (pro //* Get the country terms i.e. level 1 children using Graph const _getCountries = async (): Promise => { try { - let countries: ITerms = await MSGraph.Get(`/termStore/sets/${props.termSetId}/children`, "beta"); + let countries: ITerms = await MSGraph.Call('get', `/termStore/sets/${props.termSetId}/children`, "beta"); setMessageBarStatus(state => ({ ...state, show: false })); console.debug("%s Retrieved countries. %o", LOG_SOURCE, countries); return countries; diff --git a/samples/react-graph-cascading-managed-metadata/src/webparts/cascadingManagedMetadata/services/MMDService.ts b/samples/react-graph-cascading-managed-metadata/src/webparts/cascadingManagedMetadata/services/MMDService.ts index 78c559619..23ff89785 100644 --- a/samples/react-graph-cascading-managed-metadata/src/webparts/cascadingManagedMetadata/services/MMDService.ts +++ b/samples/react-graph-cascading-managed-metadata/src/webparts/cascadingManagedMetadata/services/MMDService.ts @@ -25,7 +25,7 @@ export class MMDService { private static async _getTermsAsDropdownOptionsUsingGraph(apiUrl: string, selectProperties: string[], parent: string): Promise { try { - let terms: ITerms = await MSGraph.Get(apiUrl, "beta", selectProperties); + let terms: ITerms = await MSGraph.Call("get", apiUrl, "beta", {}, selectProperties); if (terms.value) { const options: ICMMDDropdownOption[] = terms.value.map(t => ({ key: t.id, diff --git a/samples/react-graph-cascading-managed-metadata/src/webparts/cascadingManagedMetadata/services/MSGraph.ts b/samples/react-graph-cascading-managed-metadata/src/webparts/cascadingManagedMetadata/services/MSGraph.ts index ab4be1bf6..4f005477f 100644 --- a/samples/react-graph-cascading-managed-metadata/src/webparts/cascadingManagedMetadata/services/MSGraph.ts +++ b/samples/react-graph-cascading-managed-metadata/src/webparts/cascadingManagedMetadata/services/MSGraph.ts @@ -1,3 +1,5 @@ +//* Helper wrapper for calling Graph +//* based on https://gist.github.com/wobba/37416d3107b85675d896105554b3df28 //* Thank you Mikael Svenson import { WebPartContext } from '@microsoft/sp-webpart-base'; @@ -6,88 +8,33 @@ import { MSGraphClient } from '@microsoft/sp-http'; export class MSGraph { private static _graphClient: MSGraphClient; + public static async Init(context: WebPartContext) { this._graphClient = await context.msGraphClientFactory.getClient(); } - public static async Get(apiUrl: string, version: string = "v1.0", selectProperties?: string[], expandProperties?: string[], filter?: string, count?: boolean): Promise { + public static async Call( + method: "get" | "post" | "patch" | "delete", + apiUrl: string, + version: "v1.0" | "beta", + content?: any, + selectProperties?: string[], + expandProperties?: string[], + filter?: string, + count?: boolean + ): Promise { + var p = new Promise(async (resolve, reject) => { let query = this._graphClient.api(apiUrl).version(version); - if (selectProperties && selectProperties.length > 0) { - query = query.select(selectProperties); - } - if (filter && filter.length > 0) { - query = query.filter(filter); - } - if (expandProperties && expandProperties.length > 0) { - query = query.expand(expandProperties); - } - if (count) { - query = query.count(true); - } - - let callback = (error: GraphError, response: any, rawResponse?: any) => { - if (error) { - reject(error); - } else { - resolve(response); - } - }; - await query.get(callback); + typeof(content) === "object" && (content = JSON.stringify(content)); + selectProperties && selectProperties.length > 0 && (query = query.select(selectProperties)); + filter && filter.length > 0 && (query = query.filter(filter)); + expandProperties && expandProperties.length > 0 && (query = query.expand(expandProperties)); + count && (query = query.count(count)); + let callback = (error: GraphError, response: any, rawResponse?: any) => error ? reject(error) : resolve(response); + //* ES2016 + ["post", "patch"].includes(method) ? await query[method](content, callback) : await query[method](callback); }); return p; } - - public static async Patch(apiUrl: string, version: string = "v1.0", content: any): Promise { - var p = new Promise(async (resolve, reject) => { - if (typeof (content) === "object") { - content = JSON.stringify(content); - } - - let query = this._graphClient.api(apiUrl).version(version); - let callback = (error: GraphError, _response: any, rawResponse?: any) => { - if (error) { - reject(error); - } else { - resolve(_response); - } - }; - await query.update(content, callback); - }); - return p; - } - - public static async Post(apiUrl: string, version: string = "v1.0", content: any): Promise { - var p = new Promise(async (resolve, reject) => { - if (typeof (content) === "object") { - content = JSON.stringify(content); - } - - let query = this._graphClient.api(apiUrl).version(version); - let callback = (error: GraphError, response: any, rawResponse?: any) => { - if (error) { - reject(error); - } else { - resolve(response); - } - }; - await query.post(content, callback); - }); - return p; - } - - public static async Delete(apiUrl: string, version: string = "v1.0"): Promise { - var p = new Promise(async (resolve, reject) => { - let query = this._graphClient.api(apiUrl).version(version); - let callback = (error: GraphError, response: any, rawResponse?: any) => { - if (error) { - reject(error); - } else { - resolve(response); - } - }; - await query.delete(callback); - }); - return p; - } -} +} \ No newline at end of file diff --git a/samples/react-graph-cascading-managed-metadata/tsconfig.json b/samples/react-graph-cascading-managed-metadata/tsconfig.json index e9c60a506..e282e49fb 100644 --- a/samples/react-graph-cascading-managed-metadata/tsconfig.json +++ b/samples/react-graph-cascading-managed-metadata/tsconfig.json @@ -25,7 +25,8 @@ "es5", "dom", "es2015.collection", - "es2015.promise" + "es2015.promise", + "ES2016.Array.Include" ] }, "include": [