mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-17 01:56:46 +00:00
* WIP: Node Actions List UI * WIP: Recommended Actions and preseting of fields * WIP: Resource category * 🎨 Moved actions categorisation to the server * 🏷️ Add missing INodeAction type * ✨ Improve SSR categorisation, fix adding of mixed actions * ♻️ Refactor CategorizedItems to composition api, style fixes * WIP: Adding multiple nodes * ♻️ Refactor rest of the NodeCreator component to composition API, conver globalLinkActions to composable * ✨ Allow actions dragging, fix search and refactor passing of actions to categorized items * 💄 Fix node actions title * Migrate to the pinia store, add posthog feature and various fixes * 🐛 Fix filtering of trigger actions when not merged * fix: N8N-5439 — Do not use simple node item when at NodeHelperPanel root * 🐛 Design review fixes * 🐛 Fix disabling of merged actions * Fix trigger root filtering * ✨ Allow for custom node actions parser, introduce hubspot parser * 🐛 Fix initial node params validation, fix position of second added node * 🐛 Introduce operations category, removed canvas node names overrride, fix API actions display and prevent dragging of action nodes * ✨ Prevent NDV auto-open feature flag * 🐛 Inject recommened action for trigger nodes without actions * Refactored NodeCreatorNode to Storybook, change filtering of merged nodes for the trigger helper panel, minor fixes * Improve rendering of app nodes and animation * Cleanup, any only enable accordion transition on triggerhelperpanel * Hide node creator scrollbars in Firefox * Minor styles fixes * Do not copy the array in rendering method * Removed unused props * Fix memory leak * Fix categorisation of regular nodes with a single resource * Implement telemetry calls for node actions * Move categorization to FE * Fix client side actions categorisation * Skip custom action show * Only load tooltip for NodeIcon if necessary * Fix lodash startCase import * Remove lodash.startcase * Cleanup * Fix node creator autofocus on "tab" * Prevent posthog getFeatureFlag from crashing * Debugging preview env search issues * Remove logs * Make sure the pre-filled params are update not overwritten * Get rid of transition in itemiterator * WIP: Rough version of NodeActions keyboard navigation, replace nodeCreator composable with Pinia store module * Rewrite to add support for ActionItem to ItemIterator and make CategorizedItems accept items props * Fix category item counter & cleanup * Add APIHint to actions search no-result, clean up NodeCreatorNode * Improve node actions no results message * Remove logging, fix filtering of recommended placeholder category * Remove unused NodeActions component and node merging feature falg * Do not show regular nodes without actions * Make sure to add manual trigger when adding http node via actions hint * Fixed api hint footer line height * Prevent pointer-events od NodeIcon img and remove "this" from template * Address PR points * Fix e2e specs * Make sure canvas ia loaded * Make sure canvas ia loaded before opening nodeCreator in e2e spec * Fix flaky workflows tags e2e getter * Imrpove node creator click outside UX, add manual node to regular nodes added from trigger panel * Add manual trigger node if dragging regular from trigger panel
148 lines
2.9 KiB
Vue
148 lines
2.9 KiB
Vue
<template>
|
|
<div :class="$style.searchContainer" data-test-id="search-bar">
|
|
<div :class="{ [$style.prefix]: true, [$style.active]: value.length > 0 }">
|
|
<font-awesome-icon icon="search" size="sm" />
|
|
</div>
|
|
<div :class="$style.text">
|
|
<input
|
|
:placeholder="placeholder"
|
|
:value="value"
|
|
@input="onInput"
|
|
:class="$style.input"
|
|
ref="inputRef"
|
|
autofocus
|
|
data-test-id="node-creator-search-bar"
|
|
tabindex="0"
|
|
/>
|
|
</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 setup lang="ts">
|
|
import Vue, { onMounted, reactive, toRefs, onBeforeUnmount } from 'vue';
|
|
import { externalHooks } from '@/mixins/externalHooks';
|
|
|
|
export interface Props {
|
|
placeholder: string;
|
|
value: string;
|
|
eventBus?: Vue;
|
|
}
|
|
|
|
withDefaults(defineProps<Props>(), {
|
|
placeholder: '',
|
|
value: '',
|
|
});
|
|
|
|
const emit = defineEmits<{
|
|
(event: 'input', value: string): void,
|
|
}>();
|
|
|
|
const { $externalHooks } = new externalHooks();
|
|
|
|
const state = reactive({
|
|
inputRef: null as HTMLInputElement | null,
|
|
});
|
|
|
|
function focus() {
|
|
state.inputRef?.focus();
|
|
}
|
|
|
|
function onInput(event: Event) {
|
|
const input = event.target as HTMLInputElement;
|
|
emit("input", input.value);
|
|
}
|
|
|
|
function clear() {
|
|
emit("input", "");
|
|
}
|
|
|
|
onMounted(() => {
|
|
$externalHooks().run('nodeCreator_searchBar.mount', { inputRef: state.inputRef });
|
|
setTimeout(focus, 0);
|
|
});
|
|
|
|
onBeforeUnmount(() => {
|
|
state.inputRef?.remove();
|
|
});
|
|
|
|
const { inputRef } = toRefs(state);
|
|
defineExpose({
|
|
focus,
|
|
});
|
|
</script>
|
|
|
|
<style lang="scss" module>
|
|
.searchContainer {
|
|
display: flex;
|
|
height: 40px;
|
|
padding: var(--spacing-s) var(--spacing-xs);
|
|
align-items: center;
|
|
margin: var(--search-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>
|