mirror of
https://github.com/pnp/sp-dev-fx-webparts.git
synced 2025-02-09 14:34:58 +00:00
Updated react-officegraph to GA (#229)
* updated react office graph to GA * uploaded src folder and the package folder * updated readme * again updated readme
This commit is contained in:
parent
be13d78abe
commit
9d17034205
@ -1,85 +1,86 @@
|
||||
# React & Office Graph Web Part samples
|
||||
|
||||
## Summary
|
||||
|
||||
Sample SharePoint Framework Client-Side Web Parts built using React showing interacting with the Office Graph.
|
||||
|
||||
### Trending in this site
|
||||
|
||||
Sample SharePoint Framework Client-Side Web Part built using React showing documents trending in the current site.
|
||||
|
||||
![Trending in this site Web Part in the SharePoint Workbench](./assets/trendinginthissite-preview.png)
|
||||
|
||||
### Working with
|
||||
|
||||
Sample SharePoint Framework Client-Side Web Part built using React showing people with whom the current user has recently been working with.
|
||||
|
||||
![Working with Web Part in the SharePoint Workbench](./assets/working-with-preview.png)
|
||||
|
||||
### My recent documents
|
||||
|
||||
Sample SharePoint Framework Client-Side Web Part built using React showing documents recently viewed or modified by the current user.
|
||||
|
||||
![Working with Web Part in the SharePoint Workbench](./assets/my-recent-documents-preview.png)
|
||||
|
||||
### Trending in the sites I follow
|
||||
|
||||
Sample SharePoint Framework Client-Side Web Part built using React showing documents trending in the sites followed by the current user.
|
||||
|
||||
![Working with Web Part in the SharePoint Workbench](./assets/trending-in-sites-i-follow-preview.png)
|
||||
|
||||
## Used SharePoint Framework Version
|
||||
![drop](https://img.shields.io/badge/drop-drop2-red.svg)
|
||||
|
||||
## Applies to
|
||||
|
||||
* [SharePoint Framework Developer Preview](http://dev.office.com/sharepoint/docs/spfx/sharepoint-framework-overview)
|
||||
* [Office 365 developer tenant](http://dev.office.com/sharepoint/docs/spfx/set-up-your-developer-tenant)
|
||||
|
||||
## Solution
|
||||
|
||||
Solution|Author(s)
|
||||
--------|---------
|
||||
react-officegraph|Waldek Mastykarz (MVP, Rencore, @waldekm)
|
||||
|
||||
## Version history
|
||||
|
||||
Version|Date|Comments
|
||||
-------|----|--------
|
||||
1.3.0|September 20, 2016|Added the Trending in the sites I follow sample
|
||||
1.2.0|September 20, 2016|Added the My recent documents sample
|
||||
1.1.0|September 19, 2016|Added the Working with sample
|
||||
1.0.0|September 9, 2016|Initial release
|
||||
|
||||
## Disclaimer
|
||||
**THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.**
|
||||
|
||||
---
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- SharePoint Online tenant with Office Graph content
|
||||
- Site Collection created under the **/sites/** Managed Path
|
||||
|
||||
## Minimal Path to Awesome
|
||||
|
||||
- clone this repo
|
||||
- `$ npm i`
|
||||
- `$ gulp serve --nobrowser`
|
||||
- create a copy of the **./temp/workbench.html** file and change its extension to **.aspx**
|
||||
- in the contents of the **workbench.aspx** file change the URL of the **webAbsoluteUrl** property to the URL of your site, eg. `https://contoso.sharepoint.com/sites/my-team`
|
||||
- upload the **workbench.aspx** file to the Document Library in your site
|
||||
- navigate to the workbench page uploaded to your SharePoint site, ie. _https://contoso.sharepoint.com/sites/my-team/documents/workbench.aspx_
|
||||
|
||||
## Features
|
||||
|
||||
Sample Web Parts in this solution illustrate the following concepts on top of the SharePoint Framework:
|
||||
|
||||
- using React for building SharePoint Framework Client-Side Web Parts
|
||||
- using Office UI Fabric React components for building user experience consistent with SharePoint and Office
|
||||
- communicating with SharePoint using its REST API
|
||||
- communicating with the Office Graph via the SharePoint Search REST API
|
||||
- passing Web Part properties to React components
|
||||
- using ES6 Promises with vanilla-JavaScript web requests
|
||||
|
||||
![](https://telemetry.sharepointpnp.com/sp-dev-fx-webparts/samples/react-officegraph)
|
||||
# React & Office Graph Web Part samples
|
||||
|
||||
## Summary
|
||||
|
||||
Sample SharePoint Framework Client-Side Web Parts built using React showing interacting with the Office Graph.
|
||||
|
||||
### Trending in this site
|
||||
|
||||
Sample SharePoint Framework Client-Side Web Part built using React showing documents trending in the current site.
|
||||
|
||||
![Trending in this site Web Part in the SharePoint Workbench](./assets/trendinginthissite-preview.png)
|
||||
|
||||
### Working with
|
||||
|
||||
Sample SharePoint Framework Client-Side Web Part built using React showing people with whom the current user has recently been working with.
|
||||
|
||||
![Working with Web Part in the SharePoint Workbench](./assets/working-with-preview.png)
|
||||
|
||||
### My recent documents
|
||||
|
||||
Sample SharePoint Framework Client-Side Web Part built using React showing documents recently viewed or modified by the current user.
|
||||
|
||||
![Working with Web Part in the SharePoint Workbench](./assets/my-recent-documents-preview.png)
|
||||
|
||||
### Trending in the sites I follow
|
||||
|
||||
Sample SharePoint Framework Client-Side Web Part built using React showing documents trending in the sites followed by the current user.
|
||||
|
||||
![Working with Web Part in the SharePoint Workbench](./assets/trending-in-sites-i-follow-preview.png)
|
||||
|
||||
## Used SharePoint Framework Version
|
||||
![drop](https://img.shields.io/badge/drop-ga-green.svg)
|
||||
|
||||
## Applies to
|
||||
|
||||
* [SharePoint Framework Developer Preview](http://dev.office.com/sharepoint/docs/spfx/sharepoint-framework-overview)
|
||||
* [Office 365 developer tenant](http://dev.office.com/sharepoint/docs/spfx/set-up-your-developer-tenant)
|
||||
|
||||
## Solution
|
||||
|
||||
Solution|Author(s)
|
||||
--------|---------
|
||||
react-officegraph|Waldek Mastykarz (MVP, Rencore, @waldekm), Gautam Sheth(SharePoint Consultant,Rapid Circle,@gautamdsheth)
|
||||
|
||||
## Version history
|
||||
|
||||
Version|Date|Comments
|
||||
-------|----|--------
|
||||
2.0 |May 31, 2017| GA release
|
||||
1.3.0|September 20, 2016|Added the Trending in the sites I follow sample
|
||||
1.2.0|September 20, 2016|Added the My recent documents sample
|
||||
1.1.0|September 19, 2016|Added the Working with sample
|
||||
1.0.0|September 9, 2016|Initial release
|
||||
|
||||
## Disclaimer
|
||||
**THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.**
|
||||
|
||||
---
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- SharePoint Online tenant with Office Graph content
|
||||
- Site Collection created under the **/sites/** Managed Path
|
||||
|
||||
## Minimal Path to Awesome
|
||||
|
||||
- clone this repo
|
||||
- `$ npm i`
|
||||
- `$ gulp serve --nobrowser`
|
||||
- create a copy of the **./temp/workbench.html** file and change its extension to **.aspx**
|
||||
- in the contents of the **workbench.aspx** file change the URL of the **webAbsoluteUrl** property to the URL of your site, eg. `https://contoso.sharepoint.com/sites/my-team`
|
||||
- upload the **workbench.aspx** file to the Document Library in your site
|
||||
- navigate to the workbench page uploaded to your SharePoint site, ie. _https://contoso.sharepoint.com/sites/my-team/documents/workbench.aspx_
|
||||
|
||||
## Features
|
||||
|
||||
Sample Web Parts in this solution illustrate the following concepts on top of the SharePoint Framework:
|
||||
|
||||
- using React for building SharePoint Framework Client-Side Web Parts
|
||||
- using Office UI Fabric React components for building user experience consistent with SharePoint and Office
|
||||
- communicating with SharePoint using its REST API
|
||||
- communicating with the Office Graph via the SharePoint Search REST API
|
||||
- passing Web Part properties to React components
|
||||
- using ES6 Promises with vanilla-JavaScript web requests
|
||||
|
||||
![](https://telemetry.sharepointpnp.com/sp-dev-fx-webparts/samples/react-officegraph)
|
@ -1,15 +1,5 @@
|
||||
{
|
||||
"entries": [
|
||||
{
|
||||
"entry": "./lib/webparts/trendingInThisSite/TrendingInThisSiteWebPart.js",
|
||||
"manifest": "./src/webparts/trendingInThisSite/TrendingInThisSiteWebPart.manifest.json",
|
||||
"outputPath": "./dist/trending-in-this-site.bundle.js"
|
||||
},
|
||||
{
|
||||
"entry": "./lib/webparts/workingWith/WorkingWithWebPart.js",
|
||||
"manifest": "./src/webparts/workingWith/WorkingWithWebPart.manifest.json",
|
||||
"outputPath": "./dist/working-with.bundle.js"
|
||||
},
|
||||
{
|
||||
"entry": "./lib/webparts/myRecentDocuments/MyRecentDocumentsWebPart.js",
|
||||
"manifest": "./src/webparts/myRecentDocuments/MyRecentDocumentsWebPart.manifest.json",
|
||||
@ -19,21 +9,23 @@
|
||||
"entry": "./lib/webparts/trendingInTheSitesIFollow/TrendingInTheSitesIFollowWebPart.js",
|
||||
"manifest": "./src/webparts/trendingInTheSitesIFollow/TrendingInTheSitesIFollowWebPart.manifest.json",
|
||||
"outputPath": "./dist/trending-in-the-sites-i-follow.bundle.js"
|
||||
},
|
||||
{
|
||||
"entry": "./lib/webparts/trendingInThisSite/TrendingInThisSiteWebPart.js",
|
||||
"manifest": "./src/webparts/trendingInThisSite/TrendingInThisSiteWebPart.manifest.json",
|
||||
"outputPath": "./dist/trending-in-this-site.bundle.js"
|
||||
},
|
||||
{
|
||||
"entry": "./lib/webparts/workingWith/WorkingWithWebPart.js",
|
||||
"manifest": "./src/webparts/workingWith/WorkingWithWebPart.manifest.json",
|
||||
"outputPath": "./dist/working-with.bundle.js"
|
||||
}
|
||||
],
|
||||
"externals": {
|
||||
"@microsoft/sp-client-base": "node_modules/@microsoft/sp-client-base/dist/sp-client-base.js",
|
||||
"@microsoft/sp-client-preview": "node_modules/@microsoft/sp-client-preview/dist/sp-client-preview.js",
|
||||
"@microsoft/sp-lodash-subset": "node_modules/@microsoft/sp-lodash-subset/dist/sp-lodash-subset.js",
|
||||
"office-ui-fabric-react": "node_modules/office-ui-fabric-react/dist/office-ui-fabric-react.js",
|
||||
"react": "node_modules/react/dist/react.min.js",
|
||||
"react-dom": "node_modules/react-dom/dist/react-dom.min.js",
|
||||
"react-dom/server": "node_modules/react-dom/dist/react-dom-server.min.js"
|
||||
},
|
||||
"externals": {},
|
||||
"localizedResources": {
|
||||
"trendingInThisSiteStrings": "webparts/trendingInThisSite/loc/{locale}.js",
|
||||
"workingWithStrings": "webparts/workingWith/loc/{locale}.js",
|
||||
"myRecentDocumentsStrings": "webparts/myRecentDocuments/loc/{locale}.js",
|
||||
"trendingInTheSitesIFollowStrings": "webparts/trendingInTheSitesIFollow/loc/{locale}.js"
|
||||
"trendingInTheSitesIFollowStrings": "webparts/trendingInTheSitesIFollow/loc/{locale}.js",
|
||||
"trendingInThisSiteStrings": "webparts/trendingInThisSite/loc/{locale}.js",
|
||||
"workingWithStrings": "webparts/workingWith/loc/{locale}.js"
|
||||
}
|
||||
}
|
||||
|
3
samples/react-officegraph/config/copy-assets.json
Normal file
3
samples/react-officegraph/config/copy-assets.json
Normal file
@ -0,0 +1,3 @@
|
||||
{
|
||||
"deployCdnPath": "temp/deploy"
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"workingDir": "./temp/deploy/",
|
||||
"account": "<!-- STORAGE ACCOUNT NAME -->",
|
||||
"container": "react-officegraph",
|
||||
"accessKey": "<!-- ACCESS KEY -->"
|
||||
{
|
||||
"workingDir": "./temp/deploy/",
|
||||
"account": "<!-- STORAGE ACCOUNT NAME -->",
|
||||
"container": "my-recent-documents",
|
||||
"accessKey": "<!-- ACCESS KEY -->"
|
||||
}
|
@ -1,10 +1,10 @@
|
||||
{
|
||||
"solution": {
|
||||
"name": "react-officegraph-client-side-solution",
|
||||
"id": "ab9002a3-ee4e-4d42-8322-cd4fc0ee7570",
|
||||
"version": "1.0.0.0"
|
||||
},
|
||||
"paths": {
|
||||
"zippedPackage": "react-officegraph.spapp"
|
||||
}
|
||||
}
|
||||
{
|
||||
"solution": {
|
||||
"name": "my-recent-documents-client-side-solution",
|
||||
"id": "5800f751-4ee9-462d-bbc4-d4c305e93c73",
|
||||
"version": "1.0.0.0"
|
||||
},
|
||||
"paths": {
|
||||
"zippedPackage": "solution/my-recent-documents.sppkg"
|
||||
}
|
||||
}
|
||||
|
@ -1,9 +1,9 @@
|
||||
{
|
||||
"port": 4321,
|
||||
"initialPage": "https://localhost:5432/workbench",
|
||||
"https": true,
|
||||
"api": {
|
||||
"port": 5432,
|
||||
"entryPath": "node_modules/@microsoft/sp-webpart-workbench/lib/api/"
|
||||
}
|
||||
}
|
||||
{
|
||||
"port": 4321,
|
||||
"initialPage": "https://localhost:5432/workbench",
|
||||
"https": true,
|
||||
"api": {
|
||||
"port": 5432,
|
||||
"entryPath": "node_modules/@microsoft/sp-webpart-workbench/lib/api/"
|
||||
}
|
||||
}
|
||||
|
@ -1,51 +1,46 @@
|
||||
{
|
||||
// Display errors as warnings
|
||||
"displayAsWarning": true,
|
||||
// The TSLint task may have been configured with several custom lint rules
|
||||
// before this config file is read (for example lint rules from the tslint-microsoft-contrib
|
||||
// project). If true, this flag will deactivate any of these rules.
|
||||
"removeExistingRules": true,
|
||||
// When true, the TSLint task is configured with some default TSLint "rules.":
|
||||
"useDefaultConfigAsBase": false,
|
||||
// Since removeExistingRules=true and useDefaultConfigAsBase=false, there will be no lint rules
|
||||
// which are active, other than the list of rules below.
|
||||
"lintConfig": {
|
||||
// Opt-in to Lint rules which help to eliminate bugs in JavaScript
|
||||
"rules": {
|
||||
"class-name": false,
|
||||
"export-name": false,
|
||||
"forin": false,
|
||||
"label-position": false,
|
||||
"label-undefined": false,
|
||||
"member-access": true,
|
||||
"no-arg": false,
|
||||
"no-console": false,
|
||||
"no-construct": false,
|
||||
"no-duplicate-case": true,
|
||||
"no-duplicate-key": false,
|
||||
"no-duplicate-variable": true,
|
||||
"no-eval": false,
|
||||
"no-function-expression": true,
|
||||
"no-internal-module": true,
|
||||
"no-shadowed-variable": true,
|
||||
"no-switch-case-fall-through": true,
|
||||
"no-unnecessary-semicolons": true,
|
||||
"no-unused-expression": true,
|
||||
"no-unused-imports": true,
|
||||
"no-unused-variable": true,
|
||||
"no-unreachable": true,
|
||||
"no-use-before-declare": true,
|
||||
"no-with-statement": true,
|
||||
"semicolon": true,
|
||||
"trailing-comma": false,
|
||||
"typedef": false,
|
||||
"typedef-whitespace": false,
|
||||
"use-named-parameter": true,
|
||||
"valid-typeof": true,
|
||||
"variable-name": false,
|
||||
"whitespace": false,
|
||||
"prefer-const": true,
|
||||
"a11y-role": true
|
||||
}
|
||||
}
|
||||
{
|
||||
// Display errors as warnings
|
||||
"displayAsWarning": true,
|
||||
// The TSLint task may have been configured with several custom lint rules
|
||||
// before this config file is read (for example lint rules from the tslint-microsoft-contrib
|
||||
// project). If true, this flag will deactivate any of these rules.
|
||||
"removeExistingRules": true,
|
||||
// When true, the TSLint task is configured with some default TSLint "rules.":
|
||||
"useDefaultConfigAsBase": false,
|
||||
// Since removeExistingRules=true and useDefaultConfigAsBase=false, there will be no lint rules
|
||||
// which are active, other than the list of rules below.
|
||||
"lintConfig": {
|
||||
// Opt-in to Lint rules which help to eliminate bugs in JavaScript
|
||||
"rules": {
|
||||
"class-name": false,
|
||||
"export-name": false,
|
||||
"forin": false,
|
||||
"label-position": false,
|
||||
"member-access": true,
|
||||
"no-arg": false,
|
||||
"no-console": false,
|
||||
"no-construct": false,
|
||||
"no-duplicate-case": true,
|
||||
"no-duplicate-variable": true,
|
||||
"no-eval": false,
|
||||
"no-function-expression": true,
|
||||
"no-internal-module": true,
|
||||
"no-shadowed-variable": true,
|
||||
"no-switch-case-fall-through": true,
|
||||
"no-unnecessary-semicolons": true,
|
||||
"no-unused-expression": true,
|
||||
"no-unused-imports": true,
|
||||
"no-use-before-declare": true,
|
||||
"no-with-statement": true,
|
||||
"semicolon": true,
|
||||
"trailing-comma": false,
|
||||
"typedef": false,
|
||||
"typedef-whitespace": false,
|
||||
"use-named-parameter": true,
|
||||
"valid-typeof": true,
|
||||
"variable-name": false,
|
||||
"whitespace": false,
|
||||
"prefer-const": true
|
||||
}
|
||||
}
|
||||
}
|
@ -1,3 +1,3 @@
|
||||
{
|
||||
"cdnBasePath": "<!-- PATH TO CDN -->"
|
||||
{
|
||||
"cdnBasePath": "<!-- PATH TO CDN -->"
|
||||
}
|
64
samples/react-officegraph/dist/65f773e5-a708-4b28-ac1f-0fb74e9f85da.manifest.json
vendored
Normal file
64
samples/react-officegraph/dist/65f773e5-a708-4b28-ac1f-0fb74e9f85da.manifest.json
vendored
Normal file
@ -0,0 +1,64 @@
|
||||
{
|
||||
"id": "65f773e5-a708-4b28-ac1f-0fb74e9f85da",
|
||||
"alias": "TrendingInThisSiteWebPart",
|
||||
"componentType": "WebPart",
|
||||
"version": "0.0.1",
|
||||
"manifestVersion": 2,
|
||||
"preconfiguredEntries": [
|
||||
{
|
||||
"groupId": "65f773e5-a708-4b28-ac1f-0fb74e9f85da",
|
||||
"group": {
|
||||
"default": "Content rollup"
|
||||
},
|
||||
"title": {
|
||||
"default": "Trending in this site"
|
||||
},
|
||||
"description": {
|
||||
"default": "Shows documents trending in this site"
|
||||
},
|
||||
"officeFabricIconFontName": "Page",
|
||||
"properties": {
|
||||
"numberOfDocuments": 5
|
||||
}
|
||||
}
|
||||
],
|
||||
"loaderConfig": {
|
||||
"entryModuleId": "trending-in-this-site.bundle",
|
||||
"internalModuleBaseUrls": [
|
||||
"https://localhost:4321/"
|
||||
],
|
||||
"scriptResources": {
|
||||
"trending-in-this-site.bundle": {
|
||||
"type": "path",
|
||||
"path": "dist/trending-in-this-site.bundle.js"
|
||||
},
|
||||
"trendingInThisSiteStrings": {
|
||||
"defaultPath": "lib/webparts/trendingInThisSite/loc/en-us.js",
|
||||
"type": "localizedPath",
|
||||
"paths": {}
|
||||
},
|
||||
"@microsoft/sp-core-library": {
|
||||
"type": "component",
|
||||
"version": "1.0.0",
|
||||
"id": "7263c7d0-1d6a-45ec-8d85-d4d1d234171b"
|
||||
},
|
||||
"react": {
|
||||
"type": "component",
|
||||
"version": "15.5.4",
|
||||
"id": "0d910c1c-13b9-4e1c-9aa4-b008c5e42d7d",
|
||||
"failoverPath": "node_modules/react/dist/react.js"
|
||||
},
|
||||
"react-dom": {
|
||||
"type": "component",
|
||||
"version": "15.5.4",
|
||||
"id": "aa0a46ec-1505-43cd-a44a-93f3a5aa460a",
|
||||
"failoverPath": "node_modules/react-dom/dist/react-dom.js"
|
||||
},
|
||||
"@microsoft/sp-webpart-base": {
|
||||
"type": "component",
|
||||
"version": "1.0.0",
|
||||
"id": "974a7777-0990-4136-8fa6-95d80114c2e0"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
70
samples/react-officegraph/dist/7dd7cf1a-0201-4ecb-87d1-df26ee53ba5f.manifest.json
vendored
Normal file
70
samples/react-officegraph/dist/7dd7cf1a-0201-4ecb-87d1-df26ee53ba5f.manifest.json
vendored
Normal file
@ -0,0 +1,70 @@
|
||||
{
|
||||
"id": "7dd7cf1a-0201-4ecb-87d1-df26ee53ba5f",
|
||||
"alias": "TrendingInTheSitesIFollowWebPart",
|
||||
"componentType": "WebPart",
|
||||
"version": "0.0.1",
|
||||
"manifestVersion": 2,
|
||||
"preconfiguredEntries": [
|
||||
{
|
||||
"groupId": "7dd7cf1a-0201-4ecb-87d1-df26ee53ba5f",
|
||||
"group": {
|
||||
"default": "Content rollup"
|
||||
},
|
||||
"title": {
|
||||
"default": "Trending in the sites I follow"
|
||||
},
|
||||
"description": {
|
||||
"default": "Shows documents trending in the sites followed by the current user"
|
||||
},
|
||||
"officeFabricIconFontName": "Chart",
|
||||
"properties": {
|
||||
"title": "Trending in the sites I follow",
|
||||
"numberOfDocuments": 5
|
||||
}
|
||||
}
|
||||
],
|
||||
"loaderConfig": {
|
||||
"entryModuleId": "trending-in-the-sites-i-follow.bundle",
|
||||
"internalModuleBaseUrls": [
|
||||
"https://localhost:4321/"
|
||||
],
|
||||
"scriptResources": {
|
||||
"trending-in-the-sites-i-follow.bundle": {
|
||||
"type": "path",
|
||||
"path": "dist/trending-in-the-sites-i-follow.bundle.js"
|
||||
},
|
||||
"trendingInTheSitesIFollowStrings": {
|
||||
"defaultPath": "lib/webparts/trendingInTheSitesIFollow/loc/en-us.js",
|
||||
"type": "localizedPath",
|
||||
"paths": {}
|
||||
},
|
||||
"@microsoft/sp-core-library": {
|
||||
"type": "component",
|
||||
"version": "1.0.0",
|
||||
"id": "7263c7d0-1d6a-45ec-8d85-d4d1d234171b"
|
||||
},
|
||||
"react": {
|
||||
"type": "component",
|
||||
"version": "15.5.4",
|
||||
"id": "0d910c1c-13b9-4e1c-9aa4-b008c5e42d7d",
|
||||
"failoverPath": "node_modules/react/dist/react.js"
|
||||
},
|
||||
"react-dom": {
|
||||
"type": "component",
|
||||
"version": "15.5.4",
|
||||
"id": "aa0a46ec-1505-43cd-a44a-93f3a5aa460a",
|
||||
"failoverPath": "node_modules/react-dom/dist/react-dom.js"
|
||||
},
|
||||
"@microsoft/sp-webpart-base": {
|
||||
"type": "component",
|
||||
"version": "1.0.0",
|
||||
"id": "974a7777-0990-4136-8fa6-95d80114c2e0"
|
||||
},
|
||||
"@microsoft/sp-http": {
|
||||
"type": "component",
|
||||
"version": "1.0.0",
|
||||
"id": "c07208f0-ea3b-4c1a-9965-ac1b825211a6"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
70
samples/react-officegraph/dist/a5a289e6-4d54-4ffa-a1d6-3c5fa9dff088.manifest.json
vendored
Normal file
70
samples/react-officegraph/dist/a5a289e6-4d54-4ffa-a1d6-3c5fa9dff088.manifest.json
vendored
Normal file
@ -0,0 +1,70 @@
|
||||
{
|
||||
"id": "a5a289e6-4d54-4ffa-a1d6-3c5fa9dff088",
|
||||
"alias": "MyRecentDocumentsWebPart",
|
||||
"componentType": "WebPart",
|
||||
"version": "0.0.1",
|
||||
"manifestVersion": 2,
|
||||
"preconfiguredEntries": [
|
||||
{
|
||||
"groupId": "a5a289e6-4d54-4ffa-a1d6-3c5fa9dff088",
|
||||
"group": {
|
||||
"default": "Content rollup"
|
||||
},
|
||||
"title": {
|
||||
"default": "My recent documents"
|
||||
},
|
||||
"description": {
|
||||
"default": "Shows documents recently viewed or modified by the current user"
|
||||
},
|
||||
"officeFabricIconFontName": "Recent",
|
||||
"properties": {
|
||||
"title": "My recent documents",
|
||||
"numberOfDocuments": 5
|
||||
}
|
||||
}
|
||||
],
|
||||
"loaderConfig": {
|
||||
"entryModuleId": "my-recent-documents.bundle",
|
||||
"internalModuleBaseUrls": [
|
||||
"https://localhost:4321/"
|
||||
],
|
||||
"scriptResources": {
|
||||
"my-recent-documents.bundle": {
|
||||
"type": "path",
|
||||
"path": "dist/my-recent-documents.bundle.js"
|
||||
},
|
||||
"myRecentDocumentsStrings": {
|
||||
"defaultPath": "lib/webparts/myRecentDocuments/loc/en-us.js",
|
||||
"type": "localizedPath",
|
||||
"paths": {}
|
||||
},
|
||||
"@microsoft/sp-core-library": {
|
||||
"type": "component",
|
||||
"version": "1.0.0",
|
||||
"id": "7263c7d0-1d6a-45ec-8d85-d4d1d234171b"
|
||||
},
|
||||
"react": {
|
||||
"type": "component",
|
||||
"version": "15.5.4",
|
||||
"id": "0d910c1c-13b9-4e1c-9aa4-b008c5e42d7d",
|
||||
"failoverPath": "node_modules/react/dist/react.js"
|
||||
},
|
||||
"react-dom": {
|
||||
"type": "component",
|
||||
"version": "15.5.4",
|
||||
"id": "aa0a46ec-1505-43cd-a44a-93f3a5aa460a",
|
||||
"failoverPath": "node_modules/react-dom/dist/react-dom.js"
|
||||
},
|
||||
"@microsoft/sp-webpart-base": {
|
||||
"type": "component",
|
||||
"version": "1.0.0",
|
||||
"id": "974a7777-0990-4136-8fa6-95d80114c2e0"
|
||||
},
|
||||
"@microsoft/sp-http": {
|
||||
"type": "component",
|
||||
"version": "1.0.0",
|
||||
"id": "c07208f0-ea3b-4c1a-9965-ac1b825211a6"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
70
samples/react-officegraph/dist/e23c0bf2-75eb-48f6-9f55-bafc043aab86.manifest.json
vendored
Normal file
70
samples/react-officegraph/dist/e23c0bf2-75eb-48f6-9f55-bafc043aab86.manifest.json
vendored
Normal file
@ -0,0 +1,70 @@
|
||||
{
|
||||
"id": "e23c0bf2-75eb-48f6-9f55-bafc043aab86",
|
||||
"alias": "WorkingWithWebPart",
|
||||
"componentType": "WebPart",
|
||||
"version": "0.0.1",
|
||||
"manifestVersion": 2,
|
||||
"preconfiguredEntries": [
|
||||
{
|
||||
"groupId": "e23c0bf2-75eb-48f6-9f55-bafc043aab86",
|
||||
"group": {
|
||||
"default": "Productivity"
|
||||
},
|
||||
"title": {
|
||||
"default": "Working with"
|
||||
},
|
||||
"description": {
|
||||
"default": "Shows people with whom you communicate frequently"
|
||||
},
|
||||
"officeFabricIconFontName": "Group",
|
||||
"properties": {
|
||||
"title": "Recent contacts",
|
||||
"numberOfPeople": 5
|
||||
}
|
||||
}
|
||||
],
|
||||
"loaderConfig": {
|
||||
"entryModuleId": "working-with.bundle",
|
||||
"internalModuleBaseUrls": [
|
||||
"https://localhost:4321/"
|
||||
],
|
||||
"scriptResources": {
|
||||
"working-with.bundle": {
|
||||
"type": "path",
|
||||
"path": "dist/working-with.bundle.js"
|
||||
},
|
||||
"workingWithStrings": {
|
||||
"defaultPath": "lib/webparts/workingWith/loc/en-us.js",
|
||||
"type": "localizedPath",
|
||||
"paths": {}
|
||||
},
|
||||
"@microsoft/sp-core-library": {
|
||||
"type": "component",
|
||||
"version": "1.0.0",
|
||||
"id": "7263c7d0-1d6a-45ec-8d85-d4d1d234171b"
|
||||
},
|
||||
"react": {
|
||||
"type": "component",
|
||||
"version": "15.5.4",
|
||||
"id": "0d910c1c-13b9-4e1c-9aa4-b008c5e42d7d",
|
||||
"failoverPath": "node_modules/react/dist/react.js"
|
||||
},
|
||||
"react-dom": {
|
||||
"type": "component",
|
||||
"version": "15.5.4",
|
||||
"id": "aa0a46ec-1505-43cd-a44a-93f3a5aa460a",
|
||||
"failoverPath": "node_modules/react-dom/dist/react-dom.js"
|
||||
},
|
||||
"@microsoft/sp-webpart-base": {
|
||||
"type": "component",
|
||||
"version": "1.0.0",
|
||||
"id": "974a7777-0990-4136-8fa6-95d80114c2e0"
|
||||
},
|
||||
"@microsoft/sp-http": {
|
||||
"type": "component",
|
||||
"version": "1.0.0",
|
||||
"id": "c07208f0-ea3b-4c1a-9965-ac1b825211a6"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
31687
samples/react-officegraph/dist/my-recent-documents.bundle.js
vendored
Normal file
31687
samples/react-officegraph/dist/my-recent-documents.bundle.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
samples/react-officegraph/dist/my-recent-documents.bundle.js.map
vendored
Normal file
1
samples/react-officegraph/dist/my-recent-documents.bundle.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
31719
samples/react-officegraph/dist/trending-in-the-sites-i-follow.bundle.js
vendored
Normal file
31719
samples/react-officegraph/dist/trending-in-the-sites-i-follow.bundle.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
samples/react-officegraph/dist/trending-in-the-sites-i-follow.bundle.js.map
vendored
Normal file
1
samples/react-officegraph/dist/trending-in-the-sites-i-follow.bundle.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
31790
samples/react-officegraph/dist/trending-in-this-site.bundle.js
vendored
Normal file
31790
samples/react-officegraph/dist/trending-in-this-site.bundle.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
samples/react-officegraph/dist/trending-in-this-site.bundle.js.map
vendored
Normal file
1
samples/react-officegraph/dist/trending-in-this-site.bundle.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
31622
samples/react-officegraph/dist/working-with.bundle.js
vendored
Normal file
31622
samples/react-officegraph/dist/working-with.bundle.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
samples/react-officegraph/dist/working-with.bundle.js.map
vendored
Normal file
1
samples/react-officegraph/dist/working-with.bundle.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
12
samples/react-officegraph/gulpfile.js
vendored
12
samples/react-officegraph/gulpfile.js
vendored
@ -1,6 +1,6 @@
|
||||
'use strict';
|
||||
|
||||
const gulp = require('gulp');
|
||||
const build = require('@microsoft/sp-build-web');
|
||||
|
||||
build.initialize(gulp);
|
||||
'use strict';
|
||||
|
||||
const gulp = require('gulp');
|
||||
const build = require('@microsoft/sp-build-web');
|
||||
|
||||
build.initialize(gulp);
|
||||
|
7
samples/react-officegraph/lib/webparts/IActivity.d.ts
vendored
Normal file
7
samples/react-officegraph/lib/webparts/IActivity.d.ts
vendored
Normal file
@ -0,0 +1,7 @@
|
||||
export interface IActivity {
|
||||
name: string;
|
||||
date: string;
|
||||
actorId: number;
|
||||
actorName?: string;
|
||||
actorPhotoUrl?: string;
|
||||
}
|
3
samples/react-officegraph/lib/webparts/IActivity.js
vendored
Normal file
3
samples/react-officegraph/lib/webparts/IActivity.js
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
"use strict";
|
||||
|
||||
//# sourceMappingURL=IActivity.js.map
|
1
samples/react-officegraph/lib/webparts/IActivity.js.map
Normal file
1
samples/react-officegraph/lib/webparts/IActivity.js.map
Normal file
@ -0,0 +1 @@
|
||||
{"version":3,"sources":[],"names":[],"mappings":"","file":"webparts/IActivity.js","sourcesContent":[],"sourceRoot":"..\\..\\src"}
|
6
samples/react-officegraph/lib/webparts/IActorInformation.d.ts
vendored
Normal file
6
samples/react-officegraph/lib/webparts/IActorInformation.d.ts
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
export interface IActorInformation {
|
||||
id: number;
|
||||
name: string;
|
||||
email: string;
|
||||
photoUrl: string;
|
||||
}
|
3
samples/react-officegraph/lib/webparts/IActorInformation.js
vendored
Normal file
3
samples/react-officegraph/lib/webparts/IActorInformation.js
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
"use strict";
|
||||
|
||||
//# sourceMappingURL=IActorInformation.js.map
|
@ -0,0 +1 @@
|
||||
{"version":3,"sources":[],"names":[],"mappings":"","file":"webparts/IActorInformation.js","sourcesContent":[],"sourceRoot":"..\\..\\src"}
|
11
samples/react-officegraph/lib/webparts/ITrendingDocument.d.ts
vendored
Normal file
11
samples/react-officegraph/lib/webparts/ITrendingDocument.d.ts
vendored
Normal file
@ -0,0 +1,11 @@
|
||||
import { IActivity } from './IActivity';
|
||||
export interface ITrendingDocument {
|
||||
id: string;
|
||||
title: string;
|
||||
url: string;
|
||||
webUrl?: string;
|
||||
webTitle?: string;
|
||||
previewImageUrl: string;
|
||||
extension: string;
|
||||
activity: IActivity;
|
||||
}
|
3
samples/react-officegraph/lib/webparts/ITrendingDocument.js
vendored
Normal file
3
samples/react-officegraph/lib/webparts/ITrendingDocument.js
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
"use strict";
|
||||
|
||||
//# sourceMappingURL=ITrendingDocument.js.map
|
@ -0,0 +1 @@
|
||||
{"version":3,"sources":[],"names":[],"mappings":"","file":"webparts/ITrendingDocument.js","sourcesContent":[],"sourceRoot":"..\\..\\src"}
|
39
samples/react-officegraph/lib/webparts/SearchUtils.d.ts
vendored
Normal file
39
samples/react-officegraph/lib/webparts/SearchUtils.d.ts
vendored
Normal file
@ -0,0 +1,39 @@
|
||||
export interface ISearchQueryResponse {
|
||||
PrimaryQueryResult: IPrimaryQueryResult;
|
||||
}
|
||||
export interface IPrimaryQueryResult {
|
||||
RelevantResults?: IRelevantResults;
|
||||
}
|
||||
export interface IRelevantResults {
|
||||
RowCount: number;
|
||||
Table?: ITable;
|
||||
}
|
||||
export interface ITable {
|
||||
Rows?: IRow[];
|
||||
}
|
||||
export interface IRow {
|
||||
Cells: ICell[];
|
||||
}
|
||||
export interface ICell {
|
||||
Key: string;
|
||||
Value: string;
|
||||
ValueType: string;
|
||||
}
|
||||
export interface IEdge {
|
||||
ActorId: number;
|
||||
ObjectId: number;
|
||||
Properties: IEdgeProperties;
|
||||
}
|
||||
export interface IEdgeProperties {
|
||||
Action: number;
|
||||
Blob: any[];
|
||||
BlobContent: string;
|
||||
ObjectSource: number;
|
||||
Time: string;
|
||||
Weight: number;
|
||||
}
|
||||
export declare class SearchUtils {
|
||||
static getValueFromResults(key: string, results: ICell[]): string;
|
||||
static getPreviewImageUrl(result: ICell[], siteUrl: string): string;
|
||||
static getActionName(actionId: number): string;
|
||||
}
|
44
samples/react-officegraph/lib/webparts/SearchUtils.js
vendored
Normal file
44
samples/react-officegraph/lib/webparts/SearchUtils.js
vendored
Normal file
@ -0,0 +1,44 @@
|
||||
"use strict";
|
||||
var SearchUtils = (function () {
|
||||
function SearchUtils() {
|
||||
}
|
||||
SearchUtils.getValueFromResults = function (key, results) {
|
||||
var value = undefined;
|
||||
if (results && results.length > 0 && key) {
|
||||
for (var i = 0; i < results.length; i++) {
|
||||
var resultItem = results[i];
|
||||
if (resultItem.Key === key) {
|
||||
value = resultItem.Value;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return value;
|
||||
};
|
||||
SearchUtils.getPreviewImageUrl = function (result, siteUrl) {
|
||||
var uniqueID = SearchUtils.getValueFromResults('uniqueID', result);
|
||||
var siteId = SearchUtils.getValueFromResults('siteID', result);
|
||||
var webId = SearchUtils.getValueFromResults('webID', result);
|
||||
var docId = SearchUtils.getValueFromResults('DocId', result);
|
||||
if (uniqueID && siteId && webId && docId) {
|
||||
return siteUrl + "/_layouts/15/getpreview.ashx?guidFile=" + uniqueID + "&guidSite=" + siteId + "&guidWeb=" + webId + "&docid=" + docId + "\n &metadatatoken=300x424x2&ClientType=CodenameOsloWeb&size=small";
|
||||
}
|
||||
else {
|
||||
return '';
|
||||
}
|
||||
};
|
||||
SearchUtils.getActionName = function (actionId) {
|
||||
switch (actionId) {
|
||||
case 1001:
|
||||
return 'Viewed';
|
||||
case 1003:
|
||||
return 'Modified';
|
||||
default:
|
||||
return '';
|
||||
}
|
||||
};
|
||||
return SearchUtils;
|
||||
}());
|
||||
exports.SearchUtils = SearchUtils;
|
||||
|
||||
//# sourceMappingURL=SearchUtils.js.map
|
@ -0,0 +1 @@
|
||||
{"version":3,"sources":["webparts/SearchUtils.ts"],"names":[],"mappings":";AA0CA;IAAA;IAyCA,CAAC;IAxCe,+BAAmB,GAAjC,UAAkC,GAAW,EAAE,OAAgB;QAC7D,IAAI,KAAK,GAAW,SAAS,CAAC;QAE9B,EAAE,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;YACzC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAW,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAChD,IAAM,UAAU,GAAU,OAAO,CAAC,CAAC,CAAC,CAAC;gBACrC,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC;oBAC3B,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC;oBACzB,KAAK,CAAC;gBACR,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,CAAC,KAAK,CAAC;IACf,CAAC;IAEa,8BAAkB,GAAhC,UAAiC,MAAe,EAAE,OAAe;QAC/D,IAAM,QAAQ,GAAW,WAAW,CAAC,mBAAmB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC7E,IAAM,MAAM,GAAW,WAAW,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACzE,IAAM,KAAK,GAAW,WAAW,CAAC,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACvE,IAAM,KAAK,GAAW,WAAW,CAAC,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACvE,EAAE,CAAC,CAAC,QAAQ,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC;YACzC,MAAM,CAAI,OAAO,8CAAyC,QAAQ,kBAAa,MAAM,iBAAY,KAAK,eAAU,KAAK,2EACtD,CAAC;QAClE,CAAC;QACD,IAAI,CAAC,CAAC;YACJ,MAAM,CAAC,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAEa,yBAAa,GAA3B,UAA4B,QAAgB;QAC1C,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;YACjB,KAAK,IAAI;gBACP,MAAM,CAAC,QAAQ,CAAC;YAClB,KAAK,IAAI;gBACP,MAAM,CAAC,UAAU,CAAC;YACpB;gBACE,MAAM,CAAC,EAAE,CAAC;QACd,CAAC;IACH,CAAC;IACH,kBAAC;AAAD,CAzCA,AAyCC,IAAA;AAzCY,kCAAW","file":"webparts/SearchUtils.js","sourcesContent":["export interface ISearchQueryResponse {\n PrimaryQueryResult: IPrimaryQueryResult;\n}\n\nexport interface IPrimaryQueryResult {\n RelevantResults?: IRelevantResults;\n}\n\nexport interface IRelevantResults {\n RowCount: number;\n Table?: ITable;\n}\n\nexport interface ITable {\n Rows?: IRow[];\n}\n\nexport interface IRow {\n Cells: ICell[];\n}\n\nexport interface ICell {\n Key: string;\n Value: string;\n ValueType: string;\n}\n\nexport interface IEdge {\n ActorId: number;\n ObjectId: number;\n Properties: IEdgeProperties;\n}\n\nexport interface IEdgeProperties {\n Action: number;\n Blob: any[];\n BlobContent: string;\n ObjectSource: number;\n Time: string;\n Weight: number;\n}\n\nexport class SearchUtils {\n public static getValueFromResults(key: string, results: ICell[]): string {\n let value: string = undefined;\n\n if (results && results.length > 0 && key) {\n for (let i: number = 0; i < results.length; i++) {\n const resultItem: ICell = results[i];\n if (resultItem.Key === key) {\n value = resultItem.Value;\n break;\n }\n }\n }\n\n return value;\n }\n\n public static getPreviewImageUrl(result: ICell[], siteUrl: string): string {\n const uniqueID: string = SearchUtils.getValueFromResults('uniqueID', result);\n const siteId: string = SearchUtils.getValueFromResults('siteID', result);\n const webId: string = SearchUtils.getValueFromResults('webID', result);\n const docId: string = SearchUtils.getValueFromResults('DocId', result);\n if (uniqueID && siteId && webId && docId) {\n return `${siteUrl}/_layouts/15/getpreview.ashx?guidFile=${uniqueID}&guidSite=${siteId}&guidWeb=${webId}&docid=${docId}\n &metadatatoken=300x424x2&ClientType=CodenameOsloWeb&size=small`;\n }\n else {\n return '';\n }\n }\n\n public static getActionName(actionId: number): string {\n switch (actionId) {\n case 1001:\n return 'Viewed';\n case 1003:\n return 'Modified';\n default:\n return '';\n }\n }\n}"],"sourceRoot":"..\\..\\src"}
|
4
samples/react-officegraph/lib/webparts/Utils.d.ts
vendored
Normal file
4
samples/react-officegraph/lib/webparts/Utils.d.ts
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
export declare class Utils {
|
||||
static getUserPhotoUrl(userEmail: string, siteUrl: string, size?: string): string;
|
||||
static trim(s: string): string;
|
||||
}
|
21
samples/react-officegraph/lib/webparts/Utils.js
vendored
Normal file
21
samples/react-officegraph/lib/webparts/Utils.js
vendored
Normal file
@ -0,0 +1,21 @@
|
||||
"use strict";
|
||||
var Utils = (function () {
|
||||
function Utils() {
|
||||
}
|
||||
Utils.getUserPhotoUrl = function (userEmail, siteUrl, size) {
|
||||
if (size === void 0) { size = 'S'; }
|
||||
return siteUrl + "/_layouts/15/userphoto.aspx?size=" + size + "&accountname=" + userEmail;
|
||||
};
|
||||
Utils.trim = function (s) {
|
||||
if (s && s.length > 0) {
|
||||
return s.replace(/^\s+|\s+$/gm, '');
|
||||
}
|
||||
else {
|
||||
return s;
|
||||
}
|
||||
};
|
||||
return Utils;
|
||||
}());
|
||||
exports.Utils = Utils;
|
||||
|
||||
//# sourceMappingURL=Utils.js.map
|
1
samples/react-officegraph/lib/webparts/Utils.js.map
Normal file
1
samples/react-officegraph/lib/webparts/Utils.js.map
Normal file
@ -0,0 +1 @@
|
||||
{"version":3,"sources":["webparts/Utils.ts"],"names":[],"mappings":";AAAA;IAAA;IAaA,CAAC;IAZe,qBAAe,GAA7B,UAA8B,SAAiB,EAAE,OAAe,EAAE,IAAkB;QAAlB,qBAAA,EAAA,UAAkB;QAClF,MAAM,CAAI,OAAO,yCAAoC,IAAI,qBAAgB,SAAW,CAAC;IACvF,CAAC;IAEa,UAAI,GAAlB,UAAmB,CAAS;QAC1B,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;YACtB,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;QACtC,CAAC;QACD,IAAI,CAAC,CAAC;YACJ,MAAM,CAAC,CAAC,CAAC;QACX,CAAC;IACH,CAAC;IACH,YAAC;AAAD,CAbA,AAaC,IAAA;AAbY,sBAAK","file":"webparts/Utils.js","sourcesContent":["export class Utils {\n public static getUserPhotoUrl(userEmail: string, siteUrl: string, size: string = 'S'): string {\n return `${siteUrl}/_layouts/15/userphoto.aspx?size=${size}&accountname=${userEmail}`;\n }\n\n public static trim(s: string): string {\n if (s && s.length > 0) {\n return s.replace(/^\\s+|\\s+$/gm, '');\n }\n else {\n return s;\n }\n }\n}"],"sourceRoot":"..\\..\\src"}
|
4
samples/react-officegraph/lib/webparts/myRecentDocuments/IMyRecentDocumentsWebPartProps.d.ts
vendored
Normal file
4
samples/react-officegraph/lib/webparts/myRecentDocuments/IMyRecentDocumentsWebPartProps.d.ts
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
export interface IMyRecentDocumentsWebPartProps {
|
||||
numberOfDocuments: number;
|
||||
title: string;
|
||||
}
|
3
samples/react-officegraph/lib/webparts/myRecentDocuments/IMyRecentDocumentsWebPartProps.js
vendored
Normal file
3
samples/react-officegraph/lib/webparts/myRecentDocuments/IMyRecentDocumentsWebPartProps.js
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
"use strict";
|
||||
|
||||
//# sourceMappingURL=IMyRecentDocumentsWebPartProps.js.map
|
@ -0,0 +1 @@
|
||||
{"version":3,"sources":[],"names":[],"mappings":"","file":"webparts/myRecentDocuments/IMyRecentDocumentsWebPartProps.js","sourcesContent":[],"sourceRoot":"..\\..\\..\\src"}
|
@ -0,0 +1 @@
|
||||
.myRecentDocuments_8aec3ad1 .webPartTitle_8aec3ad1{margin-bottom:.7em;margin-left:.38em}.myRecentDocuments_8aec3ad1 .ms-DocumentCard{float:left;margin:.5em}.myRecentDocuments_8aec3ad1 .ms-Spinner{width:7em;margin:0 auto}
|
5
samples/react-officegraph/lib/webparts/myRecentDocuments/MyRecentDocuments.module.scss.d.ts
vendored
Normal file
5
samples/react-officegraph/lib/webparts/myRecentDocuments/MyRecentDocuments.module.scss.d.ts
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
declare const styles: {
|
||||
myRecentDocuments: string;
|
||||
webPartTitle: string;
|
||||
};
|
||||
export default styles;
|
@ -0,0 +1,12 @@
|
||||
"use strict";
|
||||
/* tslint:disable */
|
||||
require('./MyRecentDocuments.module.css');
|
||||
var styles = {
|
||||
myRecentDocuments: 'myRecentDocuments_8aec3ad1',
|
||||
webPartTitle: 'webPartTitle_8aec3ad1',
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.default = styles;
|
||||
/* tslint:enable */
|
||||
|
||||
//# sourceMappingURL=MyRecentDocuments.module.scss.js.map
|
@ -0,0 +1 @@
|
||||
{"version":3,"sources":["webparts/myRecentDocuments/MyRecentDocuments.module.scss.ts"],"names":[],"mappings":";AAAA,oBAAoB;AACpB,OAAO,CAAC,gCAAgC,CAAC,CAAC;AAC1C,IAAM,MAAM,GAAG;IACb,iBAAiB,EAAE,4BAA4B;IAC/C,YAAY,EAAE,uBAAuB;CACtC,CAAC;;AAEF,kBAAe,MAAM,CAAC;AACtB,mBAAmB","file":"webparts/myRecentDocuments/MyRecentDocuments.module.scss.js","sourcesContent":["/* tslint:disable */\r\nrequire('./MyRecentDocuments.module.css');\r\nconst styles = {\r\n myRecentDocuments: 'myRecentDocuments_8aec3ad1',\r\n webPartTitle: 'webPartTitle_8aec3ad1',\r\n};\r\n\r\nexport default styles;\r\n/* tslint:enable */"],"sourceRoot":"..\\..\\..\\src"}
|
9
samples/react-officegraph/lib/webparts/myRecentDocuments/MyRecentDocumentsWebPart.d.ts
vendored
Normal file
9
samples/react-officegraph/lib/webparts/myRecentDocuments/MyRecentDocumentsWebPart.d.ts
vendored
Normal file
@ -0,0 +1,9 @@
|
||||
import { Version } from '@microsoft/sp-core-library';
|
||||
import { BaseClientSideWebPart, IPropertyPaneConfiguration, IWebPartContext } from '@microsoft/sp-webpart-base';
|
||||
import { IMyRecentDocumentsWebPartProps } from './IMyRecentDocumentsWebPartProps';
|
||||
export default class MyRecentDocumentsWebPart extends BaseClientSideWebPart<IMyRecentDocumentsWebPartProps> {
|
||||
constructor(context: IWebPartContext);
|
||||
render(): void;
|
||||
protected readonly dataVersion: Version;
|
||||
protected getPropertyPaneConfiguration(): IPropertyPaneConfiguration;
|
||||
}
|
66
samples/react-officegraph/lib/webparts/myRecentDocuments/MyRecentDocumentsWebPart.js
vendored
Normal file
66
samples/react-officegraph/lib/webparts/myRecentDocuments/MyRecentDocumentsWebPart.js
vendored
Normal file
@ -0,0 +1,66 @@
|
||||
"use strict";
|
||||
var __extends = (this && this.__extends) || function (d, b) {
|
||||
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
|
||||
function __() { this.constructor = d; }
|
||||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||||
};
|
||||
var sp_core_library_1 = require("@microsoft/sp-core-library");
|
||||
var React = require("react");
|
||||
var ReactDom = require("react-dom");
|
||||
var sp_webpart_base_1 = require("@microsoft/sp-webpart-base");
|
||||
var MyRecentDocuments_1 = require("./components/MyRecentDocuments");
|
||||
var strings = require("myRecentDocumentsStrings");
|
||||
var MyRecentDocumentsWebPart = (function (_super) {
|
||||
__extends(MyRecentDocumentsWebPart, _super);
|
||||
function MyRecentDocumentsWebPart(context) {
|
||||
return _super.call(this) || this;
|
||||
}
|
||||
MyRecentDocumentsWebPart.prototype.render = function () {
|
||||
var element = React.createElement(MyRecentDocuments_1.default, {
|
||||
numberOfDocuments: this.properties.numberOfDocuments,
|
||||
title: this.properties.title,
|
||||
httpClient: this.context.spHttpClient,
|
||||
siteUrl: this.context.pageContext.web.absoluteUrl
|
||||
});
|
||||
ReactDom.render(element, this.domElement);
|
||||
};
|
||||
Object.defineProperty(MyRecentDocumentsWebPart.prototype, "dataVersion", {
|
||||
get: function () {
|
||||
return sp_core_library_1.Version.parse('1.0');
|
||||
},
|
||||
enumerable: true,
|
||||
configurable: true
|
||||
});
|
||||
MyRecentDocumentsWebPart.prototype.getPropertyPaneConfiguration = function () {
|
||||
return {
|
||||
pages: [
|
||||
{
|
||||
header: {
|
||||
description: strings.PropertyPaneDescription
|
||||
},
|
||||
groups: [
|
||||
{
|
||||
groupName: strings.ViewGroupName,
|
||||
groupFields: [
|
||||
sp_webpart_base_1.PropertyPaneTextField('title', {
|
||||
label: strings.TitleFieldLabel
|
||||
}),
|
||||
sp_webpart_base_1.PropertyPaneSlider('numberOfDocuments', {
|
||||
label: strings.NumberOfDocumentsFieldLabel,
|
||||
min: 1,
|
||||
max: 10,
|
||||
step: 1
|
||||
})
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
};
|
||||
};
|
||||
return MyRecentDocumentsWebPart;
|
||||
}(sp_webpart_base_1.BaseClientSideWebPart));
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.default = MyRecentDocumentsWebPart;
|
||||
|
||||
//# sourceMappingURL=MyRecentDocumentsWebPart.js.map
|
@ -0,0 +1 @@
|
||||
{"version":3,"sources":["webparts/myRecentDocuments/MyRecentDocumentsWebPart.ts"],"names":[],"mappings":";;;;;;AAAA,8DAAqD;AACrD,6BAA+B;AAC/B,oCAAsC;AACtC,8DAMoC;AAIpC,oEAA4F;AAC5F,kDAAoD;AAGpD;IAAsD,4CAAqD;IAEzG,kCAAmB,OAAwB;eACzC,iBAAO;IACT,CAAC;IAEM,yCAAM,GAAb;QACE,IAAM,OAAO,GAAgD,KAAK,CAAC,aAAa,CAAC,2BAAiB,EAAE;YAClG,iBAAiB,EAAE,IAAI,CAAC,UAAU,CAAC,iBAAiB;YACpD,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK;YAC5B,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY;YACrC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW;SAClD,CAAC,CAAC;QAEH,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IAC5C,CAAC;IAED,sBAAc,iDAAW;aAAzB;YACE,MAAM,CAAC,yBAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;;;OAAA;IAES,+DAA4B,GAAtC;QACE,MAAM,CAAC;YACL,KAAK,EAAE;gBACL;oBACE,MAAM,EAAE;wBACN,WAAW,EAAE,OAAO,CAAC,uBAAuB;qBAC7C;oBACD,MAAM,EAAE;wBACN;4BACE,SAAS,EAAE,OAAO,CAAC,aAAa;4BAChC,WAAW,EAAE;gCACX,uCAAqB,CAAC,OAAO,EAAE;oCAC7B,KAAK,EAAE,OAAO,CAAC,eAAe;iCAC/B,CAAC;gCACF,oCAAkB,CAAC,mBAAmB,EAAE;oCACtC,KAAK,EAAE,OAAO,CAAC,2BAA2B;oCAC1C,GAAG,EAAE,CAAC;oCACN,GAAG,EAAE,EAAE;oCACP,IAAI,EAAE,CAAC;iCACR,CAAC;6BACH;yBACF;qBACF;iBACF;aACF;SACF,CAAC;IACJ,CAAC;IACH,+BAAC;AAAD,CAhDA,AAgDC,CAhDqD,uCAAqB,GAgD1E","file":"webparts/myRecentDocuments/MyRecentDocumentsWebPart.js","sourcesContent":["import { Version } from '@microsoft/sp-core-library';\r\nimport * as React from 'react';\r\nimport * as ReactDom from 'react-dom';\r\nimport {\r\n BaseClientSideWebPart,\r\n IPropertyPaneConfiguration,\r\n IWebPartContext,\r\n PropertyPaneSlider, \r\n PropertyPaneTextField\r\n} from '@microsoft/sp-webpart-base';\r\nimport { escape } from '@microsoft/sp-lodash-subset';\r\n\r\n\r\nimport MyRecentDocuments, { IMyRecentDocumentsProps } from './components/MyRecentDocuments';\r\nimport * as strings from 'myRecentDocumentsStrings';\r\nimport { IMyRecentDocumentsWebPartProps } from './IMyRecentDocumentsWebPartProps';\r\n\r\nexport default class MyRecentDocumentsWebPart extends BaseClientSideWebPart<IMyRecentDocumentsWebPartProps> {\r\n\r\n public constructor(context: IWebPartContext) {\r\n super();\r\n }\r\n\r\n public render(): void {\r\n const element: React.ReactElement<IMyRecentDocumentsProps> = React.createElement(MyRecentDocuments, {\r\n numberOfDocuments: this.properties.numberOfDocuments,\r\n title: this.properties.title,\r\n httpClient: this.context.spHttpClient,\r\n siteUrl: this.context.pageContext.web.absoluteUrl\r\n });\r\n\r\n ReactDom.render(element, this.domElement);\r\n }\r\n\r\n protected get dataVersion(): Version {\r\n return Version.parse('1.0');\r\n }\r\n\r\n protected getPropertyPaneConfiguration(): IPropertyPaneConfiguration {\r\n return {\r\n pages: [\r\n {\r\n header: {\r\n description: strings.PropertyPaneDescription\r\n },\r\n groups: [\r\n {\r\n groupName: strings.ViewGroupName,\r\n groupFields: [\r\n PropertyPaneTextField('title', {\r\n label: strings.TitleFieldLabel\r\n }),\r\n PropertyPaneSlider('numberOfDocuments', {\r\n label: strings.NumberOfDocumentsFieldLabel,\r\n min: 1,\r\n max: 10,\r\n step: 1\r\n })\r\n ]\r\n }\r\n ]\r\n }\r\n ]\r\n };\r\n }\r\n}\r\n"],"sourceRoot":"..\\..\\..\\src"}
|
@ -0,0 +1,21 @@
|
||||
{
|
||||
"$schema": "../../../node_modules/@microsoft/sp-module-interfaces/lib/manifestSchemas/jsonSchemas/clientSideComponentManifestSchema.json",
|
||||
|
||||
"id": "a5a289e6-4d54-4ffa-a1d6-3c5fa9dff088",
|
||||
"alias": "MyRecentDocumentsWebPart",
|
||||
"componentType": "WebPart",
|
||||
"version": "0.0.1",
|
||||
"manifestVersion": 2,
|
||||
|
||||
"preconfiguredEntries": [{
|
||||
"groupId": "a5a289e6-4d54-4ffa-a1d6-3c5fa9dff088",
|
||||
"group": { "default": "Content rollup" },
|
||||
"title": { "default": "My recent documents" },
|
||||
"description": { "default": "Shows documents recently viewed or modified by the current user" },
|
||||
"officeFabricIconFontName": "Recent",
|
||||
"properties": {
|
||||
"title": "My recent documents",
|
||||
"numberOfDocuments": 5
|
||||
}
|
||||
}]
|
||||
}
|
21
samples/react-officegraph/lib/webparts/myRecentDocuments/components/MyRecentDocuments.d.ts
vendored
Normal file
21
samples/react-officegraph/lib/webparts/myRecentDocuments/components/MyRecentDocuments.d.ts
vendored
Normal file
@ -0,0 +1,21 @@
|
||||
import * as React from 'react';
|
||||
import { IMyRecentDocumentsWebPartProps } from '../IMyRecentDocumentsWebPartProps';
|
||||
import { SPHttpClient } from '@microsoft/sp-http';
|
||||
import { ITrendingDocument } from '../../ITrendingDocument';
|
||||
export interface IMyRecentDocumentsProps extends IMyRecentDocumentsWebPartProps {
|
||||
httpClient: SPHttpClient;
|
||||
siteUrl: string;
|
||||
}
|
||||
export interface IMyRecentDocumentsState {
|
||||
myDocuments: ITrendingDocument[];
|
||||
loading: boolean;
|
||||
error: string;
|
||||
}
|
||||
export default class MyRecentDocuments extends React.Component<IMyRecentDocumentsProps, IMyRecentDocumentsState> {
|
||||
constructor(props: IMyRecentDocumentsProps, state: IMyRecentDocumentsState);
|
||||
componentDidMount(): void;
|
||||
componentDidUpdate(prevProps: IMyRecentDocumentsProps, prevState: IMyRecentDocumentsState, prevContext: any): void;
|
||||
render(): JSX.Element;
|
||||
private loadMyDocuments(siteUrl, numberOfDocuments);
|
||||
private getActorsInfo(actorId, siteUrl);
|
||||
}
|
187
samples/react-officegraph/lib/webparts/myRecentDocuments/components/MyRecentDocuments.js
vendored
Normal file
187
samples/react-officegraph/lib/webparts/myRecentDocuments/components/MyRecentDocuments.js
vendored
Normal file
@ -0,0 +1,187 @@
|
||||
"use strict";
|
||||
var __extends = (this && this.__extends) || function (d, b) {
|
||||
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
|
||||
function __() { this.constructor = d; }
|
||||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||||
};
|
||||
var React = require("react");
|
||||
var office_ui_fabric_react_1 = require("office-ui-fabric-react");
|
||||
var MyRecentDocuments_module_scss_1 = require("../MyRecentDocuments.module.scss");
|
||||
var sp_http_1 = require("@microsoft/sp-http");
|
||||
var SearchUtils_1 = require("../../SearchUtils");
|
||||
var Utils_1 = require("../../Utils");
|
||||
var MyRecentDocuments = (function (_super) {
|
||||
__extends(MyRecentDocuments, _super);
|
||||
function MyRecentDocuments(props, state) {
|
||||
var _this = _super.call(this, props) || this;
|
||||
_this.state = {
|
||||
myDocuments: [],
|
||||
loading: true,
|
||||
error: null
|
||||
};
|
||||
return _this;
|
||||
}
|
||||
MyRecentDocuments.prototype.componentDidMount = function () {
|
||||
this.loadMyDocuments(this.props.siteUrl, this.props.numberOfDocuments);
|
||||
};
|
||||
MyRecentDocuments.prototype.componentDidUpdate = function (prevProps, prevState, prevContext) {
|
||||
if (this.props.numberOfDocuments !== prevProps.numberOfDocuments ||
|
||||
this.props.siteUrl !== prevProps.siteUrl && (this.props.numberOfDocuments && this.props.siteUrl)) {
|
||||
this.loadMyDocuments(this.props.siteUrl, this.props.numberOfDocuments);
|
||||
}
|
||||
};
|
||||
MyRecentDocuments.prototype.render = function () {
|
||||
var loading = this.state.loading ? React.createElement("div", { style: { margin: '0 auto' } },
|
||||
React.createElement(office_ui_fabric_react_1.Spinner, { label: 'Loading...' })) : React.createElement("div", null);
|
||||
var error = this.state.error ? React.createElement("div", null,
|
||||
React.createElement("strong", null, "Error: "),
|
||||
" ",
|
||||
this.state.error) : React.createElement("div", null);
|
||||
var documents = this.state.myDocuments.map(function (doc, i) {
|
||||
var iconUrl = "https://spoprod-a.akamaihd.net/files/odsp-next-prod_ship-2016-08-15_20160815.002/odsp-media/images/filetypes/32/" + doc.extension + ".png";
|
||||
return (React.createElement(office_ui_fabric_react_1.DocumentCard, { onClickHref: doc.url, key: doc.id },
|
||||
React.createElement(office_ui_fabric_react_1.DocumentCardPreview, { previewImages: [
|
||||
{
|
||||
previewImageSrc: doc.previewImageUrl,
|
||||
iconSrc: iconUrl,
|
||||
width: 318,
|
||||
height: 196,
|
||||
accentColor: '#ce4b1f'
|
||||
}
|
||||
] }),
|
||||
React.createElement(office_ui_fabric_react_1.DocumentCardTitle, { title: doc.title }),
|
||||
React.createElement(office_ui_fabric_react_1.DocumentCardActivity, { activity: doc.activity.name + " " + doc.activity.date, people: [
|
||||
{ name: doc.activity.actorName, profileImageSrc: doc.activity.actorPhotoUrl }
|
||||
] })));
|
||||
});
|
||||
return (React.createElement("div", { className: MyRecentDocuments_module_scss_1.default.myRecentDocuments },
|
||||
React.createElement("div", { className: office_ui_fabric_react_1.css('ms-font-xl', MyRecentDocuments_module_scss_1.default.webPartTitle) }, this.props.title),
|
||||
loading,
|
||||
error,
|
||||
documents,
|
||||
React.createElement("div", { style: { clear: 'both' } })));
|
||||
};
|
||||
MyRecentDocuments.prototype.loadMyDocuments = function (siteUrl, numberOfDocuments) {
|
||||
var _this = this;
|
||||
var myDocuments = [];
|
||||
this.props.httpClient.get(siteUrl + "/_api/search/query?querytext='*'&properties='GraphQuery:actor(me\\,or(action\\:1001\\,action\\:1003)),GraphRankingModel:{\"features\"\\:[{\"function\"\\:\"EdgeTime\"}]}'&selectproperties='Author,AuthorOwsUser,DocId,DocumentPreviewMetadata,Edges,EditorOwsUser,FileExtension,FileType,HitHighlightedProperties,HitHighlightedSummary,LastModifiedTime,LikeCountLifetime,ListID,ListItemID,OriginalPath,Path,Rank,SPWebUrl,SecondaryFileExtension,ServerRedirectedURL,SiteTitle,Title,ViewCountLifetime,siteID,uniqueID,webID'&rowlimit=" + numberOfDocuments + "&ClientType='MyRecentDocuments'&RankingModelId='0c77ded8-c3ef-466d-929d-905670ea1d72'", sp_http_1.SPHttpClient.configurations.v1, {
|
||||
headers: {
|
||||
'Accept': 'application/json;odata=nometadata',
|
||||
'odata-version': ''
|
||||
}
|
||||
})
|
||||
.then(function (response) {
|
||||
return response.json();
|
||||
})
|
||||
.then(function (response) {
|
||||
if (!response ||
|
||||
!response.PrimaryQueryResult ||
|
||||
!response.PrimaryQueryResult.RelevantResults ||
|
||||
response.PrimaryQueryResult.RelevantResults.RowCount === 0) {
|
||||
return Promise.resolve();
|
||||
}
|
||||
var actorId = undefined;
|
||||
for (var i = 0; i < response.PrimaryQueryResult.RelevantResults.Table.Rows.length; i++) {
|
||||
var row = response.PrimaryQueryResult.RelevantResults.Table.Rows[i];
|
||||
var edges = JSON.parse(SearchUtils_1.SearchUtils.getValueFromResults('Edges', row.Cells));
|
||||
if (edges.length < 1) {
|
||||
continue;
|
||||
}
|
||||
// we can get multiple edges back so let's show the information from the latest one
|
||||
var latestEdge = edges[0];
|
||||
if (edges.length > 1) {
|
||||
var latestEdgeDate = new Date(latestEdge.Properties.Time);
|
||||
for (var i_1 = 1; i_1 < edges.length; i_1++) {
|
||||
var edgeDate = new Date(edges[i_1].Properties.Time);
|
||||
if (edgeDate > latestEdgeDate) {
|
||||
latestEdge = edges[i_1];
|
||||
latestEdgeDate = edgeDate;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!actorId) {
|
||||
// since all edges that we're retrieving are personal (I viewed, I modified)
|
||||
// we only need to get the actor ID once because it's the same on all edges (me)
|
||||
actorId = latestEdge.ActorId;
|
||||
}
|
||||
var cells = row.Cells;
|
||||
var date = new Date(latestEdge.Properties.Time);
|
||||
var dateString = (date.getMonth() + 1) + '/' + date.getDate() + '/' + date.getFullYear();
|
||||
myDocuments.push({
|
||||
id: SearchUtils_1.SearchUtils.getValueFromResults('DocId', cells),
|
||||
url: SearchUtils_1.SearchUtils.getValueFromResults('ServerRedirectedURL', cells),
|
||||
title: SearchUtils_1.SearchUtils.getValueFromResults('Title', cells),
|
||||
previewImageUrl: SearchUtils_1.SearchUtils.getPreviewImageUrl(cells, siteUrl),
|
||||
extension: SearchUtils_1.SearchUtils.getValueFromResults('FileType', cells),
|
||||
activity: {
|
||||
actorId: latestEdge.ActorId,
|
||||
date: dateString,
|
||||
name: SearchUtils_1.SearchUtils.getActionName(latestEdge.Properties.Action)
|
||||
}
|
||||
});
|
||||
}
|
||||
return _this.getActorsInfo(actorId, siteUrl);
|
||||
}).
|
||||
then(function (actorInformation) {
|
||||
if (actorInformation) {
|
||||
for (var i = 0; i < myDocuments.length; i++) {
|
||||
if (myDocuments[i].activity.actorId !== actorInformation.id) {
|
||||
continue;
|
||||
}
|
||||
myDocuments[i].activity.actorName = actorInformation.name;
|
||||
myDocuments[i].activity.actorPhotoUrl = actorInformation.photoUrl;
|
||||
}
|
||||
}
|
||||
_this.setState({
|
||||
loading: false,
|
||||
error: null,
|
||||
myDocuments: myDocuments
|
||||
});
|
||||
}, function (error) {
|
||||
_this.setState({
|
||||
loading: false,
|
||||
error: error,
|
||||
myDocuments: []
|
||||
});
|
||||
});
|
||||
};
|
||||
MyRecentDocuments.prototype.getActorsInfo = function (actorId, siteUrl) {
|
||||
var _this = this;
|
||||
if (!actorId) {
|
||||
return Promise.resolve();
|
||||
}
|
||||
return new Promise(function (resolve, reject) {
|
||||
_this.props.httpClient.get(siteUrl + "/_api/search/query?querytext='WorkId:" + actorId + "'&selectproperties='DocId,Title,WorkEmail'&ClientType='MyRecentDocuments'&SourceId='b09a7990-05ea-4af9-81ef-edfab16c4e31'", sp_http_1.SPHttpClient.configurations.v1, {
|
||||
headers: {
|
||||
'Accept': 'application/json;odata=nometadata',
|
||||
'odata-version': ''
|
||||
}
|
||||
})
|
||||
.then(function (response) {
|
||||
return response.json();
|
||||
})
|
||||
.then(function (response) {
|
||||
if (!response ||
|
||||
!response.PrimaryQueryResult ||
|
||||
!response.PrimaryQueryResult.RelevantResults ||
|
||||
response.PrimaryQueryResult.RelevantResults.RowCount === 0) {
|
||||
return Promise.resolve();
|
||||
}
|
||||
var cells = response.PrimaryQueryResult.RelevantResults.Table.Rows[0].Cells;
|
||||
resolve({
|
||||
email: SearchUtils_1.SearchUtils.getValueFromResults('WorkEmail', cells),
|
||||
id: parseInt(SearchUtils_1.SearchUtils.getValueFromResults('DocId', cells)),
|
||||
name: SearchUtils_1.SearchUtils.getValueFromResults('Title', cells),
|
||||
photoUrl: Utils_1.Utils.getUserPhotoUrl(SearchUtils_1.SearchUtils.getValueFromResults('WorkEmail', cells), siteUrl)
|
||||
});
|
||||
}, function (error) {
|
||||
reject(error);
|
||||
});
|
||||
});
|
||||
};
|
||||
return MyRecentDocuments;
|
||||
}(React.Component));
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.default = MyRecentDocuments;
|
||||
|
||||
//# sourceMappingURL=MyRecentDocuments.js.map
|
File diff suppressed because one or more lines are too long
8
samples/react-officegraph/lib/webparts/myRecentDocuments/loc/en-us.js
vendored
Normal file
8
samples/react-officegraph/lib/webparts/myRecentDocuments/loc/en-us.js
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
define([], function() {
|
||||
return {
|
||||
"PropertyPaneDescription": "Manage the settings of this Web Part",
|
||||
"ViewGroupName": "View",
|
||||
"NumberOfDocumentsFieldLabel": "Number of documents to show",
|
||||
"TitleFieldLabel": "Web Part Title (displayed in the body)"
|
||||
}
|
||||
});
|
@ -0,0 +1,10 @@
|
||||
/// <reference types="mocha" />
|
||||
"use strict";
|
||||
var chai_1 = require("chai");
|
||||
describe('MyRecentDocumentsWebPart', function () {
|
||||
it('should do something', function () {
|
||||
chai_1.assert.ok(true);
|
||||
});
|
||||
});
|
||||
|
||||
//# sourceMappingURL=MyRecentDocuments.test.js.map
|
@ -0,0 +1 @@
|
||||
{"version":3,"sources":["webparts/myRecentDocuments/tests/MyRecentDocuments.test.ts"],"names":[],"mappings":"AAAA,+BAA+B;;AAE/B,6BAA8B;AAE9B,QAAQ,CAAC,0BAA0B,EAAE;IACnC,EAAE,CAAC,qBAAqB,EAAE;QACxB,aAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","file":"webparts/myRecentDocuments/tests/MyRecentDocuments.test.js","sourcesContent":["/// <reference types=\"mocha\" />\r\n\r\nimport { assert } from 'chai';\r\n\r\ndescribe('MyRecentDocumentsWebPart', () => {\r\n it('should do something', () => {\r\n assert.ok(true);\r\n });\r\n});\r\n"],"sourceRoot":"..\\..\\..\\..\\src"}
|
@ -0,0 +1,4 @@
|
||||
export interface ITrendingInTheSitesIFollowWebPartProps {
|
||||
title: string;
|
||||
numberOfDocuments: number;
|
||||
}
|
@ -0,0 +1,3 @@
|
||||
"use strict";
|
||||
|
||||
//# sourceMappingURL=ITrendingInTheSitesIFollowWebPartProps.js.map
|
@ -0,0 +1 @@
|
||||
{"version":3,"sources":[],"names":[],"mappings":"","file":"webparts/trendingInTheSitesIFollow/ITrendingInTheSitesIFollowWebPartProps.js","sourcesContent":[],"sourceRoot":"..\\..\\..\\src"}
|
@ -0,0 +1 @@
|
||||
.trendingInTheSitesIFollow_e41074f2 .webPartTitle_e41074f2{margin-bottom:.7em;margin-left:.38em}.trendingInTheSitesIFollow_e41074f2 .ms-DocumentCard{float:left;margin:.5em}.trendingInTheSitesIFollow_e41074f2 .ms-Spinner{width:7em;margin:0 auto}
|
@ -0,0 +1,5 @@
|
||||
declare const styles: {
|
||||
trendingInTheSitesIFollow: string;
|
||||
webPartTitle: string;
|
||||
};
|
||||
export default styles;
|
@ -0,0 +1,12 @@
|
||||
"use strict";
|
||||
/* tslint:disable */
|
||||
require('./TrendingInTheSitesIFollow.module.css');
|
||||
var styles = {
|
||||
trendingInTheSitesIFollow: 'trendingInTheSitesIFollow_e41074f2',
|
||||
webPartTitle: 'webPartTitle_e41074f2',
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.default = styles;
|
||||
/* tslint:enable */
|
||||
|
||||
//# sourceMappingURL=TrendingInTheSitesIFollow.module.scss.js.map
|
@ -0,0 +1 @@
|
||||
{"version":3,"sources":["webparts/trendingInTheSitesIFollow/TrendingInTheSitesIFollow.module.scss.ts"],"names":[],"mappings":";AAAA,oBAAoB;AACpB,OAAO,CAAC,wCAAwC,CAAC,CAAC;AAClD,IAAM,MAAM,GAAG;IACb,yBAAyB,EAAE,oCAAoC;IAC/D,YAAY,EAAE,uBAAuB;CACtC,CAAC;;AAEF,kBAAe,MAAM,CAAC;AACtB,mBAAmB","file":"webparts/trendingInTheSitesIFollow/TrendingInTheSitesIFollow.module.scss.js","sourcesContent":["/* tslint:disable */\r\nrequire('./TrendingInTheSitesIFollow.module.css');\r\nconst styles = {\r\n trendingInTheSitesIFollow: 'trendingInTheSitesIFollow_e41074f2',\r\n webPartTitle: 'webPartTitle_e41074f2',\r\n};\r\n\r\nexport default styles;\r\n/* tslint:enable */"],"sourceRoot":"..\\..\\..\\src"}
|
@ -0,0 +1,9 @@
|
||||
import { Version } from '@microsoft/sp-core-library';
|
||||
import { BaseClientSideWebPart, IPropertyPaneConfiguration, IWebPartContext } from '@microsoft/sp-webpart-base';
|
||||
import { ITrendingInTheSitesIFollowWebPartProps } from './ITrendingInTheSitesIFollowWebPartProps';
|
||||
export default class TrendingInTheSitesIFollowWebPart extends BaseClientSideWebPart<ITrendingInTheSitesIFollowWebPartProps> {
|
||||
constructor(context: IWebPartContext);
|
||||
render(): void;
|
||||
protected readonly dataVersion: Version;
|
||||
protected getPropertyPaneConfiguration(): IPropertyPaneConfiguration;
|
||||
}
|
@ -0,0 +1,66 @@
|
||||
"use strict";
|
||||
var __extends = (this && this.__extends) || function (d, b) {
|
||||
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
|
||||
function __() { this.constructor = d; }
|
||||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||||
};
|
||||
var sp_core_library_1 = require("@microsoft/sp-core-library");
|
||||
var React = require("react");
|
||||
var ReactDom = require("react-dom");
|
||||
var sp_webpart_base_1 = require("@microsoft/sp-webpart-base");
|
||||
var strings = require("trendingInTheSitesIFollowStrings");
|
||||
var TrendingInTheSitesIFollow_1 = require("./components/TrendingInTheSitesIFollow");
|
||||
var TrendingInTheSitesIFollowWebPart = (function (_super) {
|
||||
__extends(TrendingInTheSitesIFollowWebPart, _super);
|
||||
function TrendingInTheSitesIFollowWebPart(context) {
|
||||
return _super.call(this) || this;
|
||||
}
|
||||
TrendingInTheSitesIFollowWebPart.prototype.render = function () {
|
||||
var element = React.createElement(TrendingInTheSitesIFollow_1.default, {
|
||||
title: this.properties.title,
|
||||
numberOfDocuments: this.properties.numberOfDocuments,
|
||||
httpClient: this.context.spHttpClient,
|
||||
siteUrl: this.context.pageContext.web.absoluteUrl
|
||||
});
|
||||
ReactDom.render(element, this.domElement);
|
||||
};
|
||||
Object.defineProperty(TrendingInTheSitesIFollowWebPart.prototype, "dataVersion", {
|
||||
get: function () {
|
||||
return sp_core_library_1.Version.parse('1.0');
|
||||
},
|
||||
enumerable: true,
|
||||
configurable: true
|
||||
});
|
||||
TrendingInTheSitesIFollowWebPart.prototype.getPropertyPaneConfiguration = function () {
|
||||
return {
|
||||
pages: [
|
||||
{
|
||||
header: {
|
||||
description: strings.PropertyPaneDescription
|
||||
},
|
||||
groups: [
|
||||
{
|
||||
groupName: strings.ViewGroupName,
|
||||
groupFields: [
|
||||
sp_webpart_base_1.PropertyPaneTextField('title', {
|
||||
label: strings.TitleFieldLabel
|
||||
}),
|
||||
sp_webpart_base_1.PropertyPaneSlider('numberOfDocuments', {
|
||||
label: strings.NumberOfDocumentsFieldLabel,
|
||||
min: 1,
|
||||
max: 10,
|
||||
step: 1
|
||||
})
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
};
|
||||
};
|
||||
return TrendingInTheSitesIFollowWebPart;
|
||||
}(sp_webpart_base_1.BaseClientSideWebPart));
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.default = TrendingInTheSitesIFollowWebPart;
|
||||
|
||||
//# sourceMappingURL=TrendingInTheSitesIFollowWebPart.js.map
|
@ -0,0 +1 @@
|
||||
{"version":3,"sources":["webparts/trendingInTheSitesIFollow/TrendingInTheSitesIFollowWebPart.ts"],"names":[],"mappings":";;;;;;AAAA,8DAAqD;AACrD,6BAA+B;AAC/B,oCAAsC;AACtC,8DAOoC;AAGpC,0DAA4D;AAC5D,oFAAoH;AAGpH;IAA8D,oDAA6D;IAEzH,0CAAmB,OAAwB;eACzC,iBAAO;IACT,CAAC;IAEM,iDAAM,GAAb;QACE,IAAM,OAAO,GAAwD,KAAK,CAAC,aAAa,CAAC,mCAAyB,EAAE;YAClH,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK;YAC5B,iBAAiB,EAAE,IAAI,CAAC,UAAU,CAAC,iBAAiB;YACpD,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY;YACrC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW;SAClD,CAAC,CAAC;QAEH,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IAC5C,CAAC;IAED,sBAAc,yDAAW;aAAzB;YACE,MAAM,CAAC,yBAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;;;OAAA;IAES,uEAA4B,GAAtC;QACE,MAAM,CAAC;YACL,KAAK,EAAE;gBACL;oBACE,MAAM,EAAE;wBACN,WAAW,EAAE,OAAO,CAAC,uBAAuB;qBAC7C;oBACD,MAAM,EAAE;wBACN;4BACE,SAAS,EAAE,OAAO,CAAC,aAAa;4BAChC,WAAW,EAAE;gCACX,uCAAqB,CAAC,OAAO,EAAE;oCAC7B,KAAK,EAAE,OAAO,CAAC,eAAe;iCAC/B,CAAC;gCACF,oCAAkB,CAAC,mBAAmB,EAAE;oCACtC,KAAK,EAAE,OAAO,CAAC,2BAA2B;oCAC1C,GAAG,EAAE,CAAC;oCACN,GAAG,EAAE,EAAE;oCACP,IAAI,EAAE,CAAC;iCACR,CAAC;6BACH;yBACF;qBACF;iBACF;aACF;SACF,CAAC;IACJ,CAAC;IACH,uCAAC;AAAD,CAhDA,AAgDC,CAhD6D,uCAAqB,GAgDlF","file":"webparts/trendingInTheSitesIFollow/TrendingInTheSitesIFollowWebPart.js","sourcesContent":["import { Version } from '@microsoft/sp-core-library';\r\nimport * as React from 'react';\r\nimport * as ReactDom from 'react-dom';\r\nimport {\r\n BaseClientSideWebPart,\r\n IPropertyPaneConfiguration,\r\n PropertyPaneTextField,\r\n IWebPartContext,\r\n PropertyPaneSlider\r\n\r\n} from '@microsoft/sp-webpart-base';\r\nimport { escape } from '@microsoft/sp-lodash-subset';\r\n\r\nimport * as strings from 'trendingInTheSitesIFollowStrings';\r\nimport TrendingInTheSitesIFollow, { ITrendingInTheSitesIFollowProps } from './components/TrendingInTheSitesIFollow';\r\nimport { ITrendingInTheSitesIFollowWebPartProps } from './ITrendingInTheSitesIFollowWebPartProps';\r\n\r\nexport default class TrendingInTheSitesIFollowWebPart extends BaseClientSideWebPart<ITrendingInTheSitesIFollowWebPartProps> {\r\n\r\n public constructor(context: IWebPartContext) {\r\n super();\r\n }\r\n\r\n public render(): void {\r\n const element: React.ReactElement<ITrendingInTheSitesIFollowProps> = React.createElement(TrendingInTheSitesIFollow, {\r\n title: this.properties.title,\r\n numberOfDocuments: this.properties.numberOfDocuments,\r\n httpClient: this.context.spHttpClient,\r\n siteUrl: this.context.pageContext.web.absoluteUrl\r\n });\r\n\r\n ReactDom.render(element, this.domElement);\r\n }\r\n\r\n protected get dataVersion(): Version {\r\n return Version.parse('1.0');\r\n }\r\n\r\n protected getPropertyPaneConfiguration(): IPropertyPaneConfiguration {\r\n return {\r\n pages: [\r\n {\r\n header: {\r\n description: strings.PropertyPaneDescription\r\n },\r\n groups: [\r\n {\r\n groupName: strings.ViewGroupName,\r\n groupFields: [\r\n PropertyPaneTextField('title', {\r\n label: strings.TitleFieldLabel\r\n }),\r\n PropertyPaneSlider('numberOfDocuments', {\r\n label: strings.NumberOfDocumentsFieldLabel,\r\n min: 1,\r\n max: 10,\r\n step: 1\r\n })\r\n ]\r\n }\r\n ]\r\n }\r\n ]\r\n };\r\n }\r\n}\r\n"],"sourceRoot":"..\\..\\..\\src"}
|
@ -0,0 +1,21 @@
|
||||
{
|
||||
"$schema": "../../../node_modules/@microsoft/sp-module-interfaces/lib/manifestSchemas/jsonSchemas/clientSideComponentManifestSchema.json",
|
||||
|
||||
"id": "7dd7cf1a-0201-4ecb-87d1-df26ee53ba5f",
|
||||
"alias": "TrendingInTheSitesIFollowWebPart",
|
||||
"componentType": "WebPart",
|
||||
"version": "0.0.1",
|
||||
"manifestVersion": 2,
|
||||
|
||||
"preconfiguredEntries": [{
|
||||
"groupId": "7dd7cf1a-0201-4ecb-87d1-df26ee53ba5f",
|
||||
"group": { "default": "Content rollup" },
|
||||
"title": { "default": "Trending in the sites I follow" },
|
||||
"description": { "default": "Shows documents trending in the sites followed by the current user" },
|
||||
"officeFabricIconFontName": "Chart",
|
||||
"properties": {
|
||||
"title": "Trending in the sites I follow",
|
||||
"numberOfDocuments": 5
|
||||
}
|
||||
}]
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
import * as React from 'react';
|
||||
import { ITrendingInTheSitesIFollowWebPartProps } from '../ITrendingInTheSitesIFollowWebPartProps';
|
||||
import { SPHttpClient } from '@microsoft/sp-http';
|
||||
import { ITrendingDocument } from '../../ITrendingDocument';
|
||||
export interface ITrendingInTheSitesIFollowProps extends ITrendingInTheSitesIFollowWebPartProps {
|
||||
httpClient: SPHttpClient;
|
||||
siteUrl: string;
|
||||
}
|
||||
export interface ITrendingInTheSitesIFollowState {
|
||||
trendingDocuments: ITrendingDocument[];
|
||||
loading: boolean;
|
||||
error: string;
|
||||
}
|
||||
export default class TrendingInTheSitesIFollow extends React.Component<ITrendingInTheSitesIFollowProps, ITrendingInTheSitesIFollowState> {
|
||||
constructor(props: ITrendingInTheSitesIFollowProps, state: ITrendingInTheSitesIFollowState);
|
||||
componentDidMount(): void;
|
||||
componentDidUpdate(prevProps: ITrendingInTheSitesIFollowProps, prevState: ITrendingInTheSitesIFollowState, prevContext: any): void;
|
||||
render(): JSX.Element;
|
||||
private loadDocuments(siteUrl, numberOfDocuments);
|
||||
private getSitesIFollow(siteUrl);
|
||||
private getTrendingDocuments(sitesIFollow, siteUrl, numberOfDocuments);
|
||||
}
|
@ -0,0 +1,214 @@
|
||||
"use strict";
|
||||
var __extends = (this && this.__extends) || function (d, b) {
|
||||
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
|
||||
function __() { this.constructor = d; }
|
||||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||||
};
|
||||
var React = require("react");
|
||||
var office_ui_fabric_react_1 = require("office-ui-fabric-react");
|
||||
var TrendingInTheSitesIFollow_module_scss_1 = require("../TrendingInTheSitesIFollow.module.scss");
|
||||
var sp_http_1 = require("@microsoft/sp-http");
|
||||
var SearchUtils_1 = require("../../SearchUtils");
|
||||
var Utils_1 = require("../../Utils");
|
||||
var TrendingInTheSitesIFollow = (function (_super) {
|
||||
__extends(TrendingInTheSitesIFollow, _super);
|
||||
function TrendingInTheSitesIFollow(props, state) {
|
||||
var _this = _super.call(this, props) || this;
|
||||
_this.state = {
|
||||
trendingDocuments: [],
|
||||
loading: true,
|
||||
error: null
|
||||
};
|
||||
return _this;
|
||||
}
|
||||
TrendingInTheSitesIFollow.prototype.componentDidMount = function () {
|
||||
this.loadDocuments(this.props.siteUrl, this.props.numberOfDocuments);
|
||||
};
|
||||
TrendingInTheSitesIFollow.prototype.componentDidUpdate = function (prevProps, prevState, prevContext) {
|
||||
if (this.props.numberOfDocuments !== prevProps.numberOfDocuments ||
|
||||
this.props.siteUrl !== prevProps.siteUrl && (this.props.numberOfDocuments && this.props.siteUrl)) {
|
||||
this.loadDocuments(this.props.siteUrl, this.props.numberOfDocuments);
|
||||
}
|
||||
};
|
||||
TrendingInTheSitesIFollow.prototype.render = function () {
|
||||
var loading = this.state.loading ? React.createElement("div", { style: { margin: '0 auto' } },
|
||||
React.createElement(office_ui_fabric_react_1.Spinner, { label: 'Loading...' })) : React.createElement("div", null);
|
||||
var error = this.state.error ? React.createElement("div", null,
|
||||
React.createElement("strong", null, "Error: "),
|
||||
" ",
|
||||
this.state.error) : React.createElement("div", null);
|
||||
var documents = this.state.trendingDocuments.map(function (doc, i) {
|
||||
var iconUrl = "https://spoprod-a.akamaihd.net/files/odsp-next-prod_ship-2016-08-15_20160815.002/odsp-media/images/filetypes/32/" + doc.extension + ".png";
|
||||
return (React.createElement(office_ui_fabric_react_1.DocumentCard, { onClickHref: doc.url, key: doc.id },
|
||||
React.createElement(office_ui_fabric_react_1.DocumentCardPreview, { previewImages: [
|
||||
{
|
||||
previewImageSrc: doc.previewImageUrl,
|
||||
iconSrc: iconUrl,
|
||||
width: 318,
|
||||
height: 196,
|
||||
accentColor: '#ce4b1f'
|
||||
}
|
||||
] }),
|
||||
React.createElement(office_ui_fabric_react_1.DocumentCardTitle, { title: doc.title }),
|
||||
React.createElement(office_ui_fabric_react_1.DocumentCardLocation, { location: doc.webTitle, locationHref: doc.webUrl }),
|
||||
React.createElement(office_ui_fabric_react_1.DocumentCardActivity, { activity: doc.activity.name + " " + doc.activity.date, people: [
|
||||
{ name: doc.activity.actorName, profileImageSrc: doc.activity.actorPhotoUrl }
|
||||
] })));
|
||||
});
|
||||
return (React.createElement("div", { className: TrendingInTheSitesIFollow_module_scss_1.default.trendingInTheSitesIFollow },
|
||||
React.createElement("div", { className: office_ui_fabric_react_1.css('ms-font-xl', TrendingInTheSitesIFollow_module_scss_1.default.webPartTitle) }, this.props.title),
|
||||
loading,
|
||||
error,
|
||||
documents,
|
||||
React.createElement("div", { style: { clear: 'both' } })));
|
||||
};
|
||||
TrendingInTheSitesIFollow.prototype.loadDocuments = function (siteUrl, numberOfDocuments) {
|
||||
var _this = this;
|
||||
this.setState({
|
||||
loading: true,
|
||||
error: undefined,
|
||||
trendingDocuments: []
|
||||
});
|
||||
var trendingDocuments = [];
|
||||
this.getSitesIFollow(siteUrl)
|
||||
.then(function (sitesIFollow) {
|
||||
return _this.getTrendingDocuments(sitesIFollow, siteUrl, numberOfDocuments);
|
||||
})
|
||||
.then(function (trendingDocuments) {
|
||||
_this.setState({
|
||||
loading: false,
|
||||
error: undefined,
|
||||
trendingDocuments: trendingDocuments
|
||||
});
|
||||
}, function (error) {
|
||||
_this.setState({
|
||||
loading: false,
|
||||
error: error,
|
||||
trendingDocuments: []
|
||||
});
|
||||
});
|
||||
return;
|
||||
};
|
||||
TrendingInTheSitesIFollow.prototype.getSitesIFollow = function (siteUrl) {
|
||||
var _this = this;
|
||||
return new Promise(function (resolve, reject) {
|
||||
_this.props.httpClient.get(siteUrl + "/_api/social.following/my/followed(types=4)", sp_http_1.SPHttpClient.configurations.v1, {
|
||||
headers: {
|
||||
'Accept': 'application/json;odata=nometadata',
|
||||
'odata-version': ''
|
||||
}
|
||||
})
|
||||
.then(function (response) {
|
||||
return response.json();
|
||||
})
|
||||
.then(function (sitesIFollowInfo) {
|
||||
var sitesIFollow = [];
|
||||
for (var i = 0; i < sitesIFollowInfo.value.length; i++) {
|
||||
sitesIFollow.push(sitesIFollowInfo.value[i].Uri);
|
||||
}
|
||||
resolve(sitesIFollow);
|
||||
}, function (error) {
|
||||
reject(error);
|
||||
});
|
||||
});
|
||||
};
|
||||
TrendingInTheSitesIFollow.prototype.getTrendingDocuments = function (sitesIFollow, siteUrl, numberOfDocuments) {
|
||||
var _this = this;
|
||||
return new Promise(function (resolve, reject) {
|
||||
if (sitesIFollow.length === 0) {
|
||||
return resolve([]);
|
||||
}
|
||||
var query = '(';
|
||||
for (var i = 0; i < sitesIFollow.length; i++) {
|
||||
if (query.length > 1) {
|
||||
query += ' OR ';
|
||||
}
|
||||
query += "Path:\"" + sitesIFollow[i] + "\"";
|
||||
}
|
||||
query += ') AND (IsDocument:1)';
|
||||
var postData = JSON.stringify({
|
||||
'request': {
|
||||
'__metadata': {
|
||||
'type': 'Microsoft.Office.Server.Search.REST.SearchRequest'
|
||||
},
|
||||
'Querytext': query,
|
||||
'SelectProperties': {
|
||||
'results': ['Author', 'AuthorOwsUser', 'DocId', 'DocumentPreviewMetadata', 'Edges', 'EditorOwsUser', 'FileExtension', 'FileType', 'HitHighlightedProperties', 'HitHighlightedSummary', 'LastModifiedTime', 'LikeCountLifetime', 'ListID', 'ListItemID', 'OriginalPath', 'Path', 'Rank', 'SPWebUrl', 'SecondaryFileExtension', 'ServerRedirectedURL', 'SiteTitle', 'Title', 'ViewCountLifetime', 'siteID', 'uniqueID', 'webID']
|
||||
},
|
||||
'ClientType': 'TrendingInTheSitesIFollow',
|
||||
'BypassResultTypes': 'true',
|
||||
'RowLimit': numberOfDocuments,
|
||||
'StartRow': '0',
|
||||
'RankingModelId': '0c77ded8-c3ef-466d-929d-905670ea1d72',
|
||||
'Properties': {
|
||||
'results': [{
|
||||
'Name': 'IncludeExternalContent',
|
||||
'Value': {
|
||||
'BoolVal': 'True',
|
||||
'QueryPropertyValueTypeIndex': 3
|
||||
}
|
||||
}, {
|
||||
'Name': 'GraphQuery',
|
||||
'Value': {
|
||||
'StrVal': 'actor(ME,action:1021)',
|
||||
'QueryPropertyValueTypeIndex': 1
|
||||
}
|
||||
}]
|
||||
}
|
||||
}
|
||||
});
|
||||
_this.props.httpClient.post(siteUrl + "/_api/search/postquery", sp_http_1.SPHttpClient.configurations.v1, {
|
||||
headers: {
|
||||
'Accept': 'application/json;odata=nometadata',
|
||||
'Content-type': 'application/json;odata=verbose',
|
||||
'odata-version': ''
|
||||
},
|
||||
body: postData
|
||||
})
|
||||
.then(function (response) {
|
||||
return response.json();
|
||||
})
|
||||
.then(function (response) {
|
||||
if (!response ||
|
||||
!response.PrimaryQueryResult ||
|
||||
!response.PrimaryQueryResult.RelevantResults ||
|
||||
response.PrimaryQueryResult.RelevantResults.RowCount === 0) {
|
||||
resolve([]);
|
||||
return;
|
||||
}
|
||||
var trendingDocuments = [];
|
||||
for (var i = 0; i < response.PrimaryQueryResult.RelevantResults.Table.Rows.length; i++) {
|
||||
var row = response.PrimaryQueryResult.RelevantResults.Table.Rows[i];
|
||||
var cells = row.Cells;
|
||||
var editorInfo = SearchUtils_1.SearchUtils.getValueFromResults('EditorOwsUser', cells).split('|');
|
||||
var modifiedDate = new Date(SearchUtils_1.SearchUtils.getValueFromResults('LastModifiedTime', cells).replace('.0000000', ''));
|
||||
var dateString = (modifiedDate.getMonth() + 1) + '/' + modifiedDate.getDate() + '/' + modifiedDate.getFullYear();
|
||||
trendingDocuments.push({
|
||||
id: SearchUtils_1.SearchUtils.getValueFromResults('DocId', cells),
|
||||
url: SearchUtils_1.SearchUtils.getValueFromResults('ServerRedirectedURL', cells),
|
||||
webUrl: SearchUtils_1.SearchUtils.getValueFromResults('SPWebUrl', cells),
|
||||
webTitle: SearchUtils_1.SearchUtils.getValueFromResults('SiteTitle', cells),
|
||||
title: SearchUtils_1.SearchUtils.getValueFromResults('Title', cells),
|
||||
previewImageUrl: SearchUtils_1.SearchUtils.getPreviewImageUrl(cells, siteUrl),
|
||||
extension: SearchUtils_1.SearchUtils.getValueFromResults('FileType', cells),
|
||||
activity: {
|
||||
actorId: -1,
|
||||
actorName: Utils_1.Utils.trim(editorInfo[1]),
|
||||
actorPhotoUrl: Utils_1.Utils.getUserPhotoUrl(Utils_1.Utils.trim(editorInfo[0]), siteUrl),
|
||||
date: dateString,
|
||||
name: 'Modified'
|
||||
}
|
||||
});
|
||||
}
|
||||
resolve(trendingDocuments);
|
||||
}, function (error) {
|
||||
reject(error);
|
||||
});
|
||||
});
|
||||
};
|
||||
return TrendingInTheSitesIFollow;
|
||||
}(React.Component));
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.default = TrendingInTheSitesIFollow;
|
||||
|
||||
//# sourceMappingURL=TrendingInTheSitesIFollow.js.map
|
File diff suppressed because one or more lines are too long
8
samples/react-officegraph/lib/webparts/trendingInTheSitesIFollow/loc/en-us.js
vendored
Normal file
8
samples/react-officegraph/lib/webparts/trendingInTheSitesIFollow/loc/en-us.js
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
define([], function() {
|
||||
return {
|
||||
"PropertyPaneDescription": "Manage the settings of this Web Part",
|
||||
"ViewGroupName": "View",
|
||||
"NumberOfDocumentsFieldLabel": "Number of documents to show",
|
||||
"TitleFieldLabel": "Web Part Title (displayed in the body)"
|
||||
}
|
||||
});
|
@ -0,0 +1,10 @@
|
||||
/// <reference types="mocha" />
|
||||
"use strict";
|
||||
var chai_1 = require("chai");
|
||||
describe('TrendingInTheSitesIFollowWebPart', function () {
|
||||
it('should do something', function () {
|
||||
chai_1.assert.ok(true);
|
||||
});
|
||||
});
|
||||
|
||||
//# sourceMappingURL=TrendingInTheSitesIFollow.test.js.map
|
@ -0,0 +1 @@
|
||||
{"version":3,"sources":["webparts/trendingInTheSitesIFollow/tests/TrendingInTheSitesIFollow.test.ts"],"names":[],"mappings":"AAAA,+BAA+B;;AAE/B,6BAA8B;AAE9B,QAAQ,CAAC,kCAAkC,EAAE;IAC3C,EAAE,CAAC,qBAAqB,EAAE;QACxB,aAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","file":"webparts/trendingInTheSitesIFollow/tests/TrendingInTheSitesIFollow.test.js","sourcesContent":["/// <reference types=\"mocha\" />\r\n\r\nimport { assert } from 'chai';\r\n\r\ndescribe('TrendingInTheSitesIFollowWebPart', () => {\r\n it('should do something', () => {\r\n assert.ok(true);\r\n });\r\n});\r\n"],"sourceRoot":"..\\..\\..\\..\\src"}
|
@ -0,0 +1,3 @@
|
||||
export interface ITrendingInThisSiteWebPartProps {
|
||||
numberOfDocuments: number;
|
||||
}
|
3
samples/react-officegraph/lib/webparts/trendingInThisSite/ITrendingInThisSiteWebPartProps.js
vendored
Normal file
3
samples/react-officegraph/lib/webparts/trendingInThisSite/ITrendingInThisSiteWebPartProps.js
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
"use strict";
|
||||
|
||||
//# sourceMappingURL=ITrendingInThisSiteWebPartProps.js.map
|
@ -0,0 +1 @@
|
||||
{"version":3,"sources":[],"names":[],"mappings":"","file":"webparts/trendingInThisSite/ITrendingInThisSiteWebPartProps.js","sourcesContent":[],"sourceRoot":"..\\..\\..\\src"}
|
@ -0,0 +1 @@
|
||||
.trendingInThisSite_2a33a9c5 .container_2a33a9c5{max-width:700px;margin:0 auto;box-shadow:0 2px 4px 0 rgba(0,0,0,.2),0 25px 50px 0 rgba(0,0,0,.1)}.trendingInThisSite_2a33a9c5 .row_2a33a9c5{padding:20px}.trendingInThisSite_2a33a9c5 .listItem_2a33a9c5{max-width:715px;margin:5px auto 5px auto;box-shadow:0 0 4px 0 rgba(0,0,0,.2),0 25px 50px 0 rgba(0,0,0,.1)}.trendingInThisSite_2a33a9c5 .button_2a33a9c5{text-decoration:none}.trendingInThisSite_2a33a9c5 [class*='ms-DocumentCard ']{float:left;margin:.5em}.trendingInThisSite_2a33a9c5 [class=ms-Spinner]{width:7em;margin:0 auto}
|
@ -0,0 +1,8 @@
|
||||
declare const styles: {
|
||||
trendingInThisSite: string;
|
||||
container: string;
|
||||
row: string;
|
||||
listItem: string;
|
||||
button: string;
|
||||
};
|
||||
export default styles;
|
@ -0,0 +1,15 @@
|
||||
"use strict";
|
||||
/* tslint:disable */
|
||||
require('./TrendingInThisSite.module.css');
|
||||
var styles = {
|
||||
trendingInThisSite: 'trendingInThisSite_2a33a9c5',
|
||||
container: 'container_2a33a9c5',
|
||||
row: 'row_2a33a9c5',
|
||||
listItem: 'listItem_2a33a9c5',
|
||||
button: 'button_2a33a9c5',
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.default = styles;
|
||||
/* tslint:enable */
|
||||
|
||||
//# sourceMappingURL=TrendingInThisSite.module.scss.js.map
|
@ -0,0 +1 @@
|
||||
{"version":3,"sources":["webparts/trendingInThisSite/TrendingInThisSite.module.scss.ts"],"names":[],"mappings":";AAAA,oBAAoB;AACpB,OAAO,CAAC,iCAAiC,CAAC,CAAC;AAC3C,IAAM,MAAM,GAAG;IACb,kBAAkB,EAAE,6BAA6B;IACjD,SAAS,EAAE,oBAAoB;IAC/B,GAAG,EAAE,cAAc;IACnB,QAAQ,EAAE,mBAAmB;IAC7B,MAAM,EAAE,iBAAiB;CAC1B,CAAC;;AAEF,kBAAe,MAAM,CAAC;AACtB,mBAAmB","file":"webparts/trendingInThisSite/TrendingInThisSite.module.scss.js","sourcesContent":["/* tslint:disable */\r\nrequire('./TrendingInThisSite.module.css');\r\nconst styles = {\r\n trendingInThisSite: 'trendingInThisSite_2a33a9c5',\r\n container: 'container_2a33a9c5',\r\n row: 'row_2a33a9c5',\r\n listItem: 'listItem_2a33a9c5',\r\n button: 'button_2a33a9c5',\r\n};\r\n\r\nexport default styles;\r\n/* tslint:enable */"],"sourceRoot":"..\\..\\..\\src"}
|
9
samples/react-officegraph/lib/webparts/trendingInThisSite/TrendingInThisSiteWebPart.d.ts
vendored
Normal file
9
samples/react-officegraph/lib/webparts/trendingInThisSite/TrendingInThisSiteWebPart.d.ts
vendored
Normal file
@ -0,0 +1,9 @@
|
||||
import { Version } from '@microsoft/sp-core-library';
|
||||
import { BaseClientSideWebPart, IPropertyPaneConfiguration, IWebPartContext } from '@microsoft/sp-webpart-base';
|
||||
import { ITrendingInThisSiteWebPartProps } from './ITrendingInThisSiteWebPartProps';
|
||||
export default class TrendingInThisSiteWebPart extends BaseClientSideWebPart<ITrendingInThisSiteWebPartProps> {
|
||||
constructor(context: IWebPartContext);
|
||||
render(): void;
|
||||
protected readonly dataVersion: Version;
|
||||
protected getPropertyPaneConfiguration(): IPropertyPaneConfiguration;
|
||||
}
|
61
samples/react-officegraph/lib/webparts/trendingInThisSite/TrendingInThisSiteWebPart.js
vendored
Normal file
61
samples/react-officegraph/lib/webparts/trendingInThisSite/TrendingInThisSiteWebPart.js
vendored
Normal file
@ -0,0 +1,61 @@
|
||||
"use strict";
|
||||
var __extends = (this && this.__extends) || function (d, b) {
|
||||
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
|
||||
function __() { this.constructor = d; }
|
||||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||||
};
|
||||
var React = require("react");
|
||||
var ReactDom = require("react-dom");
|
||||
var sp_core_library_1 = require("@microsoft/sp-core-library");
|
||||
var sp_webpart_base_1 = require("@microsoft/sp-webpart-base");
|
||||
var strings = require("trendingInThisSiteStrings");
|
||||
var TrendingInThisSite_1 = require("./components/TrendingInThisSite");
|
||||
var TrendingInThisSiteWebPart = (function (_super) {
|
||||
__extends(TrendingInThisSiteWebPart, _super);
|
||||
function TrendingInThisSiteWebPart(context) {
|
||||
return _super.call(this) || this;
|
||||
}
|
||||
TrendingInThisSiteWebPart.prototype.render = function () {
|
||||
var element = React.createElement(TrendingInThisSite_1.default, {
|
||||
numberOfDocuments: this.properties.numberOfDocuments,
|
||||
siteUrl: this.context.pageContext.web.absoluteUrl
|
||||
});
|
||||
ReactDom.render(element, this.domElement);
|
||||
};
|
||||
Object.defineProperty(TrendingInThisSiteWebPart.prototype, "dataVersion", {
|
||||
get: function () {
|
||||
return sp_core_library_1.Version.parse('1.0');
|
||||
},
|
||||
enumerable: true,
|
||||
configurable: true
|
||||
});
|
||||
TrendingInThisSiteWebPart.prototype.getPropertyPaneConfiguration = function () {
|
||||
return {
|
||||
pages: [
|
||||
{
|
||||
header: {
|
||||
description: strings.PropertyPaneDescription
|
||||
},
|
||||
groups: [
|
||||
{
|
||||
groupName: strings.ViewGroupName,
|
||||
groupFields: [
|
||||
sp_webpart_base_1.PropertyPaneSlider('numberOfDocuments', {
|
||||
label: strings.NumberOfDocumentsFieldLabel,
|
||||
min: 1,
|
||||
max: 10,
|
||||
step: 1
|
||||
})
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
};
|
||||
};
|
||||
return TrendingInThisSiteWebPart;
|
||||
}(sp_webpart_base_1.BaseClientSideWebPart));
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.default = TrendingInThisSiteWebPart;
|
||||
|
||||
//# sourceMappingURL=TrendingInThisSiteWebPart.js.map
|
@ -0,0 +1 @@
|
||||
{"version":3,"sources":["webparts/trendingInThisSite/TrendingInThisSiteWebPart.ts"],"names":[],"mappings":";;;;;;AAAA,6BAA+B;AAC/B,oCAAsC;AACtC,8DAAqD;AACrD,8DAMoC;AAIpC,mDAAqD;AAErD,sEAA+F;AAE/F;IAAuD,6CAAsD;IAE3G,mCAAmB,OAAwB;eACzC,iBAAO;IACT,CAAC;IAEM,0CAAM,GAAb;QACE,IAAM,OAAO,GAAiD,KAAK,CAAC,aAAa,CAAC,4BAAkB,EAAE;YACpG,iBAAiB,EAAE,IAAI,CAAC,UAAU,CAAC,iBAAiB;YACpD,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW;SAClD,CAAC,CAAC;QAEH,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IAC5C,CAAC;IAED,sBAAc,kDAAW;aAAzB;YACE,MAAM,CAAC,yBAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;;;OAAA;IAES,gEAA4B,GAAtC;QACE,MAAM,CAAC;YACL,KAAK,EAAE;gBACL;oBACE,MAAM,EAAE;wBACN,WAAW,EAAE,OAAO,CAAC,uBAAuB;qBAC7C;oBACD,MAAM,EAAE;wBACN;4BACE,SAAS,EAAE,OAAO,CAAC,aAAa;4BAChC,WAAW,EAAE;gCACX,oCAAkB,CAAC,mBAAmB,EAAE;oCACtC,KAAK,EAAE,OAAO,CAAC,2BAA2B;oCAC1C,GAAG,EAAE,CAAC;oCACN,GAAG,EAAE,EAAE;oCACP,IAAI,EAAE,CAAC;iCACR,CAAC;6BACH;yBACF;qBACF;iBACF;aACF;SACF,CAAC;IACJ,CAAC;IACH,gCAAC;AAAD,CA3CA,AA2CC,CA3CsD,uCAAqB,GA2C3E","file":"webparts/trendingInThisSite/TrendingInThisSiteWebPart.js","sourcesContent":["import * as React from 'react';\r\nimport * as ReactDom from 'react-dom';\r\nimport { Version } from '@microsoft/sp-core-library';\r\nimport {\r\n BaseClientSideWebPart,\r\n IPropertyPaneConfiguration,\r\n PropertyPaneTextField,\r\n IWebPartContext,\r\n PropertyPaneSlider\r\n} from '@microsoft/sp-webpart-base';\r\nimport { escape } from '@microsoft/sp-lodash-subset';\r\n\r\nimport styles from './TrendingInThisSite.module.scss';\r\nimport * as strings from 'trendingInThisSiteStrings';\r\nimport { ITrendingInThisSiteWebPartProps } from './ITrendingInThisSiteWebPartProps';\r\nimport TrendingInThisSite, { ITrendingInThisSiteProps } from './components/TrendingInThisSite';\r\n\r\nexport default class TrendingInThisSiteWebPart extends BaseClientSideWebPart<ITrendingInThisSiteWebPartProps> {\r\n\r\n public constructor(context: IWebPartContext) {\r\n super();\r\n }\r\n\r\n public render(): void {\r\n const element: React.ReactElement<ITrendingInThisSiteProps> = React.createElement(TrendingInThisSite, {\r\n numberOfDocuments: this.properties.numberOfDocuments,\r\n siteUrl: this.context.pageContext.web.absoluteUrl\r\n });\r\n\r\n ReactDom.render(element, this.domElement);\r\n }\r\n\r\n protected get dataVersion(): Version {\r\n return Version.parse('1.0');\r\n }\r\n\r\n protected getPropertyPaneConfiguration(): IPropertyPaneConfiguration {\r\n return {\r\n pages: [\r\n {\r\n header: {\r\n description: strings.PropertyPaneDescription\r\n },\r\n groups: [\r\n {\r\n groupName: strings.ViewGroupName,\r\n groupFields: [\r\n PropertyPaneSlider('numberOfDocuments', {\r\n label: strings.NumberOfDocumentsFieldLabel,\r\n min: 1,\r\n max: 10,\r\n step: 1\r\n })\r\n ]\r\n }\r\n ]\r\n }\r\n ]\r\n };\r\n }\r\n}\r\n"],"sourceRoot":"..\\..\\..\\src"}
|
@ -0,0 +1,20 @@
|
||||
{
|
||||
"$schema": "../../../node_modules/@microsoft/sp-module-interfaces/lib/manifestSchemas/jsonSchemas/clientSideComponentManifestSchema.json",
|
||||
|
||||
"id": "65f773e5-a708-4b28-ac1f-0fb74e9f85da",
|
||||
"alias": "TrendingInThisSiteWebPart",
|
||||
"componentType": "WebPart",
|
||||
"version": "0.0.1",
|
||||
"manifestVersion": 2,
|
||||
|
||||
"preconfiguredEntries": [{
|
||||
"groupId": "65f773e5-a708-4b28-ac1f-0fb74e9f85da",
|
||||
"group": { "default": "Content rollup" },
|
||||
"title": { "default": "Trending in this site" },
|
||||
"description": { "default": "Shows documents trending in this site" },
|
||||
"officeFabricIconFontName": "Page",
|
||||
"properties": {
|
||||
"numberOfDocuments": 5
|
||||
}
|
||||
}]
|
||||
}
|
37
samples/react-officegraph/lib/webparts/trendingInThisSite/components/TrendingInThisSite.d.ts
vendored
Normal file
37
samples/react-officegraph/lib/webparts/trendingInThisSite/components/TrendingInThisSite.d.ts
vendored
Normal file
@ -0,0 +1,37 @@
|
||||
import * as React from 'react';
|
||||
import { ITrendingInThisSiteWebPartProps } from '../ITrendingInThisSiteWebPartProps';
|
||||
export interface ITrendingInThisSiteProps extends ITrendingInThisSiteWebPartProps {
|
||||
siteUrl: string;
|
||||
}
|
||||
export interface ITrendingInThisSiteState {
|
||||
trendingDocuments: ITrendingDocument[];
|
||||
loading: boolean;
|
||||
error: string;
|
||||
}
|
||||
export interface ITrendingDocument {
|
||||
id: string;
|
||||
title: string;
|
||||
url: string;
|
||||
previewImageUrl: string;
|
||||
lastModifiedByPhotoUrl: string;
|
||||
lastModifiedByName: string;
|
||||
lastModifiedTime: string;
|
||||
extension: string;
|
||||
}
|
||||
export default class TrendingInThisSite extends React.Component<ITrendingInThisSiteProps, ITrendingInThisSiteState> {
|
||||
constructor(props: ITrendingInThisSiteProps, state: ITrendingInThisSiteState);
|
||||
componentDidMount(): void;
|
||||
componentDidUpdate(prevProps: ITrendingInThisSiteProps, prevState: ITrendingInThisSiteState, prevContext: any): void;
|
||||
render(): JSX.Element;
|
||||
private getValueFromResults(key, results);
|
||||
private trim(s);
|
||||
private getPreviewImageUrl(result, siteUrl);
|
||||
private getUserPhotoUrl(userEmail, siteUrl);
|
||||
private request<T>(url, method?, headers?, data?);
|
||||
private getSiteMembers(siteUrl);
|
||||
private getActors(siteMembers, requestDigest, siteUrl);
|
||||
private getTrendingContent(siteUrl, actors, requestDigest);
|
||||
private loadTrendingContent(siteUrl, numberOfDocuments);
|
||||
private handleError(err);
|
||||
private getRequestDigest(siteUrl);
|
||||
}
|
360
samples/react-officegraph/lib/webparts/trendingInThisSite/components/TrendingInThisSite.js
vendored
Normal file
360
samples/react-officegraph/lib/webparts/trendingInThisSite/components/TrendingInThisSite.js
vendored
Normal file
@ -0,0 +1,360 @@
|
||||
"use strict";
|
||||
var __extends = (this && this.__extends) || function (d, b) {
|
||||
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
|
||||
function __() { this.constructor = d; }
|
||||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||||
};
|
||||
var React = require("react");
|
||||
var office_ui_fabric_react_1 = require("office-ui-fabric-react");
|
||||
var TrendingInThisSite_module_scss_1 = require("../TrendingInThisSite.module.scss");
|
||||
var TrendingInThisSite = (function (_super) {
|
||||
__extends(TrendingInThisSite, _super);
|
||||
function TrendingInThisSite(props, state) {
|
||||
var _this = _super.call(this, props) || this;
|
||||
_this.state = {
|
||||
trendingDocuments: [],
|
||||
loading: true,
|
||||
error: null
|
||||
};
|
||||
return _this;
|
||||
}
|
||||
TrendingInThisSite.prototype.componentDidMount = function () {
|
||||
this.loadTrendingContent(this.props.siteUrl, this.props.numberOfDocuments);
|
||||
};
|
||||
TrendingInThisSite.prototype.componentDidUpdate = function (prevProps, prevState, prevContext) {
|
||||
if (this.props.numberOfDocuments !== prevProps.numberOfDocuments ||
|
||||
this.props.siteUrl !== prevProps.siteUrl && (this.props.numberOfDocuments && this.props.siteUrl)) {
|
||||
this.loadTrendingContent(this.props.siteUrl, this.props.numberOfDocuments);
|
||||
}
|
||||
};
|
||||
TrendingInThisSite.prototype.render = function () {
|
||||
var loading = this.state.loading ? React.createElement("div", { style: { margin: '0 auto' } },
|
||||
React.createElement(office_ui_fabric_react_1.Spinner, { label: 'Loading...' })) : React.createElement("div", null);
|
||||
var error = this.state.error ? React.createElement("div", null,
|
||||
React.createElement("strong", null, "Error:"),
|
||||
" ",
|
||||
this.state.error) : React.createElement("div", null);
|
||||
var documents = this.state.trendingDocuments.map(function (doc, i) {
|
||||
var iconUrl = "https://spoprod-a.akamaihd.net/files/odsp-next-prod_ship-2016-08-15_20160815.002/odsp-media/images/filetypes/32/" + doc.extension + ".png";
|
||||
return (React.createElement(office_ui_fabric_react_1.DocumentCard, { onClickHref: doc.url, key: doc.id },
|
||||
React.createElement(office_ui_fabric_react_1.DocumentCardPreview, { previewImages: [
|
||||
{
|
||||
previewImageSrc: doc.previewImageUrl,
|
||||
iconSrc: iconUrl,
|
||||
width: 318,
|
||||
height: 196,
|
||||
accentColor: '#ce4b1f'
|
||||
}
|
||||
] }),
|
||||
React.createElement(office_ui_fabric_react_1.DocumentCardTitle, { title: doc.title }),
|
||||
React.createElement(office_ui_fabric_react_1.DocumentCardActivity, { activity: 'Modified ' + doc.lastModifiedTime, people: [
|
||||
{ name: doc.lastModifiedByName, profileImageSrc: doc.lastModifiedByPhotoUrl }
|
||||
] })));
|
||||
});
|
||||
return (React.createElement("div", { className: TrendingInThisSite_module_scss_1.default.trendingInThisSite },
|
||||
loading,
|
||||
error,
|
||||
documents,
|
||||
React.createElement("div", { style: { clear: 'both' } })));
|
||||
};
|
||||
TrendingInThisSite.prototype.getValueFromResults = function (key, results) {
|
||||
var value = '';
|
||||
if (results != null && results.length > 0 && key != null) {
|
||||
for (var i = 0; i < results.length; i++) {
|
||||
var resultItem = results[i];
|
||||
if (resultItem.Key === key) {
|
||||
value = resultItem.Value;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return value;
|
||||
};
|
||||
TrendingInThisSite.prototype.trim = function (s) {
|
||||
if (s != null && s.length > 0) {
|
||||
return s.replace(/^\s+|\s+$/gm, '');
|
||||
}
|
||||
else {
|
||||
return s;
|
||||
}
|
||||
};
|
||||
TrendingInThisSite.prototype.getPreviewImageUrl = function (result, siteUrl) {
|
||||
var uniqueID = this.getValueFromResults('uniqueID', result);
|
||||
var siteId = this.getValueFromResults('siteID', result);
|
||||
var webId = this.getValueFromResults('webID', result);
|
||||
var docId = this.getValueFromResults('DocId', result);
|
||||
if (uniqueID !== null && siteId !== null && webId !== null && docId !== null) {
|
||||
return siteUrl + "/_layouts/15/getpreview.ashx?guidFile=" + uniqueID + "&guidSite=" + siteId + "&guidWeb=" + webId + "&docid=" + docId + "\n &metadatatoken=300x424x2&ClientType=CodenameOsloWeb&size=small";
|
||||
}
|
||||
else {
|
||||
return '';
|
||||
}
|
||||
};
|
||||
TrendingInThisSite.prototype.getUserPhotoUrl = function (userEmail, siteUrl) {
|
||||
return siteUrl + "/_layouts/15/userphoto.aspx?size=S&accountname=" + userEmail;
|
||||
};
|
||||
TrendingInThisSite.prototype.request = function (url, method, headers, data) {
|
||||
if (method === void 0) { method = 'GET'; }
|
||||
if (headers === void 0) { headers = null; }
|
||||
if (data === void 0) { data = null; }
|
||||
return new Promise(function (resolve, reject) {
|
||||
var xhr = new XMLHttpRequest();
|
||||
xhr.onreadystatechange = function () {
|
||||
if (this.readyState === 4) {
|
||||
if (this.status === 200) {
|
||||
resolve(this.response);
|
||||
}
|
||||
else if (this.status >= 400) {
|
||||
reject({
|
||||
message: this.response['odata.error'].message.value,
|
||||
statusText: this.statusText,
|
||||
status: this.status
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
xhr.open(method, url, true);
|
||||
if (headers === null) {
|
||||
xhr.setRequestHeader('Accept', 'application/json;odata=nometadata');
|
||||
}
|
||||
else {
|
||||
for (var header in headers) {
|
||||
if (headers.hasOwnProperty(header)) {
|
||||
xhr.setRequestHeader(header, headers[header]);
|
||||
}
|
||||
}
|
||||
}
|
||||
xhr.responseType = 'json';
|
||||
xhr.send(data);
|
||||
});
|
||||
};
|
||||
TrendingInThisSite.prototype.getSiteMembers = function (siteUrl) {
|
||||
var component = this;
|
||||
return new Promise(function (resolve, reject) {
|
||||
component.request(siteUrl + "/_api/Web/AssociatedMemberGroup/Users?$select=Email").then(function (members) {
|
||||
var siteMembers = [];
|
||||
for (var i = 0; i < members.value.length; i++) {
|
||||
siteMembers.push(members.value[i].Email);
|
||||
}
|
||||
resolve(siteMembers);
|
||||
}, function (error) {
|
||||
reject(error);
|
||||
});
|
||||
});
|
||||
};
|
||||
TrendingInThisSite.prototype.getActors = function (siteMembers, requestDigest, siteUrl) {
|
||||
var component = this;
|
||||
var query = '';
|
||||
siteMembers.forEach(function (member) {
|
||||
if (query.length > 0) {
|
||||
query += ' OR ';
|
||||
}
|
||||
query += "UserName:" + member;
|
||||
});
|
||||
var postData = JSON.stringify({
|
||||
'request': {
|
||||
'__metadata': {
|
||||
'type': 'Microsoft.Office.Server.Search.REST.SearchRequest'
|
||||
},
|
||||
'Querytext': query,
|
||||
'SelectProperties': {
|
||||
'results': ['DocId', 'WorkEmail']
|
||||
},
|
||||
'RowLimit': '100',
|
||||
'StartRow': '0',
|
||||
'SourceId': 'b09a7990-05ea-4af9-81ef-edfab16c4e31'
|
||||
}
|
||||
});
|
||||
return new Promise(function (resolve, reject) {
|
||||
component.request(siteUrl + "/_api/search/postquery", 'POST', {
|
||||
'Accept': 'application/json;odata=nometadata',
|
||||
'Content-Type': 'application/json;odata=verbose',
|
||||
'X-RequestDigest': requestDigest
|
||||
}, postData).then(function (data) {
|
||||
if (data && data.PrimaryQueryResult && data.PrimaryQueryResult.RelevantResults) {
|
||||
var actors_1 = [];
|
||||
data.PrimaryQueryResult.RelevantResults.Table.Rows.forEach(function (row) {
|
||||
var actorId = component.getValueFromResults('DocId', row.Cells);
|
||||
if (actorId != null && actorId.length > 0) {
|
||||
actors_1.push(actorId);
|
||||
}
|
||||
});
|
||||
resolve(actors_1);
|
||||
}
|
||||
else {
|
||||
reject();
|
||||
}
|
||||
}, function (error) {
|
||||
reject(error);
|
||||
});
|
||||
});
|
||||
};
|
||||
TrendingInThisSite.prototype.getTrendingContent = function (siteUrl, actors, requestDigest) {
|
||||
var component = this;
|
||||
var gq = '';
|
||||
if (actors.length > 1) {
|
||||
actors.forEach(function (actor) {
|
||||
if (gq.length > 0) {
|
||||
gq += ',';
|
||||
}
|
||||
gq += "actor(" + actor + ",action:1020)";
|
||||
});
|
||||
gq += ',and(actor(me,action:1021),actor(me,or(action:1021,action:1036,action:1037,action:1039)))';
|
||||
gq = "or(" + gq + ")";
|
||||
}
|
||||
else {
|
||||
gq = "or(actor(" + actors[0] + ",action:1020),and(actor(me,action:1021),actor(me,or(action:1021,action:1036,action:1037,action:1039))))";
|
||||
}
|
||||
siteUrl = siteUrl.replace(':443/', '/');
|
||||
var postData = JSON.stringify({
|
||||
'request': {
|
||||
'__metadata': {
|
||||
'type': 'Microsoft.Office.Server.Search.REST.SearchRequest'
|
||||
},
|
||||
'Querytext': 'path:' + siteUrl,
|
||||
'SelectProperties': {
|
||||
'results': ['Author', 'AuthorOwsUser', 'DocId', 'DocumentPreviewMetadata', 'Edges', 'EditorOwsUser', 'FileExtension', 'FileType', 'HitHighlightedProperties', 'HitHighlightedSummary', 'LastModifiedTime', 'LikeCountLifetime', 'ListID', 'ListItemID', 'OriginalPath', 'Path', 'Rank', 'SPWebUrl', 'SecondaryFileExtension', 'ServerRedirectedURL', 'SiteTitle', 'Title', 'ViewCountLifetime', 'siteID', 'uniqueID', 'webID']
|
||||
},
|
||||
'ClientType': 'TrendingInThisSite',
|
||||
'BypassResultTypes': 'true',
|
||||
'RowLimit': component.props.numberOfDocuments.toString(),
|
||||
'StartRow': '0',
|
||||
'RankingModelId': '0c77ded8-c3ef-466d-929d-905670ea1d72',
|
||||
'Properties': {
|
||||
'results': [{
|
||||
'Name': 'IncludeExternalContent',
|
||||
'Value': {
|
||||
'BoolVal': 'True',
|
||||
'QueryPropertyValueTypeIndex': 3
|
||||
}
|
||||
}, {
|
||||
'Name': 'GraphQuery',
|
||||
'Value': {
|
||||
'StrVal': gq,
|
||||
'QueryPropertyValueTypeIndex': 1
|
||||
}
|
||||
}, {
|
||||
'Name': 'GraphRankingModel',
|
||||
'Value': {
|
||||
'StrVal': '{"features":[{"function":"EdgeWeight"}],"featureCombination":"sum","actorCombination":"sum"}',
|
||||
'QueryPropertyValueTypeIndex': 1
|
||||
}
|
||||
}]
|
||||
}
|
||||
}
|
||||
});
|
||||
return new Promise(function (resolve, reject) {
|
||||
component.request(siteUrl + "/_api/search/postquery", 'POST', {
|
||||
'Accept': 'application/json;odata=nometadata',
|
||||
'Content-Type': 'application/json;odata=verbose',
|
||||
'X-RequestDigest': requestDigest
|
||||
}, postData).then(function (data) {
|
||||
var trendingContent = [];
|
||||
if (data.PrimaryQueryResult && data.PrimaryQueryResult.RelevantResults &&
|
||||
data.PrimaryQueryResult.RelevantResults.Table.Rows.length > 0) {
|
||||
data.PrimaryQueryResult.RelevantResults.Table.Rows.forEach(function (row) {
|
||||
var cells = row.Cells;
|
||||
var editorInfo = component.getValueFromResults('EditorOwsUser', cells).split('|');
|
||||
var modifiedDate = new Date(component.getValueFromResults('LastModifiedTime', cells).replace('.0000000', ''));
|
||||
var dateString = (modifiedDate.getMonth() + 1) + '/' + modifiedDate.getDate() + '/' + modifiedDate.getFullYear();
|
||||
trendingContent.push({
|
||||
id: component.getValueFromResults('DocId', cells),
|
||||
url: component.getValueFromResults('ServerRedirectedURL', cells),
|
||||
title: component.getValueFromResults('Title', cells),
|
||||
previewImageUrl: component.getPreviewImageUrl(cells, siteUrl),
|
||||
lastModifiedTime: dateString,
|
||||
lastModifiedByName: component.trim(editorInfo[1]),
|
||||
lastModifiedByPhotoUrl: component.getUserPhotoUrl(component.trim(editorInfo[0]), siteUrl),
|
||||
extension: component.getValueFromResults('FileType', cells)
|
||||
});
|
||||
});
|
||||
}
|
||||
resolve(trendingContent);
|
||||
}, function (error) {
|
||||
reject(error);
|
||||
});
|
||||
});
|
||||
};
|
||||
TrendingInThisSite.prototype.loadTrendingContent = function (siteUrl, numberOfDocuments) {
|
||||
var component = this;
|
||||
var requestDigest = null;
|
||||
component.getRequestDigest(siteUrl)
|
||||
.then(function (digest) {
|
||||
requestDigest = digest;
|
||||
}, function (err) {
|
||||
component.handleError(err);
|
||||
})
|
||||
.then(function () {
|
||||
return component.getSiteMembers(siteUrl);
|
||||
}, function (err) {
|
||||
component.handleError(err);
|
||||
})
|
||||
.then(function (siteMembers) {
|
||||
return component.getActors(siteMembers, requestDigest, siteUrl);
|
||||
}, function (err) {
|
||||
component.handleError(err);
|
||||
})
|
||||
.then(function (actors) {
|
||||
return component.getTrendingContent(siteUrl, actors, requestDigest);
|
||||
}, function (err) {
|
||||
component.handleError(err);
|
||||
})
|
||||
.then(function (trendingDocuments) {
|
||||
component.setState(function (previousState, curProps) {
|
||||
previousState.trendingDocuments.length = 0;
|
||||
return previousState;
|
||||
});
|
||||
trendingDocuments.forEach(function (result) {
|
||||
component.setState(function (previousState, curProps) {
|
||||
previousState.trendingDocuments.push(result);
|
||||
return previousState;
|
||||
});
|
||||
});
|
||||
component.setState(function (previousState, curProps) {
|
||||
previousState.loading = false;
|
||||
return previousState;
|
||||
});
|
||||
}, function (err) {
|
||||
component.handleError(err);
|
||||
});
|
||||
};
|
||||
TrendingInThisSite.prototype.handleError = function (err) {
|
||||
if (err.responseJSON && err.responseJSON.error) {
|
||||
this.setState(function (previousState, curProps) {
|
||||
previousState.error = "The following error has occured while running the query: " + err.responseJSON.error.message.value;
|
||||
return previousState;
|
||||
});
|
||||
}
|
||||
else if (err.responseJSON && err.responseJSON["odata.error"]) {
|
||||
this.setState(function (previousState, curProps) {
|
||||
previousState.error = "The following error has occured while running the query: " + err.responseJSON["odata.error"].message.value;
|
||||
return previousState;
|
||||
});
|
||||
}
|
||||
else {
|
||||
this.setState(function (previousState, curProps) {
|
||||
previousState.error = "An unexpected error occured while running the query";
|
||||
return previousState;
|
||||
});
|
||||
}
|
||||
this.setState(function (previousState, curProps) {
|
||||
previousState.loading = false;
|
||||
return previousState;
|
||||
});
|
||||
};
|
||||
TrendingInThisSite.prototype.getRequestDigest = function (siteUrl) {
|
||||
var component = this;
|
||||
return new Promise(function (resolve, reject) {
|
||||
component.request(siteUrl + "/_api/contextinfo", 'POST').then(function (data) {
|
||||
resolve(data.FormDigestValue);
|
||||
}, function (error) {
|
||||
reject(error);
|
||||
});
|
||||
});
|
||||
};
|
||||
return TrendingInThisSite;
|
||||
}(React.Component));
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.default = TrendingInThisSite;
|
||||
|
||||
//# sourceMappingURL=TrendingInThisSite.js.map
|
File diff suppressed because one or more lines are too long
7
samples/react-officegraph/lib/webparts/trendingInThisSite/loc/en-us.js
vendored
Normal file
7
samples/react-officegraph/lib/webparts/trendingInThisSite/loc/en-us.js
vendored
Normal file
@ -0,0 +1,7 @@
|
||||
define([], function() {
|
||||
return {
|
||||
"PropertyPaneDescription": "Manage the settings of this Web Part",
|
||||
"ViewGroupName": "View",
|
||||
"NumberOfDocumentsFieldLabel": "Number of documents to show"
|
||||
}
|
||||
});
|
@ -0,0 +1,10 @@
|
||||
/// <reference types="mocha" />
|
||||
"use strict";
|
||||
var chai_1 = require("chai");
|
||||
describe('TrendingInThisSiteWebPart', function () {
|
||||
it('should do something', function () {
|
||||
chai_1.assert.ok(true);
|
||||
});
|
||||
});
|
||||
|
||||
//# sourceMappingURL=TrendingInThisSite.test.js.map
|
@ -0,0 +1 @@
|
||||
{"version":3,"sources":["webparts/trendingInThisSite/tests/TrendingInThisSite.test.ts"],"names":[],"mappings":"AAAA,+BAA+B;;AAE/B,6BAA8B;AAE9B,QAAQ,CAAC,2BAA2B,EAAE;IACpC,EAAE,CAAC,qBAAqB,EAAE;QACxB,aAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","file":"webparts/trendingInThisSite/tests/TrendingInThisSite.test.js","sourcesContent":["/// <reference types=\"mocha\" />\r\n\r\nimport { assert } from 'chai';\r\n\r\ndescribe('TrendingInThisSiteWebPart', () => {\r\n it('should do something', () => {\r\n assert.ok(true);\r\n });\r\n});\r\n"],"sourceRoot":"..\\..\\..\\..\\src"}
|
4
samples/react-officegraph/lib/webparts/workingWith/IWorkingWithWebPartProps.d.ts
vendored
Normal file
4
samples/react-officegraph/lib/webparts/workingWith/IWorkingWithWebPartProps.d.ts
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
export interface IWorkingWithWebPartProps {
|
||||
numberOfPeople: number;
|
||||
title: string;
|
||||
}
|
3
samples/react-officegraph/lib/webparts/workingWith/IWorkingWithWebPartProps.js
vendored
Normal file
3
samples/react-officegraph/lib/webparts/workingWith/IWorkingWithWebPartProps.js
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
"use strict";
|
||||
|
||||
//# sourceMappingURL=IWorkingWithWebPartProps.js.map
|
@ -0,0 +1 @@
|
||||
{"version":3,"sources":[],"names":[],"mappings":"","file":"webparts/workingWith/IWorkingWithWebPartProps.js","sourcesContent":[],"sourceRoot":"..\\..\\..\\src"}
|
@ -0,0 +1 @@
|
||||
.workingWith_cca48a75 .webPartTitle_cca48a75{margin-bottom:1em}.workingWith_cca48a75 .ms-Spinner{width:7em;margin:0 auto}.workingWith_cca48a75 .ms-Persona{cursor:pointer}
|
5
samples/react-officegraph/lib/webparts/workingWith/WorkingWith.module.scss.d.ts
vendored
Normal file
5
samples/react-officegraph/lib/webparts/workingWith/WorkingWith.module.scss.d.ts
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
declare const styles: {
|
||||
workingWith: string;
|
||||
webPartTitle: string;
|
||||
};
|
||||
export default styles;
|
@ -0,0 +1,12 @@
|
||||
"use strict";
|
||||
/* tslint:disable */
|
||||
require('./WorkingWith.module.css');
|
||||
var styles = {
|
||||
workingWith: 'workingWith_cca48a75',
|
||||
webPartTitle: 'webPartTitle_cca48a75',
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.default = styles;
|
||||
/* tslint:enable */
|
||||
|
||||
//# sourceMappingURL=WorkingWith.module.scss.js.map
|
@ -0,0 +1 @@
|
||||
{"version":3,"sources":["webparts/workingWith/WorkingWith.module.scss.ts"],"names":[],"mappings":";AAAA,oBAAoB;AACpB,OAAO,CAAC,0BAA0B,CAAC,CAAC;AACpC,IAAM,MAAM,GAAG;IACb,WAAW,EAAE,sBAAsB;IACnC,YAAY,EAAE,uBAAuB;CACtC,CAAC;;AAEF,kBAAe,MAAM,CAAC;AACtB,mBAAmB","file":"webparts/workingWith/WorkingWith.module.scss.js","sourcesContent":["/* tslint:disable */\r\nrequire('./WorkingWith.module.css');\r\nconst styles = {\r\n workingWith: 'workingWith_cca48a75',\r\n webPartTitle: 'webPartTitle_cca48a75',\r\n};\r\n\r\nexport default styles;\r\n/* tslint:enable */"],"sourceRoot":"..\\..\\..\\src"}
|
9
samples/react-officegraph/lib/webparts/workingWith/WorkingWithWebPart.d.ts
vendored
Normal file
9
samples/react-officegraph/lib/webparts/workingWith/WorkingWithWebPart.d.ts
vendored
Normal file
@ -0,0 +1,9 @@
|
||||
import { Version } from '@microsoft/sp-core-library';
|
||||
import { BaseClientSideWebPart, IPropertyPaneConfiguration, IWebPartContext } from '@microsoft/sp-webpart-base';
|
||||
import { IWorkingWithWebPartProps } from './IWorkingWithWebPartProps';
|
||||
export default class WorkingWithWebPart extends BaseClientSideWebPart<IWorkingWithWebPartProps> {
|
||||
constructor(context: IWebPartContext);
|
||||
render(): void;
|
||||
protected readonly dataVersion: Version;
|
||||
protected getPropertyPaneConfiguration(): IPropertyPaneConfiguration;
|
||||
}
|
66
samples/react-officegraph/lib/webparts/workingWith/WorkingWithWebPart.js
vendored
Normal file
66
samples/react-officegraph/lib/webparts/workingWith/WorkingWithWebPart.js
vendored
Normal file
@ -0,0 +1,66 @@
|
||||
"use strict";
|
||||
var __extends = (this && this.__extends) || function (d, b) {
|
||||
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
|
||||
function __() { this.constructor = d; }
|
||||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||||
};
|
||||
var React = require("react");
|
||||
var ReactDom = require("react-dom");
|
||||
var sp_core_library_1 = require("@microsoft/sp-core-library");
|
||||
var sp_webpart_base_1 = require("@microsoft/sp-webpart-base");
|
||||
var strings = require("workingWithStrings");
|
||||
var WorkingWith_1 = require("./components/WorkingWith");
|
||||
var WorkingWithWebPart = (function (_super) {
|
||||
__extends(WorkingWithWebPart, _super);
|
||||
function WorkingWithWebPart(context) {
|
||||
return _super.call(this) || this;
|
||||
}
|
||||
WorkingWithWebPart.prototype.render = function () {
|
||||
var element = React.createElement(WorkingWith_1.default, {
|
||||
numberOfPeople: this.properties.numberOfPeople,
|
||||
title: this.properties.title,
|
||||
httpClient: this.context.spHttpClient,
|
||||
siteUrl: this.context.pageContext.web.absoluteUrl
|
||||
});
|
||||
ReactDom.render(element, this.domElement);
|
||||
};
|
||||
Object.defineProperty(WorkingWithWebPart.prototype, "dataVersion", {
|
||||
get: function () {
|
||||
return sp_core_library_1.Version.parse('1.0');
|
||||
},
|
||||
enumerable: true,
|
||||
configurable: true
|
||||
});
|
||||
WorkingWithWebPart.prototype.getPropertyPaneConfiguration = function () {
|
||||
return {
|
||||
pages: [
|
||||
{
|
||||
header: {
|
||||
description: strings.PropertyPaneDescription
|
||||
},
|
||||
groups: [
|
||||
{
|
||||
groupName: strings.ViewGroupName,
|
||||
groupFields: [
|
||||
sp_webpart_base_1.PropertyPaneTextField('title', {
|
||||
label: strings.TitleFieldLabel
|
||||
}),
|
||||
sp_webpart_base_1.PropertyPaneSlider('numberOfPeople', {
|
||||
label: strings.NumberOfPeopleFieldLabel,
|
||||
min: 1,
|
||||
max: 10,
|
||||
step: 1
|
||||
})
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
};
|
||||
};
|
||||
return WorkingWithWebPart;
|
||||
}(sp_webpart_base_1.BaseClientSideWebPart));
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.default = WorkingWithWebPart;
|
||||
|
||||
//# sourceMappingURL=WorkingWithWebPart.js.map
|
28
samples/react-officegraph/lib/webparts/workingWith/components/WorkingWith.d.ts
vendored
Normal file
28
samples/react-officegraph/lib/webparts/workingWith/components/WorkingWith.d.ts
vendored
Normal file
@ -0,0 +1,28 @@
|
||||
import * as React from 'react';
|
||||
import { IWorkingWithWebPartProps } from '../IWorkingWithWebPartProps';
|
||||
import { SPHttpClient } from '@microsoft/sp-http';
|
||||
export interface IWorkingWithProps extends IWorkingWithWebPartProps {
|
||||
httpClient: SPHttpClient;
|
||||
siteUrl: string;
|
||||
}
|
||||
export interface IPerson {
|
||||
name: string;
|
||||
email: string;
|
||||
jobTitle: string;
|
||||
department: string;
|
||||
photoUrl: string;
|
||||
profileUrl: string;
|
||||
}
|
||||
export interface IWorkingWithState {
|
||||
loading: boolean;
|
||||
people: IPerson[];
|
||||
error: string;
|
||||
}
|
||||
export default class WorkingWith extends React.Component<IWorkingWithProps, IWorkingWithState> {
|
||||
constructor(props: IWorkingWithProps, state: IWorkingWithState);
|
||||
componentDidMount(): void;
|
||||
componentDidUpdate(prevProps: IWorkingWithProps, prevState: IWorkingWithState, prevContext: any): void;
|
||||
render(): JSX.Element;
|
||||
private navigateTo(url);
|
||||
private loadPeople(siteUrl, numberOfPeople);
|
||||
}
|
107
samples/react-officegraph/lib/webparts/workingWith/components/WorkingWith.js
vendored
Normal file
107
samples/react-officegraph/lib/webparts/workingWith/components/WorkingWith.js
vendored
Normal file
@ -0,0 +1,107 @@
|
||||
"use strict";
|
||||
var __extends = (this && this.__extends) || function (d, b) {
|
||||
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
|
||||
function __() { this.constructor = d; }
|
||||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||||
};
|
||||
var React = require("react");
|
||||
var WorkingWith_module_scss_1 = require("../WorkingWith.module.scss");
|
||||
var sp_http_1 = require("@microsoft/sp-http");
|
||||
var SearchUtils_1 = require("../../SearchUtils");
|
||||
var Utils_1 = require("../../Utils");
|
||||
var office_ui_fabric_react_1 = require("office-ui-fabric-react");
|
||||
var WorkingWith = (function (_super) {
|
||||
__extends(WorkingWith, _super);
|
||||
function WorkingWith(props, state) {
|
||||
var _this = _super.call(this, props) || this;
|
||||
_this.state = {
|
||||
people: [],
|
||||
loading: true,
|
||||
error: null
|
||||
};
|
||||
return _this;
|
||||
}
|
||||
WorkingWith.prototype.componentDidMount = function () {
|
||||
this.loadPeople(this.props.siteUrl, this.props.numberOfPeople);
|
||||
};
|
||||
WorkingWith.prototype.componentDidUpdate = function (prevProps, prevState, prevContext) {
|
||||
if (this.props.numberOfPeople !== prevProps.numberOfPeople ||
|
||||
this.props.siteUrl !== prevProps.siteUrl && (this.props.numberOfPeople && this.props.siteUrl)) {
|
||||
this.loadPeople(this.props.siteUrl, this.props.numberOfPeople);
|
||||
}
|
||||
};
|
||||
WorkingWith.prototype.render = function () {
|
||||
var _this = this;
|
||||
var loading = this.state.loading ? React.createElement("div", { style: { margin: '0 auto' } },
|
||||
React.createElement(office_ui_fabric_react_1.Spinner, { label: 'Loading...' })) : React.createElement("div", null);
|
||||
var error = this.state.error ? React.createElement("div", null,
|
||||
React.createElement("strong", null, "Error: "),
|
||||
" ",
|
||||
this.state.error) : React.createElement("div", null);
|
||||
var people = this.state.people.map(function (person, i) {
|
||||
return (React.createElement(office_ui_fabric_react_1.Persona, { primaryText: person.name, secondaryText: person.jobTitle, tertiaryText: person.department, imageUrl: person.photoUrl, size: office_ui_fabric_react_1.PersonaSize.large, presence: office_ui_fabric_react_1.PersonaPresence.none, onClick: function () { _this.navigateTo(person.profileUrl); }, key: person.email }));
|
||||
});
|
||||
return (React.createElement("div", { className: WorkingWith_module_scss_1.default.workingWith },
|
||||
React.createElement("div", { className: office_ui_fabric_react_1.css('ms-font-xl', WorkingWith_module_scss_1.default.webPartTitle) }, this.props.title),
|
||||
loading,
|
||||
error,
|
||||
people));
|
||||
};
|
||||
WorkingWith.prototype.navigateTo = function (url) {
|
||||
window.open(url, '_blank');
|
||||
};
|
||||
WorkingWith.prototype.loadPeople = function (siteUrl, numberOfPeople) {
|
||||
var _this = this;
|
||||
this.props.httpClient.get(siteUrl + "/_api/search/query?querytext='*'&properties='GraphQuery:actor(me\\,action\\:1019)'&selectproperties='Title,WorkEmail,JobTitle,Department,Path'&rowlimit=" + numberOfPeople, sp_http_1.SPHttpClient.configurations.v1, {
|
||||
headers: {
|
||||
'Accept': 'application/json;odata=nometadata',
|
||||
'odata-version': ''
|
||||
}
|
||||
})
|
||||
.then(function (response) {
|
||||
return response.json();
|
||||
})
|
||||
.then(function (response) {
|
||||
if (!response ||
|
||||
!response.PrimaryQueryResult ||
|
||||
!response.PrimaryQueryResult.RelevantResults ||
|
||||
response.PrimaryQueryResult.RelevantResults.RowCount === 0) {
|
||||
_this.setState({
|
||||
loading: false,
|
||||
error: null,
|
||||
people: []
|
||||
});
|
||||
return;
|
||||
}
|
||||
var people = [];
|
||||
for (var i = 0; i < response.PrimaryQueryResult.RelevantResults.Table.Rows.length; i++) {
|
||||
var personRow = response.PrimaryQueryResult.RelevantResults.Table.Rows[i];
|
||||
var email = SearchUtils_1.SearchUtils.getValueFromResults('WorkEmail', personRow.Cells);
|
||||
people.push({
|
||||
name: SearchUtils_1.SearchUtils.getValueFromResults('Title', personRow.Cells),
|
||||
email: email,
|
||||
jobTitle: SearchUtils_1.SearchUtils.getValueFromResults('JobTitle', personRow.Cells),
|
||||
department: SearchUtils_1.SearchUtils.getValueFromResults('Department', personRow.Cells),
|
||||
photoUrl: Utils_1.Utils.getUserPhotoUrl(email, siteUrl, 'L'),
|
||||
profileUrl: SearchUtils_1.SearchUtils.getValueFromResults('Path', personRow.Cells)
|
||||
});
|
||||
}
|
||||
_this.setState({
|
||||
loading: false,
|
||||
error: null,
|
||||
people: people
|
||||
});
|
||||
}, function (error) {
|
||||
_this.setState({
|
||||
loading: false,
|
||||
error: error,
|
||||
people: []
|
||||
});
|
||||
});
|
||||
};
|
||||
return WorkingWith;
|
||||
}(React.Component));
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.default = WorkingWith;
|
||||
|
||||
//# sourceMappingURL=WorkingWith.js.map
|
File diff suppressed because one or more lines are too long
8
samples/react-officegraph/lib/webparts/workingWith/loc/en-us.js
vendored
Normal file
8
samples/react-officegraph/lib/webparts/workingWith/loc/en-us.js
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
define([], function() {
|
||||
return {
|
||||
"PropertyPaneDescription": "Manage the settings of this Web Part",
|
||||
"ViewGroupName": "View",
|
||||
"NumberOfPeopleFieldLabel": "Number of people to show",
|
||||
"TitleFieldLabel": "Web Part Title (displayed in the body)"
|
||||
}
|
||||
});
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user