Merge pull request #3475 from bcameron1231/main

Fixing PnP-js demo sample for context handling
This commit is contained in:
Hugo Bernier 2023-02-18 13:31:48 -05:00 committed by GitHub
commit 567e6d3292
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 173 additions and 20 deletions

View File

@ -12,10 +12,10 @@ import "@pnp/sp/batching";
var _sp: SPFI = null; var _sp: SPFI = null;
export const getSP = (context?: WebPartContext): SPFI => { export const getSP = (context?: WebPartContext): SPFI => {
if (context != null) { if (!!context) {
//You must add the @pnp/logging package to include the PnPLogging behavior it is no longer a peer dependency //You must add the @pnp/logging package to include the PnPLogging behavior it is no longer a peer dependency
// The LogLevel set's at what level a message will be written to the console // The LogLevel set's at what level a message will be written to the console
_sp = spfi().using(SPFx(context)).using(PnPLogging(LogLevel.Warning)); _sp = spfi().using(SPFx(context)).using(PnPLogging(LogLevel.Warning));
} }
return _sp; return _sp;
}; };

View File

@ -0,0 +1,39 @@
// For more information on how to run this SPFx project in a VS Code Remote Container, please visit https://aka.ms/spfx-devcontainer
{
"name": "SPFx 1.15.2",
"image": "docker.io/m365pnp/spfx:1.15.2",
// Set *default* container specific settings.json values on container create.
"settings": {},
// Add the IDs of extensions you want installed when the container is created.
"extensions": [
"editorconfig.editorconfig",
"dbaeumer.vscode-eslint"
],
// Use 'forwardPorts' to make a list of ports inside the container available locally.
"forwardPorts": [
4321,
35729
],
"portsAttributes": {
"4321": {
"protocol": "https",
"label": "Manifest",
"onAutoForward": "silent",
"requireLocalPort": true
},
// Not needed for SPFx>= 1.12.1
// "5432": {
// "protocol": "https",
// "label": "Workbench",
// "onAutoForward": "silent"
// },
"35729": {
"protocol": "https",
"label": "LiveReload",
"onAutoForward": "silent",
"requireLocalPort": true
}
},
"postCreateCommand": "bash .devcontainer/spfx-startup.sh",
"remoteUser": "node"
}

View File

@ -0,0 +1,33 @@
echo
echo -e "\e[1;94mInstalling Node dependencies\e[0m"
npm install
## commands to create dev certificate and copy it to the root folder of the project
echo
echo -e "\e[1;94mGenerating dev certificate\e[0m"
gulp trust-dev-cert
# Convert the generated PEM certificate to a CER certificate
openssl x509 -inform PEM -in ~/.rushstack/rushstack-serve.pem -outform DER -out ./spfx-dev-cert.cer
# Copy the PEM ecrtificate for non-Windows hosts
cp ~/.rushstack/rushstack-serve.pem ./spfx-dev-cert.pem
## add *.cer to .gitignore to prevent certificates from being saved in repo
if ! grep -Fxq '*.cer' ./.gitignore
then
echo "# .CER Certificates" >> .gitignore
echo "*.cer" >> .gitignore
fi
## add *.pem to .gitignore to prevent certificates from being saved in repo
if ! grep -Fxq '*.pem' ./.gitignore
then
echo "# .PEM Certificates" >> .gitignore
echo "*.pem" >> .gitignore
fi
echo
echo -e "\e[1;92mReady!\e[0m"
echo -e "\n\e[1;94m**********\nOptional: if you plan on using gulp serve, don't forget to add the container certificate to your local machine. Please visit https://aka.ms/spfx-devcontainer for more information\n**********"

View File

