n8n-editor-ui
Version:
Workflow Editor UI for n8n
2 lines • 16.7 kB
JavaScript
(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]=`a90c1f3d-899e-42ae-840d-edb280b96e70`,e._sentryDebugIdIdentifier=`sentry-dbid-a90c1f3d-899e-42ae-840d-edb280b96e70`)})()}catch{}import{o as e}from"./chunk-CACdhNlC.js";import{$ as t,A as n,C as r,E as i,Ft as a,N as o,S as s,Sn as c,T as l,Wt as u,_ as d,_n as f,bt as p,gt as m,j as h,p as g,rt as _,w as v,yt as y,zt as b}from"./vue.runtime.esm-bundler-C3C09Zii.js";import{at as x,s as S}from"./core-Bz5WjPxS.js";import{C,Di as w,E as T,Ji as E,Xi as D,Zi as O,c as k,ct as A,d as j,et as M,gt as N,ji as P,jt as F,l as I,lt as L,nt as R,u as z}from"./src-XqE2yCpG.js";import{t as B}from"./_plugin-vue_export-helper-CIL7EULb.js";import{Ln as ee,Pn as te,Q as V,fr as ne}from"./users.store-xP93bV7X.js";import{Oo as H,Qo as U,ys as re}from"./constants-DuQbSl-q.js";import{t as ie}from"./settings.store-CAFiYCMH.js";import{t as W}from"./dateformat-Cs9X8ykY.js";import{t as G}from"./roles.store-DRsYq9UX.js";import{a as ae,n as oe,t as se}from"./projectRoleScopes-C6ceL0_o.js";var ce=e(V(),1),K=e(W(),1),q=e(H(),1),le=B(o({__name:`RoleProjectMembersModal`,props:{open:{type:Boolean},roleSlug:{},projectId:{},projectName:{}},emits:[`update:open`],setup(e,{emit:o}){let l=e,p=o,g=G(),b=x(),S=L(),w=a({members:[]}),T=a(!1);m(()=>l.open,async e=>{if(e){T.value=!0;try{w.value=await g.fetchRoleProjectMembers(l.roleSlug,l.projectId)}finally{T.value=!1}}},{immediate:!0});let E=s(()=>{let e=[...g.roles.global,...g.roles.project,...g.roles.credential,...g.roles.workflow];return new Map(e.map(e=>[e.slug,e.displayName]))});function A(e){return E.value.get(e)??e}function M(){p(`update:open`,!1),S.push({name:U.PROJECT_SETTINGS,params:{projectId:l.projectId}})}return(a,o)=>(t(),v(u(I),{open:e.open,size:`medium`,"onUpdate:open":o[1]||=e=>p(`update:open`,e)},{default:y(()=>[h(u(j),null,{default:y(()=>[h(u(z),null,{default:y(()=>[n(c(u(b).baseText(`projectRoles.assignments.membersModal.title`,{interpolate:{projectName:e.projectName}})),1)]),_:1})]),_:1}),r(`div`,{class:f(a.$style.content)},[T.value?(t(),v(u(F),{key:0,rows:3})):(t(),i(`div`,{key:1,class:f(a.$style.memberList)},[(t(!0),i(d,null,_(w.value.members,e=>(t(),i(`div`,{key:e.userId,class:f(a.$style.memberRow)},[h(u(C),{"first-name":e.firstName,"last-name":e.lastName,email:e.email},null,8,[`first-name`,`last-name`,`email`]),h(u(D),{class:f(a.$style.roleLabel),color:`text-light`,size:`small`},{default:y(()=>[n(c(A(e.role)),1)]),_:2},1032,[`class`])],2))),128))],2))],2),h(u(k),null,{default:y(()=>[h(u(O),{variant:`subtle`,onClick:o[0]||=e=>p(`update:open`,!1)},{default:y(()=>[n(c(u(b).baseText(`projectRoles.assignments.membersModal.cancel`)),1)]),_:1}),h(u(O),{onClick:M},{default:y(()=>[n(c(u(b).baseText(`projectRoles.assignments.membersModal.manageMembers`)),1)]),_:1})]),_:1})]),_:1},8,[`open`]))}}),[[`__cssModules`,{$style:{content:`_content_bm3ht_2`,memberList:`_memberList_bm3ht_8`,memberRow:`_memberRow_bm3ht_13`,roleLabel:`_roleLabel_bm3ht_25`}}]]),ue=[`onClick`],de=B(o({__name:`RoleAssignmentsTab`,props:{roleSlug:{}},setup(e){let o=e,p=G(),g=x(),{state:b,isLoading:C,execute:w}=S(async()=>await p.fetchRoleAssignments(o.roleSlug),{projects:[],totalProjects:0});m(()=>o.roleSlug,async()=>await w());let T=a(!1),E=a(null),O=a(`memberCount`),k=a(`desc`),A=s(()=>[...b.value.projects].sort((e,t)=>{let n=0;return n=O.value===`projectName`?e.projectName.localeCompare(t.projectName):O.value===`memberCount`?e.memberCount-t.memberCount:(e.lastAssigned??``).localeCompare(t.lastAssigned??``),k.value===`desc`?-n:n}));function j(e){O.value===e?k.value=k.value===`asc`?`desc`:`asc`:(O.value=e,k.value=e===`memberCount`?`desc`:`asc`)}function M(e){return O.value===e?k.value===`asc`?` ↑`:` ↓`:``}function P(e){E.value=e,T.value=!0}function I(e){return e?(0,K.default)(new Date(e),`mmm dS, yyyy`):`—`}return(a,o)=>(t(),i(`div`,{class:f(a.$style.container)},[u(C)?(t(),v(u(F),{key:0,rows:3})):u(b).projects.length===0?(t(),i(`div`,{key:1,class:f(a.$style.emptyState)},[h(u(D),{color:`text-light`},{default:y(()=>[n(c(u(g).baseText(`projectRoles.assignments.emptyState`)),1)]),_:1})],2)):(t(),v(u(N),{key:2},{default:y(()=>[r(`thead`,null,[r(`tr`,null,[r(`th`,{class:f(a.$style.sortableHeader),onClick:o[0]||=e=>j(`projectName`)},c(u(g).baseText(`projectRoles.assignments.projectColumn`))+c(M(`projectName`)),3),r(`th`,{class:f([a.$style.alignRight,a.$style.sortableHeader]),onClick:o[1]||=e=>j(`memberCount`)},c(u(g).baseText(`projectRoles.assignments.membersColumn`))+c(M(`memberCount`)),3),r(`th`,{class:f(a.$style.sortableHeader),onClick:o[2]||=e=>j(`lastAssigned`)},c(u(g).baseText(`projectRoles.assignments.lastAssignedColumn`))+c(M(`lastAssigned`)),3)])]),r(`tbody`,null,[(t(!0),i(d,null,_(A.value,e=>(t(),i(`tr`,{key:e.projectId},[r(`td`,null,[h(u(R),{to:{name:u(U).PROJECTS_WORKFLOWS,params:{projectId:e.projectId}},class:f(a.$style.projectLink)},{default:y(()=>[n(c(e.projectName),1)]),_:2},1032,[`to`,`class`])]),r(`td`,{class:f(a.$style.alignRight)},[r(`button`,{class:f(a.$style.memberCountButton),onClick:t=>P(e)},c(e.memberCount),11,ue)],2),r(`td`,null,c(I(e.lastAssigned)),1)]))),128))])]),_:1})),E.value?(t(),v(le,{key:3,open:T.value,"role-slug":e.roleSlug,"project-id":E.value.projectId,"project-name":E.value.projectName,"onUpdate:open":o[3]||=e=>T.value=e},null,8,[`open`,`role-slug`,`project-id`,`project-name`])):l(``,!0)],2))}}),[[`__cssModules`,{$style:{container:`_container_1r9vx_2`,emptyState:`_emptyState_1r9vx_6`,alignRight:`_alignRight_1r9vx_11`,sortableHeader:`_sortableHeader_1r9vx_15`,projectLink:`_projectLink_1r9vx_20`,memberCountButton:`_memberCountButton_1r9vx_29`}}]]),fe={key:0,class:`mb-l`},pe={style:{flex:`1`}},me={key:1,class:`mt-xl`},J=B(o({__name:`ProjectRoleView`,props:{roleSlug:{}},setup(e){let o=G(),C=A(),k=L(),{showError:j,showMessage:N}=te(),I=x(),R=ee(),z=ne(),B=ie(),V=e,H=a(C.query?.tab??`permissions`);m(H,e=>{k.replace({query:{...C.query,tab:e}})});let W=s(()=>[{label:I.baseText(`projectRoles.tab.permissions`),value:`permissions`},{label:I.baseText(`projectRoles.tab.assignments`),value:`assignments`}]),K=s(()=>C.query.from===U.PROJECT_SETTINGS),le=s(()=>K.value?I.baseText(`projectRoles.backToProjectSettings`):I.baseText(`projectRoles.backToProjectRoles`)),ue=()=>{K.value?k.back():k.push({name:U.PROJECT_ROLES_SETTINGS})},J=()=>({displayName:``,description:``,scopes:structuredClone(b(o.processedProjectRoles.find(e=>e.slug===`project:viewer`)?.scopes||[]))}),Y=a(),{state:X,isLoading:he}=S(async()=>{if(!V.roleSlug)return J();try{let e=await o.fetchRoleBySlug({slug:V.roleSlug});return Y.value=structuredClone(e),{displayName:e.displayName,description:e.description,scopes:e.scopes}}catch(e){return j(e,`Error fetching role`),J()}},J(),{shallow:!1}),Z=s(()=>Y.value?.systemRole===!0||C.name===U.PROJECT_ROLE_VIEW),ge=s(()=>Y.value?!(0,q.default)(Y.value.displayName,X.value.displayName)||!(0,q.default)(Y.value.description??null,X.value.description||null)||!(0,q.default)((0,ce.default)(Y.value.scopes),(0,ce.default)(X.value.scopes)):!1);function _e(e){X.value=e?{displayName:e.displayName,description:e.description,scopes:e.scopes}:J()}let ve=s(()=>B.moduleSettings[`external-secrets`]?.roleBasedAccess?oe:oe.filter(e=>e!==`externalSecretsProvider`&&e!==`externalSecret`)),ye=se;function Q(e){let t=X.value.scopes.indexOf(e),n=t===-1;if(t===-1?X.value.scopes.push(e):X.value.scopes.splice(t,1),e.startsWith(`dataTable:`)&&e.endsWith(`:read`)){Q(e.replace(`:read`,`:listProject`));return}if(e.endsWith(`:read`)&&Q(e.replace(`:read`,`:list`)),e===`workflow:execute`&&n&&(X.value.scopes.includes(`workflow:read`)||Q(`workflow:read`)),e===`workflow:read`&&!n&&X.value.scopes.includes(`workflow:execute`)&&Q(`workflow:execute`),e===`workflow:publish`){if(n&&!X.value.scopes.includes(`workflow:unpublish`))X.value.scopes.push(`workflow:unpublish`);else if(!n){let e=X.value.scopes.indexOf(`workflow:unpublish`);e!==-1&&X.value.scopes.splice(e,1)}}}async function be(){try{let e=await o.createProjectRole({...X.value,scopes:ae(X.value.scopes),description:X.value.description??void 0,roleType:`project`});return o.fetchRoles(),z.track(`User successfully created new role`,{role_id:e.slug,role_name:e.displayName,permissions:e.scopes}),k.replace({name:U.PROJECT_ROLE_SETTINGS,params:{roleSlug:e.slug}}),N({type:`success`,message:I.baseText(`projectRoles.action.create.success`)}),Y.value=structuredClone(e),e}catch(e){j(e,I.baseText(`projectRoles.action.create.error`));return}}async function xe(e){return e?await R.confirm(I.baseText(`projectRoles.action.update.text`,{interpolate:{count:e}}),I.baseText(`projectRoles.action.update.title`,{interpolate:{count:e}}),{type:`warning`,confirmButtonText:I.baseText(`projectRoles.action.update`),cancelButtonText:I.baseText(`projectRoles.action.cancel`)})===re:!0}async function Se(e){if(await xe(Y?.value?.usedByUsers))try{let t=await o.updateProjectRole(e,{...X.value,scopes:ae(X.value.scopes),description:X.value.description??void 0});return o.fetchRoles(),z.track(`User updated role`,{role_id:t.slug,role_name:t.displayName,permissions_from:Y.value?.scopes,permissions_to:t.scopes}),Y.value=structuredClone(t),N({type:`success`,message:I.baseText(`projectRoles.action.update.success`)}),t}catch(e){j(e,I.baseText(`projectRoles.action.update.error`));return}}async function Ce(){V.roleSlug?await Se(V.roleSlug):await be()}function $(e){let t=o.processedProjectRoles.find(t=>t.slug===e);t&&(X.value.scopes=structuredClone(b(t.scopes)))}async function we(){if(Y?.value&&await R.confirm(I.baseText(`projectRoles.action.delete.text`,{interpolate:{roleName:Y.value.displayName}}),I.baseText(`projectRoles.action.delete.title`,{interpolate:{roleName:Y.value.displayName}}),{type:`warning`,confirmButtonText:I.baseText(`projectRoles.action.delete`),cancelButtonText:I.baseText(`projectRoles.action.cancel`)})===`confirm`){z.track(`User clicked delete role`,{role_id:Y.value.slug,role_name:Y.value.displayName,permissions:Y.value?.scopes});try{await o.deleteProjectRole(Y.value.slug);let e=o.roles.project.findIndex(e=>e.slug===Y.value?.slug);e!==-1&&o.roles.project.splice(e,1),N({title:I.baseText(`projectRoles.action.delete.success`),type:`success`}),z.track(`User successfully deleted role`,{role_id:Y.value.slug,role_name:Y.value.displayName,permissions:Y.value?.scopes}),k.back()}catch(e){j(e,I.baseText(`projectRoles.action.delete.error`));return}}}let Te=[{name:`REQUIRED`},{name:`MIN_LENGTH`,config:{minimum:2}}];return(a,o)=>(t(),i(`div`,{class:f([`pb-xl`,a.$style.container])},[h(u(O),{variant:`ghost`,icon:`arrow-left`,class:f(a.$style.backButton),text:``,onClick:ue},{default:y(()=>[n(c(le.value),1)]),_:1},8,[`class`]),r(`div`,{class:f([`mb-xl`,a.$style.headerContainer])},[h(u(E),{tag:`h1`,size:`2xlarge`},{default:y(()=>[n(c(e.roleSlug?`Role "${u(X).displayName}"`:u(I).baseText(`projectRoles.newRole`)),1)]),_:1}),Y.value&&!Z.value&&!u(he)?(t(),i(`div`,{key:0,class:f(a.$style.headerActions)},[h(u(O),{variant:`subtle`,disabled:!ge.value,onClick:o[0]||=e=>_e(Y.value)},{default:y(()=>[n(c(u(I).baseText(`projectRoles.discardChanges`)),1)]),_:1},8,[`disabled`]),h(u(O),{disabled:!ge.value,onClick:Ce},{default:y(()=>[n(c(u(I).baseText(`projectRoles.save`)),1)]),_:1},8,[`disabled`])],2)):e.roleSlug?l(``,!0):(t(),v(u(O),{key:1,onClick:Ce},{default:y(()=>[n(c(u(I).baseText(`projectRoles.create`)),1)]),_:1}))],2),r(`div`,{class:f([`mb-l`,a.$style.formContainer])},[Z.value?(t(),i(d,{key:0},[h(u(M),{modelValue:u(X).displayName,"onUpdate:modelValue":o[2]||=e=>u(X).displayName=e,label:u(I).baseText(`projectRoles.roleName`),class:`mb-s`,"show-required-asterisk":``,required:``},{default:y(()=>[h(u(w),{content:u(I).baseText(`projectRoles.systemRoleNotEditable`),placement:`top`},{default:y(()=>[h(u(P),{modelValue:u(X).displayName,"onUpdate:modelValue":o[1]||=e=>u(X).displayName=e,maxlength:100,disabled:``},null,8,[`modelValue`])]),_:1},8,[`content`])]),_:1},8,[`modelValue`,`label`]),h(u(M),{modelValue:u(X).description,"onUpdate:modelValue":o[4]||=e=>u(X).description=e,label:u(I).baseText(`projectRoles.description`)},{default:y(()=>[h(u(w),{content:u(I).baseText(`projectRoles.systemRoleNotEditable`),placement:`top`},{default:y(()=>[h(u(P),{modelValue:u(X).description,"onUpdate:modelValue":o[3]||=e=>u(X).description=e,type:`textarea`,placeholder:u(I).baseText(`projectRoles.optional`),maxlength:500,autosize:{minRows:2,maxRows:4},disabled:``},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`content`])]),_:1},8,[`modelValue`,`label`])],64)):(t(),i(d,{key:1},[h(u(M),{modelValue:u(X).displayName,"onUpdate:modelValue":o[5]||=e=>u(X).displayName=e,label:u(I).baseText(`projectRoles.roleName`),"validate-on-blur":``,"validation-rules":Te,class:`mb-s`,"show-required-asterisk":``,required:``,maxlength:100},null,8,[`modelValue`,`label`]),h(u(M),{modelValue:u(X).description,"onUpdate:modelValue":o[6]||=e=>u(X).description=e,label:u(I).baseText(`projectRoles.description`),placeholder:u(I).baseText(`projectRoles.optional`),type:`textarea`,maxlength:500,autosize:{minRows:2,maxRows:4}},null,8,[`modelValue`,`label`,`placeholder`])],64))],2),e.roleSlug?(t(),i(`div`,fe,[h(u(T),{modelValue:H.value,"onUpdate:modelValue":o[7]||=e=>H.value=e,options:W.value},null,8,[`modelValue`,`options`])])):l(``,!0),p(r(`div`,null,[Z.value?l(``,!0):(t(),i(d,{key:0},[h(u(D),{color:`text-light`,class:`mb-2xs`,tag:`p`},{default:y(()=>[n(c(u(I).baseText(`projectRoles.preset`)),1)]),_:1}),r(`div`,{class:f([`mb-s`,a.$style.presetsContainer])},[h(u(O),{variant:`subtle`,onClick:o[8]||=e=>$(`project:admin`)},{default:y(()=>[n(c(u(I).baseText(`projectRoles.admin`)),1)]),_:1}),h(u(O),{variant:`subtle`,onClick:o[9]||=e=>$(`project:editor`)},{default:y(()=>[n(c(u(I).baseText(`projectRoles.editor`)),1)]),_:1}),h(u(O),{variant:`subtle`,onClick:o[10]||=e=>$(`project:viewer`)},{default:y(()=>[n(c(u(I).baseText(`projectRoles.viewer`)),1)]),_:1})],2)],64)),r(`div`,{class:f(a.$style.cardContainer)},[(t(!0),i(d,null,_(ve.value,e=>(t(),i(`div`,{key:e,class:f([`mb-s mt-s`,a.$style.card])},[r(`div`,{class:f(a.$style.cardTitle)},c(u(I).baseText(`projectRoles.type.${e}`)),3),r(`div`,pe,[u(he)?(t(),v(u(F),{key:0,rows:u(ye)[e].length,"shrink-last":!1},null,8,[`rows`])):(t(!0),i(d,{key:1},_(u(ye)[e],e=>(t(),i(`div`,{key:e,class:`mb-2xs`},[h(u(w),{content:u(I).baseText(`projectRoles.${e}.tooltip`),placement:`right`,enterable:!1,"show-after":250},{default:y(()=>[h(u(M),{"data-test-id":`scope-checkbox-${e}`,"model-value":u(X).scopes.includes(e),label:u(I).baseText(`projectRoles.${e}`),"validate-on-blur":``,type:`checkbox`,class:f(a.$style.checkbox),disabled:Z.value,"onUpdate:modelValue":()=>Q(e)},null,8,[`data-test-id`,`model-value`,`label`,`class`,`disabled`,`onUpdate:modelValue`])]),_:2},1032,[`content`])]))),128))])],2))),128))],2),e.roleSlug&&!Z.value?(t(),i(`div`,me,[h(u(E),{tag:`h2`,class:`mb-2xs`,size:`large`},{default:y(()=>[n(c(u(I).baseText(`projectRoles.dangerZone`)),1)]),_:1}),h(u(D),{tag:`p`,class:`mb-s`},{default:y(()=>[Y.value?.usedByProjects?(t(),i(d,{key:0},[n(c(u(I).baseText(`projectRoles.action.delete.useWarning.before`))+` `,1),r(`a`,{class:f(a.$style.assignmentsLink),onClick:o[11]||=e=>H.value=`assignments`},c(u(I).baseText(`projectRoles.action.delete.useWarning.linkText`,{adjustToNumber:Y.value.usedByProjects,interpolate:{count:Y.value.usedByProjects}})),3),n(`. `+c(u(I).baseText(`projectRoles.action.delete.useWarning.after`)),1)],64)):(t(),i(d,{key:1},[n(c(u(I).baseText(`projectRoles.action.delete.warning`)),1)],64))]),_:1}),h(u(O),{variant:`destructive`,disabled:!!Y.value?.usedByProjects,onClick:we},{default:y(()=>[n(c(u(I).baseText(`projectRoles.action.delete.button`)),1)]),_:1},8,[`disabled`])])):l(``,!0)],512),[[g,!e.roleSlug||H.value===`permissions`]]),e.roleSlug&&H.value===`assignments`?(t(),v(de,{key:1,"role-slug":e.roleSlug},null,8,[`role-slug`])):l(``,!0)],2))}}),[[`__cssModules`,{$style:{container:`_container_1sfyd_2`,cardContainer:`_cardContainer_1sfyd_9`,card:`_card_1sfyd_9`,cardTitle:`_cardTitle_1sfyd_28`,backButton:`_backButton_1sfyd_32`,headerContainer:`_headerContainer_1sfyd_38`,headerActions:`_headerActions_1sfyd_45`,formContainer:`_formContainer_1sfyd_51`,presetsContainer:`_presetsContainer_1sfyd_55`,checkbox:`_checkbox_1sfyd_60`,assignmentsLink:`_assignmentsLink_1sfyd_68`}}]]);export{J as default};
//# sourceMappingURL=ProjectRoleView-Ur9dsfQP.js.map