@spfx-extensions/package 1.4.25 → 1.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/config/package-solution.json +2 -2
- package/dist/8d1029da-85e6-48cc-aaaf-37a5bbc0b9be.manifest.json +2 -2
- package/dist/d6ca1fc2-0591-4c6d-8a25-cae3262c017b.manifest.json +7 -2
- package/dist/debug/83e13c11-682e-4eaa-9ae0-74617ca28f96/Extension_8d1029da-85e6-48cc-aaaf-37a5bbc0b9be.xml +1 -1
- package/dist/debug/83e13c11-682e-4eaa-9ae0-74617ca28f96/WebPart_d6ca1fc2-0591-4c6d-8a25-cae3262c017b.xml +1 -1
- package/dist/debug/AppManifest.xml +1 -1
- package/dist/debug/ClientSideAssets/spfx-extension-application-customizer_1ed614b7d2607a62ce4e.js +1 -0
- package/dist/debug/ClientSideAssets/spfx-extension-core.js +1 -1
- package/dist/debug/ClientSideAssets/spfx-extension-coreconfigurator.js +60 -60
- package/dist/{spfx-extension-loader_1a88c5c5336cafaa736d.js → debug/ClientSideAssets/spfx-extension-loader_e83dead2a8f8f000d374.js} +1 -1
- package/dist/debug/ClientSideAssets/spfx-extensionloader-web-part_1ca10faea5832c6d6178.js +3 -0
- package/dist/debug/ClientSideAssets.xml +1 -1
- package/dist/debug/ClientSideAssets.xml.config.xml +1 -1
- package/dist/debug/_rels/ClientSideAssets.xml.rels +1 -1
- package/dist/debug/feature_83e13c11-682e-4eaa-9ae0-74617ca28f96.xml +1 -1
- package/dist/debug/feature_83e13c11-682e-4eaa-9ae0-74617ca28f96.xml.config.xml +1 -1
- package/dist/deploy/sp-fx-extensions.sppkg +0 -0
- package/dist/spfx-extension-application-customizer_1ed614b7d2607a62ce4e.js +1 -0
- package/dist/spfx-extension-core.js +1 -1
- package/dist/spfx-extension-coreconfigurator.js +60 -60
- package/dist/{debug/ClientSideAssets/spfx-extension-loader_1a88c5c5336cafaa736d.js → spfx-extension-loader_e83dead2a8f8f000d374.js} +1 -1
- package/dist/spfx-extensionloader-web-part_1ca10faea5832c6d6178.js +3 -0
- package/package.json +2 -2
- package/src/webparts/spfxExtensionloader/SpfxExtensionloaderWebPart.ts +225 -149
- package/dist/debug/ClientSideAssets/spfx-extension-application-customizer_493714911b44aed8a076.js +0 -1
- package/dist/debug/ClientSideAssets/spfx-extensionloader-web-part_0b7cf417167f9364b2df.js +0 -3
- package/dist/spfx-extension-application-customizer_493714911b44aed8a076.js +0 -1
- package/dist/spfx-extensionloader-web-part_0b7cf417167f9364b2df.js +0 -3
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
"use strict";(self.
|
|
1
|
+
"use strict";(self.webpackJsonp_6cc779ad78b22e0ab7384b402525e382=self.webpackJsonp_6cc779ad78b22e0ab7384b402525e382||[]).push([[548],{364:(e,t,n)=>{n.d(t,{initCore:()=>p});var a=n(367),{getPrototypeOf:i,defineProperty:r,getOwnPropertyNames:o}=(Object.create,Object);Object.prototype.hasOwnProperty;const s=n.p+"spfx-extension-core.js?v=8055e590c853bedb98c4",c=n.p+"spfx-extension-coreconfigurator.js?v=05c161bd2996e54939f4",d=n.p+"spfx-extension-wrapper.js?v=eac83830b8c1e249f52c";let l,u=!1;async function f(){return Promise.resolve({coreUrl:s,configuratorUrl:c,wrapperUrl:d})}async function p(e,t,n){if(!l){const t="2025-08-06T22:21:03.179Z";console.info(a.Lf,"Initializing Core from SPFx Built:",t),l=async function(e,t){if(window.__SPFxExtensions?.__CorePromise)return window.__SPFxExtensions.__CorePromise;!function(e){if(!window.__SPFxExtensions){let{promise:e,resolve:t}=Promise.withResolvers();window.__SPFxExtensions={__CorePromise:e,__CorePromiseResolver:t}}if(!window.__SPFxExtensions.Utils){let{promise:t,resolve:n}=Promise.withResolvers(),{promise:a,resolve:i}=Promise.withResolvers();window.__SPFxExtensions.Utils={environmentType:e,initializedThroughSPFX:true,placeHolderProviderPromise:t,placeHolderResolver:n,appManifestPromises:[],spAppInitializationPromise:a,spAppInitializationPromiseResolver:i,fluentIconsInitialized:!1,ConfiguratorPageUrl:"/sites/appcatalog/SPFxExtensionsData/SitePages/SPFxExtensionsConfigurator.aspx"}}}(t);let n=await async function(e){let t=Number(localStorage.getItem("SPFXEXT")),n={core:"",configuratorUrl:""};if(t>0){let e=Date.now();return n.core=`https://localhost:${t}/__spfxCore.js?v=${e}`,n.configuratorUrl=`https://localhost:${t}/__spfxCoreConfigurator.js?v=${e}`,n}let{coreUrl:a,configuratorUrl:i}=await e();if(!a)throw new Error("[SPFxExtensions/Core] Unable to resolve SPFx Core location");if(!i)throw new Error("[SPFxExtensions/Core] Unable to resolve SPFx Core Configurator location");return n.core=a,n.configuratorUrl=i,console.info("[SPFxExtensions/Core]","Core location resolved to",n),n}(e);window.__SPFxExtensions.__ConfiguratorUrl=n.configuratorUrl;let a=document.createElement("script");return a.src=n.core,a.type="module",a.addEventListener("error",e=>{console.error("[SPFxExtensions/Core]","Catastrophic failure, cannot load SPFxExtensions Core from",n,e)}),document.head.appendChild(a),window.__SPFxExtensions.__CorePromise}(f,e)}await l,window.__SPFxExtensions.Utils&&!window.__SPFxExtensions.Utils.initializedThroughSPFX&&(window.__SPFxExtensions.Utils.environmentType=e,window.__SPFxExtensions.Utils.initializedThroughSPFX=!0),!u&&t&&n&&(u=!0,window.__SPFxExtensions.Utils.placeHolderResolver({placeHolderProvider:t,eventObserver:n}))}}
|
|
2
2
|
,367:(e,t,n)=>{n.d(t,{Bc:()=>r,Lf:()=>o,Ne:()=>a,oz:()=>i});const a="Select one of these web parts for this column.",i="Edit page and select webpart.",r="Webpart that loads an app of your choice.",o="[SPFxExtensions]"}
|
|
3
3
|
}]);
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
(()=>{var e=document.currentScript;define(["@microsoft/sp-core-library","@microsoft/sp-property-pane","@microsoft/sp-webpart-base","@microsoft/sp-component-base"],(t,n,a,i)=>(()=>{"use strict";var r,o,s,c={367:(e,t,n)=>{n.d(t,{Bc:()=>r,Lf:()=>o,Ne:()=>a,oz:()=>i});const a="Select one of these web parts for this column.",i="Edit page and select webpart.",r="Webpart that loads an app of your choice.",o="[SPFxExtensions]"}
|
|
2
|
+
,574:(e,t,n)=>{n.r(t),n.d(t,{default:()=>b});var a,i,r=function(){return r=Object.assign||function(e){for(var t,n=1,a=arguments.length;n<a;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},r.apply(this,arguments)};!function(e){e[e.sync=0]="sync",e[e.async=1]="async"}(a||(a={})),function(e){e[e.onlyThemable=1]="onlyThemable",e[e.onlyNonThemable=2]="onlyNonThemable",e[e.all=3]="all"}(i||(i={}));var o,s,c,d="undefined"==typeof window?n.g:window,l=d&&d.CSPSettings&&d.CSPSettings.nonce,u=((c=d.__themeState__||{theme:void 0,lastStyleElement:void 0,registeredStyles:[]}).runState||(c=r(r({},c),{perf:{count:0,duration:0},runState:{flushTimer:0,mode:a.sync,buffer:[]}})),c.registeredThemableStyles||(c=r(r({},c),{registeredThemableStyles:[]})),d.__themeState__=c,c),f=/[\'\"]\[theme:\s*(\w+)\s*(?:\,\s*default:\s*([\\"\']?[\.\,\(\)\#\-\s\w]*[\.\,\(\)\#\-\w][\"\']?))?\s*\][\'\"]/g,p=function(){return"undefined"!=typeof performance&&performance.now?performance.now():Date.now()};function m(e){var t=p();e();var n=p();u.perf.duration+=n-t}function _(e,t){u.loadStyles?u.loadStyles(h(e).styleString,e):function(e){if("undefined"!=typeof document){var t=document.getElementsByTagName("head")[0],n=document.createElement("style"),a=h(e),i=a.styleString,r=a.themable;n.setAttribute("data-load-themed-styles","true"),l&&n.setAttribute("nonce",l),n.appendChild(document.createTextNode(i)),u.perf.count++,t.appendChild(n);var o=document.createEvent("HTMLEvents");o.initEvent("styleinsert",!0,!1),o.args={newStyle:n},document.dispatchEvent(o);var s={styleElement:n,themableStyle:e};r?u.registeredThemableStyles.push(s):u.registeredStyles.push(s)}}(e)}function h(e){var t=u.theme,n=!1;return{styleString:(e||[]).map(function(e){var a=e.theme;if(a){n=!0;var i=t?t[a]:void 0,r=e.defaultValue||"inherit";return t&&!i&&console,i||r}return e.rawString}).join(""),themable:n}}o='.spfxExtensionloader_be4e0fd1{color:"[theme:bodyText, default: #323130]";color:var(--bodyText);overflow:hidden;padding:1em}.spfxExtensionloader_be4e0fd1.teams_be4e0fd1{font-family:Segoe UI,-apple-system,BlinkMacSystemFont,Roboto,Helvetica Neue,sans-serif}.welcome_be4e0fd1{text-align:center}.welcomeImage_be4e0fd1{max-width:420px;width:100%}.links_be4e0fd1 a{color:"[theme:link, default:#03787c]";color:var(--link);text-decoration:none}.links_be4e0fd1 a:hover{color:"[theme:linkHovered, default: #014446]";color:var(--linkHovered);text-decoration:underline}.SPFxExtensionApp_be4e0fd1 .loader_be4e0fd1{animation:rotation_be4e0fd1 1s linear infinite;border:2px solid #003755;border-bottom-color:#009fda;border-radius:50%;box-sizing:border-box;display:inline-block;height:28px;width:28px}@keyframes rotation_be4e0fd1{0%{transform:rotate(0)}to{transform:rotate(1turn)}}.SPFxExtensionApp_be4e0fd1 .buttonLoader_be4e0fd1{align-items:center;border:none;display:flex;height:80px;justify-content:center;width:120px}.SPFxExtensionApp_be4e0fd1 .shimmerShine_be4e0fd1{-webkit-animation-duration:1s;-webkit-animation-fill-mode:forwards;-webkit-animation-iteration-count:infinite;-webkit-animation-name:placeholderShimmer_be4e0fd1;-webkit-animation-timing-function:linear;background:#f6f7f8;background-image:linear-gradient(90deg,#f6f7f8 0,#edeef1 20%,#f6f7f8 40%,#f6f7f8);background-repeat:no-repeat;background-size:200px 80px;border:none;display:block;height:80px;position:relative;width:120px}@keyframes placeholderShimmer_be4e0fd1{0%{background-position:-80px 0}to{background-position:120px 0}}.SPFxExtensionApp_be4e0fd1 .applicationListSection_be4e0fd1{display:flex;flex-direction:column;flex-wrap:wrap;justify-content:center;min-height:320px;text-align:center}.SPFxExtensionApp_be4e0fd1 .header_be4e0fd1{color:#242424;font-weight:600;letter-spacing:1px;line-height:32px;padding:0 12px}.SPFxExtensionApp_be4e0fd1 .icon_be4e0fd1{font-size:28px;font-style:normal;height:28px;line-height:28px;min-width:28px;width:28px}.SPFxExtensionApp_be4e0fd1 .icon_be4e0fd1>img,.SPFxExtensionApp_be4e0fd1 .icon_be4e0fd1>svg{height:auto;width:100%}.SPFxExtensionApp_be4e0fd1 .iconFont_be4e0fd1{background-color:#f6f7f8}.SPFxExtensionApp_be4e0fd1 .appButtonsContainer_be4e0fd1{align-items:center;display:flex;flex-wrap:wrap;height:100%;justify-content:center}.SPFxExtensionApp_be4e0fd1 .appButtonsWrapper_be4e0fd1{align-items:center;box-sizing:border-box;display:flex;flex-direction:column;height:100%;justify-content:flex-start;width:100%}.SPFxExtensionApp_be4e0fd1 .appButton_be4e0fd1{align-items:center;background-color:unset;border:none;display:flex;flex-direction:column;height:80px;padding-top:14px;width:120px}.SPFxExtensionApp_be4e0fd1 .appButton_be4e0fd1:hover{background-color:#c8e3fa}',void 0===(s=!0)&&(s=!1),m(function(){var e=Array.isArray(o)?o:function(e){var t=[];if(e){for(var n=0,a=void 0;a=f.exec(e);){var i=a.index;i>n&&t.push({rawString:e.substring(n,i)}),t.push({theme:a[1],defaultValue:a[2]}),n=f.lastIndex}t.push({rawString:e.substring(n)})}return t}(o),t=u.runState,n=t.mode,i=t.buffer,r=t.flushTimer;s||n===a.async?(i.push(e),r||(u.runState.flushTimer=self.setTimeout(function(){u.runState.flushTimer=0,m(function(){var e=u.runState.buffer.slice();u.runState.buffer=[];var t=[].concat.apply([],e);t.length>0&&_(t)})},0))):_(e)});const b={spfxExtensionloader_be4e0fd1:"spfxExtensionloader_be4e0fd1",teams_be4e0fd1:"teams_be4e0fd1",welcome_be4e0fd1:"welcome_be4e0fd1",welcomeImage_be4e0fd1:"welcomeImage_be4e0fd1",links_be4e0fd1:"links_be4e0fd1",SPFxExtensionApp_be4e0fd1:"SPFxExtensionApp_be4e0fd1",loader_be4e0fd1:"loader_be4e0fd1",rotation_be4e0fd1:"rotation_be4e0fd1",buttonLoader_be4e0fd1:"buttonLoader_be4e0fd1",shimmerShine_be4e0fd1:"shimmerShine_be4e0fd1",placeholderShimmer_be4e0fd1:"placeholderShimmer_be4e0fd1",applicationListSection_be4e0fd1:"applicationListSection_be4e0fd1",header_be4e0fd1:"header_be4e0fd1",icon_be4e0fd1:"icon_be4e0fd1",iconFont_be4e0fd1:"iconFont_be4e0fd1",appButtonsContainer_be4e0fd1:"appButtonsContainer_be4e0fd1",appButtonsWrapper_be4e0fd1:"appButtonsWrapper_be4e0fd1",appButton_be4e0fd1:"appButton_be4e0fd1"}}
|
|
3
|
+
,962:e=>{e.exports=i},676:e=>{e.exports=t},877:e=>{e.exports=n},642:e=>{e.exports=a}},d={};function l(e){var t=d[e];if(void 0!==t)return t.exports;var n=d[e]={exports:{}};return c[e](n,n.exports,l),n.exports}l.m=c,l.d=(e,t)=>{for(var n in t)l.o(t,n)&&!l.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},l.f={},l.e=e=>Promise.all(Object.keys(l.f).reduce((t,n)=>(l.f[n](e,t),t),[])),l.u=e=>"spfx-extension-loader_e83dead2a8f8f000d374.js",l.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),l.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r={},o="6cc779ad78b22e0ab7384b402525e382:",l.l=(e,t,n,a)=>{if(r[e])r[e].push(t);else{var i,s;if(void 0!==n)for(var c=document.getElementsByTagName("script"),d=0;d<c.length;d++){var u=c[d];if(u.getAttribute("src")==e||u.getAttribute("data-webpack")==o+n){i=u;break}}i||(s=!0,(i=document.createElement("script")).charset="utf-8",i.timeout=120,l.nc&&i.setAttribute("nonce",l.nc),i.setAttribute("data-webpack",o+n),i.src=e,0!==i.src.indexOf(window.location.origin+"/")&&(i.crossOrigin="anonymous")),r[e]=[t];var f=(t,n)=>{i.onerror=i.onload=null,clearTimeout(p);var a=r[e];if(delete r[e],i.parentNode&&i.parentNode.removeChild(i),a&&a.forEach(e=>e(n)),t)return t(n)},p=setTimeout(f.bind(null,void 0,{type:"timeout",target:i}),12e4);i.onerror=f.bind(null,i.onerror),i.onload=f.bind(null,i.onload),s&&document.head.appendChild(i)}},l.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},s=e?e.src:"",l.p=s.slice(0,s.lastIndexOf("/")+1),(()=>{var e={650:0};l.f.j=(t,n)=>{var a=l.o(e,t)?e[t]:void 0;if(0!==a)if(a)n.push(a[2]);else{var i=new Promise((n,i)=>a=e[t]=[n,i]);n.push(a[2]=i);var r=l.p+l.u(t),o=new Error;l.l(r,n=>{if(l.o(e,t)&&(0!==(a=e[t])&&(e[t]=void 0),a)){var i=n&&("load"===n.type?"missing":n.type),r=n&&n.target&&n.target.src;o.message="Loading chunk "+t+" failed.\n("+i+": "+r+")",o.name="ChunkLoadError",o.type=i,o.request=r,a[1](o)}},"chunk-"+t,t)}};var t=(t,n)=>{var a,i,[r,o,s]=n,c=0;if(r.some(t=>0!==e[t])){for(a in o)l.o(o,a)&&(l.m[a]=o[a]);s&&s(l)}for(t&&t(n);c<r.length;c++)i=r[c],l.o(e,i)&&e[i]&&e[i][0](),e[i]=0},n=self.webpackJsonp_6cc779ad78b22e0ab7384b402525e382=self.webpackJsonp_6cc779ad78b22e0ab7384b402525e382||[];n.forEach(t.bind(null,0)),n.push=t.bind(null,n.push.bind(n))})();var u={};return(()=>{l.r(u),l.d(u,{default:()=>r});var e=l(676),t=l(877),n=l(642),a=l(367),i=l(962);l(574);class r extends n.BaseClientSideWebPart{SPFxExtensionInstance;allApps=[];appCatalogUrl="/sites/appcatalog";dropDownProps={options:[],selectedKey:"",disabled:!0};appDescription="";hideAppSelectorWhenAppLoaded=!1;hideConfiguratorButton=!1;configDomElement;themeProvider;serviceScope;appButtonElements=[];webpartSectionElement=document.createElement("section");webpartSectionTitle=document.createElement("header");appButtonsWrapper=document.createElement("div");appButtonsContainer=document.createElement("div");async onInit(){const t=e.Environment.type===e.EnvironmentType.SharePoint?"SharePoint":"ClassicSharePoint";this.themeProvider=this.context.serviceScope.consume(i.ThemeProvider.serviceKey),this.serviceScope=this.context.serviceScope;const{initCore:n}=await l.e(548).then(l.bind(l,364));await n(t),this.appCatalogUrl=window.__SPFxExtensions.Utils.ConfiguratorPageUrl}openPropertyPane(){this.context.propertyPane.open()}closePropertyPane(){this.context.propertyPane.close()}isPropertyPaneOpen(){return this.context.propertyPane.isPropertyPaneOpen()}saveConfigValue(e,t=!0){this.properties.SPFxExtensionAppConfiguration=e,t&&this.SPFxExtensionInstance?.executeListeners("onConfigurationChange",e)}getConfigValue(e){if(e){let t=this.properties[e];return void 0===t&&(t=this.properties.SPFxExtensionAppConfiguration),t}return this.properties.SPFxExtensionAppConfiguration}getSearchData(){return{searchableText:this.properties.searchableText,searchableHtml:this.properties.searchableHtml}}setSearchData(e){this.properties.searchableText=e.searchableText,this.properties.searchableHtml=e.searchableHtml}getTopActions(){return this.properties.topActions??[]}setTopActions(e){this.properties.topActions=e??[]}getThemeProvider(){return this.themeProvider}getConfigDomElement(){return this.configDomElement}getContext(){return this.context}getServiceScope(){return this.serviceScope}async mountApp(e){this.domElement.innerHTML="";try{const t={domElement:this.domElement,webpart:this,openPropertyPane:()=>{this.openPropertyPane()},closePropertyPane:()=>{this.closePropertyPane()},isPropertyPaneOpen:()=>this.isPropertyPaneOpen(),saveConfigValue:(e,t=!0)=>{this.saveConfigValue(e,t)},getConfigValue:e=>this.getConfigValue(e),getSearchableData:()=>this.getSearchData(),setSearchableData:e=>{this.setSearchData(e)},setTopActions:e=>{this.setTopActions(e)},getTopActions:()=>this.getTopActions(),getThemeProvider:()=>this.getThemeProvider(),getConfigDomElement:()=>this.getConfigDomElement(),getContext:()=>this.getContext(),getServiceScope:()=>this.getServiceScope()};if(this.SPFxExtensionInstance=await window.__SPFxExtensions.InstantiateApp(e,t),!this.SPFxExtensionInstance)return void console.warn(a.Lf,"App instance is undefined, cannot mount app",e);const n=window.__SPFxExtensions.Apps.find(t=>t.id===e);n&&(this.appDescription=n.description)}catch(t){return console.error(a.Lf,"Error while mounting appid",e,t),new Error(`${t}`)}}unmountApp(){this.SPFxExtensionInstance&&this.SPFxExtensionInstance.unmount?.(),this.SPFxExtensionInstance=void 0,this.domElement.innerHTML=""}generateIconElement(e){const t=document.createElement("i");if(t.classList.add("icon_be4e0fd1"),!e)return t.innerHTML='<svg fill="currentColor" class="___12fm75w f1w7gpdv fez10in fg4l7m0" aria-hidden="true" width="28" height="28" viewBox="0 0 28 28" xmlns="http://www.w3.org/2000/svg"><path d="M20.84 2.66a2.25 2.25 0 0 0-3.18 0L13.5 6.8v-.56c0-1.24-1-2.25-2.25-2.25h-7C3.01 4 2 5.01 2 6.25v18c0 .97.78 1.75 1.75 1.75h18c1.24 0 2.25-1 2.25-2.25v-7c0-1.24-1-2.25-2.25-2.25h-.56l4.16-4.15c.88-.88.88-2.3 0-3.19l-4.5-4.5ZM17.31 14.5H13.5v-3.8l3.8 3.8Zm1.41-10.78c.3-.3.77-.3 1.06 0l4.5 4.5c.3.3.3.77 0 1.06l-4.5 4.51c-.3.3-.77.3-1.06 0l-4.5-4.5a.75.75 0 0 1 0-1.07l4.5-4.5ZM12 6.25v8.25H3.5V6.25c0-.41.34-.75.75-.75h7c.41 0 .75.34.75.75Zm-8.5 17.5V16H12v8.5H4.25a.75.75 0 0 1-.75-.75Zm10-7.75h8.25c.41 0 .75.34.75.75v7c0 .42-.34.75-.75.75H13.5V16Z" fill="currentColor"></path></svg>',t;if("font"===e.iconType&&e.fontFamily&&(t.style.fontFamily=e.fontFamily,t.classList.add("iconFont_be4e0fd1")),"url"===e.iconType){const n=document.createElement("img");n.src=e.iconData,t.appendChild(n)}return"svg"===e.iconType&&(t.innerHTML=e.iconData),t}createAndAppendAppButtons(e){const t=document.createElement("button");t.title=a.Bc,t.ariaLabel=a.Bc,t.className="appButton_be4e0fd1";const n=this.generateIconElement(e.icon);t.append(n,e.name),t.title=e.name,t.addEventListener("click",t=>{t.stopPropagation(),t.preventDefault(),this.properties.selectedApp=e.id,this.webpartSectionElement.remove(),this.mountApp(e.id).catch(()=>{})}),this.appButtonsContainer.appendChild(t)}createWebpartSection(e){this.webpartSectionElement.className="applicationListSection_be4e0fd1",this.webpartSectionTitle.className="header_be4e0fd1",this.webpartSectionElement.appendChild(this.webpartSectionTitle),e&&this.webpartSectionElement.appendChild(this.appButtonsWrapper)}renderDisplayMode(){this.webpartSectionElement.ariaLabel=a.oz,this.webpartSectionTitle.textContent=a.oz,this.createWebpartSection(),this.domElement.appendChild(this.webpartSectionElement)}async renderEditMode(){this.webpartSectionElement.ariaLabel=a.Ne,this.webpartSectionTitle.textContent=a.Ne,this.createWebpartSection(!0),this.appButtonsContainer.className="appButtonsContainer_be4e0fd1",this.appButtonsWrapper.appendChild(this.appButtonsContainer),this.appButtonsWrapper.className="appButtonsWrapper_be4e0fd1",this.domElement.appendChild(this.webpartSectionElement),window.__SPFxExtensions.AddAppEventListener("appAdded",e=>{e.isWebPartApp&&this.createAndAppendAppButtons(e)}),window.__SPFxExtensions.Apps.filter(e=>e.registrationCompleted).forEach(e=>{e.isWebPartApp&&this.createAndAppendAppButtons(e)});try{await window.__SPFxExtensions.Utils.spAppInitializationPromise,window.__SPFxExtensions.Utils.appManifestPromises.forEach(e=>{const t=document.createElement("div"),n=document.createElement("span");t.className="buttonLoader_be4e0fd1",n.className="loader_be4e0fd1",t.appendChild(n),this.appButtonsContainer.append(t),e.catch(()=>{}).finally(()=>{t.remove()})})}catch(e){return console.error(a.Lf,"Error while awaiting app initialization",e),new Error(`Error while awaiting app initialization: ${e}`)}}async renderEmptyApp(){if(this.domElement.innerHTML="",this.domElement.className="SPFxExtensionApp_be4e0fd1",this.displayMode!==e.DisplayMode.Read)return this.renderEditMode();this.renderDisplayMode()}async render(){let e;try{if(this.SPFxExtensionInstance){if(!this.SPFxExtensionInstance.unmountOnRender)return void this.SPFxExtensionInstance.executeListeners("onRender",void 0);this.unmountApp()}if(this.properties.selectedApp&&!this.SPFxExtensionInstance)return void(e=await this.mountApp(this.properties.selectedApp));e=await this.renderEmptyApp()}finally{this.renderCompleted(e,!0)}}renderCompleted(e,t){super.renderCompleted(e,t)}get isRenderAsync(){return!0}get propertiesMetadata(){return{searchableText:{isSearchablePlainText:!0},searchableHtml:{isHtmlString:!0}}}CustomWebpartConfigurationField(e){return{type:t.PropertyPaneFieldType.Custom,targetProperty:e,properties:{key:e,onRender:(e,t,n)=>{this.configDomElement=e,this.SPFxExtensionInstance?.instanceLoadPromise.then(()=>{this.SPFxExtensionInstance?.executeListeners("onConfigurationRender",{domElement:e})}).catch(e=>{console.error(a.Lf,"Error while awaiting app to load",e)})},onDispose:(e,t)=>{this.SPFxExtensionInstance?.executeListeners("onConfigurationClose",{domElement:e}),this.configDomElement=void 0}}}}onPropertyPaneConfigurationStart(){window.__SPFxExtensions.AllAppAssetsLoadedPromise.then(()=>{const e=window.__SPFxExtensions.Apps.find(e=>e.id===this.properties.selectedApp);e&&(this.appDescription=e.description,this.hideAppSelectorWhenAppLoaded=e.hideAppSelectorWhenAppLoaded??!1,this.hideConfiguratorButton=e.hideConfiguratorButton??!1),this.dropDownProps.options?.splice(0,this.dropDownProps.options?.length);const t=window.__SPFxExtensions.Apps.filter(e=>e.isWebPartApp).map(e=>({key:e.id,text:e.name}));this.dropDownProps.options?.push(...t),this.dropDownProps.selectedKey=this.properties.selectedApp,this.dropDownProps.disabled=!1,this.context.propertyPane.refresh()}).catch(e=>{console.error(a.Lf,"Error while awaiting all app assets to load",e)})}getPropertyPaneConfiguration(){const e={groupFields:[(0,t.PropertyPaneLabel)("spfxExtensionLoaderLabel",{text:"App not working? Try refreshing the page. Or go to the configuration page."}),(0,t.PropertyPaneButton)("configuratorButton",{text:"Open Configurator",buttonType:1,onClick:()=>{window.open(`${this.appCatalogUrl}?web=${this.context.pageContext.web.absoluteUrl}`,"_blank")}})]},n=this.hideConfiguratorButton?[]:[e],a={groupFields:[(0,t.PropertyPaneDropdown)("selectedApp",{label:"App",disabled:this.dropDownProps.disabled,options:this.dropDownProps.options,selectedKey:this.dropDownProps.selectedKey}),(0,t.PropertyPaneLabel)("selectedAppDecription",{text:this.appDescription})]};return{pages:[{groups:[...n,...this.hideAppSelectorWhenAppLoaded?[]:[a],{groupFields:[this.CustomWebpartConfigurationField("SPFxExtensionAppConfiguration")]}]}]}}getTopActionsConfiguration(){return{topActions:this.properties.topActions??[],onExecute:(e,t)=>{this.SPFxExtensionInstance?.executeListeners("onTopActionExecute",{actionName:e,updatedValue:t})}}}onPropertyPaneConfigurationComplete(){!this.context.propertyPane.isPropertyPaneOpen()&&this.SPFxExtensionInstance&&this.SPFxExtensionInstance.executeListeners("onConfigurationClose",{domElement:this.configDomElement})}onPropertyPaneFieldChanged(e,t,n){if("selectedApp"===e){if(t&&t!==n&&this.SPFxExtensionInstance){if(!confirm("You are about to switch app, this will erase all previous app configuration. Are you sure?"))return void(this.properties[e]=t);this.unmountApp()}n&&(this.webpartSectionElement.remove(),this.mountApp(n).catch(()=>{}))}}onDisplayModeChanged(t){const n=t===e.DisplayMode.Edit?"Read":"Edit";this.SPFxExtensionInstance?.executeListeners("onDisplayModeChange",n)}onAfterPropertyPaneChangesApplied(){this.SPFxExtensionInstance?.executeListeners("onPropertyPaneChangesApplied",void 0)}onAfterResize(e){this.SPFxExtensionInstance?.executeListeners("onAfterResize",{newWidth:e})}onDispose(){this.unmountApp(),this.appButtonElements.forEach(e=>{e.remove()}),this.appButtonElements.splice(0,this.appButtonElements.length),this.webpartSectionElement.remove(),this.webpartSectionTitle.remove(),this.appButtonsWrapper.remove(),this.appButtonsContainer.remove()}onThemeChanged(e){this.SPFxExtensionInstance?.executeListeners("onThemeChange",e)}get dataVersion(){return e.Version.parse("1.0")}}})(),u})())})();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@spfx-extensions/package",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.5.1",
|
|
4
4
|
"author": "SPWizard01",
|
|
5
5
|
"access": "public",
|
|
6
6
|
"repository": {
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"@microsoft/sp-office-ui-fabric-core": "^1.21.1",
|
|
45
45
|
"@microsoft/sp-property-pane": "^1.21.1",
|
|
46
46
|
"@microsoft/sp-webpart-base": "^1.21.1",
|
|
47
|
-
"@spfx-extensions/core": "^0.
|
|
47
|
+
"@spfx-extensions/core": "^0.9.0",
|
|
48
48
|
"tslib": "^2.8.1"
|
|
49
49
|
},
|
|
50
50
|
"devDependencies": {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DisplayMode, Environment, EnvironmentType, Version } from "@microsoft/sp-core-library";
|
|
1
|
+
import { DisplayMode, Environment, EnvironmentType, ServiceScope, Version } from "@microsoft/sp-core-library";
|
|
2
2
|
import {
|
|
3
3
|
IPropertyPaneConditionalGroup,
|
|
4
4
|
type IPropertyPaneConfiguration,
|
|
@@ -13,16 +13,20 @@ import {
|
|
|
13
13
|
PropertyPaneLabel
|
|
14
14
|
} from "@microsoft/sp-property-pane";
|
|
15
15
|
import { BaseClientSideWebPart, IWebPartPropertiesMetadata } from "@microsoft/sp-webpart-base";
|
|
16
|
-
import
|
|
17
|
-
|
|
18
|
-
import styles from "./SpfxExtensionloaderWebPart.module.scss";
|
|
19
|
-
//import * as strings from "SpfxExtensionloaderWebPartStrings";
|
|
16
|
+
import { ITopActions, ITopActionsField } from "@microsoft/sp-top-actions";
|
|
20
17
|
import { SPFxExtensionAppConfig, SPFxExtensionAppDefinition, SPFxExtensionAppIcon, SPFxExtensionAppInstance, SPFxExtensionAppRuntimeConfig, SPFxExtensionAppSearchableData } from "@spfx-extensions/core";
|
|
21
18
|
import { APP_BUTTON_LABEL, EDIT_PAGE_AND_SELECT_WEBPART, SELECT_WEBPART, SPFXPREFIX } from "../../utilities/constants";
|
|
19
|
+
import {
|
|
20
|
+
ThemeProvider,
|
|
21
|
+
type IReadonlyTheme,
|
|
22
|
+
} from '@microsoft/sp-component-base';
|
|
23
|
+
//import * as strings from "SpfxExtensionloaderWebPartStrings";
|
|
24
|
+
import styles from "./SpfxExtensionloaderWebPart.module.scss";
|
|
22
25
|
|
|
23
26
|
export interface ISpfxExtensionloaderWebPartProps extends SPFxExtensionAppSearchableData {
|
|
24
27
|
selectedApp: string;
|
|
25
28
|
SPFxExtensionAppConfiguration: SPFxExtensionAppConfig | undefined;
|
|
29
|
+
topActions: ITopActionsField[];
|
|
26
30
|
}
|
|
27
31
|
|
|
28
32
|
type propertyPath = keyof ISpfxExtensionloaderWebPartProps;
|
|
@@ -43,7 +47,15 @@ export default class SpfxExtensionloaderWebPart extends BaseClientSideWebPart<IS
|
|
|
43
47
|
hideAppSelectorWhenAppLoaded = false;
|
|
44
48
|
hideConfiguratorButton = false;
|
|
45
49
|
configDomElement: HTMLElement | undefined;
|
|
46
|
-
|
|
50
|
+
themeProvider: ThemeProvider | undefined;
|
|
51
|
+
serviceScope: ServiceScope | undefined;
|
|
52
|
+
appButtonElements: HTMLElement[] = [];
|
|
53
|
+
|
|
54
|
+
webpartSectionElement = document.createElement("section");
|
|
55
|
+
webpartSectionTitle = document.createElement("header");
|
|
56
|
+
appButtonsWrapper = document.createElement("div");
|
|
57
|
+
appButtonsContainer = document.createElement("div");
|
|
58
|
+
|
|
47
59
|
|
|
48
60
|
public async onInit() {
|
|
49
61
|
if (DEBUG) {
|
|
@@ -53,72 +65,16 @@ export default class SpfxExtensionloaderWebPart extends BaseClientSideWebPart<IS
|
|
|
53
65
|
Environment.type === EnvironmentType.SharePoint
|
|
54
66
|
? "SharePoint"
|
|
55
67
|
: "ClassicSharePoint";
|
|
68
|
+
this.themeProvider = this.context.serviceScope.consume(ThemeProvider.serviceKey);
|
|
69
|
+
this.serviceScope = this.context.serviceScope;
|
|
56
70
|
const { initCore } = await import(/* webpackChunkName: "spfx-extension-loader" */"../../services/initCoreService");
|
|
57
71
|
//init core then do stuff;
|
|
58
72
|
await initCore(envType);
|
|
59
73
|
this.appCatalogUrl = window.__SPFxExtensions.Utils.ConfiguratorPageUrl;
|
|
60
74
|
}
|
|
61
75
|
|
|
62
|
-
protected onPropertyPaneConfigurationComplete(): void {
|
|
63
|
-
const isPaneOpen = this.context.propertyPane.isPropertyPaneOpen();
|
|
64
|
-
|
|
65
|
-
// notify close only if the pane is not open
|
|
66
|
-
// complete event fires also when config is saved
|
|
67
|
-
// This event method is invoked in the following cases:
|
|
68
|
-
|
|
69
|
-
// When the CONFIGURATION_COMPLETE_TIMEOUT((currently the value is 5 secs) elapses after the last change.
|
|
70
|
-
|
|
71
|
-
// When user clicks the "X" (close) button before the CONFIGURATION_COMPLETE_TIMEOUT elapses.
|
|
72
|
-
|
|
73
|
-
// When user clicks the 'Apply' button before the CONFIGURATION_COMPLETE_TIMEOUT elapses.
|
|
74
|
-
|
|
75
|
-
// When the user switches web parts then the current web part gets this event.
|
|
76
|
-
if (!isPaneOpen && this.SPFxExtensionInstance) {
|
|
77
|
-
|
|
78
|
-
this.SPFxExtensionInstance.executeListeners(
|
|
79
|
-
"onConfigurationClose",
|
|
80
|
-
undefined
|
|
81
|
-
);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
protected onPropertyPaneFieldChanged(
|
|
86
|
-
propertyPath: propertyPath,
|
|
87
|
-
//eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
88
|
-
oldValue: any,
|
|
89
|
-
//eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
90
|
-
newValue: any
|
|
91
|
-
): void {
|
|
92
|
-
// if selected app changed unmount the old app
|
|
93
|
-
if (propertyPath === "selectedApp") {
|
|
94
|
-
if (oldValue && oldValue !== newValue && this.SPFxExtensionInstance) {
|
|
95
|
-
const shouldUnmount = confirm(
|
|
96
|
-
"You are about to switch app, this will erase all previous app configuration. Are you sure?"
|
|
97
|
-
);
|
|
98
|
-
if (!shouldUnmount) {
|
|
99
|
-
this.properties[propertyPath] = oldValue;
|
|
100
|
-
return;
|
|
101
|
-
}
|
|
102
|
-
this.unmountApp();
|
|
103
|
-
}
|
|
104
|
-
// if new app was selected, mount it
|
|
105
|
-
if (newValue) {
|
|
106
|
-
this.webpartSectionElement.remove();
|
|
107
|
-
this.mountApp(newValue).catch(() => {
|
|
108
|
-
// do nothing
|
|
109
|
-
});
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
protected onDisplayModeChanged(oldDisplayMode: DisplayMode): void {
|
|
115
|
-
const mode = oldDisplayMode === DisplayMode.Edit ? "Read" : "Edit";
|
|
116
|
-
if (this.SPFxExtensionInstance) {
|
|
117
|
-
this.SPFxExtensionInstance.executeListeners("onDisplayModeChange", mode);
|
|
118
|
-
return;
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
76
|
|
|
77
|
+
//#region App mounting and property forwarding
|
|
122
78
|
openPropertyPane() {
|
|
123
79
|
// if (this.context.propertyPane.isPropertyPaneOpen()) {
|
|
124
80
|
// this.context.propertyPane.close();
|
|
@@ -167,6 +123,30 @@ export default class SpfxExtensionloaderWebPart extends BaseClientSideWebPart<IS
|
|
|
167
123
|
this.properties.searchableHtml = data.searchableHtml;
|
|
168
124
|
}
|
|
169
125
|
|
|
126
|
+
getTopActions() {
|
|
127
|
+
return this.properties.topActions ?? [];
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
setTopActions(fields: ITopActionsField[]) {
|
|
131
|
+
this.properties.topActions = fields ?? [];
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
getThemeProvider() {
|
|
135
|
+
return this.themeProvider;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
getConfigDomElement() {
|
|
139
|
+
return this.configDomElement;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
getContext() {
|
|
143
|
+
return this.context;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
getServiceScope() {
|
|
147
|
+
return this.serviceScope;
|
|
148
|
+
}
|
|
149
|
+
|
|
170
150
|
private async mountApp(appId: string) {
|
|
171
151
|
if (ISDEBUG) {
|
|
172
152
|
console.debug(SPFXPREFIX, "Mounting app", appId, "at", this.domElement);
|
|
@@ -177,8 +157,6 @@ export default class SpfxExtensionloaderWebPart extends BaseClientSideWebPart<IS
|
|
|
177
157
|
const runTimeConfig: SPFxExtensionAppRuntimeConfig = {
|
|
178
158
|
domElement: this.domElement,
|
|
179
159
|
//eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
180
|
-
webpartContext: this.context as any,
|
|
181
|
-
//eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
182
160
|
webpart: this as any,
|
|
183
161
|
openPropertyPane: () => {
|
|
184
162
|
this.openPropertyPane();
|
|
@@ -201,9 +179,28 @@ export default class SpfxExtensionloaderWebPart extends BaseClientSideWebPart<IS
|
|
|
201
179
|
setSearchableData: (data: SPFxExtensionAppSearchableData) => {
|
|
202
180
|
this.setSearchData(data);
|
|
203
181
|
},
|
|
182
|
+
setTopActions: (actions: ITopActionsField[]) => {
|
|
183
|
+
this.setTopActions(actions);
|
|
184
|
+
},
|
|
185
|
+
getTopActions: () => {
|
|
186
|
+
return this.getTopActions();
|
|
187
|
+
},
|
|
188
|
+
getThemeProvider: () => {
|
|
189
|
+
return this.getThemeProvider();
|
|
190
|
+
},
|
|
191
|
+
getConfigDomElement: () => {
|
|
192
|
+
return this.getConfigDomElement();
|
|
193
|
+
},
|
|
194
|
+
getContext: () => {
|
|
195
|
+
return this.getContext();
|
|
196
|
+
},
|
|
197
|
+
getServiceScope: () => {
|
|
198
|
+
return this.getServiceScope();
|
|
199
|
+
}
|
|
204
200
|
};
|
|
205
201
|
this.SPFxExtensionInstance = await window.__SPFxExtensions.InstantiateApp(appId, runTimeConfig);
|
|
206
202
|
if (!this.SPFxExtensionInstance) {
|
|
203
|
+
console.warn(SPFXPREFIX, "App instance is undefined, cannot mount app", appId);
|
|
207
204
|
return;
|
|
208
205
|
}
|
|
209
206
|
const newApp = window.__SPFxExtensions.Apps.find((app) => app.id === appId);
|
|
@@ -216,12 +213,11 @@ export default class SpfxExtensionloaderWebPart extends BaseClientSideWebPart<IS
|
|
|
216
213
|
// this.context.propertyPane.open();
|
|
217
214
|
// }
|
|
218
215
|
}
|
|
219
|
-
this.renderCompleted(undefined, true);
|
|
220
216
|
}
|
|
221
217
|
catch (err) {
|
|
222
218
|
console.error(SPFXPREFIX, "Error while mounting appid", appId, err);
|
|
223
219
|
const error = new Error(`${err}`);
|
|
224
|
-
|
|
220
|
+
return error;
|
|
225
221
|
}
|
|
226
222
|
}
|
|
227
223
|
|
|
@@ -241,20 +237,9 @@ export default class SpfxExtensionloaderWebPart extends BaseClientSideWebPart<IS
|
|
|
241
237
|
this.SPFxExtensionInstance = undefined;
|
|
242
238
|
this.domElement.innerHTML = "";
|
|
243
239
|
}
|
|
240
|
+
//#endregion
|
|
244
241
|
|
|
245
|
-
|
|
246
|
-
if (DEBUG) {
|
|
247
|
-
console.debug(SPFXPREFIX, "onDispose");
|
|
248
|
-
}
|
|
249
|
-
this.unmountApp();
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
appButtonElements: HTMLElement[] = [];
|
|
253
|
-
|
|
254
|
-
webpartSectionElement = document.createElement("section");
|
|
255
|
-
webpartSectionTitle = document.createElement("header");
|
|
256
|
-
appButtonsWrapper = document.createElement("div");
|
|
257
|
-
appButtonsContainer = document.createElement("div");
|
|
242
|
+
//#region HTML Elements Rendering
|
|
258
243
|
|
|
259
244
|
generateIconElement(icon?: SPFxExtensionAppIcon) {
|
|
260
245
|
const iconElement = document.createElement("i");
|
|
@@ -366,6 +351,7 @@ export default class SpfxExtensionloaderWebPart extends BaseClientSideWebPart<IS
|
|
|
366
351
|
}
|
|
367
352
|
catch (err) {
|
|
368
353
|
console.error(SPFXPREFIX, "Error while awaiting app initialization", err);
|
|
354
|
+
return new Error(`Error while awaiting app initialization: ${err}`);
|
|
369
355
|
}
|
|
370
356
|
}
|
|
371
357
|
|
|
@@ -381,12 +367,11 @@ export default class SpfxExtensionloaderWebPart extends BaseClientSideWebPart<IS
|
|
|
381
367
|
|
|
382
368
|
if (this.displayMode === DisplayMode.Read) {
|
|
383
369
|
this.renderDisplayMode();
|
|
384
|
-
|
|
385
|
-
await this.renderEditMode();
|
|
370
|
+
return;
|
|
386
371
|
}
|
|
387
|
-
|
|
388
|
-
this.renderCompleted(undefined, true);
|
|
372
|
+
return this.renderEditMode();
|
|
389
373
|
}
|
|
374
|
+
//#endregion HTML Elements Rendering
|
|
390
375
|
|
|
391
376
|
public async render() {
|
|
392
377
|
// might not be required anymore
|
|
@@ -398,24 +383,29 @@ export default class SpfxExtensionloaderWebPart extends BaseClientSideWebPart<IS
|
|
|
398
383
|
if (DEBUG) {
|
|
399
384
|
console.debug(SPFXPREFIX, "render");
|
|
400
385
|
}
|
|
386
|
+
let possibleError: Error | undefined = undefined;
|
|
401
387
|
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
if (this.SPFxExtensionInstance
|
|
406
|
-
this.
|
|
407
|
-
|
|
408
|
-
|
|
388
|
+
try {
|
|
389
|
+
//in live editing mode dispose is not called when in production build for some reason
|
|
390
|
+
//we unmount and remount the app if applicable
|
|
391
|
+
if (this.SPFxExtensionInstance) {
|
|
392
|
+
if (this.SPFxExtensionInstance.unmountOnRender) {
|
|
393
|
+
this.unmountApp();
|
|
394
|
+
} else {
|
|
395
|
+
this.SPFxExtensionInstance.executeListeners("onRender", undefined);
|
|
396
|
+
return;
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
if (this.properties.selectedApp && !this.SPFxExtensionInstance) {
|
|
401
|
+
possibleError = await this.mountApp(this.properties.selectedApp);
|
|
409
402
|
return;
|
|
410
403
|
}
|
|
411
|
-
}
|
|
412
404
|
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
405
|
+
possibleError = await this.renderEmptyApp();
|
|
406
|
+
} finally {
|
|
407
|
+
this.renderCompleted(possibleError, true);
|
|
416
408
|
}
|
|
417
|
-
|
|
418
|
-
await this.renderEmptyApp();
|
|
419
409
|
}
|
|
420
410
|
|
|
421
411
|
protected renderCompleted(error?: Error, didUpdate?: boolean): void {
|
|
@@ -443,6 +433,39 @@ export default class SpfxExtensionloaderWebPart extends BaseClientSideWebPart<IS
|
|
|
443
433
|
};
|
|
444
434
|
}
|
|
445
435
|
|
|
436
|
+
CustomWebpartConfigurationField(
|
|
437
|
+
name: string
|
|
438
|
+
): IPropertyPaneField<IPropertyPaneCustomFieldProps> {
|
|
439
|
+
return {
|
|
440
|
+
type: PropertyPaneFieldType.Custom,
|
|
441
|
+
targetProperty: name,
|
|
442
|
+
properties: {
|
|
443
|
+
key: name,
|
|
444
|
+
onRender: (domElement, _context, _callBack) => {
|
|
445
|
+
this.configDomElement = domElement;
|
|
446
|
+
// when app instance is loaded forward the render event
|
|
447
|
+
this.SPFxExtensionInstance?.instanceLoadPromise
|
|
448
|
+
.then(() => {
|
|
449
|
+
this.SPFxExtensionInstance?.executeListeners(
|
|
450
|
+
"onConfigurationRender",
|
|
451
|
+
{
|
|
452
|
+
domElement,
|
|
453
|
+
}
|
|
454
|
+
);
|
|
455
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
456
|
+
}).catch((err: any) => {
|
|
457
|
+
console.error(SPFXPREFIX, "Error while awaiting app to load", err);
|
|
458
|
+
});
|
|
459
|
+
},
|
|
460
|
+
onDispose: (domElement, _context) => {
|
|
461
|
+
this.SPFxExtensionInstance?.executeListeners("onConfigurationClose", { domElement });
|
|
462
|
+
this.configDomElement = undefined;
|
|
463
|
+
},
|
|
464
|
+
// context: this.context,
|
|
465
|
+
},
|
|
466
|
+
};
|
|
467
|
+
}
|
|
468
|
+
|
|
446
469
|
protected onPropertyPaneConfigurationStart(): void {
|
|
447
470
|
if (ISDEBUG) {
|
|
448
471
|
console.debug(SPFXPREFIX, "Property pane configuration start");
|
|
@@ -486,43 +509,6 @@ export default class SpfxExtensionloaderWebPart extends BaseClientSideWebPart<IS
|
|
|
486
509
|
});
|
|
487
510
|
}
|
|
488
511
|
|
|
489
|
-
CustomWebpartConfigurationField(
|
|
490
|
-
name: string
|
|
491
|
-
): IPropertyPaneField<IPropertyPaneCustomFieldProps> {
|
|
492
|
-
return {
|
|
493
|
-
type: PropertyPaneFieldType.Custom,
|
|
494
|
-
targetProperty: name,
|
|
495
|
-
properties: {
|
|
496
|
-
key: "SPFxExtensionAppConfiguration",
|
|
497
|
-
onRender: (domElement, _context, _callBack) => {
|
|
498
|
-
this.configDomElement = domElement;
|
|
499
|
-
if (this.SPFxExtensionInstance) {
|
|
500
|
-
// when app instance is loaded forward the render event
|
|
501
|
-
this.SPFxExtensionInstance.instanceLoadPromise.then(() => {
|
|
502
|
-
this.SPFxExtensionInstance?.executeListeners(
|
|
503
|
-
"onConfigurationRender",
|
|
504
|
-
{
|
|
505
|
-
domElement,
|
|
506
|
-
}
|
|
507
|
-
);
|
|
508
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
509
|
-
}).catch((err: any) => {
|
|
510
|
-
console.error(SPFXPREFIX, "Error while awaiting app to load", err);
|
|
511
|
-
});
|
|
512
|
-
}
|
|
513
|
-
},
|
|
514
|
-
onDispose: (_domeElement, _context) => {
|
|
515
|
-
if (this.SPFxExtensionInstance) {
|
|
516
|
-
this.SPFxExtensionInstance.executeListeners(
|
|
517
|
-
"onConfigurationClose",
|
|
518
|
-
undefined
|
|
519
|
-
);
|
|
520
|
-
}
|
|
521
|
-
},
|
|
522
|
-
},
|
|
523
|
-
};
|
|
524
|
-
}
|
|
525
|
-
|
|
526
512
|
protected getPropertyPaneConfiguration(): IPropertyPaneConfiguration {
|
|
527
513
|
const configuratorButton: IPropertyPaneGroup | IPropertyPaneConditionalGroup = {
|
|
528
514
|
groupFields: [
|
|
@@ -574,7 +560,97 @@ export default class SpfxExtensionloaderWebPart extends BaseClientSideWebPart<IS
|
|
|
574
560
|
};
|
|
575
561
|
}
|
|
576
562
|
|
|
563
|
+
public getTopActionsConfiguration(): ITopActions | undefined {
|
|
564
|
+
return {
|
|
565
|
+
topActions: this.properties.topActions ?? [],
|
|
566
|
+
onExecute: (actionName: string, updatedValue: unknown) => {
|
|
567
|
+
this.SPFxExtensionInstance?.executeListeners("onTopActionExecute", {
|
|
568
|
+
actionName,
|
|
569
|
+
updatedValue
|
|
570
|
+
});
|
|
571
|
+
}
|
|
572
|
+
}
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
protected onPropertyPaneConfigurationComplete(): void {
|
|
576
|
+
const isPaneOpen = this.context.propertyPane.isPropertyPaneOpen();
|
|
577
577
|
|
|
578
|
+
// notify close only if the pane is not open
|
|
579
|
+
// complete event fires also when config is saved
|
|
580
|
+
// This event method is invoked in the following cases:
|
|
581
|
+
|
|
582
|
+
// When the CONFIGURATION_COMPLETE_TIMEOUT((currently the value is 5 secs) elapses after the last change.
|
|
583
|
+
|
|
584
|
+
// When user clicks the "X" (close) button before the CONFIGURATION_COMPLETE_TIMEOUT elapses.
|
|
585
|
+
|
|
586
|
+
// When user clicks the 'Apply' button before the CONFIGURATION_COMPLETE_TIMEOUT elapses.
|
|
587
|
+
|
|
588
|
+
// When the user switches web parts then the current web part gets this event.
|
|
589
|
+
if (!isPaneOpen && this.SPFxExtensionInstance) {
|
|
590
|
+
|
|
591
|
+
this.SPFxExtensionInstance.executeListeners(
|
|
592
|
+
"onConfigurationClose",
|
|
593
|
+
{ domElement: this.configDomElement }
|
|
594
|
+
);
|
|
595
|
+
}
|
|
596
|
+
}
|
|
597
|
+
|
|
598
|
+
protected onPropertyPaneFieldChanged(
|
|
599
|
+
propertyPath: propertyPath,
|
|
600
|
+
//eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
601
|
+
oldValue: any,
|
|
602
|
+
//eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
603
|
+
newValue: any
|
|
604
|
+
): void {
|
|
605
|
+
// if selected app changed unmount the old app
|
|
606
|
+
if (propertyPath === "selectedApp") {
|
|
607
|
+
if (oldValue && oldValue !== newValue && this.SPFxExtensionInstance) {
|
|
608
|
+
const shouldUnmount = confirm(
|
|
609
|
+
"You are about to switch app, this will erase all previous app configuration. Are you sure?"
|
|
610
|
+
);
|
|
611
|
+
if (!shouldUnmount) {
|
|
612
|
+
this.properties[propertyPath] = oldValue;
|
|
613
|
+
return;
|
|
614
|
+
}
|
|
615
|
+
this.unmountApp();
|
|
616
|
+
}
|
|
617
|
+
// if new app was selected, mount it
|
|
618
|
+
if (newValue) {
|
|
619
|
+
this.webpartSectionElement.remove();
|
|
620
|
+
this.mountApp(newValue).catch(() => {
|
|
621
|
+
// do nothing
|
|
622
|
+
});
|
|
623
|
+
}
|
|
624
|
+
}
|
|
625
|
+
}
|
|
626
|
+
|
|
627
|
+
protected onDisplayModeChanged(oldDisplayMode: DisplayMode): void {
|
|
628
|
+
const mode = oldDisplayMode === DisplayMode.Edit ? "Read" : "Edit";
|
|
629
|
+
this.SPFxExtensionInstance?.executeListeners("onDisplayModeChange", mode);
|
|
630
|
+
}
|
|
631
|
+
|
|
632
|
+
protected onAfterPropertyPaneChangesApplied(): void {
|
|
633
|
+
this.SPFxExtensionInstance?.executeListeners("onPropertyPaneChangesApplied", undefined);
|
|
634
|
+
}
|
|
635
|
+
|
|
636
|
+
protected onAfterResize(newWidth: number): void {
|
|
637
|
+
this.SPFxExtensionInstance?.executeListeners("onAfterResize", { newWidth });
|
|
638
|
+
}
|
|
639
|
+
|
|
640
|
+
protected onDispose(): void {
|
|
641
|
+
if (DEBUG) {
|
|
642
|
+
console.debug(SPFXPREFIX, "onDispose");
|
|
643
|
+
}
|
|
644
|
+
this.unmountApp();
|
|
645
|
+
this.appButtonElements.forEach((button) => {
|
|
646
|
+
button.remove();
|
|
647
|
+
});
|
|
648
|
+
this.appButtonElements.splice(0, this.appButtonElements.length);
|
|
649
|
+
this.webpartSectionElement.remove();
|
|
650
|
+
this.webpartSectionTitle.remove();
|
|
651
|
+
this.appButtonsWrapper.remove();
|
|
652
|
+
this.appButtonsContainer.remove();
|
|
653
|
+
}
|
|
578
654
|
|
|
579
655
|
// private _getEnvironmentMessage(): Promise<string> {
|
|
580
656
|
// if (!!this.context.sdks.microsoftTeams) { // running in Teams, office.com or Outlook
|
|
@@ -604,21 +680,21 @@ export default class SpfxExtensionloaderWebPart extends BaseClientSideWebPart<IS
|
|
|
604
680
|
// }
|
|
605
681
|
|
|
606
682
|
protected onThemeChanged(currentTheme: IReadonlyTheme | undefined): void {
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
this._isDarkTheme = !!currentTheme.isInverted;
|
|
612
|
-
const {
|
|
613
|
-
semanticColors
|
|
614
|
-
} = currentTheme;
|
|
683
|
+
this.SPFxExtensionInstance?.executeListeners("onThemeChange", currentTheme);
|
|
684
|
+
// if (!currentTheme) {
|
|
685
|
+
// return;
|
|
686
|
+
// }
|
|
615
687
|
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
}
|
|
688
|
+
// this._isDarkTheme = !!currentTheme.isInverted;
|
|
689
|
+
// const {
|
|
690
|
+
// semanticColors
|
|
691
|
+
// } = currentTheme;
|
|
621
692
|
|
|
693
|
+
// if (semanticColors) {
|
|
694
|
+
// this.domElement.style.setProperty("--bodyText", semanticColors.bodyText || null);
|
|
695
|
+
// this.domElement.style.setProperty("--link", semanticColors.link || null);
|
|
696
|
+
// this.domElement.style.setProperty("--linkHovered", semanticColors.linkHovered || null);
|
|
697
|
+
// }
|
|
622
698
|
}
|
|
623
699
|
|
|
624
700
|
protected get dataVersion(): Version {
|
package/dist/debug/ClientSideAssets/spfx-extension-application-customizer_493714911b44aed8a076.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(()=>{var e=document.currentScript;define("8d1029da-85e6-48cc-aaaf-37a5bbc0b9be_1.4.25",["@microsoft/sp-application-base"],t=>(()=>{"use strict";var n,a,i,r={841:e=>{e.exports=t}},o={};function s(e){var t=o[e];if(void 0!==t)return t.exports;var n=o[e]={exports:{}};return r[e](n,n.exports,s),n.exports}s.m=r,s.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return s.d(t,{a:t}),t},s.d=(e,t)=>{for(var n in t)s.o(t,n)&&!s.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},s.f={},s.e=e=>Promise.all(Object.keys(s.f).reduce((t,n)=>(s.f[n](e,t),t),[])),s.u=e=>"spfx-extension-loader_1a88c5c5336cafaa736d.js",s.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n={},a="c9da73a2a8922d123a7c645bd9888674:",s.l=(e,t,i,r)=>{if(n[e])n[e].push(t);else{var o,c;if(void 0!==i)for(var d=document.getElementsByTagName("script"),l=0;l<d.length;l++){var u=d[l];if(u.getAttribute("src")==e||u.getAttribute("data-webpack")==a+i){o=u;break}}o||(c=!0,(o=document.createElement("script")).charset="utf-8",o.timeout=120,s.nc&&o.setAttribute("nonce",s.nc),o.setAttribute("data-webpack",a+i),o.src=e,0!==o.src.indexOf(window.location.origin+"/")&&(o.crossOrigin="anonymous")),n[e]=[t];var f=(t,a)=>{o.onerror=o.onload=null,clearTimeout(p);var i=n[e];if(delete n[e],o.parentNode&&o.parentNode.removeChild(o),i&&i.forEach(e=>e(a)),t)return t(a)},p=setTimeout(f.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=f.bind(null,o.onerror),o.onload=f.bind(null,o.onload),c&&document.head.appendChild(o)}},s.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i=e?e.src:"",s.p=i.slice(0,i.lastIndexOf("/")+1),(()=>{var e={39:0};s.f.j=(t,n)=>{var a=s.o(e,t)?e[t]:void 0;if(0!==a)if(a)n.push(a[2]);else{var i=new Promise((n,i)=>a=e[t]=[n,i]);n.push(a[2]=i);var r=s.p+s.u(t),o=new Error;s.l(r,n=>{if(s.o(e,t)&&(0!==(a=e[t])&&(e[t]=void 0),a)){var i=n&&("load"===n.type?"missing":n.type),r=n&&n.target&&n.target.src;o.message="Loading chunk "+t+" failed.\n("+i+": "+r+")",o.name="ChunkLoadError",o.type=i,o.request=r,a[1](o)}},"chunk-"+t,t)}};var t=(t,n)=>{var a,i,[r,o,c]=n,d=0;if(r.some(t=>0!==e[t])){for(a in o)s.o(o,a)&&(s.m[a]=o[a]);c&&c(s)}for(t&&t(n);d<r.length;d++)i=r[d],s.o(e,i)&&e[i]&&e[i][0](),e[i]=0},n=self.webpackJsonp_c9da73a2a8922d123a7c645bd9888674=self.webpackJsonp_c9da73a2a8922d123a7c645bd9888674||[];n.forEach(t.bind(null,0)),n.push=t.bind(null,n.push.bind(n))})();var c={};return(()=>{s.r(c),s.d(c,{default:()=>t});var e=s(841);class t extends e.BaseApplicationCustomizer{async onInit(){const{initCore:e}=await s.e(548).then(s.bind(s,364));await e("SharePoint",this.context.placeholderProvider,this)}async onPlaceholdersChanged(e){const{initCore:t}=await s.e(548).then(s.bind(s,364));await t("SharePoint",e,this),window.__SPFxExtensions.Apps.forEach(t=>{t.instances.forEach(t=>{t.executeListeners("onPlaceholdersChanged",e)})})}onDispose(){window.__SPFxExtensions?.Apps?.forEach(e=>{e.instances.forEach(e=>{e.executeListeners("onAppCustomizerDisposed",void 0)})})}}})(),c})())})();
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
(()=>{var e=document.currentScript;define(["@microsoft/sp-core-library","@microsoft/sp-property-pane","@microsoft/sp-webpart-base"],(t,n,a)=>(()=>{"use strict";var i,r,o,s={367:(e,t,n)=>{n.d(t,{Bc:()=>r,Lf:()=>o,Ne:()=>a,oz:()=>i});const a="Select one of these web parts for this column.",i="Edit page and select webpart.",r="Webpart that loads an app of your choice.",o="[SPFxExtensions]"}
|
|
2
|
-
,574:(e,t,n)=>{n.r(t),n.d(t,{default:()=>b});var a,i,r=function(){return r=Object.assign||function(e){for(var t,n=1,a=arguments.length;n<a;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},r.apply(this,arguments)};!function(e){e[e.sync=0]="sync",e[e.async=1]="async"}(a||(a={})),function(e){e[e.onlyThemable=1]="onlyThemable",e[e.onlyNonThemable=2]="onlyNonThemable",e[e.all=3]="all"}(i||(i={}));var o,s,c,d="undefined"==typeof window?n.g:window,l=d&&d.CSPSettings&&d.CSPSettings.nonce,u=((c=d.__themeState__||{theme:void 0,lastStyleElement:void 0,registeredStyles:[]}).runState||(c=r(r({},c),{perf:{count:0,duration:0},runState:{flushTimer:0,mode:a.sync,buffer:[]}})),c.registeredThemableStyles||(c=r(r({},c),{registeredThemableStyles:[]})),d.__themeState__=c,c),f=/[\'\"]\[theme:\s*(\w+)\s*(?:\,\s*default:\s*([\\"\']?[\.\,\(\)\#\-\s\w]*[\.\,\(\)\#\-\w][\"\']?))?\s*\][\'\"]/g,p=function(){return"undefined"!=typeof performance&&performance.now?performance.now():Date.now()};function m(e){var t=p();e();var n=p();u.perf.duration+=n-t}function _(e,t){u.loadStyles?u.loadStyles(h(e).styleString,e):function(e){if("undefined"!=typeof document){var t=document.getElementsByTagName("head")[0],n=document.createElement("style"),a=h(e),i=a.styleString,r=a.themable;n.setAttribute("data-load-themed-styles","true"),l&&n.setAttribute("nonce",l),n.appendChild(document.createTextNode(i)),u.perf.count++,t.appendChild(n);var o=document.createEvent("HTMLEvents");o.initEvent("styleinsert",!0,!1),o.args={newStyle:n},document.dispatchEvent(o);var s={styleElement:n,themableStyle:e};r?u.registeredThemableStyles.push(s):u.registeredStyles.push(s)}}(e)}function h(e){var t=u.theme,n=!1;return{styleString:(e||[]).map(function(e){var a=e.theme;if(a){n=!0;var i=t?t[a]:void 0,r=e.defaultValue||"inherit";return t&&!i&&console,i||r}return e.rawString}).join(""),themable:n}}o='.spfxExtensionloader_be4e0fd1{color:"[theme:bodyText, default: #323130]";color:var(--bodyText);overflow:hidden;padding:1em}.spfxExtensionloader_be4e0fd1.teams_be4e0fd1{font-family:Segoe UI,-apple-system,BlinkMacSystemFont,Roboto,Helvetica Neue,sans-serif}.welcome_be4e0fd1{text-align:center}.welcomeImage_be4e0fd1{max-width:420px;width:100%}.links_be4e0fd1 a{color:"[theme:link, default:#03787c]";color:var(--link);text-decoration:none}.links_be4e0fd1 a:hover{color:"[theme:linkHovered, default: #014446]";color:var(--linkHovered);text-decoration:underline}.SPFxExtensionApp_be4e0fd1 .loader_be4e0fd1{animation:rotation_be4e0fd1 1s linear infinite;border:2px solid #003755;border-bottom-color:#009fda;border-radius:50%;box-sizing:border-box;display:inline-block;height:28px;width:28px}@keyframes rotation_be4e0fd1{0%{transform:rotate(0)}to{transform:rotate(1turn)}}.SPFxExtensionApp_be4e0fd1 .buttonLoader_be4e0fd1{align-items:center;border:none;display:flex;height:80px;justify-content:center;width:120px}.SPFxExtensionApp_be4e0fd1 .shimmerShine_be4e0fd1{-webkit-animation-duration:1s;-webkit-animation-fill-mode:forwards;-webkit-animation-iteration-count:infinite;-webkit-animation-name:placeholderShimmer_be4e0fd1;-webkit-animation-timing-function:linear;background:#f6f7f8;background-image:linear-gradient(90deg,#f6f7f8 0,#edeef1 20%,#f6f7f8 40%,#f6f7f8);background-repeat:no-repeat;background-size:200px 80px;border:none;display:block;height:80px;position:relative;width:120px}@keyframes placeholderShimmer_be4e0fd1{0%{background-position:-80px 0}to{background-position:120px 0}}.SPFxExtensionApp_be4e0fd1 .applicationListSection_be4e0fd1{display:flex;flex-direction:column;flex-wrap:wrap;justify-content:center;min-height:320px;text-align:center}.SPFxExtensionApp_be4e0fd1 .header_be4e0fd1{color:#242424;font-weight:600;letter-spacing:1px;line-height:32px;padding:0 12px}.SPFxExtensionApp_be4e0fd1 .icon_be4e0fd1{font-size:28px;font-style:normal;height:28px;line-height:28px;min-width:28px;width:28px}.SPFxExtensionApp_be4e0fd1 .icon_be4e0fd1>img,.SPFxExtensionApp_be4e0fd1 .icon_be4e0fd1>svg{height:auto;width:100%}.SPFxExtensionApp_be4e0fd1 .iconFont_be4e0fd1{background-color:#f6f7f8}.SPFxExtensionApp_be4e0fd1 .appButtonsContainer_be4e0fd1{align-items:center;display:flex;flex-wrap:wrap;height:100%;justify-content:center}.SPFxExtensionApp_be4e0fd1 .appButtonsWrapper_be4e0fd1{align-items:center;box-sizing:border-box;display:flex;flex-direction:column;height:100%;justify-content:flex-start;width:100%}.SPFxExtensionApp_be4e0fd1 .appButton_be4e0fd1{align-items:center;background-color:unset;border:none;display:flex;flex-direction:column;height:80px;padding-top:14px;width:120px}.SPFxExtensionApp_be4e0fd1 .appButton_be4e0fd1:hover{background-color:#c8e3fa}',void 0===(s=!0)&&(s=!1),m(function(){var e=Array.isArray(o)?o:function(e){var t=[];if(e){for(var n=0,a=void 0;a=f.exec(e);){var i=a.index;i>n&&t.push({rawString:e.substring(n,i)}),t.push({theme:a[1],defaultValue:a[2]}),n=f.lastIndex}t.push({rawString:e.substring(n)})}return t}(o),t=u.runState,n=t.mode,i=t.buffer,r=t.flushTimer;s||n===a.async?(i.push(e),r||(u.runState.flushTimer=self.setTimeout(function(){u.runState.flushTimer=0,m(function(){var e=u.runState.buffer.slice();u.runState.buffer=[];var t=[].concat.apply([],e);t.length>0&&_(t)})},0))):_(e)});const b={spfxExtensionloader_be4e0fd1:"spfxExtensionloader_be4e0fd1",teams_be4e0fd1:"teams_be4e0fd1",welcome_be4e0fd1:"welcome_be4e0fd1",welcomeImage_be4e0fd1:"welcomeImage_be4e0fd1",links_be4e0fd1:"links_be4e0fd1",SPFxExtensionApp_be4e0fd1:"SPFxExtensionApp_be4e0fd1",loader_be4e0fd1:"loader_be4e0fd1",rotation_be4e0fd1:"rotation_be4e0fd1",buttonLoader_be4e0fd1:"buttonLoader_be4e0fd1",shimmerShine_be4e0fd1:"shimmerShine_be4e0fd1",placeholderShimmer_be4e0fd1:"placeholderShimmer_be4e0fd1",applicationListSection_be4e0fd1:"applicationListSection_be4e0fd1",header_be4e0fd1:"header_be4e0fd1",icon_be4e0fd1:"icon_be4e0fd1",iconFont_be4e0fd1:"iconFont_be4e0fd1",appButtonsContainer_be4e0fd1:"appButtonsContainer_be4e0fd1",appButtonsWrapper_be4e0fd1:"appButtonsWrapper_be4e0fd1",appButton_be4e0fd1:"appButton_be4e0fd1"}}
|
|
3
|
-
,676:e=>{e.exports=t},877:e=>{e.exports=n},642:e=>{e.exports=a}},c={};function d(e){var t=c[e];if(void 0!==t)return t.exports;var n=c[e]={exports:{}};return s[e](n,n.exports,d),n.exports}d.m=s,d.d=(e,t)=>{for(var n in t)d.o(t,n)&&!d.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},d.f={},d.e=e=>Promise.all(Object.keys(d.f).reduce((t,n)=>(d.f[n](e,t),t),[])),d.u=e=>"spfx-extension-loader_1a88c5c5336cafaa736d.js",d.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),d.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),i={},r="c9da73a2a8922d123a7c645bd9888674:",d.l=(e,t,n,a)=>{if(i[e])i[e].push(t);else{var o,s;if(void 0!==n)for(var c=document.getElementsByTagName("script"),l=0;l<c.length;l++){var u=c[l];if(u.getAttribute("src")==e||u.getAttribute("data-webpack")==r+n){o=u;break}}o||(s=!0,(o=document.createElement("script")).charset="utf-8",o.timeout=120,d.nc&&o.setAttribute("nonce",d.nc),o.setAttribute("data-webpack",r+n),o.src=e,0!==o.src.indexOf(window.location.origin+"/")&&(o.crossOrigin="anonymous")),i[e]=[t];var f=(t,n)=>{o.onerror=o.onload=null,clearTimeout(p);var a=i[e];if(delete i[e],o.parentNode&&o.parentNode.removeChild(o),a&&a.forEach(e=>e(n)),t)return t(n)},p=setTimeout(f.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=f.bind(null,o.onerror),o.onload=f.bind(null,o.onload),s&&document.head.appendChild(o)}},d.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o=e?e.src:"",d.p=o.slice(0,o.lastIndexOf("/")+1),(()=>{var e={650:0};d.f.j=(t,n)=>{var a=d.o(e,t)?e[t]:void 0;if(0!==a)if(a)n.push(a[2]);else{var i=new Promise((n,i)=>a=e[t]=[n,i]);n.push(a[2]=i);var r=d.p+d.u(t),o=new Error;d.l(r,n=>{if(d.o(e,t)&&(0!==(a=e[t])&&(e[t]=void 0),a)){var i=n&&("load"===n.type?"missing":n.type),r=n&&n.target&&n.target.src;o.message="Loading chunk "+t+" failed.\n("+i+": "+r+")",o.name="ChunkLoadError",o.type=i,o.request=r,a[1](o)}},"chunk-"+t,t)}};var t=(t,n)=>{var a,i,[r,o,s]=n,c=0;if(r.some(t=>0!==e[t])){for(a in o)d.o(o,a)&&(d.m[a]=o[a]);s&&s(d)}for(t&&t(n);c<r.length;c++)i=r[c],d.o(e,i)&&e[i]&&e[i][0](),e[i]=0},n=self.webpackJsonp_c9da73a2a8922d123a7c645bd9888674=self.webpackJsonp_c9da73a2a8922d123a7c645bd9888674||[];n.forEach(t.bind(null,0)),n.push=t.bind(null,n.push.bind(n))})();var l={};return(()=>{d.r(l),d.d(l,{default:()=>i});var e=d(676),t=d(877),n=d(642);d(574);var a=d(367);class i extends n.BaseClientSideWebPart{SPFxExtensionInstance;allApps=[];appCatalogUrl="/sites/appcatalog";dropDownProps={options:[],selectedKey:"",disabled:!0};appDescription="";hideAppSelectorWhenAppLoaded=!1;hideConfiguratorButton=!1;configDomElement;_isDarkTheme=!1;async onInit(){const t=e.Environment.type===e.EnvironmentType.SharePoint?"SharePoint":"ClassicSharePoint",{initCore:n}=await d.e(548).then(d.bind(d,364));await n(t),this.appCatalogUrl=window.__SPFxExtensions.Utils.ConfiguratorPageUrl}onPropertyPaneConfigurationComplete(){!this.context.propertyPane.isPropertyPaneOpen()&&this.SPFxExtensionInstance&&this.SPFxExtensionInstance.executeListeners("onConfigurationClose",void 0)}onPropertyPaneFieldChanged(e,t,n){if("selectedApp"===e){if(t&&t!==n&&this.SPFxExtensionInstance){if(!confirm("You are about to switch app, this will erase all previous app configuration. Are you sure?"))return void(this.properties[e]=t);this.unmountApp()}n&&(this.webpartSectionElement.remove(),this.mountApp(n).catch(()=>{}))}}onDisplayModeChanged(t){const n=t===e.DisplayMode.Edit?"Read":"Edit";this.SPFxExtensionInstance&&this.SPFxExtensionInstance.executeListeners("onDisplayModeChange",n)}openPropertyPane(){this.context.propertyPane.open()}closePropertyPane(){this.context.propertyPane.close()}isPropertyPaneOpen(){return this.context.propertyPane.isPropertyPaneOpen()}saveConfigValue(e,t=!0){this.properties.SPFxExtensionAppConfiguration=e,t&&this.SPFxExtensionInstance?.executeListeners("onConfigurationChange",e)}getConfigValue(e){if(e){let t=this.properties[e];return void 0===t&&(t=this.properties.SPFxExtensionAppConfiguration),t}return this.properties.SPFxExtensionAppConfiguration}getSearchData(){return{searchableText:this.properties.searchableText,searchableHtml:this.properties.searchableHtml}}setSearchData(e){this.properties.searchableText=e.searchableText,this.properties.searchableHtml=e.searchableHtml}async mountApp(e){this.domElement.innerHTML="";try{const t={domElement:this.domElement,webpartContext:this.context,webpart:this,openPropertyPane:()=>{this.openPropertyPane()},closePropertyPane:()=>{this.closePropertyPane()},isPropertyPaneOpen:()=>this.isPropertyPaneOpen(),saveConfigValue:(e,t=!0)=>{this.saveConfigValue(e,t)},getConfigValue:e=>this.getConfigValue(e),getSearchableData:()=>this.getSearchData(),setSearchableData:e=>{this.setSearchData(e)}};if(this.SPFxExtensionInstance=await window.__SPFxExtensions.InstantiateApp(e,t),!this.SPFxExtensionInstance)return;const n=window.__SPFxExtensions.Apps.find(t=>t.id===e);n&&(this.appDescription=n.description),this.renderCompleted(void 0,!0)}catch(t){console.error(a.Lf,"Error while mounting appid",e,t);const n=new Error(`${t}`);this.renderCompleted(n)}}unmountApp(){this.SPFxExtensionInstance&&this.SPFxExtensionInstance.unmount?.(),this.SPFxExtensionInstance=void 0,this.domElement.innerHTML=""}onDispose(){this.unmountApp()}appButtonElements=[];webpartSectionElement=document.createElement("section");webpartSectionTitle=document.createElement("header");appButtonsWrapper=document.createElement("div");appButtonsContainer=document.createElement("div");generateIconElement(e){const t=document.createElement("i");if(t.classList.add("icon_be4e0fd1"),!e)return t.innerHTML='<svg fill="currentColor" class="___12fm75w f1w7gpdv fez10in fg4l7m0" aria-hidden="true" width="28" height="28" viewBox="0 0 28 28" xmlns="http://www.w3.org/2000/svg"><path d="M20.84 2.66a2.25 2.25 0 0 0-3.18 0L13.5 6.8v-.56c0-1.24-1-2.25-2.25-2.25h-7C3.01 4 2 5.01 2 6.25v18c0 .97.78 1.75 1.75 1.75h18c1.24 0 2.25-1 2.25-2.25v-7c0-1.24-1-2.25-2.25-2.25h-.56l4.16-4.15c.88-.88.88-2.3 0-3.19l-4.5-4.5ZM17.31 14.5H13.5v-3.8l3.8 3.8Zm1.41-10.78c.3-.3.77-.3 1.06 0l4.5 4.5c.3.3.3.77 0 1.06l-4.5 4.51c-.3.3-.77.3-1.06 0l-4.5-4.5a.75.75 0 0 1 0-1.07l4.5-4.5ZM12 6.25v8.25H3.5V6.25c0-.41.34-.75.75-.75h7c.41 0 .75.34.75.75Zm-8.5 17.5V16H12v8.5H4.25a.75.75 0 0 1-.75-.75Zm10-7.75h8.25c.41 0 .75.34.75.75v7c0 .42-.34.75-.75.75H13.5V16Z" fill="currentColor"></path></svg>',t;if("font"===e.iconType&&e.fontFamily&&(t.style.fontFamily=e.fontFamily,t.classList.add("iconFont_be4e0fd1")),"url"===e.iconType){const n=document.createElement("img");n.src=e.iconData,t.appendChild(n)}return"svg"===e.iconType&&(t.innerHTML=e.iconData),t}createAndAppendAppButtons(e){const t=document.createElement("button");t.title=a.Bc,t.ariaLabel=a.Bc,t.className="appButton_be4e0fd1";const n=this.generateIconElement(e.icon);t.append(n,e.name),t.title=e.name,t.addEventListener("click",t=>{t.stopPropagation(),t.preventDefault(),this.properties.selectedApp=e.id,this.webpartSectionElement.remove(),this.mountApp(e.id).catch(()=>{})}),this.appButtonsContainer.appendChild(t)}createWebpartSection(e){this.webpartSectionElement.className="applicationListSection_be4e0fd1",this.webpartSectionTitle.className="header_be4e0fd1",this.webpartSectionElement.appendChild(this.webpartSectionTitle),e&&this.webpartSectionElement.appendChild(this.appButtonsWrapper)}renderDisplayMode(){this.webpartSectionElement.ariaLabel=a.oz,this.webpartSectionTitle.textContent=a.oz,this.createWebpartSection(),this.domElement.appendChild(this.webpartSectionElement)}async renderEditMode(){this.webpartSectionElement.ariaLabel=a.Ne,this.webpartSectionTitle.textContent=a.Ne,this.createWebpartSection(!0),this.appButtonsContainer.className="appButtonsContainer_be4e0fd1",this.appButtonsWrapper.appendChild(this.appButtonsContainer),this.appButtonsWrapper.className="appButtonsWrapper_be4e0fd1",this.domElement.appendChild(this.webpartSectionElement),window.__SPFxExtensions.AddAppEventListener("appAdded",e=>{e.isWebPartApp&&this.createAndAppendAppButtons(e)}),window.__SPFxExtensions.Apps.filter(e=>e.registrationCompleted).forEach(e=>{e.isWebPartApp&&this.createAndAppendAppButtons(e)});try{await window.__SPFxExtensions.Utils.spAppInitializationPromise,window.__SPFxExtensions.Utils.appManifestPromises.forEach(e=>{const t=document.createElement("div"),n=document.createElement("span");t.className="buttonLoader_be4e0fd1",n.className="loader_be4e0fd1",t.appendChild(n),this.appButtonsContainer.append(t),e.catch(()=>{}).finally(()=>{t.remove()})})}catch(e){console.error(a.Lf,"Error while awaiting app initialization",e)}}async renderEmptyApp(){this.domElement.innerHTML="",this.domElement.className="SPFxExtensionApp_be4e0fd1",this.displayMode===e.DisplayMode.Read?this.renderDisplayMode():await this.renderEditMode(),this.renderCompleted(void 0,!0)}async render(){if(this.SPFxExtensionInstance){if(!this.SPFxExtensionInstance.unmountOnRender)return void this.SPFxExtensionInstance.executeListeners("onRender",void 0);this.unmountApp()}!this.properties.selectedApp||this.SPFxExtensionInstance?await this.renderEmptyApp():await this.mountApp(this.properties.selectedApp)}renderCompleted(e,t){super.renderCompleted(e,t)}get isRenderAsync(){return!0}get propertiesMetadata(){return{searchableText:{isSearchablePlainText:!0},searchableHtml:{isHtmlString:!0}}}onPropertyPaneConfigurationStart(){window.__SPFxExtensions.AllAppAssetsLoadedPromise.then(()=>{const e=window.__SPFxExtensions.Apps.find(e=>e.id===this.properties.selectedApp);e&&(this.appDescription=e.description,this.hideAppSelectorWhenAppLoaded=e.hideAppSelectorWhenAppLoaded??!1,this.hideConfiguratorButton=e.hideConfiguratorButton??!1),this.dropDownProps.options?.splice(0,this.dropDownProps.options?.length);const t=window.__SPFxExtensions.Apps.filter(e=>e.isWebPartApp).map(e=>({key:e.id,text:e.name}));this.dropDownProps.options?.push(...t),this.dropDownProps.selectedKey=this.properties.selectedApp,this.dropDownProps.disabled=!1,this.context.propertyPane.refresh()}).catch(e=>{console.error(a.Lf,"Error while awaiting all app assets to load",e)})}CustomWebpartConfigurationField(e){return{type:t.PropertyPaneFieldType.Custom,targetProperty:e,properties:{key:"SPFxExtensionAppConfiguration",onRender:(e,t,n)=>{this.configDomElement=e,this.SPFxExtensionInstance&&this.SPFxExtensionInstance.instanceLoadPromise.then(()=>{this.SPFxExtensionInstance?.executeListeners("onConfigurationRender",{domElement:e})}).catch(e=>{console.error(a.Lf,"Error while awaiting app to load",e)})},onDispose:(e,t)=>{this.SPFxExtensionInstance&&this.SPFxExtensionInstance.executeListeners("onConfigurationClose",void 0)}}}}getPropertyPaneConfiguration(){const e={groupFields:[(0,t.PropertyPaneLabel)("spfxExtensionLoaderLabel",{text:"App not working? Try refreshing the page. Or go to the configuration page."}),(0,t.PropertyPaneButton)("configuratorButton",{text:"Open Configurator",buttonType:1,onClick:()=>{window.open(`${this.appCatalogUrl}?web=${this.context.pageContext.web.absoluteUrl}`,"_blank")}})]},n=this.hideConfiguratorButton?[]:[e],a={groupFields:[(0,t.PropertyPaneDropdown)("selectedApp",{label:"App",disabled:this.dropDownProps.disabled,options:this.dropDownProps.options,selectedKey:this.dropDownProps.selectedKey}),(0,t.PropertyPaneLabel)("selectedAppDecription",{text:this.appDescription})]};return{pages:[{groups:[...n,...this.hideAppSelectorWhenAppLoaded?[]:[a],{groupFields:[this.CustomWebpartConfigurationField("SPFxExtensionAppConfiguration")]}]}]}}onThemeChanged(e){if(!e)return;this._isDarkTheme=!!e.isInverted;const{semanticColors:t}=e;t&&(this.domElement.style.setProperty("--bodyText",t.bodyText||null),this.domElement.style.setProperty("--link",t.link||null),this.domElement.style.setProperty("--linkHovered",t.linkHovered||null))}get dataVersion(){return e.Version.parse("1.0")}}})(),l})())})();
|