@valiantys/atlassian-app-frontend
Version:
This library provides an Atlassian Forge Custom UI wrapper component that handles all the setup necessary to support an app that can run deployed or in standalone mode
3 lines (2 loc) • 23.9 kB
JavaScript
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("react/jsx-runtime"),re=require("@atlaskit/button"),E=require("@atlaskit/button/new"),v=require("@atlaskit/form"),p=require("@atlaskit/primitives"),T=require("@atlaskit/section-message"),se=require("@atlaskit/select"),i=require("react"),L=require("@atlaskit/heading"),Ne=require("@atlaskit/spinner"),Ve=require("@atlaskit/app-provider"),g=require("react-router-dom"),B=require("@atlaskit/flag"),Ge=require("@atlaskit/icon/glyph/check-circle"),Ke=require("@atlaskit/icon/glyph/error"),Xe=require("@atlaskit/icon/glyph/info"),Ye=require("@atlaskit/icon/glyph/warning"),y=require("@atlaskit/tokens"),X=class X{};X.getOauthToken="get-token";let W=X;class ne{constructor(t){this.message=t}}function b(e,t){const r={Authorization:e.startsWith("Bearer ")?e:`Bearer ${e}`};return t?{...t,...r}:r}async function oe(e,t,r){const c=b(e,r.headers||{});return fetch(t,{...r,headers:c})}async function C(e,t,r,c,n="json",o={}){return D(t,r,b(e,o),c,n)}async function D(e,t,r,c,n="json"){const o={...r||{},Accept:n==="json"?"application/json":"text/html","Content-Type":n==="json"?"application/json":"text/html"},a=c?JSON.stringify(c):void 0,u=await fetch(e,{method:t,headers:o,body:a});if(u.ok)return t==="DELETE"||u.status===204?void 0:n==="text"?await u.text():await u.json();{let d="";try{d=await u.text()}catch{}const x=`${u.status} ${u.statusText} - ${t} ${e}
${d}`;throw console.error(x),new ne(x)}}class ce{constructor(t){this.value_=t}set value(t){throw new Error("modification of a Route is not allowed")}get value(){return this.value_}}function Q(e){return e instanceof ce}const Qe=["..",".%2e","%2e.","%2e%2e",".%2E","%2E.","%2E%2e"],Ze=["/","\\"],ie=["?","#"];function I(e,t){return e.some(r=>t.includes(r))}function et(e,t){switch(t){case"path":if(Q(e))return e.value;if(e=String(e),I(Qe,e)||I(ie,e)||I(Ze,e))throw new Error("Disallowing path manipulation attempt. For more information see: https://go.atlassian.com/product-fetch-api-route");return e;case"query":return Q(e)?encodeURIComponent(e.value):e instanceof URLSearchParams?e.toString():encodeURIComponent(e)}}function ae(e,...t){let r="path",c="";for(let n=0;n<e.length;n++){const o=e[n];if(I(ie,o)&&(r="query"),c+=o,n>=t.length)break;c+=et(t[n],r)}return new ce(c)}function U(e,t){if(t){const r=e.startsWith("/")?e.slice(1):e;return`${t}/${r}`}else return e}function F(e,t,r){return{productType:r,fetch:({url:c,method:n,responseType:o="json",allowExperimental:a=!1},l)=>C(e,U(c.value,t),n,l,o,{"X-ExperimentalApi":a?"opt-in":""}),route:ae,rawFetch:(c,n)=>oe(e,U(c.value,t),n),fullUrl:c=>U(c,t)}}function ue(e,t){return F(e,`https://api.atlassian.com/ex/jira/${t}`,"jira")}function le(e,t){return F(e,`https://api.atlassian.com/ex/confluence/${t}`,"confluence")}function de(e){return F(e,"https://api.bitbucket.org","bitbucket")}async function tt(e){return C(e,"https://api.atlassian.com/me","GET")}async function rt(e,t,r,c,n){return D("https://auth.atlassian.com/oauth/token","POST",void 0,{grant_type:e,client_id:t,client_secret:r,code:c,redirect_uri:n})}class he extends Error{constructor(t){super(t)}}class pe{constructor(){this.userResourcesUrl="https://api.atlassian.com/oauth/token/accessible-resources"}async getAtlassianUserResources(t){return await C(t,this.userResourcesUrl,"GET")}async checkUserChosenResource(t,r){const n=(await this.getAtlassianUserResources(t)).filter((o,a,l)=>l.findIndex(u=>u.id===o.id)===a).map(o=>({name:o.name,id:o.id}));if(n.length>1){if(r){const o=n.find(a=>a.id===r);if(o)return{hasChosen:!0,resource:o}}return{hasChosen:!1,resources:n}}else{if(n.length===1)return{hasChosen:!0,resource:n[0]};throw new he("Provided token does not have permissions for any resources")}}}class xe{constructor(t){this.fetchSvc=t,this.workspaceApiUrl="/rest/servicedeskapi/assets/workspace"}async getAllUserWorkspaces(){const t=[];let r=!0;const c=50;let n=0;for(;r;){const o=await this.fetchSvc.fetch({url:this.fetchSvc.route`/rest/servicedeskapi/assets/workspace?start=${n}&limit=${c}`,method:"GET"});t.push(...o.values),n+=c,o.isLastPage&&(r=!1)}return t}async checkUserChosenWorkspace(t){const r=await this.getAllUserWorkspaces();if(r.length>1){if(t){const c=r.find(n=>n.workspaceId===t);if(c)return{hasChosen:!0,workspace:c.workspaceId}}return{hasChosen:!1,workspaces:r}}else{if(r.length===1)return{hasChosen:!0,workspace:r[0].workspaceId};throw new he("Provided token does not have permissions for any workspaces")}}}const fe=i.createContext(null),st=()=>{const e=i.useContext(fe);if(!e)throw new Error("useRequestBitbucket must be used within a RequestBitbucketProvider");return e};function M({children:e,requestBitbucketImplementation:t}){return s.jsx(fe.Provider,{value:t,children:e})}const we=i.createContext(null),nt=()=>{const e=i.useContext(we);if(!e)throw new Error("useRequestConfluence must be used within a RequestConfluenceProvider");return e};function H({children:e,requestConfluenceImplementation:t}){return s.jsx(we.Provider,{value:t,children:e})}const me=i.createContext(null),ve=()=>{const e=i.useContext(me);if(!e)throw new Error("useRequestJira must be used within a RequestJiraProvider");return e};function _({children:e,requestJiraImplementation:t}){return s.jsx(me.Provider,{value:t,children:e})}function A({label:e,loadingError:t,labelSize:r}){return s.jsxs(p.Flex,{direction:"column",children:[s.jsx(L,{size:r||"large",children:e}),t?s.jsx(T,{appearance:"error",children:t}):s.jsx(Ne,{interactionName:"load"})]})}const ke=i.createContext(void 0),ot=()=>i.useContext(ke);function J({children:e,workspaceId:t}){return s.jsx(ke.Provider,{value:t,children:e})}const Z=p.xcss({maxWidth:"max-content",paddingBlockStart:"space.1000"});function ge({appName:e,children:t}){const[r,c]=i.useState(!1),[n,o]=i.useState(null),[a,l]=i.useState(""),[u,d]=i.useState(),x=ve(),h=i.useCallback(async f=>{try{l("");const m=f??(e&&localStorage.getItem(`${e}-user-workspace-id`))??"",k=await new xe(x).checkUserChosenWorkspace(m);k.hasChosen?(e&&localStorage.setItem(`${e}-user-workspace-id`,k.workspace),c(!0),d(k.workspace)):o(k.workspaces)}catch(m){m instanceof Error?l(`Error Occurred: ${m.message}`):l("Uncaught error occurred!")}},[e,x]);i.useEffect(()=>{h()},[h]);async function j({selectedWorkspace:f}){return h(f.value)}if(r)return s.jsx(J,{workspaceId:u,children:t});if(n){const f=n.map(m=>({label:m.workspaceId,value:m.workspaceId}));return s.jsx(p.Flex,{justifyContent:"center",children:s.jsx(p.Box,{xcss:Z,children:s.jsx(v,{onSubmit:j,children:({formProps:m,submitting:k})=>s.jsxs("form",{...m,children:[s.jsx(v.FormHeader,{title:"Choose Workspace",children:a?s.jsx(T,{appearance:"error",children:a}):null}),s.jsx(v.FormSection,{children:s.jsx(v.Field,{"aria-required":!0,name:"selectedWorkspace",label:"Workspace",isRequired:!0,children:({fieldProps:q})=>s.jsx("div",{"data-testid":"workspace-select-component",children:s.jsx(se,{...q,options:f})})})}),s.jsx(v.FormFooter,{align:"start",children:s.jsx(re.ButtonGroup,{label:"Form submit options",children:s.jsx(E,{type:"submit",appearance:"primary",isLoading:k,children:"Submit"})})})]})})})})}else return s.jsx(p.Flex,{justifyContent:"center",xcss:Z,children:s.jsx(A,{label:"",loadingError:a})})}const je=i.createContext(null),ct=()=>{const e=i.useContext(je);if(!e)throw new Error("useBackendAdapter must be used within a BackendAdapterProvider");return e};function z({children:e,invokeImplementation:t}){return s.jsx(je.Provider,{value:{invoke:t},children:e})}function Ce(e,t,r){return async(c,n)=>C(t,e+c,"POST",{...n},"json",{"resource-id":r})}class Ae{navigate(t){return window.location.href=t,Promise.resolve()}open(t){return window.open(t,"_blank"),Promise.resolve()}reload(){return window.location.reload(),Promise.resolve()}}const Re=i.createContext(null),Se=()=>{const e=i.useContext(Re);if(!e)throw new Error("useHostRouter must be used within a HostRouterProvider");return e};function N({children:e,hostRouter:t}){return s.jsx(Re.Provider,{value:t,children:e})}function it({url:e,action:t,label:r,linkStyle:c,buttonIcon:n,buttonAppearance:o}){const a=Se(),l=i.useCallback(u=>{u.preventDefault(),t==="open"?a.open(e):a.navigate(e)},[t,a,e]);return c==="link"?s.jsx("a",{href:e,target:"_blank",rel:"noreferrer",onClick:l,children:r}):n?s.jsx(E.IconButton,{icon:n,label:r,appearance:o||"subtle",onClick:l}):s.jsx(E,{appearance:o||"subtle",onClick:l,children:r})}const ye=i.createContext(null),at=()=>{const e=i.useContext(ye);if(!e)throw new Error("useRemoteAdapter must be used within a RemoteAdapterProvider");return e};function V({children:e,invokeRemoteImplementation:t}){return s.jsx(ye.Provider,{value:{invokeRemote:t},children:e})}function Ie(e,t){return async r=>{const c=`${e}${r.path}`,n=await fetch(c,{method:r.method,headers:t?b(t,r.headers||{}):r.headers,body:r.body?JSON.stringify(r.body):void 0}),o={};return n.headers.forEach((l,u)=>{o[u]=l}),{body:await n.json(),headers:o,status:n.status}}}const Ee=i.createContext(null),be=()=>{const e=i.useContext(Ee);if(!e)throw new Error("useViewContext must be used within a ViewContextProvider");return e};function G({children:e,viewContext:t}){return s.jsx(Ee.Provider,{value:t,children:e})}class P{constructor(t){this.context=t,this.theme={enable(){return Promise.resolve()}}}close(t){return Promise.resolve()}submit(t){return Promise.resolve()}getContext(){return Promise.resolve(this.context)}createHistory(){throw new Error("Method not implemented.")}refresh(){return Promise.resolve()}}function ut({mockContext:e,invoke:t,invokeRemote:r,jiraFetchService:c,confluenceFetchService:n,bitbucketFetchService:o,hostRouter:a,children:l}){let u=s.jsx(J,{workspaceId:"test-workspace",children:s.jsx(z,{invokeImplementation:t,children:s.jsx(V,{invokeRemoteImplementation:r,children:s.jsx(N,{hostRouter:a,children:s.jsx(G,{viewContext:new P(e),children:l})})})})});return c&&(u=s.jsx(_,{requestJiraImplementation:c,children:u})),n&&(u=s.jsx(H,{requestConfluenceImplementation:n,children:u})),o&&(u=s.jsx(M,{requestBitbucketImplementation:o,children:u})),u}function lt(e){return{mockContext:{accountId:"testAccount",cloudId:"testSite",workspaceId:"testWorkspace",siteUrl:"https://expiumdev.atlassian.net",extension:{type:"jira:globalPage"},timezone:"America/Chicago",locale:"en-US",localId:"devId",moduleKey:"TestApp",environmentId:"TEST",environmentType:"DEVELOPMENT"},invoke:e(),invokeRemote:e(),hostRouter:{navigate:e(),open:e(),reload:e()}}}function dt(e){const r=new URLSearchParams(window.location.search).get("code");return i.useEffect(()=>{r&&(async()=>{const c=await fetch(e.codeTokenExchangeUrl,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify({code:r,redirect_uri:e.redirectUri})});if(c.ok){const n=await c.json(),o=Date.now()+n.expires_in*1e3;e.setAuth({token:n.access_token,expiresAt:o})}})()}),s.jsx(A,{label:"Fetching auth token with provided code"})}function Fe(e,t,r){const c=new URLSearchParams({audience:"api.atlassian.com",client_id:e,scope:r.join(" "),redirect_uri:t,state:ht(),response_type:"code",prompt:"consent"}).toString();window.location.href=`https://auth.atlassian.com/authorize?${c}`}function ht(){return Math.random().toString(36).substring(2,15)+Math.random().toString(36).substring(2,15)}function pt(e){return Fe(e.clientId,e.redirectUri,e.oAuthScopes),s.jsx(A,{label:"Redirecting to Atlassian Authentication System"})}const xt=p.xcss({paddingBlockStart:"space.1000"}),Pe=i.createContext(null),qe=()=>{const e=i.useContext(Pe);return e||(console.warn("No OAuth provider"),{getAuthToken:()=>""})};function Oe({children:e,...t}){const[r,c]=i.useState(localStorage.getItem(`${t.appName}-auth-token`)),n=localStorage.getItem(`${t.appName}-auth-expires-at`),[o,a]=i.useState(n?Number(n):null),l=window.location.protocol+"//"+window.location.hostname+(window.location.port?`:${window.location.port}`:""),u=l+"/callback";function d(){return o&&r&&!ee(o)?r:(Fe(t.clientId,u,t.oAuthScopes),"")}function x(h){c(h.token),localStorage.setItem(`${t.appName}-auth-token`,h.token),a(h.expiresAt),localStorage.setItem(`${t.appName}-auth-expires-at`,h.expiresAt.toString()),localStorage.removeItem(`${t.appName}-user-resource-id`),localStorage.removeItem(`${t.appName}-user-workspace-id`),window.location.href=l}return!r||!o||ee(o)?s.jsx(p.Flex,{justifyContent:"center",xcss:xt,children:s.jsx(g.BrowserRouter,{children:s.jsxs(g.Routes,{children:[s.jsx(g.Route,{path:"/",element:s.jsx(pt,{clientId:t.clientId,redirectUri:u,oAuthScopes:t.oAuthScopes})}),s.jsx(g.Route,{path:"/callback",element:s.jsx(dt,{setAuth:x,redirectUri:u,codeTokenExchangeUrl:t.codeTokenExchangeUrl})}),s.jsx(g.Route,{path:"/*",element:s.jsx(g.Navigate,{to:"/",replace:!0})})]})})}):s.jsx(Pe.Provider,{value:{getAuthToken:d},children:e})}function ee(e){return e<Date.now()}const K=i.createContext(void 0);function Be(){return i.useContext(K)}function ft(){const e=Be();function t(n){e({type:"add",id:n.id,props:n})}function r(n){e({type:"remove",id:n})}function c(n,o,a,l){t({id:n,isAutoDismiss:!1,type:"error",title:o,description:a instanceof Error?a.message:typeof a=="string"?a:"Uncaught error occurred!",actions:l})}return{addFlag:t,removeFlag:r,addErrorFlag:c}}function Ue({children:e}){const[t,r]=i.useReducer(mt,[]);function c(o){r({type:"remove",id:o})}function n(o){switch(o){case"info":return s.jsx(Xe,{label:"Info",primaryColor:y.token("color.icon.information"),size:"large"});case"warning":return s.jsx(Ye,{label:"Warning",primaryColor:y.token("color.icon.warning"),size:"large"});case"error":return s.jsx(Ke,{label:"Error",primaryColor:y.token("color.icon.danger"),size:"large"});case"success":return s.jsx(Ge,{primaryColor:y.token("color.icon.success"),label:"Success",size:"large"})}}return s.jsxs(K.Provider,{value:r,children:[e,s.jsx(B.FlagGroup,{onDismissed:c,children:t.map(o=>o.isAutoDismiss?s.jsx(B.AutoDismissFlag,{id:o.id,icon:n(o.type||"success"),title:o.title},o.id):s.jsx(B,{appearance:o.appearance||"normal",icon:n(o.type||"success"),id:o.id,title:o.title,description:o.description,actions:wt(o.actions)},o.id))})]})}function wt(e){return e==null?void 0:e.map(t=>({...t,content:t.text}))}function mt(e,t){switch(t.type){case"add":if(t.props){const r=e.filter(c=>c.id!==t.id);return r.push(t.props),r}else return console.error("invalid flag action: ",JSON.stringify(t)),e;case"remove":return e.filter(r=>r.id!==t.id);default:throw Error("Unknown action: "+t.type)}}function We(e,t,r){i.useEffect(()=>(window.addEventListener(e,t,r),()=>{window.removeEventListener(e,t,r)}),[e,t,r])}const $e=i.createContext({close:()=>{}});function Te(){return i.useContext($e)}function vt({children:e}){const[t,r]=i.useState(),c=be(),n=i.useCallback(()=>{c.close()},[c]);return We("unload",n),i.useEffect(()=>{(async()=>{const o=await c.getContext();r(o.extension.modal)})()},[c]),s.jsx($e.Provider,{value:{modalContextData:t,close:c.close},children:e})}const kt={"iframe-wrapper":"_iframe-wrapper_c8hdk_1"};function gt({iframeProps:e,messageCallback:t,onMouseOut:r}){const[c,n]=i.useState(),o=i.useRef(!1),a=i.useRef(!1),l=i.useRef(null),u=i.useCallback(d=>{var x;d.source===((x=l.current)==null?void 0:x.contentWindow)&&t&&t(d.data)},[t]);return We("message",u),i.useEffect(()=>{(async()=>e!=null&&e.height&&n(e.height))()},[e]),i.useEffect(()=>{(async()=>{var d;!a.current&&((d=l.current)!=null&&d.contentWindow)&&(l.current.contentWindow.focus(),a.current=!0)})()}),s.jsx("div",{className:kt["iframe-wrapper"],children:s.jsx("iframe",{title:e==null?void 0:e.title,ref:l,width:e==null?void 0:e.width,height:c,src:e==null?void 0:e.link,onMouseEnter:()=>o.current=!0,onMouseOut:()=>{o.current&&r&&r()}})})}function jt({messageCallback:e,closeOnMouseOut:t}){const{modalContextData:r,close:c}=Te(),[n,o]=i.useState();i.useEffect(()=>{r&&o({...r.iframeProps})},[r]);const a=i.useCallback(u=>{if(e&&n){const d=e(u.data,r==null?void 0:r.iframeProps);d.newHeight&&o({...n,height:d.newHeight})}},[n,e,r]);if(!n)return s.jsx("div",{});const l=s.jsx(gt,{messageCallback:a,iframeProps:n,onMouseOut:()=>{t&&(c==null||c())}});return r!=null&&r.modalHeader?s.jsxs(p.Flex,{gap:"space.200",direction:"column",children:[s.jsx(p.Box,{paddingInline:"space.200",children:s.jsx(L,{size:"medium",children:r.modalHeader})}),l]}):l}class Le{constructor(t,r={}){this.defaultUrl=t,this.resourceMap=r}open(t){const r=t.resource&&this.resourceMap[t.resource]||this.defaultUrl,c=this.features(t.size||"small"),n=window.open(r,"_blank",c),o=a=>{var l,u;if(a.source===n&&(l=a.data)!=null&&l.closing){const d=a.data;window.removeEventListener("message",o),(u=t.onClose)==null||u.call(t,d.payload)}};return window.addEventListener("message",o),Promise.resolve()}features(t){switch(t){case"small":return"popup,width=400,height=320";case"medium":return"popup,width=600,height=520";case"large":return"popup,width=800,height=720";case"xlarge":return"popup,width=968,height=900";case"max":return""}}}const De=i.createContext(null),Ct=()=>{const e=i.useContext(De);if(!e)throw new Error("useModalService must be used within a ModalServiceProvider");return e};function Me({children:e,modalService:t}){return s.jsx(De.Provider,{value:t,children:e})}class He extends P{constructor(t,r="http://localhost:4200"){super(t),this.context=t,this.openerOrigin=r,this.close=c=>{var o;const n={closing:!0,payload:c};return(o=window.opener)==null||o.postMessage(n,this.openerOrigin),window.close(),Promise.resolve()}}}function At({title:e,buttonGroup:t,children:r}){return s.jsxs(p.Flex,{direction:"column",xcss:p.xcss({height:"100%",padding:"space.300"}),children:[e&&s.jsx(p.Box,{paddingBlockEnd:"space.200",children:s.jsx(L,{size:"medium",children:e})}),s.jsx(p.Box,{xcss:p.xcss({flexGrow:2}),children:r}),t&&s.jsx(p.Box,{paddingBlockStart:"space.200",children:s.jsx(p.Flex,{justifyContent:"end",alignItems:"center",children:t})})]})}const Rt=i.lazy(()=>Promise.resolve().then(()=>require("./index-BePJjrLy.js")));function $({initialMockViewContext:e,backendUrl:t,remoteUrl:r,doCheckWorkspace:c,appName:n,doCheckResource:o,modalOpenerConfig:a,modalContextConfig:l,children:u}){const[d,x]=i.useState(),[h,j]=i.useState(),{getAuthToken:f}=qe(),m=i.useCallback(()=>ue(f(),d??""),[f,d]),k=i.useCallback(()=>le(f(),d??""),[f,d]),q=i.useCallback(()=>de(f()),[f]),Je=i.useCallback(async R=>{if(t&&o){const O=R??localStorage.getItem(`${n}-user-resource-id`)??"",S=await new pe().checkUserChosenResource(f(),O);return S.hasChosen&&(localStorage.setItem(`${n}-user-resource-id`,S.resource.id),x(S.resource.id)),S}else return{hasChosen:!0}},[t,f,n,o]);i.useEffect(()=>{const R=d??(e==null?void 0:e.cloudId)??"";if(!h||h.cloudId!==R){const O={...h||e,cloudId:R};j(O)}},[e,d,h]);const ze=i.useCallback(()=>t?Ce(t,f(),d??""):void 0,[d,f,t]);let w=u;c&&(w=s.jsx(ge,{appName:n,children:w})),a&&(w=s.jsx(Me,{modalService:new Le(a.defaultUrl,a.resourceMap),children:w})),h&&(w=s.jsx(G,{viewContext:l?new He(h,l.openerOrigin):new P(h),children:w})),w=s.jsx(N,{hostRouter:new Ae,children:s.jsx(M,{requestBitbucketImplementation:q(),children:s.jsx(H,{requestConfluenceImplementation:k(),children:s.jsx(_,{requestJiraImplementation:m(),children:w})})})});const Y=ze();return Y&&(w=s.jsx(z,{invokeImplementation:Y,children:w})),r&&(w=s.jsx(V,{invokeRemoteImplementation:Ie(r),children:w})),o&&(w=s.jsx(Rt,{checkResource:Je,children:w})),s.jsx(Ve,{children:s.jsx(Ue,{children:w})})}const St=Object.freeze(Object.defineProperty({__proto__:null,AtlassianAppStandalone:$,default:$},Symbol.toStringTag,{value:"Module"})),yt=i.lazy(()=>Promise.resolve().then(()=>require("./atlassian-app-forge-BwFXF-6M.js"))),It=i.lazy(()=>Promise.resolve().then(()=>St)),_e=window.self===window.top;function Et({children:e,appName:t,doCheckWorkspace:r,embeddedConfig:c,standaloneConfig:n}){var o;if(_e)if(n){const a=s.jsx(It,{appName:t,backendUrl:n.backendUrl,remoteUrl:n.remoteUrl,initialMockViewContext:n.initialMockViewContext,modalOpenerConfig:n.modalOpenerConfig,modalContextConfig:n.modalContextConfig,doCheckWorkspace:n.oauthConfig&&r,doCheckResource:((o=n.oauthConfig)==null?void 0:o.doCheckResource)!==!1,children:e});return n.oauthConfig?s.jsx(Oe,{clientId:n.oauthConfig.clientId,codeTokenExchangeUrl:n.oauthConfig.codeTokenExchangeUrl,appName:t,oAuthScopes:n.oauthConfig.oAuthScopes,children:a}):a}else return s.jsx("div",{children:"Not configured for standalone mode."});else return s.jsx(yt,{appName:t,doCheckWorkspace:r,invokeRemoteImpl:c==null?void 0:c.invokeRemoteImpl,children:e})}const te=p.xcss({maxWidth:"max-content",paddingBlockStart:"space.1000"});function bt({checkResource:e,children:t}){const[r,c]=i.useState(!1),[n,o]=i.useState(null),[a,l]=i.useState(""),u=i.useCallback(async x=>{try{l("");const h=await e(x);h.hasChosen?c(!0):o(h.resources)}catch(h){h instanceof Error?l(`Error Occurred: ${h.message}`):l("Uncaught error occurred!")}},[e]);i.useEffect(()=>{u()},[u]);function d({selectedResource:x}){return u(x.value)}if(r)return t;if(n){const x=n.map(h=>({label:h.name,value:h.id}));return s.jsx(p.Flex,{justifyContent:"center",children:s.jsx(p.Box,{xcss:te,children:s.jsx(v,{onSubmit:d,children:({formProps:h,submitting:j})=>s.jsxs("form",{...h,children:[s.jsx(v.FormHeader,{title:"Choose Resource",children:a?s.jsx(T,{appearance:"error",children:a}):null}),s.jsx(v.FormSection,{children:s.jsx(v.Field,{"aria-required":!0,name:"selectedResource",label:"Resource",isRequired:!0,children:({fieldProps:f})=>s.jsx(se,{...f,options:x})})}),s.jsx(v.FormFooter,{align:"start",children:s.jsx(re.ButtonGroup,{label:"Form submit options",children:s.jsx(E,{type:"submit",appearance:"primary",isLoading:j,children:"Submit"})})})]})})})})}else return s.jsx(p.Flex,{justifyContent:"center",xcss:te,children:s.jsx(A,{label:"",loadingError:a})})}function Ft(e){return console.error(e),`Error Occurred: ${e.message||e}`}function Pt(e,t=Ft){const[r,c]=i.useState(),[n,o]=i.useState(!0),[a,l]=i.useState(),u=i.useCallback(async()=>{o(!0);try{const d=await e();return c(d),d}catch(d){l(t(d))}finally{o(!1)}},[e,t]);return i.useEffect(()=>{u()},[u]),{data:r,loading:n,error:a,setData:c,setLoading:o,setError:l,manualTrigger:()=>u()}}exports.AppFlagsDispatchContext=K;exports.AppFlagsProviderAtlasKit=Ue;exports.AtlassianApp=Et;exports.AtlassianAppStandalone=$;exports.AtlassianAppTest=ut;exports.AtlassianUserResourceService=pe;exports.AtlassianUserWorkspaceService=xe;exports.BackendAdapterProvider=z;exports.CommonResolverPaths=W;exports.FeatureChosenResourceCheck=bt;exports.FeatureChosenWorkspaceCheck=ge;exports.FetchError=ne;exports.HostRouterLink=it;exports.HostRouterProvider=N;exports.IS_STANDALONE=_e;exports.JiraWorkspaceProvider=J;exports.MockViewContext=P;exports.ModalContent=vt;exports.ModalContentIframe=jt;exports.ModalDialogLayout=At;exports.ModalServiceProvider=Me;exports.ModalViewContext=He;exports.OAuthProvider=Oe;exports.PageLoadingView=A;exports.RemoteAdapterProvider=V;exports.RequestBitbucketProvider=M;exports.RequestConfluenceProvider=H;exports.RequestJiraProvider=_;exports.ViewContextProvider=G;exports.WindowHostRouter=Ae;exports.WindowModalService=Le;exports.addAuthHeader=b;exports.atlassianOAuthBitbucketFetch=de;exports.atlassianOAuthConfluenceFetch=le;exports.atlassianOAuthJiraFetch=ue;exports.atlassianOAuthRawFetch=F;exports.bearerAuthFetch=C;exports.bearerAuthFetchRaw=oe;exports.defaultProps=lt;exports.getAtlassianOAuthToken=rt;exports.getAtlassianUserDetails=tt;exports.getOauthFetchInvokeImpl=Ce;exports.jsonFetch=D;exports.oauthFetchInvokeRemote=Ie;exports.route=ae;exports.useAppFlagsDispatch=Be;exports.useAppFlagsDispatchMethods=ft;exports.useBackendAdapter=ct;exports.useHostRouter=Se;exports.useLoadDataEffect=Pt;exports.useModalContentService=Te;exports.useModalService=Ct;exports.useOAuth=qe;exports.useRemoteAdapter=at;exports.useRequestBitbucket=st;exports.useRequestConfluence=nt;exports.useRequestJira=ve;exports.useViewContext=be;exports.useWorkspaceId=ot;
;