mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-17 18:12:04 +00:00
* feat(ExecuteWorkflowTrigger node): Implement ExecuteWorkflowTrigger node (#4108) * feat(ExecuteWorkflowTrigger node): Implement ExecuteWorkflowTrigger node * feat(editor): Do not show duplicate button if canvas contains `maxNodes` amount of nodes * feat(ManualTrigger node): Implement ManualTrigger node (#4110) * feat(ManualTrigger node): Implement ManualTrigger node * 📝 Remove generics doc items from ManualTrigger node * feat(editor-ui): Trigger tab redesign (#4150) * 🚧 Begin with TriggerPanel implementation, add Other Trigger Nodes subcategory * 🚧 Extracted categorized categories/subcategory/nodes rendering into its own component — CategorizedItems, removed SubcategoryPanel, added translations * ✨ Implement MainPanel background scrim * ♻️ Move `categoriesWithNodes`, 'visibleNodeTypes` and 'categorizedItems` to store, implemented dynamic categories count based on `selectedType` * 🐛 Fix SlideTransition for all the NodeCreato panels * 💄 Fix cursos for CategoryItem and NodeItem * 🐛 Make sure ALL_NODE_FILTER is always set when MainPanel is mounted * 🎨 Address PR comments * label: Use Array type for CategorizedItems props * 🏷️ Add proper types for Vue props * 🎨 Use standard component registration for CategorizedItems inside TriggerHelperPanel * 🎨 Use kebab case for main-panel and icon component * 🏷️ Improve types * feat(editor-ui): Redesign search input inside node creator panel (#4204) * 🚧 Begin with TriggerPanel implementation, add Other Trigger Nodes subcategory * 🚧 Extracted categorized categories/subcategory/nodes rendering into its own component — CategorizedItems, removed SubcategoryPanel, added translations * ✨ Implement MainPanel background scrim * ♻️ Move `categoriesWithNodes`, 'visibleNodeTypes` and 'categorizedItems` to store, implemented dynamic categories count based on `selectedType` * 🐛 Fix SlideTransition for all the NodeCreato panels * 💄 Fix cursos for CategoryItem and NodeItem * 🐛 Make sure ALL_NODE_FILTER is always set when MainPanel is mounted * 🎨 Address PR comments * label: Use Array type for CategorizedItems props * 🏷️ Add proper types for Vue props * 🎨 Use standard component registration for CategorizedItems inside TriggerHelperPanel * ✨ Redesign search input and unify usage of categorized items * 🏷️ Use lowercase "Boolean" as `isSearchVisible` computed return type * 🔥 Remove useless emit * ✨ Implement no result view based on subcategory, minor fixes * 🎨 Remove unused properties * feat(node-email): Change EmailReadImap display name and name (#4239) * feat(editor-ui): Implement "Choose a Triger" action and related behaviour (#4226) * ✨ Implement "Choose a Triger" action and related behaviour * 🔇 Lint fix * ♻️ Remove PlaceholderTrigger node, add a button instead * 🎨 Merge onMouseEnter and onMouseLeave to a single function * 💡 Add comment * 🔥 Remove PlaceholderNode registration * 🎨 Rename TriggerPlaceholderButton to CanvasAddButton * ✨ Add method to unregister custom action and rework CanvasAddButton centering logic * 🎨 Run `setRecenteredCanvasAddButtonPosition` on `CanvasAddButton` mount * fix(editor): Fix selecting of node from node-creator panel by clicking * 🔀 Merge fixes * fix(editor): Show execute workflow trigger instead of workflow trigger in the trigger helper panel * feat(editor): Fix node creator panel slide transition (#4261) * fix(editor): Fix node creator panel slide-in/slide-out transitions * 🎨 Fix naming * 🎨 Use kebab-case for transition component name * feat(editor): Disable execution and show notice when user tries to run workflow without enabled triggers * fix(editor): Address first batch of new WF experience review (#4279) * fix(editor): Fix first batch of review items * bug(editor): Fix nodeview canvas add button centering * 🔇 Fix linter errors * bug(ManualTrigger Node): Fix manual trigger node execution * fix(editor): Do not show canvas add button in execution or demo mode and prevent clicking if creator is open * fix(editor): do not show pin data tooltip for manual trigger node * fix(editor): do not use nodeViewOffset on zoomToFit * 💄 Add margin for last node creator item and set font-weight to 700 for category title * ✨ Position welcome note next to the added trigger node * 🐛 Remve always true welcome note * feat(editor): Minor UI and UX tweaks (#4328) * 💄 Make top viewport buttons less prominent * ✨ Allow user to switch to all tabs if it contains filter results, move nodecreator state props to its own module * 🔇 Fix linting errors * 🔇 Fix linting errors * 🔇 Fix linting errors * chore(build): Ping Turbo version to 1.5.5 * 💄 Minor traigger panel and node view style changes * 💬 Update display name of execute workflow trigger * feat(core, editor): Update subworkflow execution logic (#4269) * ✨ Implement `findWorkflowStart` * ⚡ Extend `WorkflowOperationError` * ⚡ Add `WorkflowOperationError` to toast * 📘 Extend interface * ✨ Add `subworkflowExecutionError` to store * ✨ Create `SubworkflowOperationError` * ⚡ Render subworkflow error as node error * 🚚 Move subworkflow start validation to `cli` * ⚡ Reset subworkflow execution error state * 🔥 Remove unused import * ⚡ Adjust CLI commands * 🔥 Remove unneeded check * 🔥 Remove stray log * ⚡ Simplify syntax * ⚡ Sort in case both Start and EWT present * ♻️ Address Omar's feedback * 🔥 Remove unneeded lint exception * ✏️ Fix copy * 👕 Fix lint * fix: moved find start node function to catchable place Co-authored-by: Omar Ajoue <krynble@gmail.com> * 💄 Change ExecuteWorkflow node to primary * ✨ Allow user to navigate to all tab if it contains search results * 🐛 Fixed canvas control button while in demo, disable workflow activation for non-activavle nodes and revert zoomToFit bottom offset * :fix: Do not chow request text if there's results * 💬 Update noResults text Co-authored-by: Iván Ovejero <ivov.src@gmail.com> Co-authored-by: Omar Ajoue <krynble@gmail.com>
139 lines
2.8 KiB
Vue
139 lines
2.8 KiB
Vue
<template>
|
|
<div :class="$style.searchContainer">
|
|
<div :class="{ [$style.prefix]: true, [$style.active]: value.length > 0 }">
|
|
<font-awesome-icon icon="search" size="sm" />
|
|
</div>
|
|
<div :class="$style.text">
|
|
<input
|
|
:placeholder="$locale.baseText('nodeCreator.searchBar.searchNodes')"
|
|
ref="input"
|
|
:value="value"
|
|
@input="onInput"
|
|
:class="$style.input"
|
|
/>
|
|
</div>
|
|
<div :class="$style.suffix" v-if="value.length > 0" @click="clear">
|
|
<button :class="[$style.clear, $style.clickable]">
|
|
<font-awesome-icon icon="times-circle" />
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
<script lang="ts">
|
|
import Vue, { PropType } from 'vue';
|
|
import mixins from 'vue-typed-mixins';
|
|
|
|
import { externalHooks } from '@/components/mixins/externalHooks';
|
|
|
|
export default mixins(externalHooks).extend({
|
|
name: "SearchBar",
|
|
props: {
|
|
value: {
|
|
type: String,
|
|
},
|
|
eventBus: {
|
|
type: Object as PropType<Vue>,
|
|
},
|
|
},
|
|
mounted() {
|
|
if (this.eventBus) {
|
|
this.eventBus.$on("focus", this.focus);
|
|
}
|
|
setTimeout(this.focus, 0);
|
|
|
|
this.$externalHooks().run('nodeCreator_searchBar.mount', { inputRef: this.$refs['input'] });
|
|
},
|
|
methods: {
|
|
focus() {
|
|
const input = this.$refs.input as HTMLInputElement;
|
|
if (input) {
|
|
input.focus();
|
|
}
|
|
},
|
|
onInput(event: InputEvent) {
|
|
const input = event.target as HTMLInputElement;
|
|
this.$emit("input", input.value);
|
|
},
|
|
clear() {
|
|
this.$emit("input", "");
|
|
},
|
|
},
|
|
beforeDestroy() {
|
|
if (this.eventBus) {
|
|
this.eventBus.$off("focus", this.focus);
|
|
}
|
|
},
|
|
});
|
|
</script>
|
|
|
|
<style lang="scss" module>
|
|
.searchContainer {
|
|
display: flex;
|
|
height: 40px;
|
|
padding: var(--spacing-s) var(--spacing-xs);
|
|
align-items: center;
|
|
margin: var(--spacing-s);
|
|
filter: drop-shadow(0px 2px 5px rgba(46, 46, 50, 0.04));
|
|
|
|
border: 1px solid $node-creator-border-color;
|
|
background-color: $node-creator-search-background-color;
|
|
color: $node-creator-search-placeholder-color;
|
|
border-radius: 4px;
|
|
|
|
&:focus-within {
|
|
border-color: var(--color-secondary)
|
|
}
|
|
}
|
|
|
|
.prefix {
|
|
text-align: center;
|
|
font-size: var(--font-size-m);
|
|
margin-right: var(--spacing-xs);
|
|
|
|
&.active {
|
|
color: $color-primary !important;
|
|
}
|
|
}
|
|
|
|
.text {
|
|
flex-grow: 1;
|
|
|
|
input {
|
|
width: 100%;
|
|
border: none;
|
|
outline: none;
|
|
font-size: var(--font-size-s);
|
|
appearance: none;
|
|
background-color: var(--color-background-xlight);
|
|
color: var(--color-text-dark);
|
|
|
|
&::placeholder,
|
|
&::-webkit-input-placeholder {
|
|
color: $node-creator-search-placeholder-color;
|
|
}
|
|
}
|
|
}
|
|
|
|
.suffix {
|
|
min-width: 20px;
|
|
text-align: right;
|
|
display: inline-block;
|
|
}
|
|
|
|
.clear {
|
|
background-color: $node-creator-search-clear-color;
|
|
padding: 0;
|
|
border: none;
|
|
cursor: pointer;
|
|
|
|
svg path {
|
|
fill: $node-creator-search-clear-background-color;
|
|
}
|
|
|
|
&:hover svg path {
|
|
fill: $node-creator-search-clear-background-color-hover;
|
|
}
|
|
}
|
|
</style>
|