Skip to content

Commit 6280e2e

Browse files
luannmoreiraotavio
authored andcommitted
refactor(ui): centralize tag-based filtering logic in TagSelector
Replaced setVariantListFilter with a cleaner fetchDevices function that directly sets encoded filters based on variant. Also restructured getItems for consistency and improved readability of tag comparison logic with line breaks and formatting.
1 parent bd628f4 commit 6280e2e

File tree

1 file changed

+26
-36
lines changed

1 file changed

+26
-36
lines changed

ui/src/components/Tags/TagSelector.vue

Lines changed: 26 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,6 @@
6262

6363
<script setup lang="ts">
6464
import { computed, onMounted, onUnmounted, ref, watch, nextTick } from "vue";
65-
import axios, { AxiosError } from "axios";
6665
import handleError from "@/utils/handleError";
6766
import useSnackbar from "@/helpers/snackbar";
6867
import useContainersStore from "@/store/modules/containers";
@@ -94,9 +93,13 @@ let observer: IntersectionObserver | null = null;
9493
9594
const hasMore = computed(() => tagsStore.numberTags > fetchedTags.value.length);
9695
97-
const getTagName = (tag: ITag): string => (typeof tag === "string" ? tag : tag.name);
96+
const getTagName = (tag: ITag): string => typeof tag === "string" ? tag : tag.name;
97+
9898
const getSelectedTagNames = (): string[] => selectedTags.value.map((t) => getTagName(t));
99-
const tagIsSelected = (tag: ITag): boolean => selectedTags.value.some((sel) => getTagName(sel) === getTagName(tag));
99+
100+
const tagIsSelected = (tag: ITag): boolean => selectedTags.value.some(
101+
(sel) => getTagName(sel) === getTagName(tag),
102+
);
100103
101104
const resetPagination = (): void => {
102105
currentPage.value = 1;
@@ -132,43 +135,33 @@ const loadInitialTags = async (): Promise<void> => {
132135
await loadTags();
133136
};
134137
135-
const fetchDevices = async (filter = ""): Promise<void> => {
136-
const fetch = {
137-
device: () => devicesStore.fetchDeviceList({ filter }),
138-
container: () => containersStore.fetchContainerList({ filter }),
139-
}[props.variant];
140-
await fetch();
138+
const setFilter = (filter?: string) => {
139+
const encoded = filter && filter.length ? filter : undefined;
140+
if (props.variant === "device") {
141+
devicesStore.deviceListFilter = encoded;
142+
} else {
143+
containersStore.containerListFilter = encoded;
144+
}
141145
};
142146
143-
const getItems = async (tagNames: string[]): Promise<void> => {
144-
const filter = [{
145-
type: "property",
146-
params: { name: "tags.name", operator: "contains", value: tagNames },
147-
}];
148-
const encodedFilter = btoa(JSON.stringify(filter));
149-
try {
150-
await fetchDevices(encodedFilter);
151-
} catch (error: unknown) {
152-
if (axios.isAxiosError(error)) {
153-
const axiosError = error as AxiosError;
154-
if (axiosError.response?.status === 403) {
155-
snackbar.showError("You do not have permission to perform this action.");
156-
handleError(error);
157-
return;
158-
}
159-
}
160-
snackbar.showError("Failed to load items.");
161-
handleError(error);
162-
}
147+
const getItems = (tagNames: string[]) => {
148+
const filter = [
149+
{
150+
type: "property",
151+
params: { name: "tags.name", operator: "contains", value: tagNames },
152+
},
153+
];
154+
const encodedFilter = Buffer.from(JSON.stringify(filter), "utf-8").toString("base64");
155+
setFilter(encodedFilter);
163156
};
164157
165-
const selectTag = async (item: ITag): Promise<void> => {
158+
const selectTag = (item: ITag) => {
166159
tagsStore.setSelected({ variant: props.variant, tag: item });
167160
168161
if (selectedTags.value.length > 0) {
169-
await getItems(getSelectedTagNames());
162+
getItems(getSelectedTagNames());
170163
} else {
171-
await fetchDevices();
164+
setFilter();
172165
}
173166
};
174167
@@ -192,10 +185,7 @@ const setupObserver = () => {
192185
bumpPerPageAndLoad();
193186
}
194187
},
195-
{
196-
root: scrollArea.value,
197-
threshold: 1.0,
198-
},
188+
{ root: scrollArea.value, threshold: 1.0 },
199189
);
200190
201191
observer.observe(sentinel.value);

0 commit comments

Comments
 (0)