@ -1,10 +1,10 @@
# SharePoint Framework sample using @pnp/js and ReactJS # Using @pnp/js and ReactJS
## Summary ## Summary
This solution builds off of the solution [react-async-await-sp-pnp-js](./react-async-await-sp-pnp-js) submitted by Jose Quinto ([@jquintozamora](https://twitter.com/jquintozamora) , [blog.josequinto.com](https://blog.josequinto.com)) This solution builds off of the solution [react-async-await-sp-pnp-js](./react-async-await-sp-pnp-js) submitted by Jose Quinto ([@jquintozamora](https://twitter.com/jquintozamora) , [blog.josequinto.com](https://blog.josequinto.com))
This implementaiton refactors to take aspects out and utilize and showcase PnPjs Version 3. This implementation refactors to take aspects out and utilize and showcase PnPjs Version 3.
![React-pnp-js-sample](./assets/react-pnp-js-sample.png) ![React-pnp-js-sample](./assets/react-pnp-js-sample.png)
@ -15,31 +15,39 @@ This implementaiton refactors to take aspects out and utilize and showcase PnPjs
| Every SPFx version is only compatible with specific version(s) of Node.js. In order to be able to build this sample, please ensure that the version of Node on your workstation matches one of the versions listed in this section. This sample will not work on a different version of Node.| | Every SPFx version is only compatible with specific version(s) of Node.js. In order to be able to build this sample, please ensure that the version of Node on your workstation matches one of the versions listed in this section. This sample will not work on a different version of Node.|
|Refer to <https://aka.ms/spfx-matrix> for more information on SPFx compatibility. | |Refer to <https://aka.ms/spfx-matrix> for more information on SPFx compatibility. |
![SPFx 1.14.0](https://img.shields.io/badge/SPFx-1.14.0-green.svg) ![SPFx 1.15.2](https://img.shields.io/badge/SPFx-1.15.2-green.svg)
![Node.js v14 | v12](https://img.shields.io/badge/Node.js-v12%20%7C%20v14-green.svg) ![Node.js v14 | v12| v16](https://img.shields.io/badge/Node.js-v12%20%7C%20v14%20%7C%20v16-green.svg)
![Compatible with SharePoint Online](https://img.shields.io/badge/SharePoint%20Online-Compatible-green.svg) ![Compatible with SharePoint Online](https://img.shields.io/badge/SharePoint%20Online-Compatible-green.svg)
![Incompatible with SharePoint 2019](https://img.shields.io/badge/SharePoint%20Server%202019-Incompatible-red.svg) ![Incompatible with SharePoint 2019](https://img.shields.io/badge/SharePoint%20Server%202019-Incompatible-red.svg)
![Does not work with SharePoint 2016 (Feature Pack 2)](https://img.shields.io/badge/SharePoint%20Server%202016%20(Feature%20Pack%202)-Incompatible-red.svg "SharePoint Server 2016 Feature Pack 2 requires SPFx 1.1") ![Does not work with SharePoint 2016 (Feature Pack 2)](https://img.shields.io/badge/SharePoint%20Server%202016%20(Feature%20Pack%202)-Incompatible-red.svg "SharePoint Server 2016 Feature Pack 2 requires SPFx 1.1")
![Local Workbench Incompatible](https://img.shields.io/badge/Local%20Workbench-Incompatible-red.svg) ![Local Workbench Incompatible](https://img.shields.io/badge/Local%20Workbench-Incompatible-red.svg)
![Hosted Workbench Compatible](https://img.shields.io/badge/Hosted%20Workbench-Compatible-green.svg) ![Hosted Workbench Compatible](https://img.shields.io/badge/Hosted%20Workbench-Compatible-green.svg)
For more information about SPFx compatibility, please refer to https://aka.ms/spfx-matrix For more information about SPFx compatibility, please refer to <https://aka.ms/spfx-matrix>
## Applies to ## Applies to
* [SharePoint Framework](https://learn.microsoft.com/sharepoint/dev/spfx/sharepoint-framework-overview) * [SharePoint Framework](https://learn.microsoft.com/sharepoint/dev/spfx/sharepoint-framework-overview)
* [Microsoft 365 developer tenant](https://learn.microsoft.com/sharepoint/dev/spfx/set-up-your-developer-tenant) * [Microsoft 365 developer tenant](https://learn.microsoft.com/sharepoint/dev/spfx/set-up-your-developer-tenant)
## Solution ## Contributors
<!-- CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
<!-- prettier-ignore-start -->
<!-- markdownlint-disable -->
|[![Julie Turner](https://avatars.githubusercontent.com/u/7570936?v=4&s=100)](https://github.com/juliemturner)|[![Beau Cameron](https://avatars.githubusercontent.com/u/7944457?v=4&s=100)](https://github.com/bcameron1231)|
|:--:|:--:|
<sub>**[Julie Turner](https://github.com/juliemturner)**</sub>|<sub>**[Beau Cameron](https://github.com/bcameron1231)**</sub>|
<!-- markdownlint-restore -->
<!-- prettier-ignore-end -->
<!-- CONTRIBUTORS-LIST:END -->
Solution|Author(s)
--------|---------
react-spfx-pnp-js-sample | Julie Turner ([@jfj1997](https://twitter.com/jfj1997))
## Version history ## Version history
Version|Date|Comments Version|Date|Comments
-------|----|-------- -------|----|--------
1.2|Feb 14, 2023|Fixed context handling
1.1|Aug 29, 2022|Bug fix & dependency updates 1.1|Aug 29, 2022|Bug fix & dependency updates
1.0|Jan 13, 2022|Initial release 1.0|Jan 13, 2022|Initial release
@ -47,22 +55,38 @@ Version|Date|Comments
1. clone this repo 1. clone this repo
1. `$ npm i` 1. `$ npm i`
1. Update online workbench url in the `initialPage` property of the `config/serve.json` file. 1. Update online workbench URL in the `initialPage` property of the `config/serve.json` file.
1. `$ gulp serve` 1. `$ gulp serve`
## Features ## Features
* Establishing context for the SharePoint Factory Interface * Establishing context for the SharePoint Factory Interface
* Creating a project config file to centralize defining the PnPjs imports and SharePoint Querable object for reuse. * Creating a project config file to centralize defining the PnPjs imports and SharePoint Queryable object for reuse.
* Demo extending the SharePoint Querables instance with the PnPLogging beavhior. * Demo extending the SharePoint Queryables instance with the PnPLogging behavior.
* Demo extending the SharePoing Queryable instance with the Caching behavior * Demo extending the SharePoint Queryable instance with the Caching behavior
* Demo loading list items from a SharePoint library * Demo loading list items from a SharePoint library
* Demo creating a batched instance of the SharePoint Querable object. * Demo creating a batched instance of the SharePoint Queryable object.
* Demo updating list items by modifying the Title property. * Demo updating list items by modifying the Title property.
* Demo executing a batch and working with the results. * Demo executing a batch and working with the results.
## Help
We do not support samples, but this community is always willing to help, and we want to improve these samples. We use GitHub to track issues, which makes it easy for community members to volunteer their time and help resolve issues.
If you're having issues building the solution, please run [spfx doctor](https://pnp.github.io/cli-microsoft365/cmd/spfx/spfx-doctor/) from within the solution folder to diagnose incompatibility issues with your environment.
You can try looking at [issues related to this sample](https://github.com/pnp/sp-dev-fx-webparts/issues?q=label%3A%22sample%3A%20react-pnp-js-sample%22) to see if anybody else is having the same issues.
You can also try looking at [discussions related to this sample](https://github.com/pnp/sp-dev-fx-webparts/discussions?discussions_q=react-pnp-js-sample) and see what the community is saying.
If you encounter any issues using this sample, [create a new issue](https://github.com/pnp/sp-dev-fx-webparts/issues/new?assignees=&labels=Needs%3A+Triage+%3Amag%3A%2Ctype%3Abug-suspected%2Csample%3A%20react-pnp-js-sample&template=bug-report.yml&sample=react-pnp-js-sample&authors=@juliemturner%20@bcameron1231&title=react-pnp-js-sample%20-%20).
For questions regarding this sample, [create a new question](https://github.com/pnp/sp-dev-fx-webparts/issues/new?assignees=&labels=Needs%3A+Triage+%3Amag%3A%2Ctype%3Aquestion%2Csample%3A%20react-pnp-js-sample&template=question.yml&sample=react-pnp-js-sample&authors=@juliemturner%20@bcameron1231&title=react-pnp-js-sample%20-%20).
Finally, if you have an idea for improvement, [make a suggestion](https://github.com/pnp/sp-dev-fx-webparts/issues/new?assignees=&labels=Needs%3A+Triage+%3Amag%3A%2Ctype%3Aenhancement%2Csample%3A%20react-pnp-js-sample&template=suggestion.yml&sample=react-pnp-js-sample&authors=@juliemturner%20@bcameron1231&title=react-pnp-js-sample%20-%20).
## Disclaimer ## 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.** **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.**
<img src="https://pnptelemetry.azurewebsites.net/sp-dev-fx-webparts/samples/react-async-await-sp-pnp-js" /> <img src="https://pnptelemetry.azurewebsites.net/sp-dev-fx-webparts/samples/react-pnp-js-sample" />

View File

@ -0,0 +1,55 @@
[
{
"name": "pnp-sp-dev-spfx-web-parts-react-pnp-js-sample",
"source": "pnp",
"title": "Using @pnp/js and ReactJS",
"shortDescription": "Shows how to use PnPjs in a React web part",
"url": "https://github.com/pnp/sp-dev-fx-webparts/tree/main/samples/react-pnp-js-sample",
"downloadUrl": "https://pnp.github.io/download-partial/?url=https://github.com/pnp/sp-dev-fx-webparts/tree/main/samples/react-pnp-js-sample",
"longDescription": [
"Shows how to use PnPjs in a React web part"
],
"creationDateTime": "2023-02-18",
"updateDateTime": "2023-02-18",
"products": [
"SharePoint"
],
"metadata": [
{
"key": "CLIENT-SIDE-DEV",
"value": "React"
},
{
"key": "SPFX-VERSION",
"value": "1.15.2"
}
],
"thumbnails": [
{
"type": "image",
"order": 100,
"url": "https://github.com/pnp/sp-dev-fx-webparts/raw/main/samples/react-pnp-js-sample/assets/react-pnp-js-sample.png",
"alt": "Web Part Preview"
}
],
"authors": [
{
"gitHubAccount": "juliemturner",
"pictureUrl": "https://github.com/juliemturner.png",
"name": "Julie Turner"
},
{
"gitHubAccount": "bcameron1231",
"name": "Beau Cameron",
"pictureUrl": "https://github.com/bcameron1231.png"
}
],
"references": [
{
"name": "Build your first SharePoint client-side web part",
"description": "Client-side web parts are client-side components that run in the context of a SharePoint page. Client-side web parts can be deployed to SharePoint environments that support the SharePoint Framework. You can also use modern JavaScript web frameworks, tools, and libraries to build them.",
"url": "https://docs.microsoft.com/en-us/sharepoint/dev/spfx/web-parts/get-started/build-a-hello-world-web-part"
}
]
}
]

View File

@ -12,7 +12,7 @@ import "@pnp/sp/batching";
var _sp: SPFI = null; var _sp: SPFI = null;
export const getSP = (context?: WebPartContext): SPFI => { export const getSP = (context?: WebPartContext): SPFI => {
if (context != null) { // eslint-disable-line eqeqeq if (!!context) { // eslint-disable-line eqeqeq
//You must add the @pnp/logging package to include the PnPLogging behavior it is no longer a peer dependency //You must add the @pnp/logging package to include the PnPLogging behavior it is no longer a peer dependency
// The LogLevel set's at what level a message will be written to the console // The LogLevel set's at what level a message will be written to the console
_sp = spfi().using(SPFx(context)).using(PnPLogging(LogLevel.Warning)); _sp = spfi().using(SPFx(context)).using(PnPLogging(LogLevel.Warning));

View File

@ -117,7 +117,7 @@ Don't worry if you're unsure about the compatibility matrix above. We'll verify
> Get your own free development tenant by subscribing to [Microsoft 365 developer program](http://aka.ms/m365devprogram) > Get your own free development tenant by subscribing to [Microsoft 365 developer program](http://aka.ms/m365devprogram)
## Authors ## Contributors
<!-- <!--
We use this section to recognize and promote your contributions. Please provide one author per line -- even if you worked together on it. We use this section to recognize and promote your contributions. Please provide one author per line -- even if you worked together on it.
@ -126,9 +126,11 @@ We'll only use the info you provided here. Make sure to include your full name,
Provide a link to your GitHub profile to help others find more cool things you have done. Provide a link to your GitHub profile to help others find more cool things you have done.
If you provide a link to your Twitter profile, we'll promote your contribution on social media. If you provide a link to your Twitter profile, we'll promote your contribution on social media.
If you do not update this information, you will not be listed 😞
--> -->
[Author Name](LinkToYourGitHubProfile) ([@yourtwitterhandle](https://twitter.com/yourtwitterhandle)), Company - [Author Name](LinkToYourGitHubProfile) ([@yourtwitterhandle](https://twitter.com/yourtwitterhandle)), Company
## Version history ## Version history