show active filter on search

This commit is contained in:
Peter Olu 2022-05-06 09:53:45 +01:00
parent 69b5ad321b
commit adbc94fd7b
2 changed files with 104 additions and 17 deletions

View File

@ -53,7 +53,7 @@ export const traceStore = defineStore({
endpoints: [{ value: "0", label: "All" }], endpoints: [{ value: "0", label: "All" }],
displayMode: "List", displayMode: "List",
currentView: "traceList", currentView: "traceList",
activeFilter: '', activeFilter: "titi",
traceList: [], traceList: [],
traceSpans: [], traceSpans: [],
traceTotal: 0, traceTotal: 0,
@ -80,7 +80,8 @@ export const traceStore = defineStore({
this.currentView = data; this.currentView = data;
}, },
setActiveFilter(data: string) { setActiveFilter(data: string) {
this.currentView = data; if (!data) this.activeFilter = "";
this.activeFilter = data;
}, },
setCurrentTrace(trace: Trace) { setCurrentTrace(trace: Trace) {
this.currentTrace = trace; this.currentTrace = trace;

View File

@ -15,14 +15,38 @@ limitations under the License. -->
<template> <template>
<div class="flex-h"> <div class="flex-h">
<div class="flex-h filter-container"> <div class="flex-h filter-container">
<el-tooltip <div v-for="(filter, index) in arrayOfFilters" :key="index" >
<el-tooltip
v-if="!activeFilter.length || activeFilter === filter.name"
class="box-item"
effect="dark"
content="Service"
placement="top-start"
>
<el-button
type="success"
:class="[queriedFilter === filter.name ? 'active-filter' : '']"
class="filter-btn mx-3"
@click="setFilter(filter.name)"
>
<Icon size="sm" :iconName="filter.iconName" />
</el-button>
</el-tooltip>
</div>
<!-- <el-tooltip
v-if="!activeFilter.length || activeFilter === 'service'" v-if="!activeFilter.length || activeFilter === 'service'"
class="box-item" class="box-item"
effect="dark" effect="dark"
content="Service" content="Service"
placement="top-start" placement="top-start"
> >
<el-button class="filter-btn" @click="setFilter('service')" > <el-button
type="success"
:class="[queriedFilter === 'service' ? 'active-filter' : '']"
class="filter-btn"
@click="setFilter('service')"
>
<Icon size="sm" iconName="cloud_queue" /> <Icon size="sm" iconName="cloud_queue" />
</el-button> </el-button>
</el-tooltip> </el-tooltip>
@ -34,7 +58,11 @@ limitations under the License. -->
content="Instance" content="Instance"
placement="top-start" placement="top-start"
> >
<el-button class="filter-btn" @click="setFilter('instance')" > <el-button
:class="[queriedFilter === 'instance' ? 'active-filter' : '']"
class="filter-btn"
@click="setFilter('instance')"
>
<Icon size="sm" iconName="storage" /> <Icon size="sm" iconName="storage" />
</el-button> </el-button>
</el-tooltip> </el-tooltip>
@ -46,7 +74,11 @@ limitations under the License. -->
content="Status" content="Status"
placement="top-start" placement="top-start"
> >
<el-button class="filter-btn" @click="setFilter('status')" > <el-button
:class="[queriedFilter === 'status' ? 'active-filter' : '']"
class="filter-btn"
@click="setFilter('status')"
>
<Icon size="sm" iconName="device_hub" /> <Icon size="sm" iconName="device_hub" />
</el-button> </el-button>
</el-tooltip> </el-tooltip>
@ -58,7 +90,11 @@ limitations under the License. -->
content="Duration" content="Duration"
placement="top-start" placement="top-start"
> >
<el-button class="filter-btn" @click="setFilter('duration')" > <el-button
:class="[queriedFilter === 'duration' ? 'active-filter' : '']"
class="filter-btn"
@click="setFilter('duration')"
>
<Icon size="sm" iconName="av_timer" /> <Icon size="sm" iconName="av_timer" />
</el-button> </el-button>
</el-tooltip> </el-tooltip>
@ -70,7 +106,11 @@ limitations under the License. -->
content="Trace ID" content="Trace ID"
placement="top-start" placement="top-start"
> >
<el-button class="filter-btn" @click="setFilter('traceId')" > <el-button
:class="[queriedFilter === 'traceId' ? 'active-filter' : '']"
class="filter-btn"
@click="setFilter('traceId')"
>
<Icon size="sm" iconName="timeline" /> <Icon size="sm" iconName="timeline" />
</el-button> </el-button>
</el-tooltip> </el-tooltip>
@ -82,10 +122,14 @@ limitations under the License. -->
content="Tags" content="Tags"
placement="top-start" placement="top-start"
> >
<el-button class="filter-btn" @click="setFilter('tags')" > <el-button
:class="[queriedFilter === 'tags' ? 'active-filter' : '']"
class="filter-btn"
@click="setFilter('tags')"
>
<Icon size="sm" iconName="epic" /> <Icon size="sm" iconName="epic" />
</el-button> </el-button>
</el-tooltip> </el-tooltip> -->
</div> </div>
<div class="wrap-filters"> <div class="wrap-filters">
<div class="filter" v-if="activeFilter === 'service'"> <div class="filter" v-if="activeFilter === 'service'">
@ -101,7 +145,8 @@ limitations under the License. -->
<div <div
class="filter" class="filter"
v-if=" v-if="
activeFilter === 'instance' && dashboardStore.entity !== EntityType[3].value activeFilter === 'instance' &&
dashboardStore.entity !== EntityType[3].value
" "
> >
<span class="grey mr-5">{{ t("instance") }}:</span> <span class="grey mr-5">{{ t("instance") }}:</span>
@ -173,7 +218,7 @@ limitations under the License. -->
</div> </div>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { ref, reactive, watch } from "vue"; import { ref, reactive, watch, computed } from "vue";
import { useI18n } from "vue-i18n"; import { useI18n } from "vue-i18n";
import { Option } from "@/types/app"; import { Option } from "@/types/app";
import { Status } from "../../data"; import { Status } from "../../data";
@ -185,20 +230,53 @@ import ConditionTags from "@/views/components/ConditionTags.vue";
import { ElMessage } from "element-plus"; import { ElMessage } from "element-plus";
import { EntityType } from "../../data"; import { EntityType } from "../../data";
interface filtersObject {
name: string;
iconName: string;
}
const { t } = useI18n(); const { t } = useI18n();
const appStore = useAppStoreWithOut(); const appStore = useAppStoreWithOut();
const selectorStore = useSelectorStore(); const selectorStore = useSelectorStore();
const dashboardStore = useDashboardStore(); const dashboardStore = useDashboardStore();
const traceStore = useTraceStore();
const arrayOfFilters = ref<filtersObject[]>([
{
name: "service",
iconName: "cloud_queue",
},
{
name: "instance",
iconName: "storage",
},
{
name: "status",
iconName: "device_hub",
},
{
name: "duration",
iconName: "av_timer",
},
{
name: "traceId",
iconName: "timeline",
},
{
name: "tags",
iconName: "epic",
},
]);
const activeFilter = ref<string>(""); const activeFilter = ref<string>("");
const queriedFilter = computed(() => traceStore.activeFilter);
function setFilter(filter: string) { function setFilter(filter: string) {
activeFilter.value = filter; activeFilter.value = filter;
} }
function cancelSearch() { function cancelSearch() {
activeFilter.value = ""; activeFilter.value = "";
traceStore.activeFilter = "";
} }
const traceStore = useTraceStore();
const traceId = ref<string>(""); const traceId = ref<string>("");
const minTraceDuration = ref<string>(""); const minTraceDuration = ref<string>("");
const maxTraceDuration = ref<string>(""); const maxTraceDuration = ref<string>("");
@ -261,6 +339,8 @@ async function getInstances(id?: string) {
state.instance = traceStore.instances[0]; state.instance = traceStore.instances[0];
} }
function searchTraces() { function searchTraces() {
traceStore.setActiveFilter(activeFilter.value);
activeFilter.value = "";
let endpoint = "", let endpoint = "",
instance = ""; instance = "";
if (dashboardStore.entity === EntityType[2].value) { if (dashboardStore.entity === EntityType[2].value) {
@ -293,7 +373,7 @@ async function queryTraces() {
} }
} }
function changeField(type: string, opt: any) { function changeField(type: string, opt: any) {
activeFilter activeFilter;
state[type] = opt[0]; state[type] = opt[0];
if (type === "service") { if (type === "service") {
getEndpoints(state.service.id); getEndpoints(state.service.id);
@ -354,7 +434,7 @@ watch(
margin-left: 20px; margin-left: 20px;
cursor: pointer; cursor: pointer;
} }
.filter-container{ .filter-container {
align-items: center; align-items: center;
} }
.wrap-filters { .wrap-filters {
@ -370,6 +450,12 @@ watch(
} }
.filter-btn { .filter-btn {
height: 18px; height: 18px;
margin: 0 5px
}
.active-filter.filter-btn {
background: #276c04 !important;
span {
color: #275410 !important;
}
} }
</style> </style>