mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-16 09:36:44 +00:00
* feat(editor): Ask AI tab and CLi connection Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * Remove old getSchema util method Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * Increase CSS specificity of the CodeNodeEditor global overrides Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * feat(editor): Magic Connect Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * Improve AI controller, load conditionally, UX modal imporvements Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * Extract-out AI curl Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * Move loading phrases to locale, add support for ask ai experiment Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * fix build * adjust communication * fix: Remove duplicate source control preferences fetching (no-changelog) (#6675) fix: remove duplicate source control preferences fetching (no-changelog) * fix(Slack Node): Add UTM params to n8n reference in Slack message (no-changelog) (#6668) fix(Slack Node): Add UTM params to n8n reference in Slack message * fix(FileMaker Node): Improve returned error responses (#6585) * fix(Microsoft Outlook Node): Fix issue with category not correctly applying (#6583) * feat(Airtable Node): Overhaul (#6200) * fix(core): Deleting manual executions should defer deleting binary data (#6680) deleting manual executions should defer deleting binary data * fix(editor): Add paywall state to non owner users for Variables (#6679) * fix(editor): Add paywall state to non owner users for Variables * fix(editor): Add variables view tests * fix(editor): remove link from paywall state for non owner * fix(editor): fix displaying logic * refactor(core): Refactor WorkflowStatistics code (no-changelog) (#6617) refactor(core): Refactor WorkflowStatistics code * fix(editor): Hide Execute Node button for unknown nodes (#6684) * feat: Allow hiding credential params on cloud (#6687) * fix: Stop n8n from complaining about credentials when saving a new workflow form a template (#6671) * fix(core): Upgrade semver to address CVE-2022-25883 (#6689) * fix(core): Upgrade semver to address CVE-2022-25883 [GH Advisory](https://github.com/advisories/GHSA-c2qf-rxjj-qqgw) * enforce the patched version of semver everywhere in the dev setup * ci: Fix test checker glob (no changelog) (#6682) ci: Fix test checker glob * fix(API): Do not add starting node on workflow creation (#6686) * fix(API): Do not add starting node on workflow creation * chore: Remove comment * fix(core): Filter out workflows that failed to activate on startup (#6676) * fix(core): Deactivate on init workflow that should not be retried * fix(core): Filter out workflows with activation errors * fix(core): Load SAML libraries dynamically (#6690) load SAML dynamically * fix(crowd.dev Node): Fix documentation urls for crowd.dev credentials and nodes (#6696) * feat(Read PDF Node): Replace pdf-parse with pdfjs, and add support for streaming and encrypted PDFs (#6640) * feat: Allow `eslint-config` to be externally consumable (#6694) * feat: Allow `eslint-config` to be externally consumable * refactor: Adjust import styles * fix(Contentful Node): Fix typo in credential name (no-changelog) (#6692) * fix(editor): Ensure default credential values are not detected as dirty state (#6677) * fix(editor): Ensure default credential values are not detected as dirty state * chore: Remove logging * refactor: Improve comment * feat(Google Cloud Storage Node): Use streaming for file uploads (#6462) fix(Google Cloud Storage Node): Use streaming for file uploads * fix(editor): Prevent RMC from loading schema if it's already cached (#6695) * fix(editor): Prevent RMC from loading schema if it's already cached * ✅ Adding new tests for RMC * 👕 Fixing lint errors * 👌 Updating inline loader styling * fix(API): Fix issue with workflow setting not supporting newer nanoids (#6699) * ci: Fix test workflows (no-changelog) (#6698) * ci: Fix test workflows (no-changelog) We removed `pdf-parse` in #6640, so we need to get these test PDF files from the `test-workflows` repo instead ([which has been updated to include these files](0f6ef1c804)) * remove `\n` from ids and skipList text files * fix(core): Banner dismissal should also work for users migrating to v1 (no-changelog) (#6700) * fix(Postgres Node): For select queries, empty result should be be replaced with `{"success":true}` (#6703) * fix(Postgres Node): For select queries, empty result should be be replaced with `{"success":true}` * ⚡ less checks --------- Co-authored-by: Michael Kret <michael.k@radency.com> * feat(editor): Removing `ph-no-capture` class from some elements (#6674) * feat(editor): Remove `.ph-no-capture` class from some of the fields * ✔️ Updating test snapshots * ⚡ Redacting expressions preview in credentials form * 🔧 Disable posthog input masking * 🚨 Testing PostHog iFrame settings * Reverting iframe test * ⚡ Hiding API key in PostHog recordings * ✅ Added tests for redacted values * ✔️ Updating checkbox snapshots after label component update * ✔️ Updating test snapshots in editor-ui * 👕 Fix lint errors * fix(editor): Remove global link styling in v1 banner (#6705) * fix: Add missing indices on sqlite (#6673) * fix: enforce tag name uniqueness on sqlite * rename migration and add other missing indices * add tags tests * test: Move test timeout to `/cli` (no-changelog) (#6712) * fix(core): Redirect user to previous url after SSO signin (#6710) redirect user to previous url after SSO signin * fix(FTP Node): List recursive ignore . and .. to prevent infinite loops (#6707) ignore . and .. to prevent infinite loop Co-authored-by: Michael Kret <michael.k@radency.com> * ci: Fix running e2e tests in dev mode (no-changelog) (#6717) * fix(Google BigQuery Node): Error description improvement (#6715) * fix(GitLab Trigger Node): Fix trigger activation 404 error (#6711) * fix webhook checkExists not deleting static data * improve webhook checkExists not deleting static data * fix(core): Support redis cluster in queue mode (#6708) * support redis cluster * cleanup, fix config schema * set default prefix to bull * fix(editor): Skip error line highlighting if out of range (#6721) * fix(AwsS3 Node): Fix issue if bucket name contains a '.' (#6542) * test(editor): Add canvas actions E2E tests (#6723) * test(editor): Add canvas actions E2E tests * test(editor): Open category items in node creator when category dropped on canvas * test(editor): Have new position counted only once in drag * test(editor): rename test * feat(Rundeck Node): Add support for node filters (#5633) * fix(Gmail Trigger Node): Early returns in case of no data (#6727) * fix(core): Use JWT as reset password token (#6714) * use jwt to reset password * increase expiration time to 1d * drop user id query string * refactor * use service instead of package in tests * sqlite migration * postgres migration * mysql migration * remove unused properties * remove userId from FE * fix test for users.api * move migration to the common folder * move type assertion to the jwt.service * Add jwt secret as a readonly property * use signData instead of sign in user.controller * remove base class * remove base class * add tests * ci: Fix tests on postgres (no-changelog) * refactor(core): Prevent community packages queries if feature is disabled (#6728) * feat(core): Add cache service (#6729) * add cache service * PR adjustments * switch to maxSize for memory cache * Revert "test(editor): Add canvas actions E2E tests" (#6736) Revert "test(editor): Add canvas actions E2E tests (#6723)" This reverts commit052d82b220. * fix(Postgres Node): Arrays in query replacement fix (#6718) * fix(Telegram Trigger Node): Add guard to 'include' call on null or undefined (#6730) * fix(core): Use `exec` in docker images to forward signals correctly (#6732) * refactor(core): Move webhook DB access to repository (no-changelog) (#6706) * refactor(core): Move webhook DB access to repository (no-changelog) * make sure `DataSource` is initialized before it's dependencies at some point I hope to replace `DataSource` with a custom `DatabaseConnection` service class that can then disconnect and reconnect from DB without having to update all repositories. --------- Co-authored-by: कारतोफ्फेलस्क्रिप्ट™ <aditya@netroy.in> * feat: Environments release using source control (#6653) * initial telemetry setup and adjusted pull return * quicksave before merge * feat: add conflicting workflow list to pull modal * feat: update source control pull modal * fix: fix linting issue * feat: add Enter keydown event for submitting source control push modal (no-changelog) feat: add Enter keydown event for submitting source control push modal * quicksave * user workflow table for export * improve telemetry data * pull api telemetry * fix lint * Copy tweaks. * remove authorName and authorEmail and pick from user * rename owners.json to workflow_owners.json * ignore credential conflicts on pull * feat: several push/pull flow changes and design update * pull and push return same data format * fix: add One last step toast for successful pull * feat: add up to date pull toast * fix: add proper Learn more link for push and pull modals * do not await tracking being sent * fix import * fix await * add more sourcecontrolfile status * Minor copy tweak for "More info". * Minor copy tweak for "More info". * ignore variable_stub conflicts on pull * ignore whitespace differences * do not show remote workflows that are not yet created * fix telemetry * fix toast when pulling deleted wf * lint fix * refactor and make some imports dynamic * fix variable edit validation * fix telemetry response * improve telemetry * fix unintenional delete commit * fix status unknown issue * fix up to date toast * do not export active state and reapply versionid * use update instead of upsert * fix: show all workflows when clicking push to git * feat: update Up to date pull translation * fix: update read only env checks * do not update versionid of only active flag changes * feat: prevent access to new workflow and templates import when read only env * feat: send only active state and version if workflow state is not dirty * fix: Detect when only active state has changed and prevent generation a new version ID * feat: improve readonly env messages * make getPreferences public * fix telemetry issue * fix: add partial workflow update based on dirty state when changing active state * update unit tests * fix: remove unsaved changes check in readOnlyEnv * fix: disable push to git button when read onyl env * fix: update readonly toast duration * fix: fix pinning and title input in protected mode * initial commit (NOT working) * working push * cleanup and implement pull * fix getstatus * update import to new method * var and tag diffs are no conflicts * only show pull conflict for workflows * refactor and ignore faulty credentials * add sanitycheck for missing git folder * prefer fetch over pull and limit depth to 1 * back to pull... * fix setting branch on initial connect * fix test * remove clean workfolder * refactor: Remove some unnecessary code * Fixed links to docs. * fix getstatus query params * lint fix * dialog to show local and remote name on conflict * only show remote name on conflict * fix credential expression export * fix: Broken test * dont show toast on pull with empty var/tags and refactor * apply frontend changes from old branch * fix tag with same name import * fix buttons shown for non instance owners * prepare local storage key for removal * refactor: Change wording on pushing and pulling * refactor: Change menu item * test: Fix broken test * Update packages/cli/src/environments/sourceControl/types/sourceControlPushWorkFolder.ts Co-authored-by: Iván Ovejero <ivov.src@gmail.com> --------- Co-authored-by: Alex Grozav <alex@grozav.com> Co-authored-by: Giulio Andreini <g.andreini@gmail.com> Co-authored-by: Omar Ajoue <krynble@gmail.com> Co-authored-by: Iván Ovejero <ivov.src@gmail.com> * fix(core): Fix RemoveResetPasswordColumns migration for sqlite (no-changelog) (#6739) * ci: Update changelog generation to work with node 18 * refactor: Remove webhook from `IDatabaseCollections` (no-changelog) (#6745) * refactor: Remove webhook from `IDatabaseCollections` * refactor: Remove also from `collections` * 🚀 Release 1.1.0 (#6746) Co-authored-by: netroy <netroy@users.noreply.github.com> * fix(Lemlist Node): Fix pagination issues with campaigns and activities (#6734) * ci: Fix linting issues (no-changelog) (#6747) * fix(core): Allow ignoring SSL issues on generic oauth2 credentials (#6702) * refactor: Remove all references to the resetPasswordToken field (no-changelog) (#6751) refactor: remove all references to the resetPasswordToken field (no-changelog) * refactor(core): Use mixins to delete redundant code between Entity classes (no-changelog) (#6616) * db entities don't need an ID before they are inserted * don't define constructors on entity classes, use repository.create instead * use mixins to reduce duplicate code in db entity classes * fix: Display source control buttons properly (#6756) * feat(editor): Migrate Design System and Editor UI to Vue 3 (#6476) * feat: remove vue-fragment (no-changelog) * feat: partial design-system migration * feat: migrate info-accordion and info-tip components * feat: migrate several components to vue 3 * feat: migrated several components * feat: migrate several components * feat: migrate several components * feat: migrate several components * feat: re-exported all design system components * fix: fix design for popper components * fix: editor kind of working, lots of issues to fix * fix: fix several vue 3 migration issues * fix: replace @change with @update:modelValue in several places * fix: fix translation linking * fix: fix inline-edit input * fix: fix ndv and dialog design * fix: update parameter input event bindings * fix: rename deprecated lifecycle methods * fix: fix json view mapping * build: update lock file * fix(editor): revisit last conflict with master and fix issues * fix(editor): revisit last conflict with master and fix issues * fix: fix expression editor bug causing code mirror to no longer be reactive * fix: fix resource locator bug * fix: fix vue-agile integration * fix: remove global import for vue-agile * fix: replace element-plus buttons with n8n-buttons everywhere * fix(editor): Fix various element-plus styles (#6571) * fix(editor): Fix various element-plus styles Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * Remove debugging code Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * Address PR comments Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> --------- Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * fix(editor): Fix loading in production mode [Vue 3] (#6578) Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * fix(editor): First round of e2e tests fixes with Vue 3 (#6579) * fix(editor): Fix broken smoke and workflow list e2e tests * ✔️ Fix failing canvas action tests. Updating some selectors used in credentials and workflow tests * feat: add vue 3 eslint rules and fix issues * fix: fix tags-dropdown * fix: fix white-space issues caused by i18n-t * fix: rename non-generic click events * fix: fix search in resources list layout * fix: fix datatable paginator * fix: fix popper select caret and dropdown size * fix: add width to action-dropdown * fix: fix workflow settings icon not being hidden * fix: refactor newly added code * fix: fix merge issue * fix: fix ndv credentials watcher * fix: fix workflow saving and grabber notch * fix: fix nodes list panel transition * fix: fix node title visibility * fix: fix data unpinning * fix: fix value access * fix: show input panel only if trigger panel enabled or not trigger node * fix: fix tags dropdown and executions status spcing * fix(editor): Prevent execution list to load back when leaving the route (#6697) fix(editor): prevent execution list to load back when leaving the route * fix: fix drawer visibility * fix: fix expression toggle padding * fix: fix expressions editor styling * chore: prepare for testing * fix: fix styling for el-button without patching * test: fix unit tests in design-system * test: fix most unit tests * fix: remove import cycle. * fix: fix personalization modal tests * fix further resource mapper test adjustments * fix: fix multiple tests and n8n-route attr duplication * fix: fix source control tets * fix: fixed remaining unit tests * fix: fix workflows and credentials e2e tests * fix: fix localizeNodeNames * fix: update ndv e2e tests * fix: fix popper left placement arrow * fix: fix 5-ndv e2e tests * fix: fix 6-code-node e2e tests * fix(editor): Drop click outside directive from NodeCreator (#6716) * fix(editor): Drop click outside directive from NodeCreator * fix(editor): make sure mouseup outside is unbound at least before the component is unmounted * fix: fix 10-settings-log-streaming e2e tests * fix: fix node redrawing * fix: fix tooltip buttons styling * fix: fix varous e2e suites * fix: fix 15-scheduler-node e2e suite * fix: fix route watcher * fix: fixed param name update and credential edit * feat: update event names * refactor: Remove deprecated `$data` (#6576) Co-authored-by: Alex Grozav <alex@grozav.com> * fix: fix 17-sharing e2e suite * fix: fix tags dropdown * fix: fix tags manager * fix(editor): move :deep selectors to a separate scoped style block * fix: fix sticky component and inline text edit * fix: update e2e tests * fix: remove button override references * fix(editor): Adjust spacing in templates for Vue 3 (#6744) * fix(editor): Adjust spacing in templates * fix: Undo unneeded change * fix: Undo unneeded change * fix(editor): Adjust NDV height for Vue 3 (#6742) fix(editor): Adjust NDV height * fix(editor): Restore collapsed sidebar items for Vue 3 (#6743) fix(editor): Restore collapsed sidebar items * fix: fix linting issues * fix: fix design-system deps * fix: post-merge fixes * fix: update tests * fix: increase timeout for executionslist tets * chore: fix linting issue * fix: fix 14-mapping e2e tests in ci * fix: re-enable tests * fix: fix workflow duplication e2e tests after tags update * fix(editor): Change component prop to be typed * fix: fix tags dropdown in duplicate wf modal * fix: fix focus behaviour in tags selector * fix: fix tag creation * fix: fix log streaming e2e race condition * fix(editor): Fix Vue 3 linting issues (#6748) * fix(editor): Fix Vue 3 linting issues Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * fix MainSidebar linter issues * revert pnpm lock * update pnpm lock file --------- Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> Co-authored-by: Alex Grozav <alex@grozav.com> * fix(editor): Some css fixes for vue3 branch (#6749) * ✨ Fixing filter button height * ✨ Update input modal button position * ✨ Updating tags styling * ✨ Fix event logging settings spacing * 👕 Fixing lint errors * fix: fix linting issues * Revert to `// eslint-disable-next-line @typescript-eslint/no-misused-promises` disabling of mixins init Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * fix: fix css issue * fix(editor): Lint fix * fix(editor): Fix settings initialisation (#6750) Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * fix: fix initial settings loading * fix: replace realClick with click force * fix: fix randomly failing mapping e2e tests * fix(editor): Fix menu item event handling * fix: fix resource filters dropdown events (#6752) * fix: fix resource filters dropdown events * fix: remove teleported:false * fix: fix event selection event naming (#6753) * fix: removed console.log (#6754) * fix: rever await nextTick changes * fix: redo linting changes * fix(editor): Redraw node connections if adding more than one node to canvas (#6755) * fix(editor): Redraw node connections if adding more than one node to canvas Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * Update position before connection two nodes * Lint fix --------- Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> Co-authored-by: Alex Grozav <alex@grozav.com> * fix(editor): Fix `ResourceMapper` unit tests (#6758) * ✔️ Fix matching columns test * ✔️ Fix multiple matching columns test * ✔️ Removing `skip` from the last test * fix: Allow pasting a big workflow (#6760) * fix: pasting a big workflow * chore: update comment * refactor: move try/catch to function * refactor: move try/catch to function * fix(editor): Fix modal layer width * fix: fix position changes * fix: undo it.only * fix: make undo/redo multiple steps more verbose * fix: Fix value survey styles (#6764) * fix: fix value survey styles * fix: lint * Revert "fix: lint" 72869c431f1448861df021be041b61c62f1e3118 * fix: lint * fix(editor): Fix collapsed sub menu * fix: Fix drawer animation (#6767) fix: drawer animation * fix(editor): Fix source control buttons (#6769) * fix(editor): Fix App loading & auth (#6768) * fix(editor): Fix App loading & auth Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * Await promises Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * Fix eslint error Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> --------- Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> --------- Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> Co-authored-by: Csaba Tuncsik <csaba@n8n.io> Co-authored-by: OlegIvaniv <me@olegivaniv.com> Co-authored-by: Milorad FIlipović <milorad@n8n.io> Co-authored-by: Iván Ovejero <ivov.src@gmail.com> Co-authored-by: Mutasem Aldmour <4711238+mutdmour@users.noreply.github.com> * perf(editor): Memoize locale translate calls during actions generation (#6773) performance(editor): Memoize locale translate calls during actions generation Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * fix(editor): Close tags dropdown when modal is opened (#6766) * feat: remove vue-fragment (no-changelog) * feat: partial design-system migration * feat: migrate info-accordion and info-tip components * feat: migrate several components to vue 3 * feat: migrated several components * feat: migrate several components * feat: migrate several components * feat: migrate several components * feat: re-exported all design system components * fix: fix design for popper components * fix: editor kind of working, lots of issues to fix * fix: fix several vue 3 migration issues * fix: replace @change with @update:modelValue in several places * fix: fix translation linking * fix: fix inline-edit input * fix: fix ndv and dialog design * fix: update parameter input event bindings * fix: rename deprecated lifecycle methods * fix: fix json view mapping * build: update lock file * fix(editor): revisit last conflict with master and fix issues * fix(editor): revisit last conflict with master and fix issues * fix: fix expression editor bug causing code mirror to no longer be reactive * fix: fix resource locator bug * fix: fix vue-agile integration * fix: remove global import for vue-agile * fix: replace element-plus buttons with n8n-buttons everywhere * fix(editor): Fix various element-plus styles (#6571) * fix(editor): Fix various element-plus styles Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * Remove debugging code Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * Address PR comments Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> --------- Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * fix(editor): Fix loading in production mode [Vue 3] (#6578) Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * fix(editor): First round of e2e tests fixes with Vue 3 (#6579) * fix(editor): Fix broken smoke and workflow list e2e tests * ✔️ Fix failing canvas action tests. Updating some selectors used in credentials and workflow tests * feat: add vue 3 eslint rules and fix issues * fix: fix tags-dropdown * fix: fix white-space issues caused by i18n-t * fix: rename non-generic click events * fix: fix search in resources list layout * fix: fix datatable paginator * fix: fix popper select caret and dropdown size * fix: add width to action-dropdown * fix: fix workflow settings icon not being hidden * fix: refactor newly added code * fix: fix merge issue * fix: fix ndv credentials watcher * fix: fix workflow saving and grabber notch * fix: fix nodes list panel transition * fix: fix node title visibility * fix: fix data unpinning * fix: fix value access * fix: show input panel only if trigger panel enabled or not trigger node * fix: fix tags dropdown and executions status spcing * fix(editor): Prevent execution list to load back when leaving the route (#6697) fix(editor): prevent execution list to load back when leaving the route * fix: fix drawer visibility * fix: fix expression toggle padding * fix: fix expressions editor styling * chore: prepare for testing * fix: fix styling for el-button without patching * test: fix unit tests in design-system * test: fix most unit tests * fix: remove import cycle. * fix: fix personalization modal tests * fix further resource mapper test adjustments * fix: fix multiple tests and n8n-route attr duplication * fix: fix source control tets * fix: fixed remaining unit tests * fix: fix workflows and credentials e2e tests * fix: fix localizeNodeNames * fix: update ndv e2e tests * fix: fix popper left placement arrow * fix: fix 5-ndv e2e tests * fix: fix 6-code-node e2e tests * fix(editor): Drop click outside directive from NodeCreator (#6716) * fix(editor): Drop click outside directive from NodeCreator * fix(editor): make sure mouseup outside is unbound at least before the component is unmounted * fix: fix 10-settings-log-streaming e2e tests * fix: fix node redrawing * fix: fix tooltip buttons styling * fix: fix varous e2e suites * fix: fix 15-scheduler-node e2e suite * fix: fix route watcher * fix: fixed param name update and credential edit * feat: update event names * refactor: Remove deprecated `$data` (#6576) Co-authored-by: Alex Grozav <alex@grozav.com> * fix: fix 17-sharing e2e suite * fix: fix tags dropdown * fix: fix tags manager * fix(editor): move :deep selectors to a separate scoped style block * fix: fix sticky component and inline text edit * fix: update e2e tests * fix: remove button override references * fix(editor): Adjust spacing in templates for Vue 3 (#6744) * fix(editor): Adjust spacing in templates * fix: Undo unneeded change * fix: Undo unneeded change * fix(editor): Adjust NDV height for Vue 3 (#6742) fix(editor): Adjust NDV height * fix(editor): Restore collapsed sidebar items for Vue 3 (#6743) fix(editor): Restore collapsed sidebar items * fix: fix linting issues * fix: fix design-system deps * fix: post-merge fixes * fix: update tests * fix: increase timeout for executionslist tets * chore: fix linting issue * fix: fix 14-mapping e2e tests in ci * fix: re-enable tests * fix: fix workflow duplication e2e tests after tags update * fix(editor): Change component prop to be typed * fix: fix tags dropdown in duplicate wf modal * fix: fix focus behaviour in tags selector * fix: fix tag creation * fix: fix log streaming e2e race condition * fix(editor): Fix Vue 3 linting issues (#6748) * fix(editor): Fix Vue 3 linting issues Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * fix MainSidebar linter issues * revert pnpm lock * update pnpm lock file --------- Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> Co-authored-by: Alex Grozav <alex@grozav.com> * fix(editor): Some css fixes for vue3 branch (#6749) * ✨ Fixing filter button height * ✨ Update input modal button position * ✨ Updating tags styling * ✨ Fix event logging settings spacing * 👕 Fixing lint errors * fix: fix linting issues * Revert to `// eslint-disable-next-line @typescript-eslint/no-misused-promises` disabling of mixins init Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * fix: fix css issue * fix(editor): Lint fix * fix(editor): Fix settings initialisation (#6750) Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * fix: fix initial settings loading * fix: replace realClick with click force * fix: fix randomly failing mapping e2e tests * fix(editor): Fix menu item event handling * fix: fix resource filters dropdown events (#6752) * fix: fix resource filters dropdown events * fix: remove teleported:false * fix: fix event selection event naming (#6753) * fix: removed console.log (#6754) * fix: rever await nextTick changes * fix: redo linting changes * fix(editor): Redraw node connections if adding more than one node to canvas (#6755) * fix(editor): Redraw node connections if adding more than one node to canvas Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * Update position before connection two nodes * Lint fix --------- Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> Co-authored-by: Alex Grozav <alex@grozav.com> * fix(editor): Fix `ResourceMapper` unit tests (#6758) * ✔️ Fix matching columns test * ✔️ Fix multiple matching columns test * ✔️ Removing `skip` from the last test * fix: Allow pasting a big workflow (#6760) * fix: pasting a big workflow * chore: update comment * refactor: move try/catch to function * refactor: move try/catch to function * fix(editor): Fix modal layer width * fix: fix position changes * fix: undo it.only * fix: make undo/redo multiple steps more verbose * fix: Fix value survey styles (#6764) * fix: fix value survey styles * fix: lint * Revert "fix: lint" 72869c431f1448861df021be041b61c62f1e3118 * fix: lint * fix(editor): Close tags dropdown when modal is opened * ✔️ Updating tag selectors in e2e tests * ✔️ Using tab to blur dropdown after adding tags * ✔️ Clicking on the New Tab button instead of the tags dropdown to open it * Reverting merge changes added by mistake --------- Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> Co-authored-by: Alex Grozav <alex@grozav.com> Co-authored-by: Csaba Tuncsik <csaba@n8n.io> Co-authored-by: OlegIvaniv <me@olegivaniv.com> Co-authored-by: Iván Ovejero <ivov.src@gmail.com> Co-authored-by: Mutasem Aldmour <4711238+mutdmour@users.noreply.github.com> * fix: Show NodeIcon tooltips by removing pointer-events: none (#6777) fix: show NodeIcon tooltips by removing pointer-events: none * fix: Respect set modal widths (#6771) * feat: remove vue-fragment (no-changelog) * feat: partial design-system migration * feat: migrate info-accordion and info-tip components * feat: migrate several components to vue 3 * feat: migrated several components * feat: migrate several components * feat: migrate several components * feat: migrate several components * feat: re-exported all design system components * fix: fix design for popper components * fix: editor kind of working, lots of issues to fix * fix: fix several vue 3 migration issues * fix: replace @change with @update:modelValue in several places * fix: fix translation linking * fix: fix inline-edit input * fix: fix ndv and dialog design * fix: update parameter input event bindings * fix: rename deprecated lifecycle methods * fix: fix json view mapping * build: update lock file * fix(editor): revisit last conflict with master and fix issues * fix(editor): revisit last conflict with master and fix issues * fix: fix expression editor bug causing code mirror to no longer be reactive * fix: fix resource locator bug * fix: fix vue-agile integration * fix: remove global import for vue-agile * fix: replace element-plus buttons with n8n-buttons everywhere * fix(editor): Fix various element-plus styles (#6571) * fix(editor): Fix various element-plus styles Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * Remove debugging code Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * Address PR comments Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> --------- Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * fix(editor): Fix loading in production mode [Vue 3] (#6578) Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * fix(editor): First round of e2e tests fixes with Vue 3 (#6579) * fix(editor): Fix broken smoke and workflow list e2e tests * ✔️ Fix failing canvas action tests. Updating some selectors used in credentials and workflow tests * feat: add vue 3 eslint rules and fix issues * fix: fix tags-dropdown * fix: fix white-space issues caused by i18n-t * fix: rename non-generic click events * fix: fix search in resources list layout * fix: fix datatable paginator * fix: fix popper select caret and dropdown size * fix: add width to action-dropdown * fix: fix workflow settings icon not being hidden * fix: refactor newly added code * fix: fix merge issue * fix: fix ndv credentials watcher * fix: fix workflow saving and grabber notch * fix: fix nodes list panel transition * fix: fix node title visibility * fix: fix data unpinning * fix: fix value access * fix: show input panel only if trigger panel enabled or not trigger node * fix: fix tags dropdown and executions status spcing * fix(editor): Prevent execution list to load back when leaving the route (#6697) fix(editor): prevent execution list to load back when leaving the route * fix: fix drawer visibility * fix: fix expression toggle padding * fix: fix expressions editor styling * chore: prepare for testing * fix: fix styling for el-button without patching * test: fix unit tests in design-system * test: fix most unit tests * fix: remove import cycle. * fix: fix personalization modal tests * fix further resource mapper test adjustments * fix: fix multiple tests and n8n-route attr duplication * fix: fix source control tets * fix: fixed remaining unit tests * fix: fix workflows and credentials e2e tests * fix: fix localizeNodeNames * fix: update ndv e2e tests * fix: fix popper left placement arrow * fix: fix 5-ndv e2e tests * fix: fix 6-code-node e2e tests * fix(editor): Drop click outside directive from NodeCreator (#6716) * fix(editor): Drop click outside directive from NodeCreator * fix(editor): make sure mouseup outside is unbound at least before the component is unmounted * fix: fix 10-settings-log-streaming e2e tests * fix: fix node redrawing * fix: fix tooltip buttons styling * fix: fix varous e2e suites * fix: fix 15-scheduler-node e2e suite * fix: fix route watcher * fix: fixed param name update and credential edit * feat: update event names * refactor: Remove deprecated `$data` (#6576) Co-authored-by: Alex Grozav <alex@grozav.com> * fix: fix 17-sharing e2e suite * fix: fix tags dropdown * fix: fix tags manager * fix(editor): move :deep selectors to a separate scoped style block * fix: fix sticky component and inline text edit * fix: update e2e tests * fix: remove button override references * fix(editor): Adjust spacing in templates for Vue 3 (#6744) * fix(editor): Adjust spacing in templates * fix: Undo unneeded change * fix: Undo unneeded change * fix(editor): Adjust NDV height for Vue 3 (#6742) fix(editor): Adjust NDV height * fix(editor): Restore collapsed sidebar items for Vue 3 (#6743) fix(editor): Restore collapsed sidebar items * fix: fix linting issues * fix: fix design-system deps * fix: post-merge fixes * fix: update tests * fix: increase timeout for executionslist tets * chore: fix linting issue * fix: fix 14-mapping e2e tests in ci * fix: re-enable tests * fix: fix workflow duplication e2e tests after tags update * fix(editor): Change component prop to be typed * fix: fix tags dropdown in duplicate wf modal * fix: fix focus behaviour in tags selector * fix: fix tag creation * fix: fix log streaming e2e race condition * fix(editor): Fix Vue 3 linting issues (#6748) * fix(editor): Fix Vue 3 linting issues Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * fix MainSidebar linter issues * revert pnpm lock * update pnpm lock file --------- Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> Co-authored-by: Alex Grozav <alex@grozav.com> * fix(editor): Some css fixes for vue3 branch (#6749) * ✨ Fixing filter button height * ✨ Update input modal button position * ✨ Updating tags styling * ✨ Fix event logging settings spacing * 👕 Fixing lint errors * fix: fix linting issues * Revert to `// eslint-disable-next-line @typescript-eslint/no-misused-promises` disabling of mixins init Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * fix: fix css issue * fix(editor): Lint fix * fix(editor): Fix settings initialisation (#6750) Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * fix: fix initial settings loading * fix: replace realClick with click force * fix: fix randomly failing mapping e2e tests * fix(editor): Fix menu item event handling * fix: fix resource filters dropdown events (#6752) * fix: fix resource filters dropdown events * fix: remove teleported:false * fix: fix event selection event naming (#6753) * fix: removed console.log (#6754) * fix: rever await nextTick changes * fix: redo linting changes * fix(editor): Redraw node connections if adding more than one node to canvas (#6755) * fix(editor): Redraw node connections if adding more than one node to canvas Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * Update position before connection two nodes * Lint fix --------- Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> Co-authored-by: Alex Grozav <alex@grozav.com> * fix(editor): Fix `ResourceMapper` unit tests (#6758) * ✔️ Fix matching columns test * ✔️ Fix multiple matching columns test * ✔️ Removing `skip` from the last test * fix: Allow pasting a big workflow (#6760) * fix: pasting a big workflow * chore: update comment * refactor: move try/catch to function * refactor: move try/catch to function * fix(editor): Fix modal layer width * fix: fix position changes * fix: undo it.only * fix: make undo/redo multiple steps more verbose * fix: Fix value survey styles (#6764) * fix: fix value survey styles * fix: lint * Revert "fix: lint" 72869c431f1448861df021be041b61c62f1e3118 * fix: lint * fix(editor): Fix collapsed sub menu * fix: Fix drawer animation (#6767) fix: drawer animation * fix(editor): Fix source control buttons (#6769) * fix: Respect modal width --------- Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> Co-authored-by: Alex Grozav <alex@grozav.com> Co-authored-by: Csaba Tuncsik <csaba@n8n.io> Co-authored-by: OlegIvaniv <me@olegivaniv.com> Co-authored-by: Milorad FIlipović <milorad@n8n.io> Co-authored-by: Iván Ovejero <ivov.src@gmail.com> * fix(editor): Fix tooltip opening delay prop name (#6776) fix(editor): fix tooltip opening delay prop name * fix(editor): Fix collapsed sub menu elements (#6778) * fix: Remove number input arrows (no-changelog) (#6782) fix: remove number input arrows * ci: Update most of the dev tooling (no-changelog) (#6780) * fix(TheHive Node): Treat `ApiKey` as a secret (#6786) * test(editor): Prevent node view unload by default in e2e run (#6787) Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * fix(editor): Resolve vue 3 related console-warnings (#6779) * fix(editor): Resolve vue 3 related console-warnings Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * Use span as component wrapper instead of div Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * Wrap popover component in span Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> --------- Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * fix(editor): Vue3 - Fix modal positioning and multi-select tag sizing (#6783) * ✨ Updating modals positioning within the overlay * 💄 Implemented multi-select variant with small tabs * ✔️ Removing password link clicks while modal is open in e2e tests * Set generous timeout for $paramter resolve Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> --------- Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> Co-authored-by: Oleg Ivaniv <me@olegivaniv.com> * ci: Fix linting issues (no-changelog) (#6788) * ci: Fix linting (no-changelog) * lintfix for nodes-base as well * fix(editor): Fix code node highlight error (#6791) Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * feat(core): Credentials for popular SecOps services, Part 1 (#6775) * refactor: Clear unused ESLint directives from BE packages (no-changelog) (#6798) * refactor(core): Cache workflow ownership (#6738) * refactor: Set up ownership service * refactor: Specify cache keys and values * refactor: Replace util with service calls * test: Mock service in tests * refactor: Use dependency injection * test: Write tests * refactor: Apply feedback from Omar and Micha * test: Fix tests * test: Fix missing spot * refactor: Return user entity from cache * refactor: More dependency injection! * fix(editor): Prevent text edit dialog from re-opening in same tick (#6781) * fix: prevent reopenning textedit dialog in same tick * fix: add same logic for code edit dialog * fix: remove stop modifier * fix: blur input field when closing modal, removing default element-plus behaviour * test(editor): Do not chain invoke calls after assertions in 24-ndv-paired-item e2e spec (no-changelog) (#6800) * test(editor): Do not chaing invoke calls after assertions in 24-ndv-paired-item e2e spec * Do not chaing realHover after assertion Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * Remove .only Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> --------- Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * fix(Todoist Node): Fix issue with section id being ignored (#6799) * test(editor): Add canvas actions E2E tests (#6723) (#6790) * test(editor): Add canvas actions E2E tests (#6723) * test(editor): Add canvas actions E2E tests * test(editor): Open category items in node creator when category dropped on canvas * test(editor): Have new position counted only once in drag * test(editor): rename test (cherry picked from commit052d82b220) * test: fix drag positioning * fix(core): Add missing primary key on the `execution_data` table on postgres (#6797) * fix: Review fixes Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * fix: Fin locales Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * Fix merging errors Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * Map erros based on statusCode Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * Fix code replacing Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * Fix code formatting Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * Address review points Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * Optionally access total_tokens * Clean-up Ask AI modal Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * Store prompt in sessionStorage Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * Improve schema generation, only get parent nodes Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * Send error messages to telemetry, aske before switching tabs Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * Add locale Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * Post-merge cleanup Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * Move Ask AI into separate folder Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * Lint fix Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * Constants lint fix Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * Add Ask AI e2e tests and fix linting issues Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * Move CircleLoader to design-lib Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * Replace circle-lodaer and move el-tabs styles to n8n theme Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * Fix placeholder & e2e tests Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> * Remove old CircleLoader Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> --------- Signed-off-by: Oleg Ivaniv <me@olegivaniv.com> Co-authored-by: ricardo <ricardoespinoza105@gmail.com> Co-authored-by: Alex Grozav <alex@grozav.com> Co-authored-by: Romain Dunand <romain@1-more-thing.com> Co-authored-by: Jon <jonathan.bennetts@gmail.com> Co-authored-by: Michael Kret <88898367+michael-radency@users.noreply.github.com> Co-authored-by: कारतोफ्फेलस्क्रिप्ट™ <netroy@users.noreply.github.com> Co-authored-by: Csaba Tuncsik <csaba@n8n.io> Co-authored-by: Iván Ovejero <ivov.src@gmail.com> Co-authored-by: Omar Ajoue <krynble@gmail.com> Co-authored-by: Michael Auerswald <michael.auerswald@gmail.com> Co-authored-by: Milorad FIlipović <milorad@n8n.io> Co-authored-by: Michael Kret <michael.k@radency.com> Co-authored-by: Val <68596159+valya@users.noreply.github.com> Co-authored-by: Marcus <56945030+maspio@users.noreply.github.com> Co-authored-by: Jordan Hall <Jordan@libertyware.co.uk> Co-authored-by: qg-horie <36725144+qg-horie@users.noreply.github.com> Co-authored-by: Ricardo Espinoza <ricardo@n8n.io> Co-authored-by: कारतोफ्फेलस्क्रिप्ट™ <aditya@netroy.in> Co-authored-by: Ali Afsharzadeh <afsharzadeh8@gmail.com> Co-authored-by: Giulio Andreini <g.andreini@gmail.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Mutasem Aldmour <4711238+mutdmour@users.noreply.github.com>
567 lines
16 KiB
TypeScript
567 lines
16 KiB
TypeScript
import {
|
|
applyForOnboardingCall,
|
|
fetchNextOnboardingPrompt,
|
|
submitEmailOnSignup,
|
|
} from '@/api/workflow-webhooks';
|
|
import {
|
|
ABOUT_MODAL_KEY,
|
|
CHANGE_PASSWORD_MODAL_KEY,
|
|
COMMUNITY_PACKAGE_CONFIRM_MODAL_KEY,
|
|
COMMUNITY_PACKAGE_INSTALL_MODAL_KEY,
|
|
COMMUNITY_PACKAGE_MANAGE_ACTIONS,
|
|
CONTACT_PROMPT_MODAL_KEY,
|
|
CREDENTIAL_EDIT_MODAL_KEY,
|
|
CREDENTIAL_SELECT_MODAL_KEY,
|
|
DELETE_USER_MODAL_KEY,
|
|
DUPLICATE_MODAL_KEY,
|
|
FAKE_DOOR_FEATURES,
|
|
IMPORT_CURL_MODAL_KEY,
|
|
INVITE_USER_MODAL_KEY,
|
|
LOG_STREAM_MODAL_KEY,
|
|
ONBOARDING_CALL_SIGNUP_MODAL_KEY,
|
|
PERSONALIZATION_MODAL_KEY,
|
|
STORES,
|
|
TAGS_MANAGER_MODAL_KEY,
|
|
VALUE_SURVEY_MODAL_KEY,
|
|
VERSIONS_MODAL_KEY,
|
|
VIEWS,
|
|
WORKFLOW_ACTIVE_MODAL_KEY,
|
|
WORKFLOW_SETTINGS_MODAL_KEY,
|
|
WORKFLOW_SHARE_MODAL_KEY,
|
|
SOURCE_CONTROL_PUSH_MODAL_KEY,
|
|
SOURCE_CONTROL_PULL_MODAL_KEY,
|
|
} from '@/constants';
|
|
import type {
|
|
CloudUpdateLinkSourceType,
|
|
CurlToJSONResponse,
|
|
IFakeDoorLocation,
|
|
IMenuItem,
|
|
INodeUi,
|
|
IOnboardingCallPrompt,
|
|
IUser,
|
|
UIState,
|
|
UTMCampaign,
|
|
XYPosition,
|
|
Modals,
|
|
NewCredentialsModal,
|
|
} from '@/Interface';
|
|
import { defineStore } from 'pinia';
|
|
import { useRootStore } from './n8nRoot.store';
|
|
import { getCurlToJson } from '@/api/curlHelper';
|
|
import { useWorkflowsStore } from './workflows.store';
|
|
import { useSettingsStore } from './settings.store';
|
|
import { useCloudPlanStore } from './cloudPlan.store';
|
|
import type { BaseTextKey } from '@/plugins/i18n';
|
|
import { i18n as locale } from '@/plugins/i18n';
|
|
import { useTelemetryStore } from '@/stores/telemetry.store';
|
|
import { getStyleTokenValue } from '@/utils/htmlUtils';
|
|
import { dismissBannerPermanently } from '@/api/ui';
|
|
import type { Banners } from 'n8n-workflow';
|
|
|
|
export const useUIStore = defineStore(STORES.UI, {
|
|
state: (): UIState => ({
|
|
activeActions: [],
|
|
activeCredentialType: null,
|
|
modals: {
|
|
[ABOUT_MODAL_KEY]: {
|
|
open: false,
|
|
},
|
|
[CHANGE_PASSWORD_MODAL_KEY]: {
|
|
open: false,
|
|
},
|
|
[CONTACT_PROMPT_MODAL_KEY]: {
|
|
open: false,
|
|
},
|
|
[CREDENTIAL_SELECT_MODAL_KEY]: {
|
|
open: false,
|
|
},
|
|
[DELETE_USER_MODAL_KEY]: {
|
|
open: false,
|
|
activeId: null,
|
|
},
|
|
[DUPLICATE_MODAL_KEY]: {
|
|
open: false,
|
|
},
|
|
[ONBOARDING_CALL_SIGNUP_MODAL_KEY]: {
|
|
open: false,
|
|
},
|
|
[PERSONALIZATION_MODAL_KEY]: {
|
|
open: false,
|
|
},
|
|
[INVITE_USER_MODAL_KEY]: {
|
|
open: false,
|
|
},
|
|
[TAGS_MANAGER_MODAL_KEY]: {
|
|
open: false,
|
|
},
|
|
[VALUE_SURVEY_MODAL_KEY]: {
|
|
open: false,
|
|
},
|
|
[VERSIONS_MODAL_KEY]: {
|
|
open: false,
|
|
},
|
|
[WORKFLOW_SETTINGS_MODAL_KEY]: {
|
|
open: false,
|
|
},
|
|
[WORKFLOW_SHARE_MODAL_KEY]: {
|
|
open: false,
|
|
},
|
|
[WORKFLOW_ACTIVE_MODAL_KEY]: {
|
|
open: false,
|
|
},
|
|
[COMMUNITY_PACKAGE_INSTALL_MODAL_KEY]: {
|
|
open: false,
|
|
},
|
|
[COMMUNITY_PACKAGE_CONFIRM_MODAL_KEY]: {
|
|
open: false,
|
|
mode: '',
|
|
activeId: null,
|
|
},
|
|
[IMPORT_CURL_MODAL_KEY]: {
|
|
open: false,
|
|
curlCommand: '',
|
|
httpNodeParameters: '',
|
|
},
|
|
[LOG_STREAM_MODAL_KEY]: {
|
|
open: false,
|
|
data: undefined,
|
|
},
|
|
[CREDENTIAL_EDIT_MODAL_KEY]: {
|
|
open: false,
|
|
mode: '',
|
|
activeId: null,
|
|
showAuthSelector: false,
|
|
},
|
|
[SOURCE_CONTROL_PUSH_MODAL_KEY]: {
|
|
open: false,
|
|
},
|
|
[SOURCE_CONTROL_PULL_MODAL_KEY]: {
|
|
open: false,
|
|
},
|
|
},
|
|
modalStack: [],
|
|
sidebarMenuCollapsed: true,
|
|
isPageLoading: true,
|
|
currentView: '',
|
|
mainPanelPosition: 0.5,
|
|
fakeDoorFeatures: [
|
|
{
|
|
id: FAKE_DOOR_FEATURES.SSO,
|
|
featureName: 'fakeDoor.settings.sso.name',
|
|
icon: 'key',
|
|
actionBoxTitle: 'fakeDoor.settings.sso.actionBox.title',
|
|
actionBoxDescription: 'fakeDoor.settings.sso.actionBox.description',
|
|
linkURL: 'https://n8n-community.typeform.com/to/l7QOrERN#f=sso',
|
|
uiLocations: ['settings/users'],
|
|
},
|
|
],
|
|
draggable: {
|
|
isDragging: false,
|
|
type: '',
|
|
data: '',
|
|
canDrop: false,
|
|
stickyPosition: null,
|
|
},
|
|
stateIsDirty: false,
|
|
lastSelectedNode: null,
|
|
lastSelectedNodeOutputIndex: null,
|
|
nodeViewOffsetPosition: [0, 0],
|
|
nodeViewMoveInProgress: false,
|
|
selectedNodes: [],
|
|
sidebarMenuItems: [],
|
|
nodeViewInitialized: false,
|
|
addFirstStepOnLoad: false,
|
|
executionSidebarAutoRefresh: true,
|
|
banners: {
|
|
V1: { dismissed: true },
|
|
TRIAL: { dismissed: true },
|
|
TRIAL_OVER: { dismissed: true },
|
|
},
|
|
bannersHeight: 0,
|
|
}),
|
|
getters: {
|
|
contextBasedTranslationKeys() {
|
|
const settingsStore = useSettingsStore();
|
|
const deploymentType = settingsStore.deploymentType;
|
|
|
|
let contextKey = '';
|
|
if (deploymentType === 'cloud') {
|
|
contextKey = '.cloud';
|
|
} else if (deploymentType === 'desktop_mac' || deploymentType === 'desktop_win') {
|
|
contextKey = '.desktop';
|
|
}
|
|
|
|
return {
|
|
upgradeLinkUrl: `contextual.upgradeLinkUrl${contextKey}`,
|
|
credentials: {
|
|
sharing: {
|
|
unavailable: {
|
|
title: `contextual.credentials.sharing.unavailable.title${contextKey}`,
|
|
description: `contextual.credentials.sharing.unavailable.description${contextKey}`,
|
|
action: `contextual.credentials.sharing.unavailable.action${contextKey}`,
|
|
button: `contextual.credentials.sharing.unavailable.button${contextKey}`,
|
|
},
|
|
},
|
|
},
|
|
workflows: {
|
|
sharing: {
|
|
title: 'contextual.workflows.sharing.title',
|
|
unavailable: {
|
|
title: `contextual.workflows.sharing.unavailable.title${contextKey}`,
|
|
description: {
|
|
modal: `contextual.workflows.sharing.unavailable.description.modal${contextKey}`,
|
|
tooltip: `contextual.workflows.sharing.unavailable.description.tooltip${contextKey}`,
|
|
},
|
|
action: `contextual.workflows.sharing.unavailable.action${contextKey}`,
|
|
button: `contextual.workflows.sharing.unavailable.button${contextKey}`,
|
|
},
|
|
},
|
|
},
|
|
variables: {
|
|
unavailable: {
|
|
title: `contextual.variables.unavailable.title${contextKey}`,
|
|
description: 'contextual.variables.unavailable.description',
|
|
action: `contextual.variables.unavailable.action${contextKey}`,
|
|
button: `contextual.variables.unavailable.button${contextKey}`,
|
|
},
|
|
},
|
|
users: {
|
|
settings: {
|
|
unavailable: {
|
|
title: `contextual.users.settings.unavailable.title${contextKey}`,
|
|
description: `contextual.users.settings.unavailable.description${contextKey}`,
|
|
button: `contextual.users.settings.unavailable.button${contextKey}`,
|
|
},
|
|
},
|
|
},
|
|
};
|
|
},
|
|
getLastSelectedNode(): INodeUi | null {
|
|
const workflowsStore = useWorkflowsStore();
|
|
if (this.lastSelectedNode) {
|
|
return workflowsStore.getNodeByName(this.lastSelectedNode);
|
|
}
|
|
return null;
|
|
},
|
|
getCurlCommand(): string | undefined {
|
|
return this.modals[IMPORT_CURL_MODAL_KEY].curlCommand;
|
|
},
|
|
getHttpNodeParameters(): string | undefined {
|
|
return this.modals[IMPORT_CURL_MODAL_KEY].httpNodeParameters;
|
|
},
|
|
areExpressionsDisabled(): boolean {
|
|
return this.currentView === VIEWS.DEMO;
|
|
},
|
|
isVersionsOpen(): boolean {
|
|
return this.modals[VERSIONS_MODAL_KEY].open;
|
|
},
|
|
isModalOpen() {
|
|
return (name: string) => this.modals[name].open;
|
|
},
|
|
isModalActive() {
|
|
return (name: string) => this.modalStack.length > 0 && name === this.modalStack[0];
|
|
},
|
|
getModalActiveId() {
|
|
return (name: string) => this.modals[name].activeId;
|
|
},
|
|
getModalMode() {
|
|
return (name: string) => this.modals[name].mode;
|
|
},
|
|
getModalData() {
|
|
return (name: string) => this.modals[name].data;
|
|
},
|
|
getFakeDoorByLocation() {
|
|
return (location: IFakeDoorLocation) =>
|
|
this.fakeDoorFeatures.filter((fakeDoor) => fakeDoor.uiLocations.includes(location));
|
|
},
|
|
getFakeDoorById() {
|
|
return (id: string) =>
|
|
this.fakeDoorFeatures.find((fakeDoor) => fakeDoor.id.toString() === id);
|
|
},
|
|
isReadOnlyView(): boolean {
|
|
return ![VIEWS.WORKFLOW, VIEWS.NEW_WORKFLOW].includes(this.currentView as VIEWS);
|
|
},
|
|
isNodeView(): boolean {
|
|
return [
|
|
VIEWS.NEW_WORKFLOW.toString(),
|
|
VIEWS.WORKFLOW.toString(),
|
|
VIEWS.WORKFLOW_EXECUTIONS.toString(),
|
|
].includes(this.currentView);
|
|
},
|
|
isActionActive() {
|
|
return (action: string) => this.activeActions.includes(action);
|
|
},
|
|
getSelectedNodes(): INodeUi[] {
|
|
const seen = new Set();
|
|
return this.selectedNodes.filter((node: INodeUi) => {
|
|
// dedupe for instances when same node is selected in different ways
|
|
if (!seen.has(node.id)) {
|
|
seen.add(node.id);
|
|
return true;
|
|
}
|
|
return false;
|
|
});
|
|
},
|
|
isNodeSelected() {
|
|
return (nodeName: string): boolean => {
|
|
let index;
|
|
for (index in this.selectedNodes) {
|
|
if (this.selectedNodes[index].name === nodeName) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
};
|
|
},
|
|
upgradeLinkUrl() {
|
|
return (source: string, utm_campaign: string): string => {
|
|
const linkUrlTranslationKey = this.contextBasedTranslationKeys
|
|
.upgradeLinkUrl as BaseTextKey;
|
|
let linkUrl = locale.baseText(linkUrlTranslationKey);
|
|
|
|
if (linkUrlTranslationKey.endsWith('.upgradeLinkUrl')) {
|
|
linkUrl = `${linkUrl}?ref=${source}`;
|
|
} else if (linkUrlTranslationKey.endsWith('.desktop')) {
|
|
linkUrl = `${linkUrl}&utm_campaign=${utm_campaign || source}`;
|
|
}
|
|
|
|
return linkUrl;
|
|
};
|
|
},
|
|
headerHeight() {
|
|
return Number(getStyleTokenValue('--header-height'));
|
|
},
|
|
},
|
|
actions: {
|
|
setBanners(banners: UIState['banners']): void {
|
|
this.banners = {
|
|
...this.banners,
|
|
...banners,
|
|
};
|
|
},
|
|
setMode(name: keyof Modals, mode: string): void {
|
|
this.modals[name] = {
|
|
...this.modals[name],
|
|
mode,
|
|
};
|
|
},
|
|
setActiveId(name: keyof Modals, activeId: string): void {
|
|
this.modals[name] = {
|
|
...this.modals[name],
|
|
activeId,
|
|
};
|
|
},
|
|
setShowAuthSelector(name: keyof Modals, showAuthSelector: boolean) {
|
|
this.modals[name] = {
|
|
...this.modals[name],
|
|
showAuthSelector,
|
|
} as NewCredentialsModal;
|
|
},
|
|
setModalData(payload: { name: keyof Modals; data: Record<string, unknown> }) {
|
|
this.modals[payload.name] = {
|
|
...this.modals[payload.name],
|
|
data: payload.data,
|
|
};
|
|
},
|
|
openModal(name: keyof Modals): void {
|
|
this.modals[name] = {
|
|
...this.modals[name],
|
|
open: true,
|
|
};
|
|
this.modalStack = [name].concat(this.modalStack) as string[];
|
|
},
|
|
openModalWithData(payload: { name: keyof Modals; data: Record<string, unknown> }): void {
|
|
this.setModalData(payload);
|
|
this.openModal(payload.name);
|
|
},
|
|
closeModal(name: keyof Modals): void {
|
|
this.modals[name] = {
|
|
...this.modals[name],
|
|
open: false,
|
|
};
|
|
this.modalStack = this.modalStack.filter((openModalName: string) => {
|
|
return name !== openModalName;
|
|
});
|
|
},
|
|
closeAllModals(): void {
|
|
Object.keys(this.modals).forEach((name) => {
|
|
if (this.modals[name].open) {
|
|
this.modals[name] = {
|
|
...this.modals[name],
|
|
open: false,
|
|
};
|
|
}
|
|
});
|
|
this.modalStack = [];
|
|
},
|
|
draggableStartDragging(type: string, data: string): void {
|
|
this.draggable = {
|
|
isDragging: true,
|
|
type,
|
|
data,
|
|
canDrop: false,
|
|
stickyPosition: null,
|
|
};
|
|
},
|
|
draggableStopDragging(): void {
|
|
this.draggable = {
|
|
isDragging: false,
|
|
type: '',
|
|
data: '',
|
|
canDrop: false,
|
|
stickyPosition: null,
|
|
};
|
|
},
|
|
setDraggableStickyPos(position: XYPosition): void {
|
|
this.draggable = {
|
|
...this.draggable,
|
|
stickyPosition: position,
|
|
};
|
|
},
|
|
setDraggableCanDrop(canDrop: boolean): void {
|
|
this.draggable = {
|
|
...this.draggable,
|
|
canDrop,
|
|
};
|
|
},
|
|
openDeleteUserModal(id: string): void {
|
|
this.setActiveId(DELETE_USER_MODAL_KEY, id);
|
|
this.openModal(DELETE_USER_MODAL_KEY);
|
|
},
|
|
openExistingCredential(id: string): void {
|
|
this.setActiveId(CREDENTIAL_EDIT_MODAL_KEY, id);
|
|
this.setMode(CREDENTIAL_EDIT_MODAL_KEY, 'edit');
|
|
this.openModal(CREDENTIAL_EDIT_MODAL_KEY);
|
|
},
|
|
openNewCredential(type: string, showAuthOptions = false): void {
|
|
this.setActiveId(CREDENTIAL_EDIT_MODAL_KEY, type);
|
|
this.setShowAuthSelector(CREDENTIAL_EDIT_MODAL_KEY, showAuthOptions);
|
|
this.setMode(CREDENTIAL_EDIT_MODAL_KEY, 'new');
|
|
this.openModal(CREDENTIAL_EDIT_MODAL_KEY);
|
|
},
|
|
async getNextOnboardingPrompt(): Promise<IOnboardingCallPrompt> {
|
|
const rootStore = useRootStore();
|
|
const instanceId = rootStore.instanceId;
|
|
// TODO: current USER
|
|
const currentUser = {} as IUser;
|
|
return fetchNextOnboardingPrompt(instanceId, currentUser);
|
|
},
|
|
async applyForOnboardingCall(email: string): Promise<string> {
|
|
const rootStore = useRootStore();
|
|
const instanceId = rootStore.instanceId;
|
|
// TODO: current USER
|
|
const currentUser = {} as IUser;
|
|
return applyForOnboardingCall(instanceId, currentUser, email);
|
|
},
|
|
async submitContactEmail(email: string, agree: boolean): Promise<string> {
|
|
const rootStore = useRootStore();
|
|
const instanceId = rootStore.instanceId;
|
|
// TODO: current USER
|
|
const currentUser = {} as IUser;
|
|
return submitEmailOnSignup(instanceId, currentUser, email || currentUser.email, agree);
|
|
},
|
|
openCommunityPackageUninstallConfirmModal(packageName: string) {
|
|
this.setActiveId(COMMUNITY_PACKAGE_CONFIRM_MODAL_KEY, packageName);
|
|
this.setMode(COMMUNITY_PACKAGE_CONFIRM_MODAL_KEY, COMMUNITY_PACKAGE_MANAGE_ACTIONS.UNINSTALL);
|
|
this.openModal(COMMUNITY_PACKAGE_CONFIRM_MODAL_KEY);
|
|
},
|
|
openCommunityPackageUpdateConfirmModal(packageName: string) {
|
|
this.setActiveId(COMMUNITY_PACKAGE_CONFIRM_MODAL_KEY, packageName);
|
|
this.setMode(COMMUNITY_PACKAGE_CONFIRM_MODAL_KEY, COMMUNITY_PACKAGE_MANAGE_ACTIONS.UPDATE);
|
|
this.openModal(COMMUNITY_PACKAGE_CONFIRM_MODAL_KEY);
|
|
},
|
|
addActiveAction(action: string): void {
|
|
if (!this.activeActions.includes(action)) {
|
|
this.activeActions.push(action);
|
|
}
|
|
},
|
|
removeActiveAction(action: string): void {
|
|
const actionIndex = this.activeActions.indexOf(action);
|
|
if (actionIndex !== -1) {
|
|
this.activeActions.splice(actionIndex, 1);
|
|
}
|
|
},
|
|
addSelectedNode(node: INodeUi): void {
|
|
this.selectedNodes.push(node);
|
|
},
|
|
removeNodeFromSelection(node: INodeUi): void {
|
|
let index;
|
|
for (index in this.selectedNodes) {
|
|
if (this.selectedNodes[index].name === node.name) {
|
|
this.selectedNodes.splice(parseInt(index, 10), 1);
|
|
break;
|
|
}
|
|
}
|
|
},
|
|
resetSelectedNodes(): void {
|
|
this.selectedNodes = [];
|
|
},
|
|
addSidebarMenuItems(menuItems: IMenuItem[]) {
|
|
const updated = this.sidebarMenuItems.concat(menuItems);
|
|
this.sidebarMenuItems = updated;
|
|
},
|
|
setCurlCommand(payload: { name: string; command: string }): void {
|
|
this.modals[payload.name] = {
|
|
...this.modals[payload.name],
|
|
curlCommand: payload.command,
|
|
};
|
|
},
|
|
setHttpNodeParameters(payload: { name: string; parameters: string }): void {
|
|
this.modals[payload.name] = {
|
|
...this.modals[payload.name],
|
|
httpNodeParameters: payload.parameters,
|
|
};
|
|
},
|
|
toggleSidebarMenuCollapse(): void {
|
|
this.sidebarMenuCollapsed = !this.sidebarMenuCollapsed;
|
|
},
|
|
async getCurlToJson(curlCommand: string): Promise<CurlToJSONResponse> {
|
|
const rootStore = useRootStore();
|
|
return getCurlToJson(rootStore.getRestApiContext, curlCommand);
|
|
},
|
|
goToUpgrade(
|
|
source: CloudUpdateLinkSourceType,
|
|
utm_campaign: UTMCampaign,
|
|
mode: 'open' | 'redirect' = 'open',
|
|
): void {
|
|
const { usageLeft, trialDaysLeft, userIsTrialing } = useCloudPlanStore();
|
|
const { executionsLeft, workflowsLeft } = usageLeft;
|
|
useTelemetryStore().track('User clicked upgrade CTA', {
|
|
source,
|
|
isTrial: userIsTrialing,
|
|
deploymentType: useSettingsStore().deploymentType,
|
|
trialDaysLeft,
|
|
executionsLeft,
|
|
workflowsLeft,
|
|
});
|
|
if (mode === 'open') {
|
|
window.open(this.upgradeLinkUrl(source, utm_campaign), '_blank');
|
|
} else {
|
|
location.href = this.upgradeLinkUrl(source, utm_campaign);
|
|
}
|
|
},
|
|
async dismissBanner(
|
|
name: Banners,
|
|
type: 'temporary' | 'permanent' = 'temporary',
|
|
): Promise<void> {
|
|
if (type === 'permanent') {
|
|
await dismissBannerPermanently(useRootStore().getRestApiContext, {
|
|
bannerName: name,
|
|
dismissedBanners: useSettingsStore().permanentlyDismissedBanners,
|
|
});
|
|
this.banners[name].dismissed = true;
|
|
this.banners[name].type = 'permanent';
|
|
return;
|
|
}
|
|
this.banners[name].dismissed = true;
|
|
this.banners[name].type = 'temporary';
|
|
},
|
|
showBanner(name: Banners): void {
|
|
this.banners[name].dismissed = false;
|
|
},
|
|
updateBannersHeight(newHeight: number): void {
|
|
this.bannersHeight = newHeight;
|
|
},
|
|
},
|
|
});
|