11<script lang="ts" setup>
22
3+ import type { IconProvider } from ' ./Base.vue' ;
4+
5+ function iconProvider(e : { _id: string , flag: string , count: number }): ReturnType <IconProvider > {
6+ let name = e ._id .toLowerCase ().replace (/ / g , ' -' );
7+
8+ if (name === ' mobile-safari' ) name = ' safari' ;
9+ if (name === ' chrome-headless' ) name = ' chrome'
10+ if (name === ' chrome-webview' ) name = ' chrome'
11+
12+ if (name === ' duckduckgo' ) return [' icon' , ' far fa-duck' ]
13+ if (name === ' avast-secure-browser' ) return [' icon' , ' far fa-bug' ]
14+ if (name === ' avg-secure-browser' ) return [' icon' , ' far fa-bug' ]
15+
16+ if (name === ' no_browser' ) return [' icon' , ' far fa-question' ]
17+ if (name === ' gsa' ) return [' icon' , ' far fa-question' ]
18+ if (name === ' miui-browser' ) return [' icon' , ' far fa-question' ]
19+
20+ if (name === ' vivo-browser' ) return [' icon' , ' far fa-question' ]
21+ if (name === ' whale' ) return [' icon' , ' far fa-question' ]
22+
23+ if (name === ' twitter' ) return [' icon' , ' fab fa-twitter' ]
24+ if (name === ' linkedin' ) return [' icon' , ' fab fa-linkedin' ]
25+ if (name === ' facebook' ) return [' icon' , ' fab fa-facebook' ]
26+
27+ return [
28+ ' img' ,
29+ ` https://github.com/alrra/browser-logos/blob/main/src/${name }/${name }_256x256.png?raw=true `
30+ ]
31+ }
332
433const browsersData = useFetch (' /api/data/browsers' , {
534 headers: useComputedHeaders ({ limit: 10 , }), lazy: true
@@ -8,15 +37,17 @@ const browsersData = useFetch('/api/data/browsers', {
837const { showDialog, dialogBarData, isDataLoading } = useBarCardDialog ();
938
1039async function showMore() {
11- dialogBarData .value = [];
40+ dialogBarData .value = [];
1241 showDialog .value = true ;
1342 isDataLoading .value = true ;
1443
1544 const res = await $fetch (' /api/data/browsers' , {
1645 headers: useComputedHeaders ({ limit: 1000 }).value
1746 });
1847
19- dialogBarData .value = res || [];
48+ dialogBarData .value = res ?.map (e => {
49+ return { ... e , icon: iconProvider (e as any ) }
50+ }) || [];
2051
2152 isDataLoading .value = false ;
2253
@@ -28,8 +59,8 @@ async function showMore() {
2859<template >
2960 <div class =" flex flex-col gap-2" >
3061 <BarCardBase @showMore =" showMore()" @dataReload =" browsersData.refresh()" :data =" browsersData.data.value || []"
31- desc =" The browsers most used to search your website." :dataIcons =" false "
32- :loading =" browsersData.pending.value" label =" Top Browsers" sub-label =" Browsers" >
62+ desc =" The browsers most used to search your website." :dataIcons =" true " :iconProvider = " iconProvider "
63+ :loading =" browsersData.pending.value" label =" Browsers" sub-label =" Browsers" >
3364 </BarCardBase >
3465 </div >
3566</template >
0 commit comments