1"use strict";(globalThis.webpackChunkfrontend||=[]).push([[6358],{76358(i,a,t){var n=t(65043),e=t(44125),r=(t(84504),t(77152)),s=t(62255),o=t(39245),c=t(78673),l=t(70579);const d={admin:"Admin",manager:"Manager",member:"Member"},v=()=>(0,l.jsx)("div",{className:"invitation-page",children:(0,l.jsx)("div",{className:"invitation-card",children:(0,l.jsx)("div",{className:"invitation-loading",children:"Loading invitation..."})})}),m=i=>{let{error:a,onGoHome:t}=i;return(0,l.jsx)("div",{className:"invitation-page",children:(0,l.jsx)("div",{className:"invitation-card",children:(0,l.jsxs)("div",{className:"invitation-error",children:[(0,l.jsx)("div",{className:"invitation-error__icon",children:"!"}),(0,l.jsx)("h2",{children:"Invalid Invitation"}),(0,l.jsx)("p",{children:a}),(0,l.jsx)("button",{className:"btn-primary",onClick:t,children:"Go Home"})]})})})},p=()=>(0,l.jsxs)("div",{className:"invitation-header",children:[(0,l.jsx)("div",{className:"invitation-icon",children:"+"}),(0,l.jsx)("h1",{children:"Organization Invitation"})]}),u=i=>{let{invitation:a,error:t}=i;return(0,l.jsxs)("div",{className:"invitation-content",children:[(0,l.jsxs)("p",{className:"invitation-message",children:[(0,l.jsx)("strong",{children:a.inviter_name})," has invited you to join"]}),(0,l.jsxs)("div",{className:"invitation-project",children:[(0,l.jsx)("span",{className:"invitation-project__name",children:a.organization_name}),(0,l.jsxs)("span",{className:"invitation-project__role",children:["as ",d[a.role]||a.role]})]}),a.is_expired&&(0,l.jsx)("div",{className:"invitation-expired",children:"This invitation has expired"}),t&&(0,l.jsx)("div",{className:"invitation-error-inline",children:t})]})},g=i=>{let{email:a,token:t,onNavigate:n}=i;return(0,l.jsxs)("div",{className:"invitation-login-prompt",children:[(0,l.jsxs)("p",{children:["Please sign in or register with ",(0,l.jsx)("strong",{children:a})," to accept this invitation."]}),(0,l.jsx)("button",{className:"btn-primary",onClick:()=>n(`/?redirect=/organization-invite/${t}`),children:"Sign In"})]})},h=i=>{let{accepting:a,isAuthenticated:t,isEmailMismatch:n,invitation:e,token:r,onAccept:s,onNavigate:o}=i;return t?e.is_expired?(0,l.jsx)("div",{className:"invitation-actions invitation-actions--single",children:(0,l.jsx)("button",{className:"btn-secondary",onClick:()=>o("/"),children:"Go Home"})}):(0,l.jsxs)("div",{className:"invitation-actions",children:[(0,l.jsx)("button",{className:"btn-secondary",onClick:()=>o("/"),disabled:a,children:"Decline"}),(0,l.jsx)("button",{className:"btn-primary",onClick:s,disabled:a||n,children:a?"Accepting...":"Accept Invitation"})]}):(0,l.jsx)("div",{className:"invitation-actions invitation-actions--single",children:(0,l.jsx)(g,{email:e.email,token:r,onNavigate:o})})},j=i=>{let{userEmail:a,invitationEmail:t,isVisible:n}=i;return n?(0,l.jsxs)("div",{className:"invitation-email-mismatch",children:["This invitation was sent to ",(0,l.jsx)("strong",{children:t}),". You are signed in as"," ",(0,l.jsx)("strong",{children:a}),"."]}):null},x=i=>{var a,t;let{accepting:n,auth:e,error:r,invitation:s,token:o,onAccept:c,onNavigate:d}=i;const v=Boolean(e.isAuthenticated&&(null===(a=e.user)||void 0===a?void 0:a.email)!==s.email);return(0,l.jsxs)("div",{className:"invitation-card",children:[(0,l.jsx)(p,{}),(0,l.jsx)(u,{invitation:s,error:r}),(0,l.jsx)(h,{accepting:n,isAuthenticated:e.isAuthenticated,isEmailMismatch:v,invitation:s,token:o,onAccept:c,onNavigate:d}),(0,l.jsx)(j,{userEmail:null===(t=e.user)||void 0===t?void 0:t.email,invitationEmail:s.email,isVisible:v})]})};t.d(a,["OrganizationInvitationAcceptPage",0,()=>{const{token:i}=(0,e.g)(),a=(0,e.Zp)(),t=(0,s.A)(),d=(i=>{const[a,t]=(0,n.useState)({invitation:null,loading:Boolean(i),error:i?null:"Invalid invitation link"});return(0,n.useEffect)(()=>{if(!i)return;let a=!1;return c.h.getInvitation(i).then(i=>!a&&t({invitation:i,loading:!1,error:null})).catch(()=>!a&&t({invitation:null,loading:!1,error:"Invitation not found or has expired"})),()=>{a=!0}},[i]),{...a,setError:i=>t(a=>({...a,error:i}))}})(i),p=(0,n.useCallback)(()=>a("/organizations"),[a]),{accepting:u,accept:g}=((i,a,t,e)=>
1{const[r,s]=(0,n.useState)(!1);return{accepting:r,accept:(0,n.useCallback)(async()=>{if(i&&a){s(!0),e(null);try{await c.h.acceptInvitation(i),t()}catch(n){e((0,o.gJ)(n,"We couldn\u2019t accept this invitation. Check that it is still valid and try again.")),s(!1)}}},[a,t,e,i])}})(i,t.isAuthenticated,p,d.setError);return d.loading?(0,l.jsx)(v,{}):d.error&&!d.invitation?(0,l.jsx)(m,{error:d.error,onGoHome:()=>a("/")}):d.invitation?(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(r.F,{}),(0,l.jsx)("div",{className:"invitation-page invitation-page--with-navbar",children:(0,l.jsx)(x,{accepting:u,auth:t,error:d.error,invitation:d.invitation,token:i,onAccept:g,onNavigate:a})})]}):null}])},78673(i,a,t){var n=t(85346);const e="https://api.8080.ai",r=i=>i?/^(https?:|data:|blob:)/i.test(i)?i:i.startsWith("/")?`${e}${i}`:i:null,s=i=>{var a;return null!==(a=i.avatar_url)&&void 0!==a&&a.endsWith("/api/v1/profile/image/serve")||"/api/v1/profile/image/serve"===i.avatar_url?r(`/api/v1/profile/image/${i.user_id}`):r(i.avatar_url)};const o=new class{async listOrganizations(){return(await n.default.get("/api/v1/organizations/")).data}async createOrganization(i,a,t,e){const r=new FormData;r.append("name",i),a&&r.append("website",a),t&&r.append("brand_colors",JSON.stringify({colors:t})),e&&r.append("logo",e);return(await n.default.post("/api/v1/organizations/",r,{headers:{"Content-Type":"multipart/form-data"}})).data}async updateOrganization(i,a,t,e,r){const s=new FormData;s.append("name",a),t&&s.append("website",t),e&&s.append("brand_colors",JSON.stringify({colors:e})),r&&s.append("logo",r);return(await n.default.put(`/api/v1/organizations/${i}`,s,{headers:{"Content-Type":"multipart/form-data"}})).data}async getOrganization(i){const a=await n.default.get(`/api/v1/organizations/${i}`);return{...a.data,members:a.data.members.map(i=>({...i,avatar_url:s(i)})),invitations:a.data.invitations||[]}}async addMember(i,a,t,e){return(await n.default.post(`/api/v1/organizations/${i}/members`,{email:a,role:t,manager_user_id:e||null})).data}async getInvitation(i){return(await n.default.get(`/api/v1/organizations/invitations/${i}`)).data}async acceptInvitation(i){return(await n.default.post(`/api/v1/organizations/invitations/${i}/accept`)).data}async updateMember(i,a,t){return(await n.default.put(`/api/v1/organizations/${i}/members/${a}`,t)).data}async updateMemberRole(i,a,t){return this.updateMember(i,a,{role:t})}async removeMember(i,a){await n.default.delete(`/api/v1/organizations/${i}/members/${a}`)}async assignMemberCredits(i,a,t){const e=await n.default.post(`/api/v1/organizations/${i}/members/${a}/credits`,{amount:t});return{...e.data,avatar_url:s(e.data)}}async assignProject(i,a){return(await n.default.post(`/api/v1/organizations/${i}/projects`,{project_id:a})).data}async removeProject(i,a){await n.default.delete(`/api/v1/organizations/${i}/projects/${a}`)}async assignProjectMember(i,a,t){return(await n.default.post(`/api/v1/organizations/${i}/projects/${a}/members`,{user_id:t})).data}async removeProjectMember(i,a,t){await n.default.delete(`/api/v1/organizations/${i}/projects/${a}/members/${t}`)}getLogoUrl(i){return`${e}/api/v1/organizations/${i}/logo`}};t.d(a,["h",0,o])},84504(){}}]); 2//# sourceMappingURL=6358.75180167.chunk.js.map
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.