Filter cards in Vue Kanban component
11 Jun 20247 minutes to read
You can filter the collection of cards from the dataSource and display it on the Kanban board by using the query property.
To learn about Kanban filtering cards, you can check out this video:
In the below sample, you can filter the cards based on the ‘where’ query and display the filtered data to the Kanban board.
<template>
<div id="app">
<ejs-dropdownlist
ref="PriorityDrop"
id="priority_filter"
:dataSource="priorityData"
:change="change"
value="None"
placeholder="Select a priority"
></ejs-dropdownlist>
<ejs-kanban
ref="KanbanObj"
id="kanban"
keyField="Status"
:dataSource="kanbanData"
:cardSettings="cardSettings"
>
<e-columns>
<e-column headerText="To Do" keyField="Open"></e-column>
<e-column headerText="In Progress" keyField="InProgress"></e-column>
<e-column headerText="Testing" keyField="Testing"></e-column>
<e-column headerText="Done" keyField="Close"></e-column>
</e-columns>
</ejs-kanban>
</div>
</template>
<script setup>
import { KanbanComponent as EjsKanban, ColumnsDirective as EColumns, ColumnDirective as EColumn} from "@syncfusion/ej2-vue-kanban";
import { DropDownListComponent as EjsDropdownlist} from "@syncfusion/ej2-vue-dropdowns";
import { extend } from "@syncfusion/ej2-base";
import { Query } from "@syncfusion/ej2-data";
import { kanbanData } from "./datasource.js";
import { onMounted as mounted, ref } from "vue";
const priorityData = ["None", "High", "Normal", "Low"];
kanbanData = extend([], kanbanData, null, true);
const cardSettings = {
contentField: "Summary",
headerField: "Id"
};
let KanbanObj = ref(null);
let PriorityDrop = ref(null);
let priorityObj = ref(null);
let kanbanObj = ref(null);
const change = (args) => {
let filterQuery = new Query();
if (args.value !== "None") {
filterQuery = new Query().where("Priority", "equal", args.value);
}
kanbanObj.query = filterQuery;
};
mounted(() => {
kanbanObj = KanbanObj.value.ej2Instances;
priorityObj = PriorityDrop.value.ej2Instances;
});
</script>
<style>
@import "../node_modules/@syncfusion/ej2-base/styles/material.css";
@import "../node_modules/@syncfusion/ej2-buttons/styles/material.css";
@import "../node_modules/@syncfusion/ej2-layouts/styles/material.css";
@import "../node_modules/@syncfusion/ej2-dropdowns/styles/material.css";
@import "../node_modules/@syncfusion/ej2-inputs/styles/material.css";
@import "../node_modules/@syncfusion/ej2-navigations/styles/material.css";
@import "../node_modules/@syncfusion/ej2-popups/styles/material.css";
@import "../node_modules/@syncfusion/ej2-vue-kanban/styles/material.css";
</style><template>
<div id="app">
<ejs-dropdownlist
ref="PriorityDrop"
id="priority_filter"
:dataSource="priorityData"
:change="change"
value="None"
placeholder="Select a priority"
></ejs-dropdownlist>
<ejs-kanban
ref="KanbanObj"
id="kanban"
keyField="Status"
:dataSource="kanbanData"
:cardSettings="cardSettings"
>
<e-columns>
<e-column headerText="To Do" keyField="Open"></e-column>
<e-column headerText="In Progress" keyField="InProgress"></e-column>
<e-column headerText="Testing" keyField="Testing"></e-column>
<e-column headerText="Done" keyField="Close"></e-column>
</e-columns>
</ejs-kanban>
</div>
</template>
<script>
import { KanbanComponent, ColumnDirective, ColumnsDirective } from "@syncfusion/ej2-vue-kanban";
import { DropDownListComponent } from "@syncfusion/ej2-vue-dropdowns";
import { extend } from "@syncfusion/ej2-base";
import { Query } from "@syncfusion/ej2-data";
import { kanbanData } from "./datasource.js";
export default {
name: "App",
components: {
"ejs-dropdownlist":DropDownListComponent,
"ejs-kanban":KanbanComponent,
"e-columns":ColumnsDirective,
"e-column":ColumnDirective
},
data: function () {
return {
kanbanData: extend([], kanbanData, null, true),
cardSettings: {
contentField: "Summary",
headerField: "Id",
},
priorityData: ["None", "High", "Normal", "Low"],
};
},
mounted: function () {
this.kanbanObj = this.$refs.KanbanObj.ej2Instances;
this.priorityObj = this.$refs.PriorityDrop.ej2Instances;
},
methods: {
change: function (args) {
let filterQuery = new Query();
if (args.value !== "None") {
filterQuery = new Query().where("Priority", "equal", args.value);
}
this.kanbanObj.query = filterQuery;
},
},
};
</script>
<style>
@import "../node_modules/@syncfusion/ej2-base/styles/material.css";
@import "../node_modules/@syncfusion/ej2-buttons/styles/material.css";
@import "../node_modules/@syncfusion/ej2-layouts/styles/material.css";
@import "../node_modules/@syncfusion/ej2-dropdowns/styles/material.css";
@import "../node_modules/@syncfusion/ej2-inputs/styles/material.css";
@import "../node_modules/@syncfusion/ej2-navigations/styles/material.css";
@import "../node_modules/@syncfusion/ej2-popups/styles/material.css";
@import "../node_modules/@syncfusion/ej2-vue-kanban/styles/material.css";
</style>