UNPKG

n8n-editor-ui

Version:

Workflow Editor UI for n8n

2 lines 16.8 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.13.4`}}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]=`748f187d-d76d-4e2c-a655-6641fc409ede`,e._sentryDebugIdIdentifier=`sentry-dbid-748f187d-d76d-4e2c-a655-6641fc409ede`)})()}catch{}import{o as e}from"./chunk-DxpFCn6T.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-D9KLAxvJ.js";import{bt as x,x as S}from"./_MapCache-CUJwh2qp.js";import{F as C,Fi as w,M as T,Mi as E,Qi as D,Yi as O,Zi as k,_t as A,c as j,ct as M,d as N,gt as ee,l as P,u as F,ut as I,wt as L,zt as R}from"./src-wni2AGA3.js";import{t as z}from"./_plugin-vue_export-helper-Dm3nT7Ps.js";import"./sanitize-html-my1ogl5v.js";import{As as te,Q as B,Tr as ne,en as re,jr as ie}from"./users.store-BHWXXawf.js";import{Go as V,Ps as ae,ms as H}from"./constants-CIP7tKq1.js";import"./merge-BqvKZ38d.js";import"./_baseOrderBy-CaKruttV.js";import{t as U}from"./dateformat-CYfyw486.js";import"./useDebounce-CTeIt-cH.js";import{t as W}from"./roles.store-B4WtqADh.js";import{a as G,n as oe,t as se}from"./projectRoleScopes-chCAb__m.js";var ce=e(B(),1),K=e(U(),1),q=e(V(),1),le=z(o({__name:`RoleProjectMembersModal`,props:{open:{type:Boolean},roleSlug:{},projectId:{},projectName:{}},emits:[`update:open`],setup(e,{emit:o}){let l=e,p=o,g=W(),b=x(),S=A(),C=a({members:[]}),w=a(!1);m(()=>l.open,async e=>{if(e){w.value=!0;try{C.value=await g.fetchRoleProjectMembers(l.roleSlug,l.projectId)}finally{w.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 O(e){return E.value.get(e)??e}function M(){p(`update:open`,!1),S.push({name:H.PROJECT_SETTINGS,params:{projectId:l.projectId}})}return(a,o)=>(t(),v(u(P),{open:e.open,size:`medium`,"onUpdate:open":o[1]||=e=>p(`update:open`,e)},{default:y(()=>[h(u(N),null,{default:y(()=>[h(u(F),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)},[w.value?(t(),v(u(R),{key:0,rows:3})):(t(),i(`div`,{key:1,class:f(a.$style.memberList)},[(t(!0),i(d,null,_(C.value.members,e=>(t(),i(`div`,{key:e.userId,class:f(a.$style.memberRow)},[h(u(T),{"first-name":e.firstName,"last-name":e.lastName,email:e.email},null,8,[`first-name`,`last-name`,`email`]),h(u(k),{class:f(a.$style.roleLabel),color:`text-light`,size:`small`},{default:y(()=>[n(c(O(e.role)),1)]),_:2},1032,[`class`])],2))),128))],2))],2),h(u(j),null,{default:y(()=>[h(u(D),{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(D),{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=z(o({__name:`RoleAssignmentsTab`,props:{roleSlug:{}},setup(e){let o=e,p=W(),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),D=a(`memberCount`),O=a(`desc`),A=s(()=>[...b.value.projects].sort((e,t)=>{let n=0;return n=D.value===`projectName`?e.projectName.localeCompare(t.projectName):D.value===`memberCount`?e.memberCount-t.memberCount:(e.lastAssigned??``).localeCompare(t.lastAssigned??``),O.value===`desc`?-n:n}));function j(e){D.value===e?O.value=O.value===`asc`?`desc`:`asc`:(D.value=e,O.value=e===`memberCount`?`desc`:`asc`)}function M(e){return D.value===e?O.value===`asc`?` ↑`:` ↓`:``}function N(e){E.value=e,T.value=!0}function ee(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(R),{key:0,rows:3})):u(b).projects.length===0?(t(),i(`div`,{key:1,class:f(a.$style.emptyState)},[h(u(k),{color:`text-light`},{default:y(()=>[n(c(u(g).baseText(`projectRoles.assignments.emptyState`)),1)]),_:1})],2)):(t(),v(u(L),{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(I),{to:{name:u(H).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=>N(e)},c(e.memberCount),11,ue)],2),r(`td`,null,c(ee(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=z(o({__name:`ProjectRoleView`,props:{roleSlug:{}},setup(e){let o=W(),T=ee(),j=A(),{showError:N,showMessage:P}=ne(),F=x(),I=ie(),L=re(),z=te(),B=e,V=a(T.query?.tab??`permissions`);m(V,e=>{j.replace({query:{...T.query,tab:e}})});let U=s(()=>[{label:F.baseText(`projectRoles.tab.permissions`),value:`permissions`},{label:F.baseText(`projectRoles.tab.assignments`),value:`assignments`}]),K=s(()=>T.query.from===H.PROJECT_SETTINGS),le=s(()=>K.value?F.baseText(`projectRoles.backToProjectSettings`):F.baseText(`projectRoles.backToProjectRoles`)),ue=()=>{K.value?j.back():j.push({name:H.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(!B.roleSlug)return J();try{let e=await o.fetchRoleBySlug({slug:B.roleSlug});return Y.value=structuredClone(e),{displayName:e.displayName,description:e.description,scopes:e.scopes}}catch(e){return N(e,`Error fetching role`),J()}},J(),{shallow:!1}),Z=s(()=>Y.value?.systemRole===!0||T.name===H.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(()=>z.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:G(X.value.scopes),description:X.value.description??void 0,roleType:`project`});return o.fetchRoles(),L.track(`User successfully created new role`,{role_id:e.slug,role_name:e.displayName,permissions:e.scopes}),j.replace({name:H.PROJECT_ROLE_SETTINGS,params:{roleSlug:e.slug}}),P({type:`success`,message:F.baseText(`projectRoles.action.create.success`)}),Y.value=structuredClone(e),e}catch(e){N(e,F.baseText(`projectRoles.action.create.error`));return}}async function xe(e){return e?await I.confirm(F.baseText(`projectRoles.action.update.text`,{interpolate:{count:e}}),F.baseText(`projectRoles.action.update.title`,{interpolate:{count:e}}),{type:`warning`,confirmButtonText:F.baseText(`projectRoles.action.update`),cancelButtonText:F.baseText(`projectRoles.action.cancel`)})===ae:!0}async function Se(e){if(await xe(Y?.value?.usedByUsers))try{let t=await o.updateProjectRole(e,{...X.value,scopes:G(X.value.scopes),description:X.value.description??void 0});return o.fetchRoles(),L.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),P({type:`success`,message:F.baseText(`projectRoles.action.update.success`)}),t}catch(e){N(e,F.baseText(`projectRoles.action.update.error`));return}}async function Ce(){B.roleSlug?await Se(B.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 I.confirm(F.baseText(`projectRoles.action.delete.text`,{interpolate:{roleName:Y.value.displayName}}),F.baseText(`projectRoles.action.delete.title`,{interpolate:{roleName:Y.value.displayName}}),{type:`warning`,confirmButtonText:F.baseText(`projectRoles.action.delete`),cancelButtonText:F.baseText(`projectRoles.action.cancel`)})===`confirm`){L.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),P({title:F.baseText(`projectRoles.action.delete.success`),type:`success`}),L.track(`User successfully deleted role`,{role_id:Y.value.slug,role_name:Y.value.displayName,permissions:Y.value?.scopes}),j.back()}catch(e){N(e,F.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(D),{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(O),{tag:`h1`,size:`2xlarge`},{default:y(()=>[n(c(e.roleSlug?`Role "${u(X).displayName}"`:u(F).baseText(`projectRoles.newRole`)),1)]),_:1}),Y.value&&!Z.value&&!u(he)?(t(),i(`div`,{key:0,class:f(a.$style.headerActions)},[h(u(D),{variant:`subtle`,disabled:!ge.value,onClick:o[0]||=e=>_e(Y.value)},{default:y(()=>[n(c(u(F).baseText(`projectRoles.discardChanges`)),1)]),_:1},8,[`disabled`]),h(u(D),{disabled:!ge.value,onClick:Ce},{default:y(()=>[n(c(u(F).baseText(`projectRoles.save`)),1)]),_:1},8,[`disabled`])],2)):e.roleSlug?l(``,!0):(t(),v(u(D),{key:1,onClick:Ce},{default:y(()=>[n(c(u(F).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(F).baseText(`projectRoles.roleName`),class:`mb-s`,"show-required-asterisk":``,required:``},{default:y(()=>[h(u(E),{content:u(F).baseText(`projectRoles.systemRoleNotEditable`),placement:`top`},{default:y(()=>[h(u(w),{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(F).baseText(`projectRoles.description`)},{default:y(()=>[h(u(E),{content:u(F).baseText(`projectRoles.systemRoleNotEditable`),placement:`top`},{default:y(()=>[h(u(w),{modelValue:u(X).description,"onUpdate:modelValue":o[3]||=e=>u(X).description=e,type:`textarea`,placeholder:u(F).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(F).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(F).baseText(`projectRoles.description`),placeholder:u(F).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(C),{modelValue:V.value,"onUpdate:modelValue":o[7]||=e=>V.value=e,options:U.value},null,8,[`modelValue`,`options`])])):l(``,!0),p(r(`div`,null,[Z.value?l(``,!0):(t(),i(d,{key:0},[h(u(k),{color:`text-light`,class:`mb-2xs`,tag:`p`},{default:y(()=>[n(c(u(F).baseText(`projectRoles.preset`)),1)]),_:1}),r(`div`,{class:f([`mb-s`,a.$style.presetsContainer])},[h(u(D),{variant:`subtle`,onClick:o[8]||=e=>$(`project:admin`)},{default:y(()=>[n(c(u(F).baseText(`projectRoles.admin`)),1)]),_:1}),h(u(D),{variant:`subtle`,onClick:o[9]||=e=>$(`project:editor`)},{default:y(()=>[n(c(u(F).baseText(`projectRoles.editor`)),1)]),_:1}),h(u(D),{variant:`subtle`,onClick:o[10]||=e=>$(`project:viewer`)},{default:y(()=>[n(c(u(F).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(F).baseText(`projectRoles.type.${e}`)),3),r(`div`,pe,[u(he)?(t(),v(u(R),{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(E),{content:u(F).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(F).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(O),{tag:`h2`,class:`mb-2xs`,size:`large`},{default:y(()=>[n(c(u(F).baseText(`projectRoles.dangerZone`)),1)]),_:1}),h(u(k),{tag:`p`,class:`mb-s`},{default:y(()=>[Y.value?.usedByProjects?(t(),i(d,{key:0},[n(c(u(F).baseText(`projectRoles.action.delete.useWarning.before`))+` `,1),r(`a`,{class:f(a.$style.assignmentsLink),onClick:o[11]||=e=>V.value=`assignments`},c(u(F).baseText(`projectRoles.action.delete.useWarning.linkText`,{adjustToNumber:Y.value.usedByProjects,interpolate:{count:Y.value.usedByProjects}})),3),n(`. `+c(u(F).baseText(`projectRoles.action.delete.useWarning.after`)),1)],64)):(t(),i(d,{key:1},[n(c(u(F).baseText(`projectRoles.action.delete.warning`)),1)],64))]),_:1}),h(u(D),{variant:`destructive`,disabled:!!Y.value?.usedByProjects,onClick:we},{default:y(()=>[n(c(u(F).baseText(`projectRoles.action.delete.button`)),1)]),_:1},8,[`disabled`])])):l(``,!0)],512),[[g,!e.roleSlug||V.value===`permissions`]]),e.roleSlug&&V.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-RSM5hRzQ.js.map