UNPKG

n8n-editor-ui

Version:

Workflow Editor UI for n8n

2 lines 16.9 kB
(function(){try{var e=typeof window<`u`?window:typeof global<`u`?global:typeof globalThis<`u`?globalThis:typeof self<`u`?self:{};e.SENTRY_RELEASE={id:`n8n@2.16.1`}}catch{}})();try{(function(){var e=typeof window<`u`?window:typeof global<`u`?global:typeof globalThis<`u`?globalThis:typeof self<`u`?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]=`41858416-2bd7-4ad8-940c-9960ee7a79fa`,e._sentryDebugIdIdentifier=`sentry-dbid-41858416-2bd7-4ad8-940c-9960ee7a79fa`)})()}catch{}import"./chunk-CACdhNlC.js";import{$ as e,A as t,C as n,E as r,F as i,Ft as a,H as o,N as s,S as c,Sn as l,T as u,Wt as d,X as f,_ as p,_n as m,dt as h,j as g,rt as _,vn as v,w as y,yt as b}from"./vue.runtime.esm-bundler-C3C09Zii.js";import{J as x,at as S,ot as C}from"./core-Bz5WjPxS.js";import{At as w,C as T,Di as E,Ji as D,Mt as O,Pi as k,Qi as A,R as ee,Xi as j,Zi as te,_ as M,ji as ne,kt as re,tt as N}from"./src-XqE2yCpG.js";import{t as P}from"./_plugin-vue_export-helper-CIL7EULb.js";import{Ln as ie,No as ae,Pn as oe,Rt as se,go as ce,r as le,si as F,t as ue}from"./users.store-xP93bV7X.js";import{t as I}from"./radio-Cvcn3W3r.js";import{Qc as de,Vr as L,cl as fe,el as R,ni as z}from"./constants-DuQbSl-q.js";import{t as B}from"./settings.store-CAFiYCMH.js";import{t as V}from"./usePageRedirectionHelper-CC6sh9o0.js";import{t as pe}from"./useClipboard-D2UtD35U.js";import{r as H}from"./dateFormatter-uA6jMwOH.js";import{n as me}from"./sso.store-BLo2SbFc.js";import{t as he}from"./userRoleProvisioning.store-JMQrCKEv.js";var U=[`disabled`],W={key:1},G=P(s({__name:`SettingsUsersRoleCell`,props:{data:{},roles:{},actions:{},loading:{type:Boolean,default:!1}},emits:[`update:role`],setup(i,{emit:a}){let o=i,s=a,u=c(()=>o.data.role??L.Default),f=c(()=>o.data.role!==L.Owner),p=c(()=>o.roles[u.value]?.label),h=e=>{s(`update:role`,{role:e,userId:o.data.id})};return(i,a)=>(e(),r(`div`,null,[f.value?(e(),y(d(O),{key:0,placement:`bottom-start`,items:o.actions,disabled:o.loading,"data-test-id":`user-role-dropdown`,onSelect:h},{activator:b(()=>[n(`button`,{class:m(i.$style.roleLabel),type:`button`,disabled:o.loading},[g(d(j),{color:`text-dark`},{default:b(()=>[t(l(p.value),1)]),_:1}),o.loading?(e(),y(d(A),{key:0,color:`text-dark`,icon:`spinner`,spin:``,size:`large`})):(e(),y(d(A),{key:1,color:`text-dark`,icon:`chevron-down`,size:`large`}))],10,U)]),menuItem:b(e=>[g(d(I),{"model-value":u.value,label:e.id},{default:b(()=>[n(`span`,{class:m(i.$style.radioLabel)},[g(d(j),{color:`text-dark`,class:`pb-3xs`},{default:b(()=>[t(l(e.label),1)]),_:2},1024),g(d(j),{color:`text-dark`,size:`small`},{default:b(()=>[t(l(o.roles[e.id]?.desc),1)]),_:2},1024)],2)]),_:2},1032,[`model-value`,`label`])]),_:1},8,[`items`,`disabled`])):(e(),r(`span`,W,l(p.value),1))]))}}),[[`__cssModules`,{$style:{roleLabel:`_roleLabel_13imy_125`,radioLabel:`_radioLabel_13imy_139`,removeUser:`_removeUser_13imy_149`}}]]),K=P(s({__name:`SettingsUsersProjectsCell`,props:{data:{}},setup(t){let i=t,o=S(),s=a([L.Owner,L.Admin]),f=a(2),h=c(()=>i.data.role&&s.value.includes(i.data.role)?[o.baseText(`settings.users.table.row.allProjects`)]:i.data.projectRelations?.length?i.data.projectRelations.map(({name:e})=>e):[o.baseText(`settings.users.table.row.personalProject`)]),g=c(()=>({visible:h.value.slice(0,f.value),additional:h.value.slice(f.value)}));return(t,i)=>(e(),r(`div`,{class:m(t.$style.projects)},[(e(!0),r(p,null,_(g.value.visible,(i,a)=>(e(),r(p,{key:a},[n(`span`,{class:m(t.$style.project)},l(i),3),a<g.value.visible.length-1?(e(),r(`span`,{key:0,class:m(t.$style.comma)},`,`,2)):u(``,!0)],64))),128)),g.value.additional.length>0?(e(),r(`span`,{key:0,class:m(t.$style.comma)},`,`,2)):u(``,!0),g.value.additional.length>0?(e(),y(d(E),{key:1},{content:b(()=>[n(`ul`,{class:m(t.$style.projectList)},[(e(!0),r(p,null,_(g.value.additional,(t,n)=>(e(),r(`li`,{key:n},l(t),1))),128))],2)]),default:b(()=>[n(`span`,{class:m(t.$style.project)},`+ `+l(g.value.additional.length),3)]),_:1})):u(``,!0)],2))}}),[[`__cssModules`,{$style:{projects:`_projects_1ynwg_125`,project:`_project_1ynwg_125`,comma:`_comma_1ynwg_140`,projectList:`_projectList_1ynwg_145`}}]]),q=s({__name:`SettingsUsersActionsCell`,props:{data:{},actions:{}},emits:[`action`],setup(t,{emit:n}){let i=t,a=n,o=e=>{a(`action`,{action:e,userId:i.data.id})};return(t,n)=>(e(),r(`div`,null,[i.data.signInType!==`ldap`&&i.actions.length>0?(e(),y(d(w),{key:0,placement:`bottom`,actions:i.actions,theme:`dark`,onAction:o},null,8,[`actions`])):u(``,!0)]))}}),J=s({__name:`SettingsUsersLastActiveCell`,props:{data:{}},setup(t){let n=S(),i=t,a=c(()=>i.data.lastActiveAt?H(i.data.lastActiveAt):n.baseText(`generic.never`));return(t,n)=>(e(),r(`span`,null,l(a.value),1))}}),Y={class:`pt-xs pb-xs`},ge=s({__name:`SettingsUsersTable`,props:o({data:{},actions:{},loading:{type:Boolean},canEditRole:{type:Boolean},updatingRoleUserId:{}},{tableOptions:{default:()=>({})},tableOptionsModifiers:{}}),emits:o([`update:options`,`update:role`,`action`],[`update:tableOptions`]),setup(o,{emit:s}){let u=S(),f=B(),p=o,m=s,_=h(o,`tableOptions`),x=c(()=>p.data.items),C=a([{title:u.baseText(`settings.users.table.header.user`),key:`name`,width:400,value(e){return{...e,isPendingUser:e.isPending}}},{title:u.baseText(`settings.users.table.header.accountType`),key:`role`},{title:u.baseText(`settings.users.table.header.lastActive`),key:`lastActiveAt`,value(e){return{...e,lastActiveAt:e.lastActiveAt??``}}},{title:u.baseText(`settings.users.table.header.2fa`),key:`mfaEnabled`,value(e){return e.mfaEnabled?u.baseText(`settings.users.table.row.2fa.enabled`):u.baseText(`settings.users.table.row.2fa.disabled`)}},{title:u.baseText(`projects.menu.title`),key:`projects`,disableSort:!0,value(){}},{title:``,key:`actions`,align:`end`,width:46,disableSort:!0,value(){}}]),w=c(()=>({[L.Owner]:{label:u.baseText(`auth.roles.owner`),desc:``},[L.Admin]:{label:u.baseText(`auth.roles.admin`),desc:u.baseText(`settings.users.table.row.role.description.admin`)},[L.Member]:{label:u.baseText(`auth.roles.member`),desc:u.baseText(`settings.users.table.row.role.description.member`)},...f.isChatFeatureEnabled&&{[L.ChatUser]:{label:u.baseText(`auth.roles.chatUser`),desc:u.baseText(`settings.users.table.row.role.description.chatUser`)}},[L.Default]:{label:u.baseText(`auth.roles.default`),desc:``}})),E=c(()=>[{id:L.Member,label:u.baseText(`auth.roles.member`)},...f.isChatFeatureEnabled?[{id:L.ChatUser,label:u.baseText(`auth.roles.chatUser`)}]:[],{id:L.Admin,label:u.baseText(`auth.roles.admin`)}]),D=c(()=>!(!F([`rbac`],{rbac:{scope:[`user:update`,`user:changeRole`]}})||!p.canEditRole)),O=e=>e.isOwner?[]:p.actions.filter(t=>t.guard?.({...e,isPendingUser:e.isPending})??!0),k=({role:e,userId:t})=>{m(`update:role`,{role:e,userId:t})};return(a,s)=>(e(),r(`div`,null,[g(d(M),{"sort-by":_.value.sortBy,"onUpdate:sortBy":s[1]||=e=>_.value.sortBy=e,page:_.value.page,"onUpdate:page":s[2]||=e=>_.value.page=e,"items-per-page":_.value.itemsPerPage,"onUpdate:itemsPerPage":s[3]||=e=>_.value.itemsPerPage=e,headers:C.value,items:x.value,"items-length":o.data.count,"page-sizes":[10,25,50],"onUpdate:options":s[4]||=e=>m(`update:options`,e)},{"item.name":b(({value:e})=>[n(`div`,Y,[g(d(T),v(i(e)),null,16)])]),"item.role":b(({item:n})=>[D.value?(e(),y(G,{key:0,data:n,roles:w.value,actions:E.value,loading:p.updatingRoleUserId===n.id,"onUpdate:role":k},null,8,[`data`,`roles`,`actions`,`loading`])):(e(),y(d(j),{key:1,color:`text-dark`},{default:b(()=>[t(l(w.value[n.role??d(L).Default]?.label),1)]),_:2},1024))]),"item.lastActiveAt":b(({item:e})=>[g(J,{data:e},null,8,[`data`])]),"item.projects":b(({item:e})=>[g(K,{data:e},null,8,[`data`])]),"item.actions":b(({item:e})=>[g(q,{data:e,actions:O(e),onAction:s[0]||=e=>a.$emit(`action`,e)},null,8,[`data`,`actions`])]),_:2},1032,[`sort-by`,`page`,`items-per-page`,`headers`,`items`,`items-length`])]))}}),X=P(s({__name:`SettingsUsersView`,setup(i){let o=pe(),{showToast:s,showError:p}=oe(),h=ie(),_=B(),v=le(),w=ue(),T=me(),O=se(),M=V(),P=he(),I=S(),H=a(``),U=a({page:0,itemsPerPage:10,sortBy:[{id:`firstName`,desc:!1},{id:`lastName`,desc:!1},{id:`email`,desc:!1}]}),W=c(()=>F([`defaultUser`])),G=c(()=>P.provisioningConfig?.scopesProvisionInstanceRole||!1),K=c(()=>!!T.isSamlLoginEnabled||!!T.isOidcLoginEnabled);f(async()=>{O.set(I.baseText(`settings.users`)),W.value||await $(U.value),await P.getProvisioningConfig()});let q=c(()=>[{label:I.baseText(`settings.users.actions.generateInviteLink`),value:`generateInviteLink`,guard:e=>F([`rbac`],{rbac:{scope:`user:generateInviteLink`}})&&w.usersLimitNotReached&&e.id!==w.currentUserId&&!e.firstName},{label:I.baseText(`settings.users.actions.reinvite`),value:`reinvite`,guard:e=>w.usersLimitNotReached&&!e.firstName&&_.isSmtpSetup},{label:I.baseText(`settings.users.actions.delete`),value:`delete`,guard:e=>F([`rbac`],{rbac:{scope:`user:delete`}})&&e.id!==w.currentUserId},{label:I.baseText(`settings.users.actions.copyPasswordResetLink`),value:`copyPasswordResetLink`,guard:e=>F([`rbac`],{rbac:{scope:`user:resetPassword`}})&&w.usersLimitNotReached&&!e.isPendingUser&&e.id!==w.currentUserId},{label:I.baseText(`settings.users.actions.allowSSOManualLogin`),value:`allowSSOManualLogin`,guard:e=>K.value&&!e.settings?.allowSSOManualLogin},{label:I.baseText(`settings.users.actions.disallowSSOManualLogin`),value:`disallowSSOManualLogin`,guard:e=>K.value&&e.settings?.allowSSOManualLogin===!0}]),J=c(()=>_.isEnterpriseFeatureEnabled[de.AdvancedPermissions]),Y=c(()=>[{value:L.Member,label:I.baseText(`auth.roles.member`)},{value:L.ChatUser,label:I.baseText(`auth.roles.chatUser`),disabled:!J.value},{value:L.Admin,label:I.baseText(`auth.roles.admin`),disabled:!J.value}]);async function X({action:e,userId:t}){switch(e){case`delete`:await ve(t);break;case`reinvite`:await ye(t);break;case`copyInviteLink`:await be(t);break;case`generateInviteLink`:await xe(t);break;case`copyPasswordResetLink`:await Se(t);break;case`allowSSOManualLogin`:await Z(t);break;case`disallowSSOManualLogin`:await Ce(t);break}}function _e(){v.openModalWithData({name:ae,data:{afterInvite:async()=>{await $(U.value)}}})}async function ve(e){v.openModalWithData({name:ce,data:{userId:e,afterDelete:async()=>{await $(U.value)}}})}async function ye(e){try{let t=w.usersList.state.items.find(t=>t.id===e);if(t?.email&&t?.role){if(![`global:admin`,`global:member`].includes(t.role))throw Error(`Invalid role name on reinvite`);await w.reinviteUser({email:t.email,role:t.role}),s({type:`success`,title:I.baseText(`settings.users.inviteResent`),message:I.baseText(`settings.users.emailSentTo`,{interpolate:{email:t.email??``}})})}}catch(e){p(e,I.baseText(`settings.users.userReinviteError`))}}async function be(e){let t=w.usersList.state.items.find(t=>t.id===e);t?.inviteAcceptUrl&&(o.copy(t.inviteAcceptUrl),s({type:`success`,title:I.baseText(`settings.users.inviteUrlCreated`),message:I.baseText(`settings.users.inviteUrlCreated.message`)}))}async function xe(e){try{if(w.usersList.state.items.find(t=>t.id===e)){let t=await w.generateInviteLink({id:e});o.copy(t.link),s({type:`success`,title:I.baseText(`settings.users.inviteUrlCreated`),message:I.baseText(`settings.users.inviteUrlCreated.message`)})}}catch(e){p(e,I.baseText(`settings.users.inviteLinkError`))}}async function Se(e){try{let t=w.usersList.state.items.find(t=>t.id===e);if(t){let e=await w.getUserPasswordResetLink(t);o.copy(e.link),s({type:`success`,title:I.baseText(`settings.users.passwordResetUrlCreated`),message:I.baseText(`settings.users.passwordResetUrlCreated.message`)})}}catch(e){p(e,I.baseText(`settings.users.passwordResetLinkError`))}}async function Z(e){let t=w.usersList.state.items.find(t=>t.id===e);t&&(t.settings||={},t.settings.allowSSOManualLogin=!0,await w.updateOtherUserSettings(e,t.settings),await $(U.value),s({type:`success`,title:I.baseText(`settings.users.allowSSOManualLogin`),message:I.baseText(`settings.users.allowSSOManualLogin.message`)}))}async function Ce(e){let t=w.usersList.state.items.find(t=>t.id===e);t?.settings&&(t.settings.allowSSOManualLogin=!1,await w.updateOtherUserSettings(e,t.settings),await $(U.value),s({type:`success`,title:I.baseText(`settings.users.disallowSSOManualLogin`),message:I.baseText(`settings.users.disallowSSOManualLogin.message`)}))}function we(){M.goToUpgrade(`settings-users`,`upgrade-users`)}function Te(){M.goToUpgrade(`settings-users`,`upgrade-advanced-permissions`)}let Q=a(null),Ee=async e=>{let t=w.usersList.state.items.find(t=>t.id===e.userId);if(!t){p(Error(`User not found`),I.baseText(`settings.users.userNotFound`));return}await De(t,e.role)},$=async({page:e,itemsPerPage:t,sortBy:n})=>{try{U.value={page:e,itemsPerPage:t,sortBy:n};let r=e*t,i=t,a=n.flatMap(({id:e,desc:t})=>{let n=t?`desc`:`asc`;return e===`name`?[`firstName:${n}`,`lastName:${n}`,`email:${n}`]:`${e}:${n}`}).filter(Oe);await w.usersList.execute(0,{skip:r,take:i,sortBy:a,expand:[`projectRelations`],filter:{fullText:H.value.trim()}})}catch(e){p(e,I.baseText(`settings.users.table.update.error`))}};async function De(e,t){if(t===e.role)return;let n=e.firstName&&e.lastName?`${e.firstName} ${e.lastName}`:e.email??``,r=Y.value.find(({value:e})=>e===t)?.label??t;if(!(t===L.ChatUser&&await h.confirm(I.baseText(`settings.users.userRoleUpdated.confirm.message`,{interpolate:{role:r}}),I.baseText(`settings.users.userRoleUpdated.confirm.title`,{interpolate:{user:n}}),{confirmButtonText:I.baseText(`settings.users.userRoleUpdated.confirm.button`),cancelButtonText:I.baseText(`settings.users.userRoleUpdated.cancel.button`)})!==`confirm`)){Q.value=e.id;try{await w.updateGlobalRole({id:e.id,newRoleName:t}),await $(U.value),s({type:`success`,title:I.baseText(`settings.users.userRoleUpdated`),message:I.baseText(`settings.users.userRoleUpdated.message`,{interpolate:{user:n,role:r}})})}catch(e){p(e,I.baseText(`settings.users.userRoleUpdatedError`))}finally{Q.value=null}}}let Oe=e=>z.includes(e),ke=x(()=>{U.value.page=0,$(U.value)},fe(R.INPUT.SEARCH)),Ae=e=>{H.value=e,ke()};return(i,a)=>(e(),r(`div`,{class:m(i.$style.container)},[g(d(D),{tag:`h1`,size:`2xlarge`,class:`mb-xl`},{default:b(()=>[t(l(d(I).baseText(`settings.users`))+` `,1),W.value?u(``,!0):(e(),y(d(j),{key:0,class:m(i.$style.userCount),color:`text-light`},{default:b(()=>[t(l(d(I).baseText(`settings.users.count`,{interpolate:{count:d(w).usersList.state.count},adjustToNumber:d(w).usersList.state.count})),1)]),_:1},8,[`class`]))]),_:1}),d(w).usersLimitNotReached?u(``,!0):(e(),r(`div`,{key:0,class:m(i.$style.setupInfoContainer)},[g(d(k),{heading:d(I).baseText(d(v).contextBasedTranslationKeys.users.settings.unavailable.title),description:d(I).baseText(d(v).contextBasedTranslationKeys.users.settings.unavailable.description),"button-text":d(I).baseText(d(v).contextBasedTranslationKeys.users.settings.unavailable.button),"onClick:button":we},null,8,[`heading`,`description`,`button-text`])],2)),J.value?u(``,!0):(e(),y(d(ee),{key:1},{default:b(()=>[g(d(C),{keypath:`settings.users.advancedPermissions.warning`,scope:`global`},{link:b(()=>[g(d(N),{"data-test-id":`upgrade-permissions-link`,size:`small`,onClick:Te},{default:b(()=>[t(l(d(I).baseText(`generic.upgrade`)),1)]),_:1})]),_:1})]),_:1})),G.value?(e(),r(`div`,{key:2,class:m(i.$style.container)},[g(re,{type:`info`,title:d(I).baseText(`settings.provisioningInstanceRolesHandledBySsoProvider.description`)},null,8,[`title`])],2)):u(``,!0),W.value?u(``,!0):(e(),r(`div`,{key:3,class:m(i.$style.buttonContainer)},[g(d(ne),{class:m(i.$style.search),"model-value":H.value,placeholder:d(I).baseText(`settings.users.search.placeholder`),clearable:``,"data-test-id":`users-list-search`,"onUpdate:modelValue":Ae},{prefix:b(()=>[g(d(A),{icon:`search`})]),_:1},8,[`class`,`model-value`,`placeholder`]),g(d(E),{disabled:!K.value},{content:b(()=>[n(`span`,null,l(d(I).baseText(`settings.users.invite.tooltip`)),1)]),default:b(()=>[n(`div`,null,[g(d(te),{disabled:K.value||!d(w).usersLimitNotReached||G.value,label:d(I).baseText(`settings.users.invite`),size:`large`,"data-test-id":`settings-users-invite-button`,onClick:_e},null,8,[`disabled`,`label`])])]),_:1},8,[`disabled`])],2)),d(w).usersLimitNotReached||d(w).usersList.state.count>1?(e(),r(`div`,{key:4,class:m(i.$style.usersContainer)},[g(ge,{"table-options":U.value,"onUpdate:tableOptions":a[0]||=e=>U.value=e,"data-test-id":`settings-users-table`,"can-edit-role":!G.value,data:d(w).usersList.state,loading:d(w).usersList.isLoading,"updating-role-user-id":Q.value,actions:q.value,"onUpdate:options":$,"onUpdate:role":Ee,onAction:X},null,8,[`table-options`,`can-edit-role`,`data`,`loading`,`updating-role-user-id`,`actions`])],2)):u(``,!0)],2))}}),[[`__cssModules`,{$style:{userCount:`_userCount_17a4t_125`,buttonContainer:`_buttonContainer_17a4t_130`,search:`_search_17a4t_137`,setupInfoContainer:`_setupInfoContainer_17a4t_141`,container:`_container_17a4t_145`}}]]);export{X as default}; //# sourceMappingURL=SettingsUsersView-MDPY0mI7.js.map