6262
6363<script setup lang="ts">
6464import { computed , onMounted , onUnmounted , ref , watch , nextTick } from " vue" ;
65- import axios , { AxiosError } from " axios" ;
6665import handleError from " @/utils/handleError" ;
6766import useSnackbar from " @/helpers/snackbar" ;
6867import useContainersStore from " @/store/modules/containers" ;
@@ -94,9 +93,13 @@ let observer: IntersectionObserver | null = null;
9493
9594const 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+
9898const 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
101104const 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