n8n-editor-ui
Version:
Workflow Editor UI for n8n
160 lines (159 loc) • 6.83 kB
JavaScript
import { C as computed, Cn as toDisplayString, D as createElementBlock, E as createCommentVNode, Gt as unref, M as createVNode, P as defineComponent, T as createBlock, _t as watch, at as renderSlot, bt as withCtx, et as openBlock, j as createTextVNode, q as onBeforeMount, vn as normalizeClass, w as createBaseVNode } from "./vue.runtime.esm-bundler-tP5dCd7J.js";
import { _t as useI18n } from "./_MapCache-ficiegRb.js";
import { $ as N8nInputLabel_default, D as N8nPopover_default, Sn as N8nButton_default, lt as N8nBadge_default, mt as N8nLink_default } from "./src-DgvumQTi.js";
import { t as __plugin_vue_export_helper_default } from "./_plugin-vue_export-helper-BwBpWJRZ.js";
import { Xn as useProjectsStore } from "./builder.store-sBTWwxRU.js";
import { bc as EnterpriseEditionFeature } from "./constants-BbpucWL4.js";
import { t as EnterpriseEdition_ee_default } from "./EnterpriseEdition.ee-UkQT-fFo.js";
import { t as ProjectSharing_default } from "./ProjectSharing-IDL3ExN3.js";
var ResourceFiltersDropdown_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
__name: "ResourceFiltersDropdown",
props: {
modelValue: { default: () => ({}) },
keys: { default: () => [] },
shareable: {
type: Boolean,
default: true
},
reset: {
type: Function,
default: () => {}
},
justIcon: {
type: Boolean,
default: false
}
},
emits: ["update:modelValue", "update:filtersLength"],
setup(__props, { emit: __emit }) {
const props = __props;
const emit = __emit;
const projectsStore = useProjectsStore();
const i18n = useI18n();
const selectedProject = computed({
get: () => {
return projectsStore.availableProjects.find((project) => project.id === props.modelValue.homeProject) ?? null;
},
set: (value) => setKeyValue("homeProject", value?.id ?? "")
});
const filtersLength = computed(() => {
let length = 0;
props.keys.forEach((key) => {
if (key === "search") return;
const value = props.modelValue[key];
if (value === true) length += 1;
if (Array.isArray(value) && value.length) length += 1;
if (typeof value === "string" && value !== "") length += 1;
});
return length;
});
const hasFilters = computed(() => filtersLength.value > 0);
const setKeyValue = (key, value) => {
emit("update:modelValue", {
...props.modelValue,
[key]: value
});
};
const resetFilters = () => {
if (props.reset) props.reset();
else {
const filters = { ...props.modelValue };
props.keys.forEach((key) => {
filters[key] = Array.isArray(props.modelValue[key]) ? [] : "";
});
emit("update:modelValue", filters);
}
selectedProject.value = null;
};
watch(filtersLength, (value) => {
emit("update:filtersLength", value);
});
onBeforeMount(async () => {
await projectsStore.getAvailableProjects();
});
return (_ctx, _cache) => {
return openBlock(), createBlock(unref(N8nPopover_default), {
width: "304px",
"content-class": _ctx.$style["popover-content"]
}, {
trigger: withCtx(() => [createVNode(unref(N8nButton_default), {
icon: "funnel",
type: "tertiary",
size: "small",
active: hasFilters.value,
class: normalizeClass({
[_ctx.$style["filter-button"]]: true,
[_ctx.$style["no-label"]]: _ctx.justIcon && filtersLength.value === 0
}),
"data-test-id": "resources-list-filters-trigger"
}, {
default: withCtx(() => [filtersLength.value > 0 ? (openBlock(), createBlock(unref(N8nBadge_default), {
key: 0,
class: normalizeClass(_ctx.$style["filter-button-count"]),
"data-test-id": "resources-list-filters-count",
theme: "primary"
}, {
default: withCtx(() => [createTextVNode(toDisplayString(filtersLength.value), 1)]),
_: 1
}, 8, ["class"])) : createCommentVNode("", true), !_ctx.justIcon ? (openBlock(), createElementBlock("span", {
key: 1,
class: normalizeClass(_ctx.$style["filter-button-text"])
}, toDisplayString(unref(i18n).baseText("forms.resourceFiltersDropdown.filters")), 3)) : createCommentVNode("", true)]),
_: 1
}, 8, ["active", "class"])]),
content: withCtx(() => [createBaseVNode("div", {
class: normalizeClass(_ctx.$style["filters-dropdown"]),
"data-test-id": "resources-list-filters-dropdown"
}, [
renderSlot(_ctx.$slots, "default", {
filters: _ctx.modelValue,
setKeyValue
}),
_ctx.shareable && unref(projectsStore).isProjectHome ? (openBlock(), createBlock(EnterpriseEdition_ee_default, {
key: 0,
features: [unref(EnterpriseEditionFeature).Sharing]
}, {
default: withCtx(() => [createVNode(unref(N8nInputLabel_default), {
label: unref(i18n).baseText("forms.resourceFiltersDropdown.owner"),
bold: false,
size: "small",
color: "text-base",
class: "mb-3xs"
}, null, 8, ["label"]), createVNode(ProjectSharing_default, {
modelValue: selectedProject.value,
"onUpdate:modelValue": [_cache[0] || (_cache[0] = ($event) => selectedProject.value = $event), _cache[1] || (_cache[1] = ($event) => setKeyValue("homeProject", $event.id))],
projects: unref(projectsStore).availableProjects,
placeholder: unref(i18n).baseText("forms.resourceFiltersDropdown.owner.placeholder"),
"empty-options-text": unref(i18n).baseText("projects.sharing.noMatchingProjects")
}, null, 8, [
"modelValue",
"projects",
"placeholder",
"empty-options-text"
])]),
_: 1
}, 8, ["features"])) : createCommentVNode("", true),
hasFilters.value ? (openBlock(), createElementBlock("div", {
key: 1,
class: normalizeClass([_ctx.$style["filters-dropdown-footer"], "mt-s"])
}, [createVNode(unref(N8nLink_default), { onClick: resetFilters }, {
default: withCtx(() => [createTextVNode(toDisplayString(unref(i18n).baseText("forms.resourceFiltersDropdown.reset")), 1)]),
_: 1
})], 2)) : createCommentVNode("", true)
], 2)]),
_: 3
}, 8, ["content-class"]);
};
}
});
var ResourceFiltersDropdown_vue_vue_type_style_index_0_lang_module_default = {
"filter-button": "_filter-button_1rhfu_123",
"no-label": "_no-label_1rhfu_127",
"filter-button-count": "_filter-button-count_1rhfu_133",
"filter-button-text": "_filter-button-text_1rhfu_142",
"filters-dropdown": "_filters-dropdown_1rhfu_150",
"filters-dropdown-footer": "_filters-dropdown-footer_1rhfu_154",
"popover-content": "_popover-content_1rhfu_160"
};
var ResourceFiltersDropdown_default = /* @__PURE__ */ __plugin_vue_export_helper_default(ResourceFiltersDropdown_vue_vue_type_script_setup_true_lang_default, [["__cssModules", { "$style": ResourceFiltersDropdown_vue_vue_type_style_index_0_lang_module_default }]]);
export { ResourceFiltersDropdown_default as t };